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


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

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

A. Театральная площадь

математика *1000

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

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

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

В первой строке записано три целых натуральных числа n, m и a (1 ≤ n, m, a ≤ 109).

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

Выведите искомое количество плит.

B. Электронные таблицы

математика реализация *1600

В популярных системах электронных таблиц (например, в программе Excel) используется следующая нумерация колонок. Первая колонка имеет номер A, вторая B и т.д. до 26-ой, которая обозначается буквой Z. Затем идут двухбуквенные обозначения: 27-ая обозначается как AA, 28-ая как AB, а 52-я обозначается парой AZ. Аналогично, следом за ZZ следуют трехбуквенные обозначения и т.д.

Строки обычно обозначаются целыми числами от 1. Номер ячейки получается конкатенацией обозначений для столбца и строки. Например, BC23 это обозначение для ячейки в столбце 55, строке 23.

Иногда используется другая форма записи: RXCY, где X и Y это целые числа, обозначающие номер строки и столбца, соответственно. Например, R23C55 это ячейка из примера выше.

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

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

В первой строке записано целое число n (1 ≤ n ≤ 105), количество обозначений в тесте. Далее идет n строк, каждая из которых содержит обозначение. Известно, что все обозначения корректны, и не содержат ячейки с номерами строк или столбцов больших 106.

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

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

C. Древнеберляндский цирк

геометрия математика *2100

Это сейчас все цирки в Берляндии имеют круглую арену диаметром 13 метров, а в древности все было совсем иначе.

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

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

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

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

Входной файл состоит из трех строк, каждая из которых содержит пару чисел — координаты столба. Любая из координат не превосходит по абсолютной величине 1000, и задана с 6 знаками после десятичной точки.

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

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

E. Лампы

*особая задача математика *1600

Дано n ламп, расположенных в ряд. Они пронумерованы от 1 до n слева направо. Также дано n кнопок. Когда нажимают кнопку i, все лампы под номером x, таким, что i|x, меняют состояние.

Для двух целых чисел a и b мы утверждаем, что a|b (a делит b) тогда и только тогда, когда существует целое число c, такое, что a × c = b.

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

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

Первая строка входных данных содержит единственное целое число n, количество ламп (1 ≤ n ≤ 105).

Следующая строка содержит n слов. Слово номер i описывает начальное состояние лампы номер i (смотрите примеры для более подробного объяснения).

Следующая строка содержит единственное целое число k (1 ≤ k ≤ 104) — сколько раз нажимали какую-либо кнопку. Затем на следующей строке следуют k целых чисел, принадлежащих интервалу [1, n] — номера нажатых кнопок.

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

Выведите в выходных файлах n слов. Опишите конечное состояние ламп. Смотрите примеры для более подробного объяснения.

I. Вращение

*особая задача геометрия математика *1500

Эхсан обожает геометрию! Больше всего ему нравится вращать точки!

Если дана точка на плоскости, Эхсан любит вращать её на k градусов (против часовой стрелки) вокруг начала координат. Каков результат такого вращения?

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

В первой строке содержится единственное целое число k (0 ≤ k < 360). Во второй строке содержатся два целых числа x и y ( - 1390 ≤ x, y ≤ 1390).

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

Выведите два числа — результат вращения. Относительная погрешность вашего ответа не должна превышать 10 - 1.

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.

C. Сильная жара

математика Перебор реализация *1300

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

Математики Берляндского Государственного Университета (БГУ) придумали специальную оценку, которую назвали интенсивностью температуры. Эта оценка считается следующим образом:

Предположим, что мы хотим проанализировать отрезок из \(n\) подряд идущих дней. Мы измерили температуры в каждый из этих \(n\) дней; температура в \(i\)-й день равна \(a_i\).

Обозначим за среднюю температуру отрезка подряд идущих дней как среднее арифметическое измерений температур, принадлежащих этому отрезку дней. Таким образом, если мы хотим проанализировать среднюю температуру с дня \(x\) по день \(y\), мы будем считать ее как \(\frac{\sum \limits_{i = x}^{y} a_i}{y - x + 1}\) (обратите внимание, что деление производится без округления). Интенсивность температуры — это максимум среди средних температур среди всех отрезков подряд идущих дней длины не менее \(k\). Например, если анализировать измерения \([3, 4, 1, 2]\) и \(k = 3\), интерес представляют отрезки \([3, 4, 1]\), \([4, 1, 2]\) и \([3, 4, 1, 2]\) (мы хотим найти максимальное значение средней температуры среди всех этих отрезков).

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

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

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

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

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

Выведите одно вещественное число — the интенсивность температуры, то есть максимум среди средних температур по всем отрезкам, состоящим не менее, чем из \(k\) последовательных дней.

Ваш ответ будет считаться правильным, если выполняется следующее условие: \(|res - res_0| < 10^{-6}\), где \(res\) — это ваш ответ, а \(res_0\) — ответ авторского решения.

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

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

Комбинаторика математика сортировки Структуры данных *1300

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

Например, если нам дан массив \([10, 20, 30, 40]\), мы можем переставить числа так, что массив станет \([20, 40, 10, 30]\). При этом на первой и второй позициях числа стали больше (\(20>10\), \(40>20\)), а на третьей и четвёртой — нет, значит для такой перестановки число, которое хочет максимизировать Вася, равно \(2\). Ознакомьтесь с примечанием к первому тестовому примеру, там разобран ещё один показательный тест.

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

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

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

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

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

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

Примечание

В первом тесте одна из оптимальных перестановок — \([1, 5, 5, 3, 10, 1, 1]\). На позициях со второй по пятую значения увеличились, значит ответ для этой перестановки — 4.

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

B. Замостите параллелепипед

битмаски Комбинаторика математика Перебор теория чисел *2400

Вам дан прямоугольный параллелепипед с целыми положительными сторонами \(A\), \(B\) и \(C\).

Найдите количество различных троек целых чисел (\(a\), \(b\), \(c\)) таких, что \(1\leq a\leq b\leq c\) и параллелепипед \(A\times B\times C\) можно замостить параллелепипедами \(a\times b\times c\). Обратите внимание, что все замощающие параллелепипеды должны быть ориентированы в одну сторону.

Например, параллелепипед \(1\times 5\times 6\) можно разделить на параллелепипеды \(1\times 3\times 5\), но нельзя – на параллелепипеды \(1\times 2\times 3\).

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

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

Каждая из следующих \(t\) строк содержит три целых числа \(A\), \(B\) и \(C\) (\(1 \leq A, B, C \leq 10^5\)) — размеры параллелепипеда.

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

Для каждого теста выведите количество троек чисел, которые удовлетворяют всем условиям.

Примечание

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

Во втором тесте параллелепипед со сторонами \((1, 6, 1)\) можно разделить на параллелепипеды со сторонами \((1, 1, 1)\), \((1, 1, 2)\), \((1, 1, 3)\) и \((1, 1, 6)\).

В третьем тесте параллелепипед со сторонами \((2, 2, 2)\) можно разделить на параллелепипеды со сторонами \((1, 1, 1)\), \((1, 1, 2)\), \((1, 2, 2)\) и \((2, 2, 2)\).

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

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

Примечание

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

E. Междугороднее путешествие

Комбинаторика математика Теория вероятностей *2000

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

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

Вести машину столь долгое время достаточно утомительно. Формально, если Леха преодолел \(i\) километров после того, как останавливался на отдых в прошлый раз, то сложностью преодоления \((i + 1)\)-го километра он считает величину \(a_{i + 1}\). Гарантируется, что для каждого \(i \in [1, n - 1]\) \(a_i \le a_{i + 1}\). Сложность пути определяется, как сумма сложностей по каждому километру пути.

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

Например, если \(n = 5\) и есть место для отдыха в точке с координатой \(2\), то сложность пути получится \(2a_1 + 2a_2 + a_3\): первый километр будет иметь сложность \(a_1\), второй — \(a_2\), потом Леха отдохнет, и третий километр будет иметь сложность \(a_1\), четвертый — \(a_2\) и последний — \(a_3\). Другой пример: если \(n = 7\) и есть места для отдыха в точках с координатами \(1\) и \(5\), то сложность пути Лехи будет равна \(3a_1 + 2a_2 + a_3 + a_4\).

Леха не знает, какие из целочисленных точек содержат места для отдыха. Поэтому он хочет предусмотреть любую возможную ситуацию. Очевидно, есть \(2^{n - 1}\) вариантов различных распределений точек отдыха (два распределения различны, когда существует такая точка \(x\), что место для отдыха есть ровно в одном из данных распределений). Леха считает все распределения равновероятными. Он хочет посчитать \(p\) — математическое ожидание сложности пути.

Очевидно, \(p \cdot 2^{n - 1}\) — это целое число. Посчитайте его по модулю \(998244353\).

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

В первой строке записано целое число \(n\) (\(1 \le n \le 10^6\)) — расстояние от Москвы до Саратова.

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

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

Выведите одно число — \(p \cdot 2^{n - 1}\), взятое по модулю \(998244353\).

C. Вектора

математика реализация *2000

На уроке геометрии Геральду дали задание: из вектора A получить вектор B. При этом учитель разрешил ему делать с вектором А следующие операции:

  • Повернуть вектор на 90 градусов по часовой стрелке.
  • Прибавить к вектору определенный вектор С.

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

Сможет ли Геральд справиться с заданием?

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

В первой строке даны целые числа x1 и y1 — координаты вектора A ( - 108 ≤ x1, y1 ≤ 108). Во второй и третьей строках в аналогичном виде даны вектора B и C (их координаты — целые числа, по модулю не превосходящие 108).

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

Выведите «YES» (без кавычек), если с помощью описанных операций возможно получить вектор B. Иначе выведите «NO» (без кавычек).

A. Полёт

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

Наташа собирается на ракете полететь на Марс и вернуться на Землю. Также по пути на Марс она приземлится ещё на \(n - 2\) планетах. Формально: пронумеруем все планеты от \(1\) до \(n\). \(1\) — Земля, \(n\) — Марс. Наташа собирается сделать ровно \(n\) полётов: \(1 \to 2 \to \ldots n \to 1\).

Перелёт с планеты \(x\) на планету \(y\) состоит из двух фаз: взлёт с планеты \(x\) и приземление на планету \(y\). Таким образом, полный маршрут поездки выглядит следующим образом: \(1\)-я планета \(\to\) взлёт с \(1\)-й планеты \(\to\) торможение ко \(2\)-й планете \(\to\) \(2\)-я планета \(\to\) взлёт со \(2\)-й планеты \(\to\) \(\ldots\) \(\to\) торможение к \(n\)-й планете \(\to\) \(n\)-я планета \(\to\) взлёт с \(n\)-й планеты \(\to\) торможение к \(1\)-й планете \(\to\) \(1\)-я планета.

Масса ракеты вместе с полезным грузом (но без топлива) равна \(m\) тоннам. Но Наташа не знает, сколько топлива нужно загрузить в ракету. К сожалению, топливо можно загрузить только на Земле, так что, если на какой-то другой планете топливо закончится, то Наташа не сможет вернуться домой. Топливо нужно для взлёта с каждой планеты и для торможения перед каждой планетой. Известно, что \(1\) тонна топлива может поднять с \(i\)-й планеты \(a_i\) тонн груза или затормозить перед \(i\)-й планетой \(b_i\) тонн груза.

Например, если масса ракеты составляет \(9\) тонн, масса топлива \(3\) тонны, а коэффициент при взлёте равен \(8\) (\(a_i = 8\)), то при взлёте сгорит \(1.5\) тоны топлива (так как \(1.5 \cdot 8 = 9 + 3\)). Новая масса топлива после взлёта будет равна \(1.5\) тоннам.

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

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

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

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

Вторая строка содержит одно целое число \(m\) (\(1 \le m \le 1000\)) — масса полезного груза.

Третья строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 1000\)). Где \(a_i\) — это масса ракеты, которую может поднять одна тонна топлива при взлёте.

Четвёртая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 1000\)). Где \(b_i\) — это масса ракеты, которую может опустить одна тонна топлива при посадке.

Гарантируется, что если Наташа может совершить полёт, то для этого ей понадобится не более \(10^9\) тонн топлива.

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

Если Наташа сможет долететь до Марса через \((n - 2)\) планеты и вернуться на Землю, выведите минимальную массу топлива (в тоннах), которое Наташа должна взять. В противном случае выведите в одно число \(-1\).

Гарантируется, что если Наташа может совершить полёт, то для этого ей понадобится не более \(10^9\) тонн топлива.

Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает \(10^{-6}\). Формально, пусть ваш ответ равен \(p\), а ответ жюри равен \(q\). Ваш ответ будет зачтен, если \(\frac{|p - q|}{\max{(1, |q|)}} \le 10^{-6}\).

Примечание

Рассмотрим первый пример.

Сначала масса ракеты с топливом — \(22\) тонны.

  • При взлёте с Земли одна тонна топлива может поднять \(11\) тонн груза, поэтому для подъёма \(22\) тонн понадобится потратить \(2\) тонны топлива. Останется \(20\) тонн ракеты с топливом.
  • При посадке на Марс одна тонна топлива может затормозить \(5\) тонн груза, поэтому для торможения \(20\) тонн понадобится потратить \(4\) тонны топлива. Останется \(16\) тонн ракеты с топливом.
  • При взлёте с Марса одна тонна топлива может поднять \(8\) тонн груза, поэтому для подъёма \(16\) тонн понадобится потратить \(2\) тонны топлива. Останется \(14\) тонн ракеты с топливом.
  • При посадке на Землю одна тонна топлива может затормозить \(7\) тонн груза, поэтому для торможения \(14\) тонн понадобится потратить \(2\) тонны топлива. Останется \(12\) тонн, то есть только ракета.

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

A. Фотография неба

математика Перебор реализация сортировки *1500

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

Более формально, она сделала фотографию всех точек с координатами \((x, y)\), для которых выполнено \(x_1 \leq x \leq x_2\) и \(y_1 \leq y \leq y_2\), где \((x_1, y_1)\) и \((x_2, y_2)\) — координаты левого нижнего и правого верхнего прямоугольника, который фотографируют. Площадь фотографируемого прямоугольника может быть нулевой.

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

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

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

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

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

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

Во второй строке находятся \(2 \cdot n\) целых чисел \(a_1\), \(a_2\), ..., \(a_{2 \cdot n}\) (\(1 \leq a_i \leq 10^9\)) — все координаты, выписанные Пашей, в каком-то порядке.

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

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

Примечание

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

E. Сортировка циклами

математика снм *3100

Вам дан массив из \(n\) целых положительных чисел \(a_1, a_2, \dots, a_n\). К массиву можно применять следующие операции: выбрать несколько различных индексов этого массива \(i_1, i_2, \dots, i_k\) (\(1 \le i_j \le n\)) и переместить число, стоящее на позиции \(i_1\) на позицию \(i_2\), число стоящее на позиции \(i_2\) на позицию \(i_3\), ..., число на позиции \(i_k\) на позицию \(i_1\). То есть сдвинуть элементы по циклу \(i_1 \to i_2 \to \ldots i_k \to i_1\).

К примеру, если у вас есть \(n=4\), массив \(a_1=10, a_2=20, a_3=30, a_4=40\), и вы выбрали три индекса \(i_1=2\), \(i_2=1\), \(i_3=4\), то получившийся массив будет \(a_1=20, a_2=40, a_3=30, a_4=10\).

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

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

Первая строка ввода содержит числа \(n\) и \(s\) (\(1 \leq n \leq 200\,000\), \(0 \leq s \leq 200\,000\)) — число элементов массива и верхнюю границу на сумму длин циклов. Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) — элементы массива (\(1 \leq a_i \leq 10^9\)).

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

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

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

На следующих \(2 \cdot q\) строках выведите описания операций в том порядке, в каком их нужно применять к массиву. Описание \(i\)-й операции начинается со строки с единственным числом \(k\) (\(1 \le k \le n\)) — длины цикла (т.е. количества выбранных индексов). Следующая строка должна содержать \(k\) различных целых чисел \(i_1, i_2, \dots, i_k\) (\(1 \le i_j \le n\)) — сами индексы.

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

Примечание

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

Во втором примере, можно упорядочить массив двумя циклами общей длины 4 \(1 \to 2 \to 1\) и \(3 \to 4 \to 3\). Но невозможно циклами длиной не больше 3.

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

A. Кучки с камнями

математика *800

Как известно, в Иннополисе находится красивый сад камней.

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

Участники EJOI посетили эту достопримечательность дважды.

Когда они пришли в первый раз, количества камней в кучках были равны \(x_1, x_2, \ldots, x_n\) и один из участников записал это в блокнот.

Во второй раз они посетили ее на следующий день, и количества камней в кучках были равны \(y_1, y_2, \ldots, y_n\). Один из участников также записал это в блокнот.

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

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

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

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

Во второй строке расположены \(n\) целых чисел, разделенных пробелами \(x_1, x_2, \ldots, x_n\) — записанные в блокнот количества камней в кучках, когда участники приходили к достопримечательности в первый раз (\(0 \leq x_i \leq 1000\)).

Во третьей строке расположены \(n\) целых чисел, разделенных пробелами \(y_1, y_2, \ldots, y_n\) — записанные в блокнот количества камней в кучках, когда участники приходили к достопримечательности во второй раз (\(0 \leq y_i \leq 1000\)).

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

Если записи участников могут быть верными, выведите «Yes», в противном случае выведите «No».

Примечание

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

Во втором примере жюри забрало камешки из второй и четвертой кучек.

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

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]\). Каждое число в массиве означает, в какой именно день будет написано имя на соответствующей позиции. Хорошо видно, что вы должны перевернуть первую и вторую страницу в течение второго дня и третью страницу в течение третьего дня.

D. Вася и матрица

Конструктив математика Потоки *1800

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

Вася знает, что в матрице n строк и m столбцов. Для каждой строки ему известен xor (побитовое исключающее или) всех элементов в этой строке. Последовательность a1, a2, ..., an задает xor элементов строки под номером 1, 2, ..., n, соответственно. Аналогично, для каждого столбца Вася знает xor всех элементов в столбце. Последовательность b1, b2, ..., bm обозначает xor элементов в столбцах под номерами 1, 2, ..., m, соответственно.

Помогите Васе! Найдите матрицу, которая соответствует этим ограничениям, или скажите, что такой матрицы не существует.

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

Первая строка содержит два числа n и m (2 ≤ n, m ≤ 100) — размеры матрицы.

Вторая строка содержит n чисел a1, a2, ..., an (0 ≤ ai ≤ 109), где ai — xor всех элементов в строке i.

Третья строка содержит m чисел b1, b2, ..., bm (0 ≤ bi ≤ 109), где bi — xor всех элементов в столбце i.

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

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

Иначе в первой строке выведите «YES», а затем n строк по m чисел в каждой ci1, ci2, ... , cim (0 ≤ cij ≤ 2·109) — описание матрицы.

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

G. Подходящая команда

битмаски математика теория чисел *2700

Близится следующий сезон, поэтому Вы решили собрать команду из двух или трех человек. У Вас есть \(n\) кандидатов, \(i\)-й кандидат имеет ранг \(a_i\). Но у Вас есть какие-то странные ограничения: если Ваш ранг \(v\) и Вы выбрали кандидатов \(i\) и \(j\), то должно выполняться условие \(GCD(v, a_i) = X\) и \(LCM(v, a_j) = Y\).

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

И вот Вы хотите узнать количество пар \((i, j)\) таких, что существует \(v\), что \(GCD(v, a_i) = X\) и \(LCM(v, a_j) = Y\). Разрешена ситуация \(i = j\), просто ваша команда будет состоять из двух участников.

\(GCD\) — это наибольший общий делитель двух чисел, а \(LCM\) — наименьшее общее кратное.

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

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

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

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

Выведите единственное число — количество пар \((i, j)\), что существует \(v\) такой, что \(GCD(v, a_i) = X\) и \(LCM(v, a_j) = Y\). Ситуация \(i = j\) разрешена.

Примечание

В первом примере следующие пары валидны: \(a_j = 1\) и \(a_i = [2, 4, 6, 8, 10, 12]\), либо \(a_j = 2\) и \(a_i = [2, 4, 6, 8, 10, 12]\). Ранг \(v\) в обоих случаях может быть равен \(2\).

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

  • \(a_j = 1\) и \(a_i = [1, 5, 7, 11]\);
  • \(a_j = 2\) и \(a_i = [1, 5, 7, 11, 10, 8, 4, 2]\);
  • \(a_j = 3\) и \(a_i = [1, 3, 5, 7, 9, 11]\);
  • \(a_j = 6\) и \(a_i = [1, 3, 5, 7, 9, 11, 12, 10, 8, 6, 4, 2]\).

B. Биты

математика реализация *1200

Рудольф отправляется в замок. Перед тем, как попасть туда, сотрудники службы безопасности задали ему вопрос:

Задано два числа \(a\) и \(b\) в двоичной системе счисления, их длина равна \(n\). Сколько есть различных способов поменять местами два бита в числе \(a\) (только в \(a\), не в \(b\)) так, чтобы побитовое ИЛИ чисел изменилось? Другими словами, пусть \(c\) равно побитовому ИЛИ \(a\) и \(b\), тогда вам нужно найти количество способов поменять местами два бита в \(a\) так, чтобы побитовое ИЛИ не было равно \(c\).

Обратите внимание, что числа могут содержать ведущие нули, так что длина каждого числа равна \(n\).

Побитовое ИЛИ — это бинарная операция. Результат — это такое число, в двоичном представлении которого в каждом разряде стоит единица, если единица находится в двоичной записи хотя бы одного из аргументов. Например, \(01010_2\) ИЛИ \(10011_2\) = \(11011_2\).

К вашему удивлению, вы не Рудольф, и вам не нужно помогать ему\(\ldots\) Вы — сотрудник службы безопасности! Пожалуйста, найдите количество способов поменять местами два бита в \(a\) так, чтобы побитовое ИЛИ изменилось.

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

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

Вторая строка содержит число \(a\) длиной \(n\) в двоичной системе счисления.

Третья строка содержит число \(b\) длиной \(n\) в двоичной системе счисления.

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

Выведите количество возможных способов поменять местами два бита в \(a\) так, чтобы побитовое ИЛИ изменилось.

Примечание

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

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

F. Нейтральная зона

математика Перебор *2500

Обратите внимание на необычное ограничение по памяти!

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

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

Мы все знаем, что функцию логарифма можно записать как: \(\) \log(p_1^{a_1}p_2^{a_2}...p_k^{a_2}) = a_1 \log p_1 + a_2 \log p_2 + ... + a_k \log p_k \(\) где \(p_1^{a_1}p_2^{a_2}...p_k^{a_2}\) — факторизация простыми числами целого числа. Проблема в том, что эта функция выражается сама через себя, поэтому её сложно вычислять.

По этой причине математики из нейтральной зоны придумали это: \(\) \text{exlog}_f(p_1^{a_1}p_2^{a_2}...p_k^{a_2}) = a_1 f(p_1) + a_2 f(p_2) + ... + a_k f(p_k) \(\)

Заметьте, что \(\text{exlog}_f(1)\) всегда равно \(0\).

Функция \(f\) очень сложная, чтобы дети поняли её, поэтому учителя решили, что функция \(f\) в повседневном использовании может быть представлена как многочлен со степенью не более \(3\) (то есть \(f(x) = Ax^3+Bx^2+Cx+D\)).

"Урок закончен! Не забудьте сделать ваше домашние задание!" Вот оно: \(\) \sum_{i=1}^n \text{exlog}_f(i) \(\)

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

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

Единственная строка содержит пять целых чисел \(n\), \(A\), \(B\), \(C\) и \(D\) (\(1 \le n \le 3 \cdot 10^8\), \(0 \le A,B,C,D \le 10^6\)).

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

Выведите ответ по модулю \(2^{32}\).

Примечание

В первом примере:

\(\text{exlog}_f(1) = 0\)

\(\text{exlog}_f(2) = 2\)

\(\text{exlog}_f(3) = 3\)

\(\text{exlog}_f(4) = 2 + 2 = 4\)

\(\text{exlog}_f(5) = 5\)

\(\text{exlog}_f(6) = 2 + 3 = 5\)

\(\text{exlog}_f(7) = 7\)

\(\text{exlog}_f(8) = 2 + 2 + 2 = 6\)

\(\text{exlog}_f(9) = 3 + 3 = 6\)

\(\text{exlog}_f(10) = 2 + 5 = 7\)

\(\text{exlog}_f(11) = 11\)

\(\text{exlog}_f(12) = 2 + 2 + 3 = 7\)

\( \sum_{i=1}^{12} \text{exlog}_f(i)=63 \)

Во втором примере:

\(\text{exlog}_f(1) = 0\)

\(\text{exlog}_f(2) = (1 \times 2^3 + 2 \times 2^2 + 3 \times 2 + 4) = 26\)

\(\text{exlog}_f(3) = (1 \times 3^3 + 2 \times 3^2 + 3 \times 3 + 4) = 58\)

\(\text{exlog}_f(4) = 2 \times \text{exlog}_f(2) = 52\)

\( \sum_{i=1}^4 \text{exlog}_f(i)=0+26+58+52=136 \)

A. Новое здание для ЛКШ

математика *1000

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

В здании n башен, в каждой башне по h этажей. Башни пронумерованы от 1 до n, этажи в каждой башне пронумерованы от 1 до h. Между соседними башнями (то есть башнями с номерами i и i + 1 для всех i: 1 ≤ i ≤ n - 1) есть переходы на всех этажах x: a ≤ x ≤ b. Подняться или спуститься на один этаж внутри башни можно ровно за одну минуту. Также за одну минуту можно перейти между соседними башнями, если на вашем этаже есть переход. Покидать здание не разрешается.

Рисунок иллюстрирует первый пример.

У вас есть список из k пар мест (ta, fa), (tb, fb): этаж fa башни ta и этаж fb башни tb. Для каждой пары мест требуется вычислить минимальное время перемещения между ними.

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

В первой строке ввода записаны целые числа:

  • n: количество башен в здании (1 ≤ n ≤ 108),
  • h: количество этажей в башнях (1 ≤ h ≤ 108),
  • a and b: минимальный и максимальный этаж, где есть переходы между соседними башнями (1 ≤ a ≤ b ≤ h),
  • k: количество запросов минимального времени перемещения (1 ≤ k ≤ 104).

В следующих k строках записано по четыре целых числа: ta, fa, tb, fb (1 ≤ ta, tb ≤ n, 1 ≤ fa, fb ≤ h). Эти числа соответствуют запросу на поиск минимального времени перемещения между fa-м этажом ta-й башни и fb-м этажом tb-й башни.

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

Для каждого запроса выведите одно целое число на отдельной строке: минимальное время перемещения.

B. Пара игрушек

математика *1000

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

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

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

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

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

Выведите искомое количество способов. Выведите 0, если Танечка не может никакую пару игрушек, чтобы сумма была равна в точности \(k\) бурлей.

Примечание

В первом примере Танечка может выбрать либо пару игрушек (\(1, 4\)), либо пару игрушек (\(2, 3\)).

В втором примере Танечка может выбрать только пару игрушек (\(7, 8\)).

В третьем примере покупка выбор пары игрушек будет привозить к суммарной стоимости менее \(20\). Таким образом, ответ равен 0.

В четвертом примере она может выбрать следующие пары: \((1, 1000000000000)\), \((2, 999999999999)\), \((3, 999999999998)\), ..., \((500000000000, 500000000001)\). Всего таких пар ровно \(500000000000\).

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

G. Приобретения стартапов

Конструктив математика *3200

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

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

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

Например, может произойти следующее. Пусть \(A\) и \(B\) — активные стартапы, \(C\), \(D\), \(E\) — приобретенные с владельцем \(A\), а \(F\), \(G\) — приобретенные с владельцем \(B\):

Активные стартапы показаны красным.

Если \(A\) приобретет \(B\), то будет следующий результат: \(A\), \(F\), \(G\) — активные стартапы, \(C\), \(D\), \(E\), \(B\) — приобретенные с владельцем \(A\), \(F\) и \(G\) не владеют никакими стартапами:

Если же \(B\) приобретет \(A\), то \(B\), \(C\), \(D\), \(E\) будут активными стартапами, \(F\), \(G\), \(A\) будут приобретенными с владельцем \(B\), \(C\), \(D\), \(E\) не будут владеть никаким стартапами:

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

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

Можно показать, что математическое ожидание этого времени можно выразить как рациональное число \(P/Q\), где \(P\) и \(Q\) — взаимно простые целые числа, и \(Q \not= 0 \pmod{10^9+7}\). Выведите число \(P \cdot Q^{-1}\) по модулю \(10^9+7\).

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

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 500\)) — количество стартапов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i = -1\) или \(1 \leq a_i \leq n\)). Если \(a_i = -1\), то это означает, что стартап \(i\) является активным. В противном случае, если \(1 \leq a_i \leq n\), то стартап \(i\) приобретен, а его владельцем является стартап \(a_i\). Гарантируется, что если \(a_i \not= -1\), то \(a_{a_i} =-1\) (то есть все владельцы являются активными стартапами).

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

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

Примечание

В первом примере есть три активных стартапа, пронумерованных \(1\), \(2\) и \(3\), и ни одного приобретенного. Может произойти, например, следующий сценарий:

  1. Стартап \(1\) приобретет стартап \(2\) (состояние описывается массивом \([-1, 1, -1]\)).
  2. Стартап \(3\) приобретет стартап \(1\) (состояние описывается массивом \([3, -1, -1]\))
  3. Стартап \(2\) приобретет стартап \(3\) (состояние описывается массивом \([-1, -1, 2]\)).
  4. Стартап \(2\) приобретет стартап \(1\) (состояние описывается массивом \([2, -1, 2]\)).

После этого останется только один активный стартап. Эта последовательность шагов заняла \(4\) дня. Можно показать, что ожидаемое число дней равно \(3\).

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

В последнем примере не забудьте про модуль \(10^9+7\).

B. Числа на шахматной доске

математика реализация *1200

Задана шахматная доска размера \(n \times n\). Она заполнена числами от \(1\) до \(n^2\) следующим образом: первые \(\lceil \frac{n^2}{2} \rceil\) чисел от \(1\) до \(\lceil \frac{n^2}{2} \rceil\) записаны в клетках с четной суммой координат слева направо сверху вниз. Оставшиеся \(n^2 - \lceil \frac{n^2}{2} \rceil\) чисел от \(\lceil \frac{n^2}{2} \rceil + 1\) до \(n^2\) записаны в клетках с нечетной суммой координат в порядке слева направо сверху вниз. Операция \(\lceil\frac{x}{y}\rceil\) означает деление \(x\) на \(y\) с округлением вверх.

Например, левая доска на картинке ниже — эта шахматная доска, которая задана для \(n=4\), а правая доска — это шахматная доска, которая задана для \(n=5\).

Также задано \(q\) запросов. \(i\)-й запрос описывается парой \(x_i, y_i\). Ответ на \(i\)-й запрос — это число, записанное в клетке \(x_i, y_i\) (\(x_i\) это строка, \(y_i\) это столбец). Строки и столбцы пронумерованы от \(1\) до \(n\).

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

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

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

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

Для каждого запроса от \(1\) до \(q\) выведите ответ на него. Ответом на \(i\)-й запрос является число, записанное в клетке \(x_i, y_i\) (\(x_i\) это строка, \(y_i\) это столбец). Строки и столбцы пронумерованы от \(1\) до \(n\). Запросы пронумерованы от \(1\) до \(q\) в порядке их описания во входных данных.

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

G. X-мышь в общежитии

битмаски математика теория чисел *2600

Общежитие состоит из \(m\) комнат, пронумерованных от \(0\) до \(m - 1\). Также в общежитии проживает \(x\)-мышь. \(x\)-мышь — это необычная мышь, так как \(x\)-мышь движется каждую секунду из комнаты \(i\) в комнату \(i \cdot x \mod{m}\) (фактически, телепортируется, так как не посещает никаких других комнат по дороге). Начальная позиция \(x\)-мыши неизвестна.

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

Единственное сделанное Вами наблюдение: \(\text{GCD} (x, m) = 1\).

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

Единственная строка содержит 2 целых числа \(m\) и \(x\) (\(2 \le m \le 10^{14}\), \(1 \le x < m\), \(\text{GCD} (x, m) = 1\)) — количество комнат и параметр \(x\)-мыши.

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

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

Примечание

В первом примере вы можете, например, установить ловушки в комнатах \(0\), \(2\), \(3\). Если \(x\)-мышь начнет в одной из этих комнат, то она сразу будет поймана. Если же \(x\)-мышь начнет путешествие в \(1\)-й комнате, то она будет поймана, когда переместится в комнату \(3\).

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

B. Неестественные условия

Конструктив математика *1200

Обозначим через \(s(x)\) сумму цифр в десятичной записи положительного целого числа \(x\). По заданным числа \(n\) и \(m\), найдите какие-нибудь положительные целые числа \(a\) и \(b\) такие, что

  • \(s(a) \ge n\),
  • \(s(b) \ge n\),
  • \(s(a + b) \le m\).
Входные данные

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

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

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

Примечание

В первом примере \(n = 6\) and \(m = 5\). Одно из возможных решений \(a = 6\), \(b = 7\). В таком случае \(s(a) = 6 \ge n\) и \(s(b) = 7 \ge n\), а \(s(a + b) = s(13) = 4 \le m\).

H. Получить квадрат

математика *2900

Назовем массив \(b_1, b_2, \ldots, b_m\) хорошим, если существуют индексы \(i < j\) такие, что \(b_i \cdot b_j\) является полным квадратом.

В массиве \(b_1, b_2, \ldots, b_m\) за одну операцию можно совершить одно из действий:

  • умножить некоторый элемент \(b_i\) на некоторое простое \(p\);
  • разделить некоторый элемент \(b_i\) на некоторое простое \(p\) такое, что \(b_i\) делится на \(p\).

Обозначим \(f(b_1, b_2, \ldots, b_m)\) минимальное число действий, которые нужно совершить, чтобы сделать массив \(b\) хорошим.

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) и \(q\) запросов вида \(l_i, r_i\). Для каждого запроса выведите \(f(a_{l_i}, a_{l_i + 1}, \ldots, a_{r_i})\).

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

Первая строка содержит целые числа \(n\) и \(q\) (\(2 \le n \le 194\,598\), \(1 \le q \le 1\,049\,658\)) — длина массива и количество запросов.

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

Каждая из следующих \(q\) строк содержит 2 целых числа \(l_i\) и \(r_i\) (\(1 \le l_i < r_i \le n\)) — параметры запроса.

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

Выведите \(q\) строк — ответы на каждый запросы в том порядке, в котором они заданы во входных данных.

Примечание

В первом запросе первого примера можно умножить второе число на 7 и получить 259, и умножить третье число на 37 и получить 1036. Тогда \(a_2 \cdot a_3 = 268\,324 = 518^2\).

Во втором запросе подмассив уже хороший, потому что \(a_4 \cdot a_6 = 24^2\).

В третьем запросе можно разделить 50 на 2 и получить 25. Тогда \(a_6 \cdot a_8 = 30^2\).

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

D. Склеенные множители

математика реализация *1900

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

Назовем конкатенацией чисел \(x\) и \(y\) такое число, что оно получается при записывании чисел \(x\) и \(y\) подряд без изменения порядка. Например, конкатенация чисел \(12\) и \(3456\) — это число \(123456\).

Посчитайте количество упорядоченных пар позиций \((i, j)\) (\(i \neq j\)) в массиве \(a\) таких, что конкатенация \(a_i\) и \(a_j\) делится на \(k\).

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

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

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

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

Выведите одно целое число — количество упорядоченных пар позиций \((i, j)\) (\(i \neq j\)) в массиве \(a\) таких, что конкатенация \(a_i\) и \(a_j\) делится на \(k\).

Примечание

В первом примере пары \((1, 2)\), \((1, 3)\), \((2, 3)\), \((3, 1)\), \((3, 4)\), \((4, 2)\), \((4, 3)\) подходят. Они образуют числа \(451\), \(4510\), \(110\), \(1045\), \(1012\), \(121\), \(1210\), соответственно, каждое из них делится на \(11\).

Во втором примере все \(n(n - 1)\) пар подходят.

В третьем примере ни одна пара не подходит.

F. Разноцветные маркеры

Бинарный поиск математика Перебор теория чисел *2000

Дана бесконечная доска, состоящая из квадратных клеток. Изначально все клетки белого цвета.

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

Вова хочет раскрасить такой набор клеток, чтобы:

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

Некоторые примеры корректных раскрасок:

Некоторые примеры некорректных раскрасок:

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

Гарантируется, что существует хотя бы одна корректная раскраска.

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

В единственной строке записаны два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^{14}\)) — количество ячеек, которые надо покрасить красным маркером, и количество ячеек, которые надо покрасить синим маркером, соответственно.

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

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

Гарантируется, что существует хотя бы одна корректная раскраска.

Примечание

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

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

В первом примере можно также сделать прямоугольник со сторонами \(1\) и \(8\), однако его периметр будет \(18\), что больше \(8\).

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

A. Золотая тарелка

математика реализация *800

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

Картинка соответствует третьему примеру.

Ваша цель — узнать, сколько клеток будет позолочено.

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

Первая строка содержит три целых числа \(w\), \(h\) и \(k\) (\(3 \le w, h \le 100\), \(1 \le k \le \left\lfloor \frac{min(n, m) + 1}{4}\right\rfloor\), где \(\lfloor x \rfloor\) означает округление вниз числа \(x\)) — количество строк, столбцов и колец, соответственно.

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

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

Примечание

Первый пример показан на рисунке ниже.

Второй пример показан на рисунке ниже.

Третий пример показан на рисунке в постановке задачи.

F. Знакомые операции

графы математика Перебор *2800

Даны два целых положительных числа \(a\) и \(b\). С ними можно проводить следующие операции:

  1. умножить одно из чисел на некоторое простое число \(p\);
  2. разделить одно из чисел на некоторое простое \(p\), на которое оно делится.

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

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

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^5\)) — число пар чисел, для которых нужно найти ответ.

В каждой из следующих \(t\) строк содержатся два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^6\)).

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

Выведите \(t\) строк: в \(i\)-й из них должен содержаться ответ для пары \(a_i\), \(b_i\).

Примечание

Числа с одинаковым количеством делителей, оптимальные для примера:

  • \((27, 10)\), 4 делителя
  • \((100, 1156)\), 9 делителей
  • \((220, 140)\), 12 делителей
  • \((17, 19)\), 2 делителя
  • \((12, 18)\), 6 делителей
  • \((50, 32)\), 6 делителей
  • \((224, 1925)\), 12 делителей

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

B. Разница квадратов

математика теория чисел *1100

У Алисы есть кусочек ткани. Он имеет форму квадрата, длины сторон которого равны \(a\) сантиметров. А Боб тоже хочет себе кусочек ткани. Он хотел бы себе квадрат, длины сторон которых равны \(b\) сантиметров (при этом \(b < a\)). Алиса хочет сделать Боба счастливым, поэтому она отрежет нужный квадрат в углу её кусочка и отдаст его Бобу. Теперь у неё остался некрасивый кусочек, который имеет форму буквы L (смотрите картинки ниже).

Алиса хочет определить, является ли площадь, выраженная в квадратных сантиметрах, простым числом. Можете ли вы помочь ей это сделать?

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

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

Каждая из следующих \(t\) строк описывает \(i\)-й тест. Она содержит два целых числа \(a\) и \(b~(1 \leq b < a \leq 10^{11})\) — длина сторон квадрата Алисы и длина сторон квадрата, который хочет Боб.

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

Выведите \(t\) строк, где \(i\)-я строка содержит ответ на \(i\)-й тест. Выведите «YES» (без кавычек), если площадь, выраженная в квадратных сантиметрах, является простым числом, иначе выведите «NO».

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

Примечание

На рисунке ниже показан первый тестовый пример. Синяя часть соответствует части, принадлежащей Бобу, а красная часть — это часть, которую Алиса оставила для себя. Площадь красной части равна \(6^2 - 5^2 = 36 - 25 = 11\), которое является простым числом, значит ответ «YES».

Во втором примере площадь равна \(16^2 - 13^2 = 87\), которое делится на \(3\).

В третьем примере площадь оставшееся части равна \(61690850361^2 - 24777622630^2 = 3191830435068605713421\). Это число не является простым, потому что \(3191830435068605713421 = 36913227731 \cdot 86468472991 \).

В последнем примере площадь равна \(34^2 - 33^2 = 67\).

D. Делители

интерактив математика теория чисел *2000

У вас есть \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Каждое из \(a_i\) имеет от \(3\) до \(5\) делителей. Пусть \(a = \prod a_i\) — произведение всех входных чисел. Найдите количество делителей \(a\). Поскольку это число может быть очень большим, выведите его остаток от деления на простое число \(998244353\).

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

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

Каждая из следующих \(n\) строк содержит одно целое число \(a_i\) (\(1 \leq a_i \leq 2\cdot 10^{18}\)). Гарантируется, что количество делителей каждого \(a_i\) от \(3\) до \(5\).

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

Выведите одно целое число \(d\) — количество делителей произведения \(a_1 \cdot a_2 \cdot \dots \cdot a_n\) по модулю \(998244353\).

Входные данные для взломов

Для взломов нужно вводить тест в специальном формате.

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

Каждая из следующих \(n\) строк содержит число \(a_i\), представленное как произведение чисел. Строка содержит целое число \(k_i\) (\(2 \leq k_i \leq 4\)) — количество простых множителей \(a_i\) и \(k_i\) целых чисел \(p_{i,j}\) (\(2 \leq p_{i,j} \leq 2 \cdot 10^{18}\)), где \(p_{i,j}\) — \(j\)-й простой делитель \(a_i\).

Перед тем, как запустить решение участника, будут посчитаны все \(a_i = \prod p_{i,j}\). Заметьте, что все \(p_{i,j}\) должны быть простыми числами, каждый посчитанный \(a_i\) должен удовлетворять \(a_i \leq 2\cdot10^{18}\) и должен иметь от \(3\) до \(5\) делителей. Участникам будут даны только \(a_i\), а не простые множители.

Например, чтобы получить первый пример, нужно ввести такой тест:


3
2 3 3
2 3 5
2 11 13
Протокол взаимодействия

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

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

В первом примере \(a = 19305\). Его делители равны: \(1, 3, 5, 9, 11, 13, 15, 27, 33, 39, 45, 55, 65, 99, 117, 135, 143, 165, 195, 297, 351, 429, 495, 585, 715, 1287, 1485, 1755, 2145, 3861, 6435, 19305\) — всего \(32\) делителя.

Во втором примере \(a\) имеет четыре делителя: \(1\), \(86028121\), \(86028157\) и \(7400840699802997 \).

В третьем примере \(a = 202600445671925364698739061629083877981962069703140268516570564888699 375209477214045102253766023072401557491054453690213483547\).

В четвертом примере \(a=512=2^9\), поэтому ответ \(10\).

F. Булевский компьютер

битмаски бпф математика Перебор *2800

У Алисы есть компьютер, который работает с \(w\)-битными целыми числами и имеет \(n\) регистров для чисел. Текущее содержимое регистров задано как массив \(a_1, a_2, \ldots, a_n\).

Компьютер использует так называемые «супер функции», каждая из которых принимает два входных регистра и считает некую функцию, используя те два регистра. Учтите, что вы можете использовать один и тот же регистр как два входных аргумента.

Каждая «супер функция» состоит из логических функций. Существует шесть логических функций: AND, OR, XOR, NOT AND, NOT OR и NOT XOR, которые обозначаются как «A», «O», «X», «a», «o», «x», соответственно. Каждая битовая функция принимает два входных бита. Их результаты с учетом входных данных \(b_1\), \(b_2\) приведены ниже:

\(\begin{matrix} b_1 & b_2 & A & O & X & a & o & x \\ 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 \\ 0 & 1 & 0 & 1 & 1 & 1 & 0 & 0 \\ 1 & 0 & 0 & 1 & 1 & 1 & 0 & 0 \\ 1 & 1 & 1 & 1 & 0 & 0 & 0 & 1 \\ \end{matrix}\)

«Супер функция», которая состоит из \(w\) логических операций, разделяет два входных числа \(x_1\) и \(x_2\) на \(w\) бит, выполняет \(i\)-ю логическую операцию с \(i\)-и битами двух входных чисел. После чего соединяет эти \(w\) бит и возвращает это число.

Например, для \(4\)-битного компьютера мы можем иметь функцию «AXoA» (AND, XOR, NOT OR, AND). Для двух входных чисел: \(13 = 1101_2\) и \(10 = 1010_2\), функция вернет \(12 = 1100_2\), так как \(1\) AND \(1\) равно \(1\), \(1\) XOR \(0\) равно \(1\), NOT (\(0\) OR \(1\)) равно \(0\) и \(1\) AND \(0\) равно \(0\).

Вам дан список всех \(m\) функций. Для каждой функции вам нужно найти количество упорядоченных пар переменных, которые на выходе дадут \(0\). Другими словами, найдите количество упорядоченных пар \((i,j)\), где \(1 \leq i,j \leq n\), таких что \(w_k(a_i, a_j) = 0\), где \(w_k\) — \(k\)-я функция, которую использует «супер функция».

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

Первая строка содержит три целых числа \(w\), \(n\) и \(m~(1 \leq w \leq 12, 1 \leq n \leq 3\cdot 10^4, 1 \leq m \leq 5\cdot 10^4)\) — количество бит, количество переменных и количество функций.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((0 \leq a_i < 2^w)\) — значения переменных.

Каждая из следующих \(m\) строк содержит строку \(g_j~(|g_j| = w)\), которая описывает функцию. Строка \(g_j\) содержит только символы «A», «O», «X», «a», «o», «x».

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

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

Примечание

В первом примере переменные в бинарной записи имеют вид \(1101\), \(1010\), \(0110\). Пары, которые вернут \(0\) — это \((13, 6)\), \((6, 13)\) и \((6, 6)\). Уже было описано в условии, что \(13 \oplus 10 = 10 \oplus 13 = 12\). При других числах \(13 \oplus 13 = 11\), \(10 \oplus 10 = 8\) и \(10 \oplus 6 = 6 \oplus 10 = 4\).

E. Little C любит 3 III

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

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

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

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

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

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

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

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

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

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

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

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

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

A. Высота функции

математика *1000

Задан набор из \(2n+1\) целочисленных точек на декартовой плоскости. Точки пронумерованы от \(0\) до \(2n\) включительно. Пусть \(P_i\)\(i\)-я точка. Тогда \(x\)-координата точки \(P_i\) равна \(i\). \(y\)-координата точки \(P_i\) равна нулю (изначально). Таким образом, изначально \(P_i=(i,0)\).

Заданный набор точек является вершинами графика кусочной функции. \(j\)-й кусок функции — отрезок \(P_{j}P_{j + 1}\). За один ход вы можете увеличить на \(1\) \(y\)-координату любой точки с нечетной \(x\)-координатой (то есть точек \(P_1, P_3, \dots, P_{2n-1}\)). Заметьте, что соответствующие отрезки тоже меняются.

Например, график ниже иллюстрирует функцию для \(n=3\) (количество точек равно \(2\cdot3+1=7\)), в которой мы увеличили \(y\)-координату точки \(P_1\) три раза и \(y\)-координату точки \(P_5\) один раз:

Пусть площадь графика равна площади под графиком, но над координатной прямой OX. Тогда площадь графика на картинке выше равна 4 (голубая площадь на картинке выше — это площадь графика, нарисованного на ней).

Пусть высота графика равна максимальной \(y\)-координате среди всех изначальных точек графика (то есть точек \(P_0, P_1, \dots, P_{2n}\)). Высота графика на картинке выше равна 3.

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

Легко заметить, что любой ответ, который может быть получен при помощи применения описанных выше ходов, всегда существует и является целым числом, не превосходящим \(10^{18}\).

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

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

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

Выведите одно целое число — минимально возможную высоту графика, состоящего из \(2n+1\) вершин с площадью, равной \(k\). Легко заметить, что любой ответ, который может быть получен при помощи применения описанных выше ходов, всегда существует и является целым числом, не превосходящим \(10^{18}\).

Примечание

Один из возможных ответов на первый тестовый пример:

Площадь этого графика равна 3, высота этого графика равна 1.

Единственный возможный ответ на второй тестовый пример:

Площадь этого графика равна 12, высота этого графика равна 3.

B. Ходьба по диагонали v.2

математика *1600

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

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

Если Михаил идет из точки \((x1, y1)\) в точку \((x2, y2)\) за один ход, и \(x1 \ne x2\) и \(y1 \ne y2\), то такой ход называется диагональным ходом.

У Михаила есть \(q\) запросов. В \(i\)-м запросе целью Михаила является дойти до точки \((n_i, m_i)\) из точки \((0, 0)\) ровно за \(k_i\) ходов. Среди всех возможных способов дойти он хочет выбрать такой, в котором максимальное количество диагональных ходов. Ваша задача — найти максимальное количество диагональных ходов или сказать, что добраться из точки \((0, 0)\) до точки \((n_i, m_i)\) за \(k_i\) ходов невозможно.

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

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

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

Далее следуют \(q\) строк. \(i\)-я из \(q\) строк содержит три целых числа \(n_i\), \(m_i\) и \(k_i\) (\(1 \le n_i, m_i, k_i \le 10^{18}\)) — \(x\)-координата точки назначения запроса, \(y\)-координата точки назначения запроса и количество ходов в запросе соответственно.

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

Выведите \(q\) целых чисел. \(i\)-е число должно быть равно -1, если Михаил не может дойти из точки \((0, 0)\) в точку \((n_i, m_i)\) ровно за \(k_i\) ходов, описанных выше. Иначе \(i\)-е число должно быть равно максимальному количеству диагональных ходов среди всех возможных способов дойти.

Примечание

Один из возможных ответов на первый тестовый пример: \((0, 0) \to (1, 0) \to (1, 1) \to (2, 2)\).

Один из возможных ответов на второй тестовый пример: \((0, 0) \to (0, 1) \to (1, 2) \to (0, 3) \to (1, 4) \to (2, 3) \to (3, 2) \to (4, 3)\).

В третьем тестовом примере Михаил не может достичь точку \((10, 1)\) за 9 ходов.

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

Комбинаторика математика теория чисел *2400

Рассмотрим некоторое положительное целое число \(x\). Его разложение на простые имеет вид \(x = 2^{k_1} \cdot 3^{k_2} \cdot 5^{k_3} \cdot \dots\)

Назовем число \(x\) изящным, если наибольший общий делитель последовательности \(k_1, k_2, \dots\) равен \(1\). Например, числа \(5 = 5^1\), \(12 = 2^2 \cdot 3\), \(72 = 2^3 \cdot 3^2\) изящные, а числа \(8 = 2^3\) (\(GCD = 3\)), \(2500 = 2^2 \cdot 5^4\) (\(GCD = 2\)) — нет.

Посчитайте количество изящных чисел от \(2\) до \(n\).

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

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

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

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

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

Выведите \(T\) строк — в \(i\)-й строке должно содержаться количество изящных чисел от \(2\) до \(n_i\).

Примечание

Приведен список не изящных чисел до \(10\):

  • \(4 = 2^2, GCD = 2\);
  • \(8 = 2^3, GCD = 3\);
  • \(9 = 3^2, GCD = 2\).

Для остальных \(GCD = 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\)).

F. Максимальное упрощение

Комбинаторика математика Структуры данных *2500

Вам дан массив \(a\) из \(n\) целых чисел и целое число \(k\) (\(2 \le k \le n\)), где элементы массива обозначаются как \(a_i\) (\(0 \le i < n\)). Выполните операцию \(z\) определённую ниже над \(a\) и выведите значение \(z(a,k)\) по модулю \(10^{9}+7\).


function z(array a, integer k):
if length(a) < k:
return 0
else:
b = empty array
ans = 0
for i = 0 .. (length(a) - k):
temp = a[i]
for j = i .. (i + k - 1):
temp = max(temp, a[j])
append temp to the end of b
ans = ans + temp
return ans + z(b, k)
Входные данные

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

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

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

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

Примечание

В первом примере:

  • для \(a=(9,1,10)\), \(ans=19\) и \(b=(9,10)\),
  • для \(a=(9,10)\), \(ans=10\) и \(b=(10)\),
  • для \(a=(10)\), \(ans=0\).

Значит, ответ равен \(19+10+0=29\).

Во втором примере:

  • для \(a=(5,8,7,1,9)\), \(ans=25\) и \(b=(8,8,9)\),
  • для \(a=(8,8,9)\), \(ans=9\) и \(b=(9)\),
  • для \(a=(9)\), \(ans=0\).

Значит, ответ равен \(25+9+0=34\).

B. Не взаимно простое разбиение

Конструктив математика *1100

Выясните можно ли разбить множество из первых \(n\) положительных целых чисел на два непустых дизъюнктных множества \(S_1\) и \(S_2\), таких что:

\(\mathrm{gcd}(\mathrm{sum}(S_1), \mathrm{sum}(S_2)) > 1\)

Где \(\mathrm{sum}(S)\) обозначает сумму всех элементов множества \(S\), а \(\mathrm{gcd}\) обозначает наибольший общий делитель.

Каждое число от \(1\) до \(n\) должно присутствовать ровно в одном из множеств \(S_1\) и \(S_2\).

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

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

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

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

Иначе, выведите «Yes» (без кавычек), а затем две строки, описывающие множества \(S_1\) и \(S_2\) соответственно.

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

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

Примечание

В первом примере нет ни одного способа разбить одно числа на два непустых множества, поэтому ответ «No».

Во втором примере, сумма по множествам равна \(2\) и \(4\) соответственно. Так как \(\mathrm{gcd}(2, 4) = 2 > 1\), то это является одним из возможных ответов.

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

C. Безопасность сети

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

К компьютерной сети Метрополии подключены \(n\) серверов, каждому из которых назначен некоторый ключ шифрования, выбранный в диапазоне от \(0\) до \(2^k - 1\) включительно. Обозначим через \(c_i\) ключ шифрования, назначенный \(i\)-му серверу. Также некоторые \(m\) пар серверов напрямую соединены каналом передачи данных. Из-за особенностей используемых алгоритмов шифрования канал передачи данных безопасен, только если два соединённых этим каналом сервера используют различные ключи шифрования. Изначально ключи шифрования выбраны таким образом, что все каналы передачи данных безопасны.

Вам стало известно, что по интернету активно распространяется новый вирус, который при заражении им какого-либо сервера Метрополии изменяет его ключ шифрования. А именно, в теле вируса хранится некоторое неизвестное вам число \(x\), выбранное в том же диапазоне, и если вирусом заразится сервер \(i\), то его ключ шифрования изменится с \(c_i\) на \(c_i \oplus x\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

К сожалению, вы не знаете ни число \(x\), ни какие именно серверы Метрополии будут заражены опасным вирусом, поэтому решили посчитать количество вариантов, при которых безопасность каналов нарушена не будет. Формально, вам требуется найти количество пар \((A, x)\), где \(A\) — некоторое подмножество серверов (возможно пустое), а \(x\) — возможное значение внутреннего параметра вируса в диапазоне от \(0\) до \(2^k - 1\) включительно, таких что если вирус с параметром \(x\) заразит компьютеры из подмножества \(A\), а остальные компьютеры заражены не будут, то все каналы передачи данных останутся безопасными. Поскольку эта величина может быть достаточно большой, найдите остаток от её деления на \(10^9 + 7\).

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

В первой строке входных данных записаны три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n \leq 500\,000\), \(0 \leq m \leq \min(\frac{n(n - 1)}{2}, 500\,000)\), \(0 \leq k \leq 60\)) — количество серверов, количество пар серверов, непосредственно соединённых каналом передачи данных, и параметр \(k\), определяющий диапазон возможных значений ключа шифрования.

Следующая строка содержит \(n\) целых чисел \(c_i\) (\(0 \leq c_i \leq 2^k - 1\)), \(i\)-е из которых соответствует ключу шифрования, используемому на \(i\)-м сервере.

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

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

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

Примечание

Рассмотрим первый пример.

Возможные значения числа \(x\), содержащегося в вирусе, равны \(0\), \(1\), \(2\) и \(3\).

Для значений \(0\), \(2\) и \(3\) вирус может заразить любое подмножество серверов, что дает нам \(16\) исходов для каждого значения. Если же вирус содержит число \(1\), то он может заразить либо все серверы, либо ни одного. Таким образом, количество удачных исходов равно \(16 + 2 + 16 + 16 = 50\).

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

B. Покупка телевизора

математика *1000

Монокарп решил купить новый телевизор и повесить его на стену у себя дома. Свободного места на стене достаточно, чтобы повесить телевизор с шириной экрана не более \(a\) и высотой экрана не более \(b\). Также Монокарп привык к телевизорам со строго определенным соотношением сторон: формально, если ширина экрана телевизора равна \(w\), а высота — \(h\), то должно выполняться соотношение: \(\frac{w}{h} = \frac{x}{y}\).

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

Пока Монокарп не хочет выбирать конкретную модель телевизора, которую он купит, — для начала необходимо определиться с размерами экрана. Он решил попробовать все существующие варианты размеров экрана. Но для начала необходимо понять, сколько существует пар целых положительных чисел \(w\) и \(h\), таких что \((w \le a)\), \((h \le b)\) и \((\frac{w}{h} = \frac{x}{y})\)?

Иными словами, Монокарпу нужно определить количество телевизоров, которые имеют соотношение сторон \(\frac{x}{y}\) и поместятся на стене, то есть их ширина не превосходит \(a\), а высота не превосходит \(b\). Два варианта считаются различными, если ширина или высота экрана в них различаются.

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

Первая строка содержит четыре целых числа \(a\), \(b\), \(x\), \(y\) (\(1 \le a, b, x, y \le 10^{18}\)) — ограничения на ширину и высоту и требования к соотношению сторон экрана.

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

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

Примечание

В первом примере существуют \(3\) возможных варианта: \((5, 3)\), \((10, 6)\), \((15, 9)\).

Во втором примере ограничениям не соответствует ни один вариант.

В третьем примере существует только один вариант: \((3, 2)\).

F. Луч в трубе

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

A. Выборы

математика реализация *800

Аурук принимает участие в выборах в своей школе. Это последний раунд. У него есть ровно один оппонент — Элодрейп. В школе есть ровно \(n\) студентов. У каждого студента есть ровно \(k\) голосов и он обязан использовать их все. Тем самым, Аурук понимает, что если какой-то человек отдаёт \(a_i\) голосов за Элодрейпа, то ему достанется \(k - a_i\) голосов от этого человека. Конечно, должно выполняться \(0 \le k - a_i\).

Аурук знает, что если он проиграет, то его жизнь всё равно что кончится. Он поговорил со своими друзьями и теперь знает \(a_1, a_2, \dots, a_n\) — сколько голосов каждый школьник отдаст за Элодрейпа. Теперь он хочет поменять число \(k\), чтобы выиграть выборы. Он понимает, что чем больше \(k\), тем больше шансов, что кто-то заметит неладное, и что его дисквалифицируют.

Тем самым, Аурук знает \(a_1, a_2, \dots, a_n\) — сколько голосов каждый из школьников отдаст его оппоненту. Помогите ему выбрать наименьшее \(k\), которое приведёт к его выигрышу. Чтобы выиграть, Аурук должен набрать строго больше голосов, чем Элодрейп.

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

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

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 100\)) — количество голосов, которые отдаст Элодрейпу каждый школьник.

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

Выведите минимальное число \(k\) (\(k \ge \max a_i\)), которое приводит к победе Аурука. Чтобы выиграть, Аурук должен набрать строго больше голосов, чем Элодрейп.

Примечание

В первом примере Элодрейп получает \(1 + 1 + 1 + 5 + 1 = 9\) голосов. Наименьшее выигрышное \(k\) равно \(5\) (и оно заведомо не может быть меньше из-за четвёртого человека), и оно приводит к \(4 + 4 + 4 + 0 + 4 = 16\) голосам за Аурука, чего достаточно, чтобы выиграть.

Во втором примере Элодрейп получает \(11\) голосов. Если \(k = 4\), то Аурук получает \(9\) голосов и проигрывает Элодрейпу.

D. Загадочное преступление

meet-in-the-middle Комбинаторика математика Перебор *1700

Ацингел — достаточно маленький городок. В этом городке был всего один доктор — Мисс Ада. Она была очень дружелюбной и никто никогда не говорил про неё ничего плохого. Так что кто мог подумать, что Аду найдут мёртвой в собственном доме? Мистер Гаври, известный во всём мире детектив, был назначен найти преступника. Он опросил \(m\) соседей Ады о клиентах, которые посетили её в тот злосчастный день. Давайте пронумеруем этих клиентов от \(1\) до \(n\). Свидетельством каждого соседа является перестановка этих чисел, которая описывает порядок, в котором этот сосед видел клиентов приходящими к Аде.

Однако некоторые факты выглядят достаточно подозрительно — как могло быть, что, согласно некоторым перестановкам некоторые клиенты были замечены утром, а согласно другим — вечером? «Утром некоторые из соседей скорее всего спали! — подумал Гаври, — А вечером слишком темно, чтобы видеть лица людей...». Теперь он хочет удалить из каждой перестановки некоторый префикс и некоторый суффикс (возможно, пустые) так, что оставшиеся части будут не пусты и равны друг другу. Возможно, часть потенциальных преступников пропадёт, но хотя бы не будет противоречий в свидетельствах соседей.

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

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

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

Каждая из следующих \(m\) строк содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)). Гарантируется, что эти числа образуют перестановку (то есть каждое число от \(1\) до \(n\) встречается ровно один раз).

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

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

Примечание

В первом примере общей частью может быть \([1]\), \([2]\), \([3]\) и \([2, 3]\).

Во втором и третьем примерах можно оставлять только общие части из \(1\) элемента.

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

D. Межзвездная битва

Деревья математика Теория вероятностей *2200

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

На Баблдом напал мощный противник, владеющий технологией телепортации. Враг атакует каждую ночь, а правительство Баблдома возвращает все планеты под свой контроль днем. В течение одной ночи враг атакует каждую планету Баблдома один раз, но некоторые планеты более стойкие, чем другие. Планеты пронумерованы \(0,1,…,N-1\), и планета номер \(i\) будет захвачена врагом в вероятностью \(p_i\). Перед каждой атакой (в том числе перед первой) правительство меняет вероятность захвата одной планеты (возможно как в большую, так и в меньшую сторону).

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

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

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

Следующая строка содержит \(N\) различных вещественных чисел в интервале \([0,1]\), записанных с ровно двумя знаками после десятичной точки, определяющие начальные вероятности, с которыми каждая из планет будет захвачена.

Следующая \(N-1\) строка содержит все кротовые норы Баблдома, каждая описывается двумя планетами, которые она соединяет.

Следующая строка содержит одно целое положительное число \(Q\) (\(1 \le Q \le 10^5\)), обозначающее количество атак противника.

Каждая из следующих \(Q\) строк содержит одно целое неотрицательное число и одно вещественное число в интервале \([0,1]\), обозначающее планету, вероятность захвата которой меняет правительство, и эту новую вероятность.

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

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

F. Загадочная дама

геометрия математика *3400

Ани и Борна играют в короткую игру на многочлене двух переменных. Многочлен имеет специальный вид: одночлены без коэффициентов фиксированы, а на месте всех коэффициентов есть пропуски, которые нужно заполнить, например \(\) \_ xy + \_ x^4 y^7 + \_ x^8 y^3 + \ldots \(\)

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

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

Если Ани и Борна сделают оптимально свой единственный ход, то кто выиграет?

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

Первая строка содержит целое положительное число \(N\) \((2 \leq N \leq 200\, 000)\), обозначающее количество одночленов в начальном многочлене.

Каждая из следующих \(N\) строк содержит описание многочлена: \(k\)-я строка содержит два целых числа \(a_k\) и \(b_k\) \((0 \leq a_k, b_k \leq 10^9\)), которые означают, что начальный многочлен имеет одночлен \(\_ x^{a_k} y^{b_k}\). Гарантируется, что для \(k \neq l\) либо \(a_k \neq a_l\), либо \(b_k \neq b_l\).

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

Если Борна всегда может выбрать коэффициенты таким образом, что бы полученный многочлен всегда был ограничен снизу, независимо от того, какой многочлен украдет Ани, выведите «Borna». Иначе выведите «Ani».

Выводить кавычки не нужно.

Примечание

В первом примере начальный многочлен выглядит как \(\_xy+ \_x^2 + \_y^2\). Если Ани украдет одночлен \(\_y^2\), то Борне достанется многочлен \(\_xy+\_x^2\). Какие бы положительные целые числа он не написал в пропуски, \(y \rightarrow -\infty\) и \(x := 1\) устремляет значение выражения в минус бесконечность.

Во втором примере начальный многочлен имеет вид \(\_1 + \_x + \_x^2 + \_x^8\). Можно показать, что, какой бы одночлен Ани не украла, Борна всегда может выиграть.

H. Самоисследование

математика *2400

Заскучав от постоянного исследования Луны, Wall-B решил исследовать то, из чего он сделан — двоичные числа. Он взял двоичное число и решил посчитать, сколько раз в нем появлялись разные подстроки длины два. Он хранит эти значения в \(c_{00}\), \(c_{01}\), \(c_{10}\) и \(c_{11}\), описывающих, сколько раз в числе встречаются подстроки 00, 01, 10 и 11, соответственно. Например:

\(10111100 \rightarrow c_{00} = 1, \ c_{01} = 1,\ c_{10} = 2,\ c_{11} = 3\)

\(10000 \rightarrow c_{00} = 3,\ c_{01} = 0,\ c_{10} = 1,\ c_{11} = 0\)

\(10101001 \rightarrow c_{00} = 1,\ c_{01} = 3,\ c_{10} = 3,\ c_{11} = 0\)

\(1 \rightarrow c_{00} = 0,\ c_{01} = 0,\ c_{10} = 0,\ c_{11} = 0\)

Wall-B заметил, что может быть несколько двоичных чисел с одинаковыми \(c_{00}\), \(c_{01}\), \(c_{10}\), \(c_{11}\). Поэтому он хочет посчитать, сколько двоичных чисел из отрезка \([A, B]\) имеют данные \(c_{xy}\). К сожалению, его вычислительная мощность недостаточно сильна для обработки таких больших, интересных ему интервалов. Можете ли вы ему помочь? Поскольку это число может быть большим, выведите его по модулю \(10^9 + 7\).

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

Первые две строки содержат два положительных двоичных целых числа \(A\) и \(B\) (\(1 \leq A \leq B < 2^{100\,000}\)), описывающих начало и конец отрезка, соответственно. Двоичные числа \(A\) и \(B\) не содержат лидирующих нулей.

Следующие четыре строки содержат целые числа \(c_{00}\), \(c_{01}\), \(c_{10}\), \(c_{11}\) (\(0 \leq c_{00}, c_{01}, c_{10}, c_{11} \leq 100\,000\)) описывающие количество вхождений подстрок 00, 01, 10 и 11, соответственно.

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

Выведите одно число, описывающее количество чисел из отрезка \([A, B]\), удовлетворяющих условию, по модулю \(10^9 + 7\).

Примечание

Пример 1: Двоичные числа из отрезка \([10,1001]\) это \(10,11,100,101,110,111,1000,1001\). Только число 110 удовлетворяет данным ограничениям: \(c_{00} = 0, c_{01} = 0, c_{10} = 1, c_{11} = 1\).

Пример 2: Никакое число из этого отрезка не удовлетворяет данным условиям.

A. Little C любит 3 I

математика *800

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

Сейчас у него есть положительное целое число \(n\). Он хочет разбить \(n\) на \(3\) положительных целых числа \(a,b,c\) так, что \(a+b+c=n\) и никакое из этих \(3\) чисел не делится на \(3\). Помогите ему это сделать.

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

В первой строке входного файла записано единственное целое число \(n\) (\(3 \leq n \leq 10^9\)) — число, которое есть у Little C.

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

В единственной строке выведите \(3\) таких положительных целых числа \(a,b,c\), что \(a+b+c=n\) и среди них нет чисел, делящихся \(3\).

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

B. Покрыть точки

геометрия математика *900

Даны \(n\) точек на плоскости, \((x_1,y_1), (x_2,y_2), \ldots, (x_n,y_n)\).

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

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

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

Каждая из следующих \(n\) строк содержит два числа \(x_i\) и \(y_i\) (\(1 \leq x_i,y_i \leq 10^9\)).

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

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

Примечание

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

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

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

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

E. Головоломка из фишек

Конструктив математика реализация *2400

Егор придумал новую головоломку из фишек, в которую предлагает сыграть вам.

Головоломка имеет вид таблицы из \(n\) строк и \(m\) столбцов, в каждой клетке которой могут располагаться несколько черных и белых фишек, положенных в ряд. Таким образом, состояние в клетке можно описать строкой, состоящей из символов «0» (белая фишка) и «1» (черная фишка), возможно пустой, а вся головоломка — это таблица, в каждой клетке которой стоит строка из нулей и единиц. Задача состоит в том, чтобы из одного состояния таблицы получить другое.

Для этого можно использовать следующую операцию:

  • выбрать две различные клетки \((x_1, y_1)\) и \((x_2, y_2)\), при этом клетки должны находиться в одной строке или одном столбце таблицы, и строка в клетке \((x_1, y_1)\) должна быть непустой;
  • за операцию можно переместить последний символ строки в клетке \((x_1, y_1)\) в начало строки в клетке \((x_2, y_2)\).

Для вас Егор загадал 2 состояния таблицы — начальное и конечное. Гарантируется, что количества нулей и единиц в таблицах совпадают. Ваша задача — с помощью нескольких операций получить из начального состояния конечное. Конечно, Егор не хочет, чтобы количество операций было очень большим. Обозначим за \(s\) количество символов в каждой из таблиц (в таблицах поровну символов). Тогда вы должны использовать не более \(4 \cdot s\) операций.

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \leq n, m \leq 300\)) — количества строк и столбцов у таблиц в головоломке, соответственно.

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

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

Обозначим суммарную длину строк в начальном состоянии за \(s\). Гарантируется, что \(s \leq 100\, 000\). Также гарантируется, что количества нулей и единиц совпадают в начальном и конечном состояниях.

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

В первой строке выведите одно целое число \(q\) — количество использованных операций. Необходимо найти решение, для которого \(0 \leq q \leq 4 \cdot s\).

В следующих \(q\) строках выведите по 4 целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\). \(i\)-я из этих строк должна описывать \(i\)-ю операцию. Необходимо, чтобы было выполнено \(1 \leq x_1, x_2 \leq n\), \(1 \leq y_1, y_2 \leq m\), \((x_1, y_1) \neq (x_2, y_2)\), \(x_1 = x_2\) или \(y_1 = y_2\). При этом строка в клетке \((x_1, y_1)\) должна быть непустой. Данная последовательность операций должна переводить таблицу из начального состояния в конечное.

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

Примечание

Рассмотрим первый пример.

  • Текущее состояние таблицы:

    00 10
    01 11

    Первая операция. В клетке \((2, 1)\) записана строка \(01\). Применяя операцию к двум клеткам \((2, 1)\) и \((1, 1)\), мы переносим \(1\) из конца строки \(01\) в начало строки \(00\), получая строку \(100\).

  • Текущее состояние таблицы:

    100 10
    0 11

    Вторая операция. В клетке \((1, 1)\) записана строка \(100\). Применяя операцию к двум клеткам \((1, 1)\) и \((1, 2)\), мы переносим \(0\) из конца строки \(100\) в начало строки \(10\), получая строку \(010\).

  • Текущее состояние таблицы:

    10 010
    0 11

    Третья операция. В клетке \((1, 2)\) записана строка \(010\). Применяя операцию к двум клеткам \((1, 2)\) и \((2, 2)\), мы переносим \(0\) из конца строки \(010\) в начало строки \(11\), получая строку \(011\).

  • Текущее состояние таблицы:

    10 01
    0 011

    Четвертая операция. В клетке \((2, 2)\) записана строка \(011\). Применяя операцию к двум клеткам \((2, 2)\) и \((2, 1)\), мы переносим \(1\) из конца строки \(011\) в начало строки \(0\), получая строку \(10\).

  • Текущее состояние таблицы:

    10 01
    10 01

Можно видеть, что мы получили требуемое состояние таблицы.

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\), то есть связный граф.

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

H. Эпическая свёртка

бпф китайская теорема об остатках математика теория чисел *3500

Вам даны два массива \(a_0, a_1, \ldots, a_{n - 1}\) и \(b_0, b_1, \ldots, b_{m-1}\), и целое число \(c\).

Вычислите следующую сумму:

\(\)\sum_{i=0}^{n-1} \sum_{j=0}^{m-1} a_i b_j c^{i^2\,j^3}\(\)

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

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

Первая строка содержит три целых числа \(n\), \(m\) и \(c\) (\(1 \le n, m \le 100\,000\), \(1 \le c < 490019\)).

Следующая строка содержит ровно \(n\) целых чисел \(a_i\) и задаёт массив \(a\) (\(0 \le a_i \le 1000\)).

Последняя строка содержит ровно \(m\) целых чисел \(b_i\) и задаёт массив \(b\) (\(0 \le b_i \le 1000\)).

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

Выведите одно число — значение суммы по модулю \(490019\).

Примечание

В первом примере единственное ненулевое слагаемое соотвествует \(i = 1\), \(j = 1\) и равно \(1 \cdot 1 \cdot 3^1 = 3\).

Во втором примере все слагаемые равны \(1\).

C. Удачные дни

математика теория чисел *1900

Боб и Алиса часто участвует в различных соревнованиях по программированию. Как и у многих спортивных программистов, у Алисы и Боба есть удачные и неудачные дни. Они заметили, что их удачные и неудачные дни повторяются с некоторым периодом. Например, у Алисы дни \([l_a; r_a]\) являются удачными, далее следуют неудачные дни: \([r_a + 1; l_a + t_a - 1]\), далее опять удачные: с \([l_a + t_a; r_a + t_a]\) и так далее. Иначе говоря, удачными для Алисы являются дни, попадающие в отрезок \([l_a + k t_a; r_a + k t_a]\), для некоторого целого неотрицательного значения \(k\).

Аналогично устроены удачные дни у Боба, только параметры последовательности у него другие: \(l_b\), \(r_b\), \(t_b\). То есть для него удачными являются дни попадающие в отрезок \([l_b + k t_b; r_b + k t_b]\), для некоторого целого неотрицательного значения \(k\).

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

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

Первая строка содержит три целых числа \(l_a\), \(r_a\), \(t_a\) (\(0 \le l_a \le r_a \le t_a - 1, 2 \le t_a \le 10^9\)) и задаёт удачные дни для Алисы.

Вторая строка содержит три целых числа \(l_b\), \(r_b\), \(t_b\) (\(0 \le l_b \le r_b \le t_b - 1, 2 \le t_b \le 10^9\)) и задаёт удачные дни для Боба.

Гарантируется, что и у Алисы, и у Боба некоторые дни будут неудачными.

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

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

Примечание

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

B. Подели конфеты

математика теория чисел *1600

Аркадий и его друзья любят играть в шашки на доске \(n \times n\). Строки и столбцы доски пронумерованы от \(1\) до \(n\).

Друзья недавно выиграли какой-то турнир, поэтому Аркадий хочет поздравить их и подарить конфеты. Вспомнив старинную притчу (но не ее мораль), Аркадий решил дать друзьям по одному набору конфет за каждую клетку доски: набор конфет, соответствующий клетке \((i, j)\), будет состоять из ровно \((i^2 + j^2)\) конфет особенного для этой клетки типа.

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

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

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

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

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

Примечание

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

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

  • \((1, 2)\) и \((2, 1)\), поскольку \(1^2 + 2^2 = 5\), что делится на \(5\);
  • \((1, 3)\) и \((3, 1)\);
  • \((2, 4)\) и \((4, 2)\);
  • \((2, 6)\) и \((6, 2)\);
  • \((3, 4)\) и \((4, 3)\);
  • \((3, 6)\) и \((6, 3)\);
  • \((5, 5)\).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

C. Преобразование последовательности

Конструктив математика *1600

Назовем преобразованием последовательности из \(n\) элементов следующий процесс:

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

Изначально дана последовательность целых чисел \(1, 2, \dots, n\). Найдите лексикографически максимальный результат преобразования этой последовательности.

Последовательность \(a_1, a_2, \ldots, a_n\) лексикографически больше последовательности \(b_1, b_2, \ldots, b_n\), если существует такой индекс \(i\), что \(a_j = b_j\) для всех \(j < i\), и при этом \(a_i > b_i\).

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

В первой и единственной строке входных данных дано одно целое число \(n\) (\(1\le n\le 10^6\)).

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

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

Примечание

В первом примере результат достигается так:

  • Запишем НОД\((1, 2, 3) = 1\) и удалим \(2\).
  • Запишем НОД\((1, 3) = 1\) и удалим \(1\).
  • Запишем НОД\((3) = 3\) и удалим \(3\).

В результате преобразования будет написана последовательность \([1, 1, 3]\).

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\) монеты нельзя.

C. Делимость

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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\) приводят к одному и тому же ответу.

Во втором примере любой порядок поедания кусочков приведёт к одному и тому же ответу.

D. Развлечения с целыми числами

графы математика поиск в глубину и подобное реализация *1800

Вам дано положительное целое число \(n\) большее или равное \(2\). Для пары целых чисел \(a\) и \(b\) (\(2 \le |a|, |b| \le n\)), вы можете преобразовать \(a\) в \(b\) тогда и только тогда, когда существует целое число \(x\), такое что \(1 < |x|\) и (\(a \cdot x = b\) или \(b \cdot x = a\)), где \(|x|\) обозначает модуль числа \(x\).

После такого преобразования ваш счёт увеличивается на \(|x|\) и вам больше не разрешается превращать \(a\) в \(b\) и \(b\) в \(a\).

Изначально ваш счёт равен \(0\). Вы можете начать с любого числа и преобразовывать его столько раз, сколько вы хотите. Какого наибольшего счёта можно добиться?

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

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

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

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

Примечание

В первом примере можно делать такие преобразования: \(2 \rightarrow 4 \rightarrow (-2) \rightarrow (-4) \rightarrow 2\).

В третьем примере, нельзя выполнить ни одного преобразования.

D. Конфеты детям

математика Перебор *2600

На детском празднике дети водили хороводы. Как только музыка закончила играть, дети всё ещё стояли в кругу. Тут Лена вспомнила, что родители дали ей коробку с \(k\) конфетками «Wilky May». Лена не жадина, поэтому она решила раздать все свои конфетки друзьям из хоровода. Лена знает, что некоторые её друзья сладкоежки, а некоторые нет. Сладкоежки берут из коробки две конфетки, если в коробке есть хотя бы две конфетки, а иначе берут одну. Остальные друзья Лены всегда берут ровно одну конфетку из коробки.

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

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

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

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

В единственной строке задаются четыре целых числа \(n\), \(l\), \(r\), \(k\) (\(1 \le n, k \le 10^{11}\), \(1 \le l, r \le n\)) — количество детей в хороводе, номер друга, которому Лена отдала коробку конфет, номер друга, который взял последнюю конфетку, и количество конфет в коробке, соответственно.

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

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

Примечание

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

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

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

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

E. Лазеры и зеркала

Конструктив математика *3000

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

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

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

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

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

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

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

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

В следующих \(n\) строчках длины \(n\) выведите расстановку зеркал, приводящую к такому количеству попавших лазеров. Если соответствующая клетка пуста, то выведите «.», иначе выведите «/» или «\», в зависимости от ориентации зеркала.

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

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

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

Примечание

Картинка иллюстрирует расстановку зеркал из первого примера.

A. Сделай треугольник!

геометрия математика Перебор *800

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

За какое минимальное время Маша сможет собрать треугольник положительной площади, сторонами которого будут палочки, если концы палочек должны быть вершинами треугольника?

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

В единственной строке даны три целых числа \(a\), \(b\) и \(c\) (\(1 \leq a, b, c \leq 100\)) — длины палочек, которые есть у Маши.

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

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

Примечание

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

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

В третьем примере Маша может за \(33\) минуты удлинить одну из палочек длиной \(10\) сантиметров на \(33\) сантиметра, а затем за \(48\) минут удлинить другую палочку длиной \(10\) сантиметров на \(48\) сантиметров. Таким образом, Маша может собрать треугольник со сторонами \(43\), \(58\) и \(100\) сантиметров за \(81\) минуту. Можно показать, что Маша не сможет получить треугольник за меньшее время.

B. Уравнения математической магии

математика *1200

Колоссально! — воскликнул горбоносый. — Программист! Нам нужен именно программист.
Аркадий и Борис Стругацкие, Понедельник начинается в субботу

Изучая книгу «Уравнения математической магии» Роман Ойра-Ойра и Кристобаль Хунта обнаружили интересное уравнение: \(a - (a \oplus x) - x = 0\) для заданого \(a\), где знаком \(\oplus\) обозначено побитовое исключающее ИЛИ (XOR) двух чисел (эта операция обозначается как ^ или xor во многих современных языках программирования). Ойра-Ойра быстро нашел \(x\), являющееся решением, однако Кристобалю Хунте результат Ойры-Ойры показался недостаточно интересным, поэтому он спросил коллегу, сколько существует неотрицательных решений данного уравнения. Такая задача оказалась для Ойры-Ойры слишком сложной, поэтому он обратился за помощью к Вам.

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

Вам предстоит решить задачу для нескольких возможных значений параметра \(a\). В первой строке находится целое число \(t\) (\(1 \le t \le 1000\)) — количество этих значений.

В последующих \(t\) строках находятся значения параметра \(a\), каждое значение — целое число от \(0\) до \(2^{30} - 1\) включительно.

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

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

Можно доказать, что количество решений всегда конечно.

Примечание

Определим операцию побитового исключительного ИЛИ (XOR).

Пусть даны два целых неотрицательных числа \(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 \oplus y\) — результат операции XOR над числами \(x\) и \(y\). Тогда двоичной записью \(r\) будет \(r_k \dots r_2 r_1 r_0\), где:

\(\) r_i = \left\{ \begin{aligned} 1, ~ \text{если} ~ x_i \ne y_i \\ 0, ~ \text{если} ~ x_i = y_i \end{aligned} \right. \(\)

Для первого значения параметра только \(x = 0\) является решением уравнения.

Для второго значения параметра решениями уравнения являются \(x = 0\) и \(x = 2\).

A. Вася и шоколадки

математика реализация *800

В любимом Васином магазине началась акция: купи \(a\) шоколадок и \(b\) получи в подарок! Один и тот же клиент может воспользоваться этим акционным предложением неограниченное количество раз.

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

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

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

Следующие \(t\) строк содержит по четыре целых числа \(s, a, b, c~(1 \le s, a, b, c \le 10^9)\) – количество денег у Васи, количество шоколадок, которые необходимо купить, чтобы получить подарок, количество шоколадок, которое покупатель получает в подарок и цена одной шоколадки.

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

Выведите \(t\) строк. \(i\)-я строка должна содержать максимальное количество шоколадок, которые Вася может получить в \(i\)-м тесте.

Примечание

В первом тестовом примере Вася покупает \(9\) шоколадок и получает в подарок \(3\). На оставшийся рубль Вася покупает одну шоколадку и в итоге получает \(13\) шоколадок.

Во втором тестовом примере Вася покупает \(1000000000\) шоколадок и \(1000000000000000000\) получает в подарок. В итоге он получает \(1000000001000000000\) шоколадок.

A. Вова и поезд

математика *1100

Вова собирается поехать на конференцию на поезде. Изначально поезд находится в позиции \(1\), а пункт назначения — позиция \(L\). Скорость поезда равна \(1\) единице длины в минуту (то есть в первую минуту поезд находится в позиции \(1\), во вторую минуту — в позиции \(2\) и так далее).

Также на пути есть фонари. Они расположены в позициях с координатами, делящимися на \(v\) (то есть первый фонарь расположен в позиции \(v\), второй — в позиции \(2v\) и так далее).

Также на пути есть ровно один стоячий поезд, который занимает позиции от \(l\) до \(r\) включительно.

Вова может увидеть фонарь на позиции \(p\), если \(p\) делится на \(v\) и эту позицию не занимает стоячий поезд (\(p \not\in [l; r]\)). Таким образом, если точка, в которой есть фонарь, является одной из точек, принадлежащих стоячему поезду, Вова не сможет увидеть этот фонарь.

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

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

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

Далее следуют \(t\) строк. \(i\)-я строка содержит четыре целых числа \(L_i, v_i, l_i, r_i\) (\(1 \le L, v \le 10^9\), \(1 \le l \le r \le L\)) — пункт назначения \(i\)-го пути, период появления фонарей и отрезок, занимаемый стоячим поездом.

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

Выведите \(t\) строк. \(i\)-я строка должна содержать одно целое число — ответ на \(i\)-й запрос.

Примечание

Для первого тестового запроса ответ равен \(3\). Фонари находятся в позициях \(2\), \(4\), \(6\), \(8\) и \(10\), но Вова не видит фонари в позициях \(4\) и \(6\) из-за стоячего поезда.

Для второго тестового запроса ответ равен \(0\), потому что есть только один фонарь на позиции \(51\), но в этой позиции также находится стоячий поезд.

Для третьего тестового запроса ответ равен \(1134\), потому что всего есть \(1234\) фонарей, но Вова не может видеть фонари с позиции \(100\) по позицию \(199\) включительно.

Для четвертого тестового запроса ответ равен \(0\), потому что стоячий поезд покрывает весь путь.

E. Сумма AND двоичных чисел

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

Задано два длинных двоичных натуральных числа \(a\) и \(b\) длин \(n\) и \(m\) соответственно. Вы собираетесь повторять следующий процесс: если \(b > 0\), тогда добавить к ответу значение \(a~ \&~ b\) и поделить \(b\) на \(2\) с округлением вниз (то есть удалить последнюю цифру \(b\)) и продолжить процесс, иначе прекратить процесс.

Значение \(a~ \&~ b\) означает побитовый AND \(a\) и \(b\). Ваша задача — посчитать ответ по модулю \(998244353\).

Заметим, что вам необходимо добавлять значение \(a~ \&~ b\) к ответу в десятичном представлении, не в двоичном. Таким образом, ваша задача заключается в том, чтобы посчитать ответ в десятичном представлении. Например, если \(a = 1010_2~ (10_{10})\) и \(b = 1000_2~ (8_{10})\), тогда значение \(a~ \&~ b\) будет равно \(8\), а не \(1000\).

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

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

Вторая строка входных данных содержит одно длинное число \(a\). Гарантируется, что это число состоит ровно из \(n\) нулей и единиц, а первая цифра всегда равна \(1\).

Третья строка входных данных содержит одно длинное число \(b\). Гарантируется, что это число состоит ровно из \(m\) нулей и единиц, а первая цифра всегда равна \(1\).

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

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

Примечание

Алгоритм для первого тестового примера:

  1. добавить к ответу \(1010_2~ \&~ 1101_2 = 1000_2 = 8_{10}\) и присвоить \(b := 110\);
  2. добавить к ответу \(1010_2~ \&~ 110_2 = 10_2 = 2_{10}\) и присвоить \(b := 11\);
  3. добавить к ответу \(1010_2~ \&~ 11_2 = 10_2 = 2_{10}\) и присвоить \(b := 1\);
  4. добавить к ответу \(1010_2~ \&~ 1_2 = 0_2 = 0_{10}\) и присвоить \(b := 0\).

Таким образом, ответ равен \(8 + 2 + 2 + 0 = 12\).

Алгоритм для второго тестового примера:

  1. добавить к ответу \(1001_2~ \&~ 10101_2 = 1_2 = 1_{10}\) и присвоить \(b := 1010\);
  2. добавить к ответу \(1001_2~ \&~ 1010_2 = 1000_2 = 8_{10}\) и присвоить \(b := 101\);
  3. добавить к ответу \(1001_2~ \&~ 101_2 = 1_2 = 1_{10}\) и присвоить \(b := 10\);
  4. добавить к ответу \(1001_2~ \&~ 10_2 = 0_2 = 0_{10}\) и присвоить \(b := 1\);
  5. добавить к ответу \(1001_2~ \&~ 1_2 = 1_2 = 1_{10}\) и присвоить \(b := 0\).

Таким образом, ответ равен \(1 + 8 + 1 + 0 + 1 = 11\).

D. Компьютерная игра

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

Ваня играет в компьютерную игру. В ней есть \(n\) квестов. Каждый из квестов можно один раз улучшить, после этого награда за его выполнение увеличится. У каждого квеста есть \(3\) характеристики: \(a_{i}\), \(b_{i}\), \(p_{i}\). Это награда за выполнение квеста до улучшения, награда за выполнение квеста после его улучшения (\(a_{i} < b_{i}\)) и вероятность успешно выполнить этот квест.

Каждую секунду Ваня может попытаться выполнить любой квест, и выполнит его с вероятностью \(p_{i}\). В этом случае Ваня получит вознаграждение за него и возможность улучшить один любой квест (не обязательно тот, который он выполнил), в противном случае он не получит ничего. После выполнения квесты не исчезают.

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

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

В первой строке находятся \(2\) числа \(n\) (\( 1 \le n \le 10^{5}\)) и \(t\) (\( 1 \le t \le 10^{10}\)) — количество квестов и общее время.

В последующих \(n\) содержится описание квестов: каждая строка содержит \(3\) числа \(a_{i}\), \(b_{i}\), \(p_{i}\) (\(1 \le a_{i} < b_{i} \le 10^{8}\), \(0 < p_{i} < 1\)) — награда за выполнение квеста до улучшения, награда за выполнение квеста после его улучшения и вероятность выполнить этот квест. Числа \(a_{i}\), \(b_{i}\) целые. Все вероятности даны с точностью не более \(9\) знаков после запятой.

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

Выведите искомое математическое ожидание.

Ваш ответ будет засчитан, если относительная или абсолютная погрешность не будет превышать \(10^{-6}\). Формально если \(a\) — ваш ответ, а \(b\) — ответ жюри, то он будет засчитан если \(\frac{|a-b|}{max⁡(b, \,\, 1)} \le 10^{-6}\).

E. Ранг случайного леса

Деревья дп математика Паросочетания *2800

Определим ранг неориентированного графа как ранг его матрицы смежности в \(\mathbb{R}^{n \times n}\).

Дано дерево. Каждое из рёбер дерева исчезает с вероятностью \(1/2\) независимо от остальных. Пусть \(E\) — математическое ожидание ранга полученного леса. Найдите остаток от деления \(E \cdot 2^{n-1}\) на \(998244353\) (несложно показать, что \(E \cdot 2^{n-1}\) — целое число).

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

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

В следующих \(n-1\) строках описаны рёбра дерева. Каждое ребро описывается парой \(u\) \(v\) (\(1 \le u, \,\, v \le n; \,\, u \ne v\)) вершин, которые оно соединяет.

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

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

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

A. День рождения

математика *1400

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

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

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

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

В единственной строке содержатся 4 числа \(N\), \(M\), \(K\), \(L\) (\(1 \le K \le N \le 10^{18}\); \(1 \le M, \,\, L \le 10^{18}\)) — общее количество коллекционных монет; число друзей Вани; количество коллекционных монет, которые уже есть у Вани; количество монет, которые должны быть новыми в коллекции.

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

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

Примечание

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

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

B. НОК

математика теория чисел *1200

У Вани есть число \(b\). Он перебирает все натуральные числа \(a\) от \(1\) до \(10^{18}\), и выписывает для каждого \(a\) число \(\frac{[a, \,\, b]}{a}\) на доску. Здесь за \([a, \,\, b]\) обозначается наименьшее общее кратное чисел \(a\) и \(b\). Ваня — ленивый человек, поэтому ему быстро надоело это занятие, но ему интересно, сколько бы на доске получилось различных чисел. Помогите Ване узнать количество различных чисел на доске.

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

Единственная строка ввода содержит одно число \(b\) \((1 \le b \le 10^{10})\).

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

Выведите одно число: количество различных значений выражения из условия.

Примечание

В первом примере \([a, \,\, 1] = a\), следовательно \(\frac{[a, \,\, b]}{a}\) всегда равно \(1\).

Во втором примере \([a, \,\, 2]\) может быть равно \(a\) или \(2 \cdot a\), в зависимости от четности \(a\). \(\frac{[a, \,\, b]}{a}\) может принимать два значения: \(1\) и \(2\).

B. Баскетбольная команда

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

Мистер Вафа учится в German University in Cairo (GUC) и любит играть в баскетбол. Он был приятно удивлен, когда узнал, что GUC планирует принять участие в Ежегодном Соревновании по Баскетболу (Annual Basketball Competition, ABC).

Для соревнования будет собрана команда из n игроков — студентов GUC. Игроки будут случайным образом выбраны среди студентов играющих в баскетбол. Однако, в команде могут быть игроки с разных факультетов. Всего в GUC m факультетов, пронумерованных числами от 1 до m. Мистер Вафа учится на факультете номер h. Для каждого факультета i Мистер Вафа знает число si — сколько студентов с него играют в баскетбол, и соответственно могут оказаться членами команды GUC.

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

Учтите, что все составы команды, в которых есть Мистер Вафа, могут быть выбраны с равной вероятностью. Считайте, что все студенты отличаются друг от друга.

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

В первой строке записаны три целых числа n, m и h (1 ≤ n ≤ 100, 1 ≤ m ≤ 1000, 1 ≤ h ≤ m) — число игроков в команде GUC, число факультетов в GUC, и номер факультета на котором учится Мистер Вафа, соответственно.

На следующей строке записано m целых чисел si (1 ≤ si ≤ 100), разделенных пробелами: количества играющих в баскетбол студентов на каждом факультете соответственно. Учтите, что число sh включает самого Мистера Вафу.

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

Выведите вероятность того, что кроме Мистера Вафы в команде GUC будет хотя бы один студент с его факультета. Если в GUC не хватит игроков чтобы выставить команду на ABC, выведите -1. Ответ считается верным, если абсолютная или относительная погрешность не превосходит 10 - 6.

Примечание

В первом примере все три игрока в баскетбол — два с факультета 1 и один с факультета 2 — будут членами команды GUC. Так как оба игрока с первого факультета будут членами команды, у Вафы гарантированно будет партнер по команде с его факультета.

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

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

B. Вася и книги

математика реализация *1000

У Васи есть \(n\) книг, пронумерованных от \(1\) до \(n\), сложенных в стопку. Самая верхняя книга имеет номер \(a_1\), следующая за ней имеет номер \(a_2\), и так далее. Самая нижняя книга имеет номер \(a_n\). Все книги имеют различные номера.

Вася хочет переложить все книги в рюкзак за \(n\) шагов. На \(i\)-м шаге он хочет переложить в рюкзак книгу с номером \(b_i\). Если книга с номером \(b_i\) есть в стопке — он перекладывает эту книгу и все книги, лежащие над книгой \(b_i\), иначе переходит к следующему шагу. Например, если книги лежат в порядке \([1, 2, 3]\) (книга \(1\) лежит наверху), а Вася перекладывает книги в порядке \([2, 1, 3]\), то на первом шаге он переложит две книги (с номерами \(1\) и \(2\)), на втором — ни одной (так как книги \(1\) уже нет в стопке), а на третьем — одну (с номером \(3\)). Обратите внимание, что числа \(b_1, b_2, \dots, b_n\) различны.

Помогите Васе! Сообщите ему, сколько книг он переложит в рюкзак на каждом шаге.

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

Первая строка содержит число \(n~(1 \le n \le 2 \cdot 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)\) — порядок шагов, сделанных Васей.

Гарантируется, что все числа \(a_1 \dots a_n\) различны, и что все числа \(b_1 \dots b_n\) различны.

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

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

Примечание

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

Во втором тестовом примере на первом шаге Вася переложит три книги с номерами \([3, 1, 4]\). После этого в стопке останутся две книги \(2\) и \(5\) (книга \(2\) будет лежать на книге \(5\)). На втором шаге Вася переложит две книги с номерами \(2\) и \(5\). После этого в стопке не останется книг, и в каждый из последующих шагов Вася не переложит ни одной книги.

E. Сумма на отрезке

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

Задано два целых числа \(l\) и \(r\) (\(l \le r\)). Ваша задача — посчитать сумму чисел от \(l\) до \(r\) (включая \(l\) и \(r\)) таких, что каждое число содержит не более \(k\) различных цифр, и вывести эту сумму по модулю \(998244353\).

Например, если \(k = 1\), тогда вам необходимо посчитать все числа от \(l\) до \(r\) такие, что каждое число содержит только одинаковые цифры. Для \(l = 10, r = 50\) ответ равен \(11 + 22 + 33 + 44 = 110\).

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

Единственная строка входных данных содержит три целых числа \(l\), \(r\) и \(k\) (\(1 \le l \le r < 10^{18}, 1 \le k \le 10\)) — границы отрезка и максимальное количество различных цифр.

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

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

Примечание

В первом тестовом примере ответом является сумма чисел от \(l\) до \(r\), которая равна \(\frac{50 \cdot 51}{2} - \frac{9 \cdot 10}{2} = 1230\). Этот пример также разобран в условии задачи, но для \(k = 1\).

Во втором тестовом примере ответом является просто сумма чисел от \(l\) до \(r\), которая равна \(\frac{2345 \cdot 2346}{2} = 2750685\).

В третьем тестовом примере ответ равен \(101 + 110 + 111 + 112 + 113 + 114 + 115 + 116 + 117 + 118 + 119 + 121 + 122 + 131 + 133 + 141 + 144 + 151 = 2189\).

A. Королевский забег

математика реализация *800

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

В клетке с координатами \((1,1)\) уже тысячу лет сидит белый король, а в клетке с координатами \((n,n)\) сидит чёрный король. Они бы сидели так и дальше, но тут в клетку с координатами \((x,y)\) упала красивая монетка...

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

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

Кто первым добежит до монетки, тот и победит. То есть победит тот, кто первым окажется в клетке с координатами \((x,y)\).

Напомним, что король — это такая шахматная фигура, которая может двигаться на одну клетку во все стороны, то есть, если король стоит в клетке \((a,b)\), то за один ход он может перейти из \((a,b)\) в клетки \((a + 1,b)\), \((a - 1,b)\), \((a,b + 1)\), \((a,b - 1)\), \((a + 1,b - 1)\), \((a + 1,b + 1)\), \((a - 1,b - 1)\), \((a - 1,b + 1)\). Выходить за пределы поля запрещено.

Определите цвет короля, который первым окажется в клетке с координатами \((x,y)\), если первым ходит белый король.

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^{18}\)) — длина стороны шахматного поля.

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

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

В единственной строке выведите «White» (без кавычек), если победит белый король, или «Black» (без кавычек), если победит чёрный король.

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

Примечание

Пример гонки в первом примере, где белый и чёрный короли действуют оптимально:

  1. Белый король переходит из клетки \((1,1)\) в \((2,2)\).
  2. Чёрный король переходит из клетки \((4,4)\) в \((3,3)\).
  3. Белый король переходит из клетки \((2,2)\) в \((2,3)\). Именно в эту клетку упала монетка, значит, белый король выиграл.

Пример гонки во втором примере, где белый и чёрный короли действуют оптимально:

  1. Белый король переходит из клетки \((1,1)\) в клетку \((2,2)\).
  2. Чёрный король переходит из клетки \((5,5)\) в клетку \((4,4)\).
  3. Белый король переходит из клетки \((2,2)\) в клетку \((3,3)\).
  4. Чёрный король переходит из клетки \((4,4)\) в \((3,5)\). В этой клетке лежит монетка, значит, чёрный король выиграл.

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

B. Вычитание делителя

математика реализация теория чисел *1200

Задано целое число \(n\). К нему применяется следующий алгоритм:

  1. если \(n = 0\), то завершить алгоритм;
  2. найти наименьший простой делитель \(d\) числа \(n\);
  3. вычесть \(d\) из \(n\) и перейти к шагу \(1\).

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

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

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

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

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

Примечание

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

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

C. Мемная задача

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

Попробуйте угадать условие задачи по картинке:

Вам задано целое неотрицательное число \(d\). Вам нужно найти два неотрицательных вещественных числа \(a\) и \(b\), такие, что \(a + b = d\) и \(a \cdot b = d\).

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

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^3\)) — количество тестовых примеров.

Каждый тестовый пример содержит целое неотрицательное число \(d\) \((0 \le d \le 10^3)\).

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

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

Если на \(i\)-й тестовый пример существует ответ, сначала выведите «Y», а затем сами числа \(a\) и \(b\).

Если на \(i\)-й тестовый пример не существует ответа, просто выведите «N».

Ваш ответ будет считаться корректным, если \(|(a + b) - a \cdot b| \le 10^{-6}\) и \(|(a + b) - d| \le 10^{-6}\).

A. Прыгающая лягушка

математика *800

Сейчас лягушка стоит в позиции \(0\) на координатной оси \(Ox\). Она прыгает по следующему алгоритму: первый прыжок — на \(a\) вправо, второй прыжок — на \(b\) влево, третий прыжок — на \(a\) вправо, четвёртый прыжок — на \(b\) влево, и так далее.

Формально:

  • если лягушка уже прыгнула четное число раз (перед текущим прыжком), то она прыгает от ее текущей позиции \(x\) в позицию \(x+a\);
  • иначе она прыгает от ее текущей позиции \(x\) в позицию \(x-b\).

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

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

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

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество запросов.

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

Запрос описывается в виде трех целых чисел \(a, b, k\) (\(1 \le a, b, k \le 10^9\)) — длины прыжков двух типов и количество прыжков соответственно.

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

Выведите \(t\) целых чисел. \(i\)-е число должно быть равно ответу на \(i\)-й запрос.

Примечание

В первом запросе лягушка прыгает на \(5\) позиций вправо, на \(2\) влево и еще раз на \(5\) позиций вправо, таким образом, ответ равен \(5 - 2 + 5 = 8\).

Во втором запросе лягушка прыгает на \(100\) позиций вправо, на \(1\) влево, на \(100\) вправо и еще раз на \(1\) влево, таким образом, ответ равен \(100 - 1 + 100 - 1 = 198\).

В третьем запросе ответ равен \(1 - 10 + 1 - 10 + 1 = -17\).

В третьем запросе ответ равен \(10^9 - 1 + 10^9 - 1 + 10^9 - 1 = 2999999997\).

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

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

B. Типы данных

математика сортировки *1400

Туфтуф, младший брат Таттаха, недавно начал изучать программирование. Его старший брат — очень хороший программист, и заветная мечта Туфтуфа — перегнать его. Будучи студентом в GUC Туфтуф учится писать программы на языке Gava. Сегодня Туфтуф познакомился с беззнаковыми целыми типами данных.

В языке Gava есть n беззнаковых целых типов данных. Их размеры (в битах): a1, a2, ... an. Тип данных номер i имеет размер ai бит, то есть в него помещается любое число от 0 до 2ai - 1 включительно.

Туфтуф думает начать изучать другой язык программирования вместо Gava. Он решил, что бросит Gava, если выяснится, что существует такое целое число x, что x помещается в тип iai бит), но при этом x·x не помещается в другой тип jaj бит), такой что ai < aj.

Зная все ai определите, бросит ли Туфтуф изучать Gava.

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

В первой строке записано целое число n (2 ≤ n ≤ 105) — количество беззнаковых целых типов в языке Gava. На второй строке через пробел записано n целых чисел ai (1 ≤ ai ≤ 109) — размеры типов в битах. Размеры некоторых типов данных могут совпадать.

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

Выведите «YES» если Туфтуф бросит Gava и «NO» в противном случае.

Примечание

Во втором примере x = 7 (1112) помещается в 3 бита, но x2 = 49 (1100012) не помещается в 4 бита.

A. Петя и оригами

математика *800

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

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

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

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

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

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

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

Примечание

В первом примере нужно \(2\) блокнота с листами красного цвета, \(3\) блокнота с листами зеленого цвета и \(5\) блокнотов с листами синего цвета.

Во втором примере нам нужно \(5\) блокнотов с листами красного цвета, \(13\) блокнотов с листами зеленого цвета и \(20\) блокнотов с листами синего цвета.

B. Маргарита и лучший подарок

математика *900

Маленькая девочка Маргарита — большая любительница спортивного программирования. Особенно она любит задачи про массивы и запросы к ним.

Недавно ей подарили массив \(a\) размером в \(10^9\) элементов, который заполнен следующим образом:

  • \(a_1 = -1\)
  • \(a_2 = 2\)
  • \(a_3 = -3\)
  • \(a_4 = 4\)
  • \(a_5 = -5\)
  • И так далее...

То есть значение \(i\)-го элемента массива \(a\) вычисляется по формуле \(a_i = i \cdot (-1)^i\).

Она сразу же придумала \(q\) запросов к этому массиву. Каждый запрос задаётся двумя числами: \(l\) и \(r\). Ответом на запрос является сумма всех элементов массива на позициях от \(l\) до \(r\) включительно.

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

Помогите ей найти ответы!

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

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

Каждая из следующих \(q\) строк содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 10^9\)) — описания запросов.

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

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

Примечание

В первом запросе нужно найти сумму элементов массива от позиции \(1\) до позиции \(3\). Эта сумма равна \(a_1 + a_2 + a_3 = -1 + 2 -3 = -2\).

Во втором запросе нужно найти сумму элементов массива от позиции \(2\) до позиции \(5\). Эта сумма равна \(a_2 + a_3 + a_4 + a_5 = 2 -3 + 4 - 5 = -2\).

В третьем запросе нужно найти сумму элементов массива от позиции \(5\) до позиции \(5\). Эта сумма равна \(a_5 = -5\).

В четвёртом запросе нужно найти сумму элементов массива от позиции \(4\) до позиции \(4\). Эта сумма равна \(a_4 = 4\).

В пятом запросе нужно найти сумму элементов массива от позиции \(2\) до позиции \(3\). Эта сумма равна \(a_2 + a_3 = 2 - 3 = -1\).

D. Оля и магический квадрат

Конструктив математика реализация *2000

Недавно Оля получила магический квадрат размером \(2^n\times 2^n\).

Её сестре кажется, что один квадрат — это скучно, поэтому она попросила Олю, чтобы та выполнила ровно \(k\) операций разбиения.

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

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

Условие счастья Оли будет соблюдено, если выполняется следующее утверждение:

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

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

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

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

Каждая из следующих \(t\) строк содержит два целых числа \(n_i\) и \(k_i\) (\(1 \le n_i \le 10^9, 1 \le k_i \le 10^{18}\)) — описание \(i\)-го теста, которое означает, что исходный квадрат Оли имеет размер \(2^{n_i}\times 2^{n_i}\) и сестра Оли просит сделать ровно \(k_i\) операций разбиения.

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

Выведите \(t\) строк, где в \(i\)-й строке надо вывести «YES» если в \(i\)-м тесте можно выполнить \(k_i\) операций разбиения так, чтобы условие счастья Оли соблюдалось или «NO» в противном случае. Если вы вывели «YES», то также выведите \(log_2\) от длины стороны квадратиков, по которым можно будет построить путь из левого нижнего квадратика в правый верхний.

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

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

Примечание

В каждой из иллюстраций изображения отображаются в порядке, в котором Оля применяла операции. Недавно созданные квадраты выделены красным цветом.

В первом тесте Оля может применять операции разбиения в следующем порядке:

Оля применила одну операцию к единственному существующему квадрату.

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

Размер стороны квадратиков на этом пути равен \(1\). \(log_2(1) = 0\).

Во втором тесте Оля может применять операции разбиения в следующем порядке:

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

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

Размер стороны квадратиков на этом пути равен \(2\). \(log_2(2) = 1\).

В третьем примере Оля за \(5\) операций приведет квадратик к следующему виду:

Поскольку ей осталось ещё выполнить \(7\) операций разбиения, а к квадратам со стороной равной \(1\) их применять нельзя, значит Оля не сможет больше ничего сделать и ответ «NO».

A. Определенная игра

Конструктив математика *800

Chouti участвовал в соревновании по программированию. Но, после того, как он решил все задачи, он устал, и решил придумать какие-нибудь игры.

Он придумал следующую игру. У игрока есть целое положительное число \(n\). Изначально значение \(n\) равно \(v\) и игрок может применить следующую операцию произвольное число раз (возможно ни разу): выбрать положительное целое число \(x\), что \(x<n\) и \(x\) не является делителем \(n\), а затем вычесть \(x\) из \(n\). Цель игрока минимизировать итоговое значение числа \(n\).

Вскоре, Chouti осознал, что игра очень проста. А cможете ли вы с ней справиться?

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

Первое строка входного файла содержит одно целое число: \(v\) (\(1 \le v \le 10^9\)), начальное значение \(n\).

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

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

Примечание

В первом примере, игрок может выбрать \(x=3\) на первом ходу, тогда \(n\) станет \(5\). Затем он может выбрать \(x=4\) на втором ходу, чтобы получить \(n=1\) в итоге. Есть также другие способы достичь минимума. Но например он не может использовать \(x=2\) на первом ходу, потому что \(2\) делит \(8\).

Во втором примере, так как \(n=1\) изначально, игрок не может ничего сделать.

C. Цветные кирпичики

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

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

На земле выложен ряд из \(n\) кирпичей. У Chouti есть под рукой \(m\) ведер с красками разных цветов, поэтому он покрасил каждый кирпич в один из этих \(m\) цветов.

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

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

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

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n,m \leq 2000, 0 \leq k \leq n-1\)) — количество кирпичей, цветов, и кирпичей, у которых цвет отличается цвет от кирпича слева, соответственно.

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

Выведите одно целое число — количество способов покрасить кирпичи по модулю \(998\,244\,353\).

Примечание

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

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

E. Недостающие числа

Бинарный поиск жадные алгоритмы Конструктив математика теория чисел *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\) является другим возможным ответом.

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

G. Сортировка слиянием наносит ответный удар

математика Теория вероятностей *3200

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

Chouti нашёл свою идею глупой, потому что, очевидно, эта «сортировка слиянием» иногда не может отсортировать массив правильно. Тем не менее, Chouti теперь хочет оценить, насколько его «сортировка слиянием» хороша. В частности, Chouti хочет узнать для случайной перестановки \(a\) чисел \(1, 2, \ldots, n\) математичекое ожидание числа инверсий после вызова MergeSort(a, 1, n, k).

Можно доказать, что математическое ожидание рационально. Для заданного простого числа \(q\) допустим, что ответ может быть представлен как \(\frac{u}{d}\) где \(gcd(u,d)=1\). Выведите целое число \(r\) удовлетворяющее \(0 \le r<q\) и \(rd \equiv u \pmod q\). Можно доказать, что такое \(r\) существует и уникально.

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

В единственной строке записаны три целых числа \(n, k, q\) (\(1 \leq n, k \leq 10^5, 10^8 \leq q \leq 10^9\), \(q\) — простое).

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

В единственной строке выведите число \(r\).

Примечание

В первом примере все возможные перестановки: \([1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]\).

При \(k=1\), MergeSort(a, 1, n, k) вернет изначальную перстановку. Поэтому ответ равен \(9/6=3/2\), и вы должны вывести \(499122178\) потому что \(499122178 \times 2 \equiv 3 \pmod {998244353}\).

Во втором примере все возможные перестановки это \([1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]\) и соответствующие результаты вызова MergeSort(a, 1, n, k) это \([1,2,3],[1,2,3],[2,1,3],[1,2,3],[2,3,1],[1,3,2]\) соответственно. Поэтому ответ равен \(4/6=2/3\), и вы должны вывести \(665496236\) потому что \(665496236 \times 3 \equiv 2 \pmod {998244353}\).

A. Вася и книга

математика реализация *1200

Вася читает электронную книгу из \(n\) страниц, пронумерованных от \(1\) до \(n\). Сейчас он находится на странице с номером \(x\) и хочет попасть на страницу с номером \(y\). За одно действие он может пролистнуть вперед или назад \(d\) страниц, при этом он не может выйти за пределы книги. Например, если в книге \(10\) страниц и \(d = 3\), то с первой страницы Вася может попасть на первую или четвертую, со второй — на первую или пятую страницы, с шестой — на третью или девятую, с восьмой — на десятую или пятую.

Сообщите Васе минимальное количество действий, необходимое для попадания на страницу с номером \(y\).

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

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^3\)) — количество тестовых примеров.

Каждый тестовый пример содержит четыре целых числа \(n\), \(x\), \(y\), \(d\) (\(1\le n, d \le 10^9\), \(1 \le x, y \le n\)) — количество страниц в книге, номер стартовой страницы, номер конечной страницы и количество страниц, которые Вася может пролистнуть за одно действие.

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

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

Если Вася может попасть со страницы \(x\) на страницу \(y\), выведите минимальное количество действий для этого. Иначе выведите \(-1\).

Примечание

В первом тестовом примере оптимальная последовательность выглядит следующим образом: \(4 \rightarrow 2 \rightarrow 1 \rightarrow 3 \rightarrow 5\).

Во втором тестовом примере Вася может попасть на страницы \(1\) и \(5\).

В третьем тестовом примере оптимальная последовательность выглядит следующим образом: \(4 \rightarrow 7 \rightarrow 10 \rightarrow 13 \rightarrow 16 \rightarrow 19\).

B. Div на Mod

математика *1100

Вася любит решать уравнения. Сегодня он хочет решить уравнение \((x~\mathrm{div}~k) \cdot (x \bmod k) = n\), где \(\mathrm{div}\) и \(\mathrm{mod}\) означают целочисленное деление и операцию взятия по модулю (см. Примечания ниже для точного определения). В этом уравнении \(k\) и \(n\) являются целыми положительными параметрами, а \(x\) — неизвестным целым положительным числом. Если решений несколько, то Вася хочет найти наименьшее из возможных \(x\). Вы можете ему помочь?

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^6\), \(2 \leq k \leq 1000\)).

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

Выведите единственное целое число \(x\) — наименьшее положительное целое решение \((x~\mathrm{div}~k) \cdot (x \bmod k) = n\). Гарантируется, что это уравнение имеет хотя бы одно целое положительное решение.

Примечание

Результат целочисленного деления \(a~\mathrm{div}~b\) равен наибольшему целому числу \(c\) такому, что \(b \cdot c \leq a\). \(a\) по модулю \(b\) (сокращенно \(a \bmod b\)) — единственное целое число \(c\) такое, что \(0 \leq c < b\) и \(a - c\) делится на \(b\).

В первом примере \(11~\mathrm{div}~3 = 3\) и \(11 \bmod 3 = 2\). Поскольку \(3 \cdot 2 = 6\), то \(x = 11\) это решение уравнения \((x~\mathrm{div}~3) \cdot (x \bmod 3) = 6\). Можно заметить, что \(19\) — это единственное другое решение этого уравнения, поэтому \(11\) будет наименьшим.

C. Соедините тройку

математика реализация *1600

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

Три друга, Алиса, Боб и Чарли собираются купить три отдельных участка земли \(A, B, C\) в лесу. Изначально все участки в лесу (включая участки \(A, B, C\)) покрыты деревьями. Друзья хотят навещать друг друга, поэтому они хотят очистить некоторые участки от деревьев. После очистки, можно будет добраться до любого из участков \(A, B, C\) от любого другого, перемещаясь по соседним очищенным участкам. Два земельных участка являются соседними, если они имеют общую сторону.

Например, \(A=(0,0)\), \(B=(1,1)\), \(C=(2,2)\). Необходимо очистить как минимум \(5\) участков, чтобы соединить друзей. Эти участки выделены серым цветом.

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

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

Первая строка содержит два целых числа \(x_A\) и \(y_A\) — координаты участка \(A\) (\(0 \leq x_A, y_A \leq 1000\)). Следующие две строки описывают координаты \((x_B, y_B)\) и \((x_C, y_C)\) участков \(B\) и \(C\), соответственно, в таком же формате (\(0 \leq x_B, y_B, x_C, y_C \leq 1000\)). Гарантируется, что все три участка различны.

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

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

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

Примечание

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

Второй пример изображен на этой картинке:

F. Лесные пожары

математика *3500

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

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

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

Теперь они хотят высчитать разрушительную мощь пожара. Пусть \(val_{x, y}\) будет секундой, в которую дерево в ячейке \((x, y)\) загорелось. Разрушительная мощь — это сумма \(val_{x, y}\) по всем \((x, y)\) сгоревших деревьев.

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

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

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

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

В каждой из следующих \(n\) строк записаны по два целых числа \(x\) и \(y\) (\(-10^8 \le x, y \le 10^8\)) — позиции деревьев, которые изначально загорелись.

Очевидно, позиция клетки \((0, 0)\) на этой сетке и направления осей не играют роли, так как сама сетка бесконечна, и ответ не зависит от этой информации.

Гарантируется, что все заданные позиции попарно различны.

Сетка бесконечная, поэтому пожар не останавливается, как только он достигнет \(-10^8\) или \(10^8\). Он продолжается и за эти границы.

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

Выведите единственное целое число — сумма \(val_{x, y}\) по всем \((x, y)\) сгоревших деревьев по модулю \(998244353\).

Примечание

Здесь представлена визуализация первых трех примеров. Серые клетки имеют \(val = 0\), оранжевые — \(val = 1\) и красные — \(val = 2\).

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.

E. Счастливый отрезок

математика Перебор *2700

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Однажды Пете попался отрезок чисел [a, a + l - 1]. Пусть F(x) — количество счастливых цифр числа x. Найдите минимальное b (a < b) такое, что F(a) = F(b), F(a + 1) = F(b + 1), ..., F(a + l - 1) = F(b + l - 1).

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

В единственной строке задано два целых числа a и l (1 ≤ a, l ≤ 109) — первое число и длина отрезка, соответственно.

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

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

Примечание

Считайте, что [a, b] обозначает отрезок целых чисел, включающий границы. То есть

A. Новый год и рождественский орнамент

математика Перебор реализация *800

Алиса и Боб украшают рождественскую ёлку.

Алиса хочет использовать только \(3\) вида украшений на ёлке: желтые, синие и красные. У них есть \(y\) жёлтых украшений, \(b\) синих украшений и \(r\) красных украшений.

По мнению Боба рождественская ёлка красивая, если:

  • синих украшений больше жёлтых ровно на \(1\) и
  • красных украшений больше синих ровно на \(1\).

То есть, если у них есть \(8\) жёлтых украшений, \(13\) синих украшений и \(9\) красных украшений, то можно выбрать \(4\) жёлтых, \(5\) синих и \(6\) красных украшений (\(5=4+1\) и \(6=5+1\)).

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

Два абзаца выше был описан пример, в котором также можно выбрать \(7\) жёлтых, \(8\) синих и \(9\) красных украшений. Если мы это сделаем, то мы получим \(7+8+9=24\) украшений. Это максимально возможное количество.

Поскольку Алиса и Боб заняты подготовкой еды на Канун Нового Года, они просят вас найти максимальное количество украшений, которыми можно украсить красивую рождественскую ёлку!

Гарантируется, что можно выбрать как минимум \(6\) (\(1+2+3=6\)) украшений.

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

Единственная строка содержит три целых числа \(y\), \(b\), \(r\) (\(1 \leq y \leq 100\), \(2 \leq b \leq 100\), \(3 \leq r \leq 100\)) — количество жёлтых, синих и красных украшений.

Гарантируется, что можно выбрать как минимум \(6\) (\(1+2+3=6\)) украшений.

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

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

Примечание

В первом примере ответ \(7+8+9=24\).

Во втором примере ответ \(2+3+4=9\).

C. Новый год и сферическая передача

математика теория чисел *1400

В кругу сидят \(n\) человек, которые пронумерованы от \(1\) до \(n\) в том порядке, в котором они сидят. То есть для каждого \(i\) от \(1\) до \(n-1\) люди с номерами \(i\) и \(i+1\) являются соседями. Кроме того, люди с номерами \(n\) и \(1\) также являются соседями.

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

Например, если \(n = 6\) и \(k = 4\), то мяч пройдет по игрокам с номерами \([1, 5, 3, 1]\).

Рассмотрим набор всех людей, у которых был мяч. Уровень веселья игры — это сумма номеров всех людей, у которых был мяч. В приведенном выше примере уровень веселья будет \(1 + 5 + 3 = 9\).

Найдите набор возможных уровней веселья для всех вариантов положительного целого числа \(k\). Можно показать, что при ограничениях задачи мяч всегда возвращается к \(1\)-му игроку после конечного числа бросков, и для заданного \(n\) существует не более \(10^5\) возможных уровней веселья.

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

Единственная строка содержит одно целое число \(n\) (\(2 \leq n \leq 10^9\)) — количество игроков, играющих с мячом.

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

Предположим, что множество уровней веселья — \(f_1, f_2, \dots, f_m\).

Выведите в одной строке \(m\) целых чисел, разделенных пробелом, от \(f_1\) до \(f_m\) в возрастающем порядке.

Примечание

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

Во втором примере значения \(1\), \(10\), \(28\), \(64\) и \(136\) можно получить, например, при \(k = 16\), \(8\), \(4\), \(10\) и \(11\), соответственно.

D. Новый год и конкатенация перестановок

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

Пусть \(n\) — целое число. Рассмотрим все перестановки целых чисел от \(1\) до \(n\) в лексикографическом порядке. Объедините их в одну большую последовательность \(p\). Например, если \(n = 3\), то \(p = [1, 2, 3, 1, 3, 2, 2, 1, 3, 2, 3, 1, 3, 1, 2, 3, 2, 1]\). Длина этой последовательности будет \(n \cdot n!\).

Пусть \(1 \leq i \leq j \leq n \cdot n!\) — пара индексов. Мы называем последовательность \((p_i, p_{i+1}, \dots, p_{j-1}, p_j)\) подотрезком \(p\). Его длина определяется как количество элементов, то есть \(j - i + 1\). Его сумма определяется как сумма всех его элементов, то есть \(\sum_{k=i}^j p_k\).

Дано \(n\). Найдите количество подотрезков \(p\) длины \(n\), имеющих сумму \(\frac{n(n+1)}{2}\). Поскольку это число может быть большим, выведите его по модулю \(998244353\) (простое число).

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

Единственная строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)), которое описано в условии задачи.

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

Выведите одно число — количество подотрезков длины \(n\), в которых сумма равна \(\frac{n(n+1)}{2}\), по модулю \(998244353\).

Примечание

В первом примере есть \(16\) подотрезков длины \(3\). В порядке появления это:

\([1, 2, 3]\), \([2, 3, 1]\), \([3, 1, 3]\), \([1, 3, 2]\), \([3, 2, 2]\), \([2, 2, 1]\), \([2, 1, 3]\), \([1, 3, 2]\), \([3, 2, 3]\), \([2, 3, 1]\), \([3, 1, 3]\), \([1, 3, 1]\), \([3, 1, 2]\), \([1, 2, 3]\), \([2, 3, 2]\), \([3, 2, 1]\).

Их суммы равны \(6\), \(6\), \(7\), \(6\), \(7\), \(5\), \(6\), \(6\), \(8\), \(6\), \(7\), \(5\), \(6\), \(6\), \(7\), \(6\). Поскольку \(\frac{n(n+1)}{2} = 6\), то ответ — \(9\).

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\) — друзья Боба, или
  • Боб — друг каждому.

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

G. Новый год и факторизация

интерактив математика теория чисел *3200

Факторизовать числа сложно. RSA Factoring Challenge предлагает \($100\,000\) тому, кто сможет факторизовать RSA-\(1024\), \(1024\)-битное произведение двух простых чисел. До этого времени никому не удалось получить приз. Мы хотим факторизовать \(1024\)-битное число.

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

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

  • + x y, где \(x\) и \(y\) — целые числа между \(0\) и \(n-1\). Возвращает \((x+y) \bmod n\).
  • - x y, где \(x\) и \(y\) — целые числа между \(0\) и \(n-1\). Возвращает \((x-y) \bmod n\).
  • * x y, где \(x\) и \(y\) — целые числа между \(0\) и \(n-1\). Возвращает \((x \cdot y) \bmod n\).
  • / x y, где \(x\) и \(y\) — целые числа между \(0\) и \(n-1\), а \(y\) взаимно простое с \(n\). Возвращает \((x \cdot y^{-1}) \bmod n\), где \(y^{-1}\) — обратное к \(y\) число по модулю \(n\). Если \(y\) не взаимно простое с \(n\), тогда будет возвращено \(-1\).
  • sqrt x, где \(x\) — число между \(0\) и \(n-1\), и оно взаимно просто с \(n\). Возвращает \(y\) такое, что \(y^2 \bmod n = x\). Если есть несколько таких целых чисел, то только одно из них будет возвращено. Если таких чисел нет, то будет возвращено \(-1\).
  • ^ x y, где \(x\) и \(y\) — целые числа между \(0\) и \(n-1\). Возвращает \({x^y \bmod n}\).

Найдите факторизацию \(n\), которое является произведением от \(2\) до \(10\) различных простых чисел типа \(4x + 3\), где \(x\) — целое.

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

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

Единственная строка содержит одно целое число \(n\) (\(21 \leq n \leq 2^{1024}\)). Гарантируется, что \(n\) — произведение от \(2\) до \(10\) различных простых чисел типа \(4x + 3\), где \(x\) — целое.

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

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

Когда вы считаете, что знаете ответ, выведите ! k p_1 p_2 ... p_k, где \(k\) — количество простых множителей \(n\), а \(p_i\) — различные простые множители. Вы можете вывести их в любом порядке.

Входные данные для взломов

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

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

Вторая строка должна содержать \(k\) целых чисел \(p_1, p_2, \dots, p_k\) (\(21 \leq n \leq 2^{1024}\)) — простые делители \(n\). Все простые числа должны быть типа \(4x + 3\) для некоторого целого числа \(x\). Они все должны быть различны.

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

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

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

Количество запросов не ограничено. Однако ваша программа должна (как всегда) завершиться за определенное время. Время работы интерактора также засчитывается в ограничение по времени. Максимальное время выполнения каждого запроса приведено ниже.

  • + x y — до \(1\) мс.
  • - x y — до \(1\) мс.
  • * x y — до \(1\) мс.
  • / x y — до \(350\) мс.
  • sqrt x — до \(80\) мс.
  • ^ x y — до \(350\) мс.

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

Примечание

Мы считываем с первой строки \(n = 21\). Тогда мы делаем:

  1. \((12 + 16) \bmod 21 = 28 \bmod 21 = 7\).
  2. \((6 - 10) \bmod 21 = -4 \bmod 21 = 17\).
  3. \((8 \cdot 15) \bmod 21 = 120 \bmod 21 = 15\).
  4. \((5 \cdot 4^{-1}) \bmod 21 = (5 \cdot 16) \bmod 21 = 80 \bmod 21 = 17\).
  5. Квадратный корень \(16\). Ответ \(11\), поскольку \((11 \cdot 11) \bmod 21 = 121 \bmod 21 = 16\). Обратите внимание, что ответ также может быть равен \(10\).
  6. Квадратный корень \(5\). Нет таких \(x\), что \(x^2 \bmod 21 = 5\), значит вывод \(-1\).
  7. \((6^{12}) \bmod 21 = 2176782336 \bmod 21 = 15\).

Мы пришли к выводу, что наш калькулятор работает, нужно прекратить дурачиться и понять, что \(21 = 3 \cdot 7\).

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

В третьем примере стена уже завершена.

A. Броски кубика

математика *800

У Мишки есть шестигранный игральный кубик. На каждой грани этого кубика записаны натуральные числа \(2\) до \(7\) (все числа на гранях различны, так что это почти обычный игральный кубик).

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

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

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

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

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

Каждая из следующих \(t\) строк содержит по одному целому числу. \(i\)-я строка содержит одно натуральное число \(x_i\) (\(2 \le x_i \le 100\)) — количество очков, которое хочет получить Мишка.

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

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

Примечание

В первом запросе Мишка может бросить кубик один раз и получить \(2\) очка.

Во втором запросе Мишка может бросить кубик \(3\) раза и получить очки \(5\), \(5\) и \(3\) (например).

В третьем запросе Мишка может бросить кубик \(8\) раз и получить \(5\) очков \(7\) раз и \(2\) очка последним броском.

В четвертом запросе Мишка может бросить кубик \(27\) раза и получить \(2\) очка \(11\) раз, \(3\) очка \(6\) раз и \(6\) очков \(10\) раз.

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\)-му запросу из входных данных.

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

B. Удаление подстроки

Комбинаторика математика Строки *1300

Задана строка \(s\) длины \(n\), состоящая только из строчных букв латинского алфавита.

Подстрока строки — это последовательная подпоследовательность этой строки. Таким образом, строка «forces» является подстрокой «codeforces», а строка «coder» — нет.

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

Гарантируется, что в строке \(s\) существует хотя бы два различных символа.

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

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

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

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

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

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

Гарантируется, что в строке \(s\) существует хотя бы два различных символа.

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

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

Примечание

Пусть \(s[l; r]\) — подстрока строки \(s\) с позиции \(l\) по позицию \(r\) включительно.

Тогда в первом тестовом примере вы можете удалить следующие подстроки:

  • \(s[1; 2]\);
  • \(s[1; 3]\);
  • \(s[1; 4]\);
  • \(s[2; 2]\);
  • \(s[2; 3]\);
  • \(s[2; 4]\).

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

  • \(s[1; 4]\);
  • \(s[1; 5]\);
  • \(s[1; 6]\);
  • \(s[1; 7]\);
  • \(s[2; 7]\);
  • \(s[3; 7]\).

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

  • \(s[1; 1]\);
  • \(s[1; 2]\);
  • \(s[2; 2]\).

E. Супер-Бомбардир

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

Хасан любит различные игры, и недавно его заинтересовала игра под названием Супер-Бомбардир. В этой игре (которая довольно похожа на футбол) \(p\) игроков бьют пенальти. Победитель — это тот игрок, который забил наибольшее число голов. В случае ничьи, один из игроков, забивших наибольшее число голов, объявляется победителем равновероятно.

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

Согласно предоставленной информации, он знает, что его счет не меньше \(r\), а сумма счета всех игроков — \(s\).

Поэтому финальное состояние игры может быть записано в виде последовательности \(p\) целых чисел \(a_1, a_2, \dots, a_p\) (\(0 \le a_i\)) — счет игроков. Хасан — игрок номер \(1\), поэтому \(a_1 \ge r\). К тому же \(a_1 + a_2 + \dots + a_p = s\). Два состояния считаются различными, если существует такая позиция \(i\), что значение \(a_i\) различается в этих двух состояниях.

Еще раз, Хасан не знает точного счета игроков (он не знает и свой точный счет). Поэтому он считает, что вероятность получить любое финальное состояние игры одинакова.

Помогите Хасану найти вероятность его победы.

Можно показать, что она может быть представлена в форме \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа и \(Q \ne 0\), \(P \le Q\). Сообщите значение \(P \cdot Q^{-1} \pmod {998244353}\).

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

В единственной строке записаны три целых числа \(p\), \(s\) и \(r\) (\(1 \le p \le 100\), \(0 \le r \le s \le 5000\)) — количество игроков, сумма счета всех игроков и счет Хасана, соответственно.

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

Выведите единственное число — вероятность победы Хасана.

Можно показать, что она может быть представлена в форме \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа и \(Q \ne 0\), \(P \le Q\). Сообщите значение \(P \cdot Q^{-1} \pmod {998244353}\).

Примечание

В первом примере Хасан мог забить \(3\), \(4\), \(5\) или \(6\) голов. Если он забил \(4\) гола или больше, то его счет будет строго больше счета единственного соперника. Если он забил \(3\), то и его соперник забил \(3\), и вероятность победы Хасана равна \(\frac 1 2\). Следовательно, итоговая вероятность победы Хасана равна \(\frac 7 8\).

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

F. Матожидание инверсий

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

Перестановкой размера \(n\) называют такой массив из \(n\) чисел, что все числа от \(1\) до \(n\) встречаются в нем ровно один раз. Инверсией в перестановке \(p\) называют такую пару позиций \((i, j)\), что \(i > j\) и \(a_i < a_j\). Например, перестановка \([4, 1, 3, 2]\) содержит \(4\) инверсии: \((2, 1)\), \((3, 1)\), \((4, 1)\), \((4, 3)\).

Задана перестановка \(p\) размера \(n\). Однако числа на некоторых позициях заменены на \(-1\). Назовем правильной перестановкой такую замену \(-1\) в этой последовательности обратно на числа от \(1\) до \(n\), что полученная последовательность является перестановкой размера \(n\).

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

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

Можно показать, что она может быть представлена в форме \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа и \(Q \ne 0\). Сообщите значение \(P \cdot Q^{-1} \pmod {998244353}\).

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

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

Во второй строке записаны \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(-1 \le p_i \le n\), \(p_i \ne 0\)) — начальная последовательность.

Гарантируется, что все элементы, которые не равны \(-1\), попарно различны.

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

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

Можно показать, что она может быть представлена в форме \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа и \(Q \ne 0\). Сообщите значение \(P \cdot Q^{-1} \pmod {998244353}\).

Примечание

В первом примере возможны две правильные перестановки:

  • \([3, 1, 2]\)\(2\) инверсии;
  • \([3, 2, 1]\)\(3\) инверсии.

Математическое ожидание равно \(\frac{2 \cdot 1 + 3 \cdot 1}{2} = 2.5\).

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

В третьем примере возможны две правильные перестановки — одна с \(0\) инверсий и одна с \(1\) инверсией.

D. Makoto и доска

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

У Makoto есть большая доска, на которой изначально написано целое положительное число \(n\). После этого он ровно \(k\) раз проделает следующую операцию:

Предположим, что число, записанное сейчас на доске, равно \(v\). Тогда он выберет случайным образом один из делителей \(v\) (включая \(1\) и \(v\)) и заменит \(v\) на этот делитель. Так как Makoto использует свой известный генератор случайных чисел (rng) и число \(58\) как сид этого генератора, то все делители имеют одинаковую вероятность выбора.

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

Можно показать, что это число можно представить как \(\frac{P}{Q}\), где \(P\) и \(Q\) взаимно просты и \(Q \not\equiv 0 \pmod{10^9+7}\). Выведите значение \(P \cdot Q^{-1}\) по модулю \(10^9+7\).

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

Единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^{15}\), \(1 \leq k \leq 10^4\)).

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

Выведите одно целое число, математическое ожидание числа записанного на доске после \(k\) операций как \(P \cdot Q^{-1} \pmod{10^9+7}\), где \(P\) и \(Q\) определены выше.

Примечание

В первом примере после одного шага число, записанное на доске, равно \(1\), \(2\), \(3\) или \(6\) с равной вероятностью. Тем самым ответ равен \(\frac{1+2+3+6}{4}=3\).

Во втором примере ответ равен \(1 \cdot \frac{9}{16}+2 \cdot \frac{3}{16}+3 \cdot \frac{3}{16}+6 \cdot \frac{1}{16}=\frac{15}{8}\).

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 символов.

E. Гончар Федор

Бинарный поиск математика реализация теория чисел *3400

Федя обожает задачи на структуры данных. Особенно он любит задачи про запросы различных функций на подотрезках массива. А именно, у Феди был прекрасный массив \(a_1, a_2, \ldots a_n\), а также замечательная структура данных, которая позволяла по данным \(l\) и \(r\), \(1 \le l \le r \le n\), находить такое максимальное положительное целое число \(d\) такое, что \(d\) является делителем каждого из чисел \(a_l\), \(a_{l+1}\), ..., \(a_{r}\).

Федя очень любил свою структуру данных, поэтому он воспользовался ей для каждого отрезка массива \(a\) и выписал полученные числа в массив, который Федя сразу же отсортировал по неубыванию. Полученный массив он, недолго думая, назвал \(b\). Нетрудно заметить, что массив \(b\) состоял из \(n(n+1)/2\) элементов.

После этого Федя взял еще одну замечательную структуру данных, которая позволяла по данным \(l\) и \(r\), \(1 \le l \le r \le n(n+1)/2\), находить сумму \(b_l + b_{l+1} + \ldots + b_r\). Конечно же, Федя сразу же воспользовался второй структурой данных для каждого отрезка массива \(b\), а полученный массив отсортировал по неубыванию. Тщательно выбирая имя, он назвал полученный массив \(c\). Помогите Феде найти нижнюю медиану массива \(c\).

Напомним, что для отсортированного массива длины \(k\) нижней медианой называется элемент, который стоит на позиции \(\lfloor \frac{k + 1}{2} \rfloor\), с учетом того, что элементы массива нумеруются с \(1\). К примеру, нижней медианой массива \((1, 1, 2, 3, 6)\) является число \(2\), а нижней медианой массива \((0, 17, 23, 96)\) — число \(17\).

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

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

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

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

Выведите одно число — нижнюю медиану массива \(c\).

Примечание

В первом примере массив \(b\) примет вид \({3, 3, 6}\), массив \(c\) примет вид \({3, 3, 6, 6, 9, 12}\), а искомая нижняя медиана равна \(6\).

В втором примере массив \(b\) примет вид \({8, 8, 8}\), массив \(c\) примет вид \({8, 8, 8, 16, 16, 24}\), а искомая нижняя медиана равна \(8\).

B. Квадраты и отрезки

Бинарный поиск Конструктив математика *1100

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

Для того, чтобы нарисовать отрезок, София поступает следующим образом. Пусть она хочет нарисовать вертикальный отрезок с координатами концов \((x, y)\) и \((x, y+1)\). Тогда София смотрит, существует ли уже нарисованный отрезок с координатами концов \((x', y)\) и \((x', y+1)\) для какого-нибудь \(x'\). Если такой отрезок существует, то София быстро рисует новый отрезок, используя старый, как ориентир. Если же такого отрезка нет, то Софии приходится брать линейку и долго отмерять новый отрезок. Аналогично София поступает для горизонтальных отрезков, но только теперь она проверяет существование отрезка с такими же координатами \(x\), \(x+1\) и различающейся координатой \(y\).

Например, если Софии надо нарисовать один квадрат, ей придется нарисовать два отрезка с помощью линейки:

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

Если же Софии надо нарисовать два квадрата, ей придется нарисовать три отрезка с помощью линейки:

После этого можно нарисовать оставшиеся четыре отрезка, используя первые в качестве ориентира:

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

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

Единственная строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{9}\)) — количество квадратов, которое София хочет нарисовать.

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

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

A. Возрастающая последовательность

Конструктив математика реализация *900

Последовательность a0, a1, ..., at - 1 называется возрастающей если ai - 1 < ai для всех i: 0 < i < t.

Вам задана последовательность b0, b1, ..., bn - 1 и натуральное число d. Каждый ход выбирается один из элементов последовательности и увеличивается на d. Какое минимальное число ходов необходимо совершить, чтобы сделать последовательность возрастающей?

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

Первая строка входных данных содержит два натуральных числа n и d (2 ≤ n ≤ 2000;1 ≤ d ≤ 106). Вторая строка содержит элементы последовательности b0, b1, ..., bn - 1 (1 ≤ bi ≤ 106). Числа в строках разделяются пробелами.

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

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

B. Джек-попрыгунчик

математика *1600

В настоящее время Джек работает над развитием своих навыков прыгать в длину. Сейчас он находится в точке 0 координатной прямой. Его цель — оказаться в точке x. В целях тренировки его первый прыжок будет иметь длину ровно 1, второй — ровно 2 и т.д. Каждый раз он выбирает прыгнуть ему влево или вправо.

Какое минимальное количество прыжков должен совершить Джек, чтобы попасть в точку x.

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

Входные данные содержат целое число x ( - 109 ≤ x ≤ 109).

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

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

C. NN и обман зрения

Бинарный поиск геометрия математика *1200

NN  — заядлый интернет-пользователь, поэтому он очень много времени проводит в социальных сетях и различных форумах. Как-то раз ему попалась очень занятная картинка, на которой предлагалось сравнить размеры двух центральных кружков:

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

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

Помогите NN найти необходимый радиус внешних кругов для построения картинки.

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

В первой и единственной строке входного файла заданы два целых числа \(n\) и \(r\) (\(3 \leq n \leq 100\), \(1 \leq r \leq 100\)) — количество внешних кругов на картинке и радиус внутреннего круга.

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

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

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

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a-b|}{max(1, |b|)} \le 10^{-6}\).

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

A. Минимальное число

математика *1000

Вам даны \(q\) запросов следующего вида:

По трем заданным числам \(l_i\), \(r_i\) и \(d_i\) найдите минимальное положительное целое число \(x_i\), которое делится на \(d_i\) и не принадлежит отрезку \([l_i, r_i]\).

Можете ли вы ответить на все запросы?

Напоминаем, что \(x\) принадлежит отрезку \([l, r]\), если \(l \le x \le r\).

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

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

Затем идут \(q\) строк, в каждой из которых записан запрос в формате \(l_i\) \(r_i\) \(d_i\) (\(1 \le l_i \le r_i \le 10^9\), \(1 \le d_i \le 10^9\)). \(l_i\), \(r_i\) и \(d_i\) — целые числа.

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

Для каждого запроса выведите одно целое число: ответ на этот запрос.

G. Ошибка сервера перевода

математика матрицы *2300

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

Задан массив \(a_1, a_2, \dots, a_n\), состоящий из целых чисел.

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

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

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

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

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

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

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

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

Примечание

В первом примере \(2\) — максимальный ответ. Если разделить массив на \(\{[5], [5, 7, 2]\}\), то значения исключающего ИЛИ набора только из второго подотрезка будет \(5 \oplus 7 \oplus 2 = 0\). У \(\{[5, 5], [7, 2]\}\) значение исключающего ИЛИ набора только из первого подотрезка будет \(5 \oplus 5 = 0\). Однако, разделение \(\{[5, 5, 7], [2]\}\) приведет к наборам \(\{[5, 5, 7]\}\) со значением \(7\), \(\{[2]\}\) — со значением \(2\) и \(\{[5, 5, 7], [2]\}\) — со значением \(5 \oplus 5 \oplus 7 \oplus 2 = 5\).

Взглянем на какое-нибудь разделение из \(3\) отрезков — \(\{[5], [5, 7], [2]\}\). Оно образует следующие наборы:

  • \(\{[5]\}\), XOR \(5\);
  • \(\{[5, 7]\}\), XOR \(2\);
  • \(\{[5], [5, 7]\}\), XOR \(7\);
  • \(\{[2]\}\), XOR \(2\);
  • \(\{[5], [2]\}\), XOR \(7\);
  • \(\{[5, 7], [2]\}\), XOR \(0\);
  • \(\{[5], [5, 7], [2]\}\), XOR \(5\);

Как можно заметить, набор \(\{[5, 7], [2]\}\) имеет значение \(0\), что неприемлемо. Можете проверить, что и другие разделения размера \(3\) или \(4\) имеют хотя бы один набор со значением \(0\).

Во втором примере не существует подходящего разделения.

В третьем примере массив может быть разделен на \(\{[3], [1], [10]\}\). Ни один набор из подотрезков этого разделения имеет значение \(0\).

A. Разделение последовательности

математика *800

Задана последовательность целых чисел \(1, 2, \dots, n\). Вам необходимо разделить ее на два множества \(A\) и \(B\) таким образом, что каждый элемент принадлежит ровно одному множеству, а значение \(|sum(A) - sum(B)|\) — минимально возможное.

Здесь \(|x|\) — абсолютное значение \(x\), а \(sum(S)\) — сумма элементов множества \(S\).

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

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

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

Выведите одно целое число — минимально возможное значение \(|sum(A) - sum(B)|\), если вы разделите заданную последовательность \(1, 2, \dots, n\) на два множества \(A\) и \(B\).

Примечание

Некоторые (не все) возможные ответы на тестовые примеры:

В первом тестовом примере вы можете разделить заданную последовательность на множества \(A = \{1, 2\}\) and \(B = \{3\}\), таким образом ответ равен \(0\).

Во втором тестовом примере вы можете разделить заданную последовательность на множества \(A = \{1, 3, 4\}\) и \(B = \{2, 5\}\), таким образом ответ равен \(1\).

В третьем тестовом примере вы можете разделить заданную последовательность на множества \(A = \{1, 4, 5\}\) и \(B = \{2, 3, 6\}\), таким образом ответ равен \(1\).

C. Джони Солвинг

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

Сегодня вторник, а значит в команде Джони Солвинг снова идёт спор, кто из них Джони, а кто Солвинг. Для того, чтобы разрешить спор ребята позвали Умника. Умник дал ребятам связный граф из \(n\) вершин без петель и кратных рёбер, такой что степень каждой вершины не менее \(3\), а также дал число \(1 \leq k \leq n\). Так как Джони - громкий дурачок, то он заявил что сможет найти в этом графе простой путь длины хотя бы \(\frac{n}{k}\). Солвинг же, немного подумав, сказал, что сможет найти \(k\) простых по вершинам циклов с представителями, таких что:

  • Длина каждого цикла не менее \(3\).
  • Длина каждого цикла не кратна \(3\).
  • В каждом цикле найдётся представитель - такая вершина, которая отсутствует во всех других выведенных циклах.
Вам нужно помочь ребятам разрешить спор, для этого по заданному графу выведите либо решение для Джони: простой путь длины хотя бы \(\frac{n}{k}\) (\(n\) необязательно делится на \(k\)), либо решение для Солвинга: \(k\) циклов, удовлетворяющих условиям выше. Если отсутствуют решения для обоих ребят - выведите \(-1\).
Входные данные

Первая строка содержит три числа \(n\), \(m\) и \(k\) (\(1 \leq k \leq n \leq 2.5 \cdot 10^5, 1 \leq m \leq 5 \cdot 10^5\))

Последующие \(m\) строк содержат описание рёбер графа в виде пар вершин \(v\), \(u\) (\(1 \leq v, u \leq n\)). Гарантируется, что \(v \neq u\) и что все \(m\) пар различны.

Гарантируется, что степень каждой вершины не менее \(3\)

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

Выведите PATH в первой строке, если решаете задачу для Джони. Во-второй строке выведите кол-во вершин в пути \(c\) (\(c \geq \frac{n}{k}\)), а в третьей через пробел вершины в пути в порядке следования.

Выведите CYCLES в первой строке, если решаете задачу для Солвинга. Далее нужно вывести ровно \(k\) циклов в следующем формате: в первой строке выведите кол-во вершин в цикле \(c\) (\(c \geq 3\)), во второй строке выведите сам цикл в формате аналогичном пути, причем первая вершина во второй строке должна являться представителем

Выведите одно число \(-1\), если отсутствует оба решения. Кол-во выведенных чисел не должно превосходить \(10^6\). Гарантируется, что если существует хотя бы одно из решений (для Джони или Солвинга), то и существует вывод удовлетворяющий ограничению.

E. Цифровая сумма

бпф математика теория чисел *3400

Опрелим цифровую сумму числа \(a\), состоящего из цифр \(a_1, \ldots ,a_k\) и числа \(b\), состоящего из цифр \(b_1, \ldots ,b_k\)(мы добавляем к меньшему по длине числу ведущие нули, чтобы уравнять длину чисел) как число \(s(a,b)\), состоящее из цифр \((a_1+b_1)\mod 10, \ldots ,(a_k+b_k)\mod 10\). Цифровая сумма нескольких чисел определяется следующим образом: \(s(t_1, \ldots ,t_n)=s(t_1,s(t_2, \ldots ,t_n))\)

Вам дан массив \(x_1, \ldots ,x_n\). Задача состоит в том, чтобы посчитать для каждого числа \(i (0 \le i < n)\) количество способов последовательно выбрать одно число из массива \(n\) раз, чтобы цифровая сумма этих чисел была равна \(i\). Вычислите эти значения по модулю \(2^{58}\).

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

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

Во второй строке записаны \(n\) целых чисел \(x_1, \ldots x_n\) — элементы массива(\(0 \leq x_i < 100000\)).

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

Выведите \(n\) целых чисел \(y_0, \ldots, y_{n-1}\) — \(y_i\) должно равняться остатку при делении соответствующего количества способов на \(2^{58}\).

Примечание

В первом примере существуют последовательности: последовательность \((5,5)\) с цифровой суммой \(0\), последовательность \((5,6)\) с цифровой суммой \(1\), последовательность \((6,5)\) с цифровой суммой \(1\), последовательность \((6,6)\) с цифровой суммой \(2\).

A. Разбиение на цифры

Конструктив математика реализация *800

У Васи есть любимое число \(n\). Он хочет разбить его на несколько ненулевых цифр. Это означает, что он хочет выбрать несколько цифр \(d_1, d_2, \ldots, d_k\), таких, что \(1 \leq d_i \leq 9\) для всех \(i\) и \(d_1 + d_2 + \ldots + d_k = n\).

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

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

В первой строке находится единственное целое число \(n\) — число, которое хочет разбить Вася (\(1 \leq n \leq 1000\)).

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

В первой строке выведите одно целое число \(k\) — количество цифр в разбиении. Заметьте, что \(k\) должно удовлетворять неравенству \(1 \leq k \leq n\). В следующей строке выведите \(k\) цифр \(d_1, d_2, \ldots, d_k\), разделенных пробелами. Для всех цифр должно быть выполнено неравенство \(1 \leq d_i \leq 9\).

Вы должны найти разбиение числа \(n\), в котором количество различных цифр среди \(d_1, d_2, \ldots, d_k\) будет минимальным среди всех разбиений числа \(n\) на ненулевые цифры. Среди таких разбиений разрешается найти любое. Гарантируется, что существует хотя бы одно разбиение числа \(n\) на цифры.

Примечание

В первом тесте число \(1\) можно разбить на \(1\) цифру, равную \(1\).

Во втором тесте существует \(3\) разбиения числа \(4\) на цифры, в которых количество различных цифр равно \(1\). Это разбиения \([1, 1, 1, 1]\), \([2, 2]\) и \([4]\). Любое из этих разбиений подойдет. А, например, разбиение числа \(4\) на цифры \([1, 1, 2]\) не подойдет, так как в нем \(2\) различных цифры, то есть не минимальное возможное количество.

B. Игра со строкой

математика реализация Структуры данных *1200

Два игрока играют в игру на строке \(s\), состоящей из строчных латинских букв.

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

Например, если текущая строка равна «xaax», то возможен только один ход, удалить «aa», тем самым превратив строку в «xx».

Проигрывает тот, кто не может сделать ход.

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

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

В первой строке входного файла записана строка \(s\), состоящая из строчных латинских букв (\(1 \leq |s| \leq 100\,000\)), где \(|s|\) обозначает длину строки \(s\).

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

Если победит игрок, который ходит первым, выведите «Yes». В противном случае, выведите «No».

Примечание

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

Во втором примере первый сделает ход, превратив строку в «q», а затем второй не сможет сделать ход, таким образом, первый выигрывает.

C. Аюб и утерянный массив

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

У Аюба был массив целых чисел \(a\) длины \(n\) и у этого массива было два необычных свойства:

  • Все целые числа в этом массиве были от \(l\) до \(r\) (включительно).
  • Сумма всех элементов в массиве делилась на \(3\).

К сожалению, Аюб потерял свой массив, но он помнит размер массива \(n\), а также числа \(l\) и \(r\), так что он попросил вас посчитать количество способов восстановить массив по этим данным.

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

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

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

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

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

Примечание

В первом примере возможны массивы \([1,2], [2,1], [3, 3]\).

Во втором примере единственный возможный массив — \([2, 2, 2]\).

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

F. Лунный новый год и рекурсивная последовательность

математика матрицы теория чисел *2400

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

Пусть \(f_1, f_2, \ldots, f_i, \ldots\) — бесконечная последовательность положительных целых чисел. Боб знает, что, если \(i > k\), то \(f_i\) может быть получена, используя следующую рекуррентную формулу:

\(\)f_i = \left(f_{i - 1} ^ {b_1} \cdot f_{i - 2} ^ {b_2} \cdot \cdots \cdot f_{i - k} ^ {b_k}\right) \bmod p,\(\)

или, если коротко,

\(\)f_i = \left(\prod_{j = 1}^{k} f_{i - j}^{b_j}\right) \bmod p,\(\)

где \(p = 998\,244\,353\) (известное простое), \(b_1, b_2, \ldots, b_k\) — известные целочисленные константы, а \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Боб потерял значения \(f_1, f_2, \ldots, f_k\), что очень печально: ведь они составляют основу последовательности! К счастью, Боб запомнил первые \(k - 1\) элементов последовательности: \(f_1 = f_2 = \ldots = f_{k - 1} = 1\), а также ее \(n\)-й элемент: \(f_n = m\). Найдите любое возможное значение \(f_k\). Если решений нет, скажите Бобу, что восстановить его любимую последовательность нельзя.

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

Первая строка содержит одно положительное целое число \(k\) (\(1 \leq k \leq 100\)), обозначающее длину последовательности \(b_1, b_2, \ldots, b_k\).

Вторая строка содержит \(k\) положительных целых чисел \(b_1, b_2, \ldots, b_k\) (\(1 \leq b_i < p\)).

Третья строка содержит два положительных целых числа \(n\) и \(m\) (\(k < n \leq 10^9\), \(1 \leq m < p\)), которые означают, что \(f_n = m\).

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

Выведите возможное значение \(f_k\), где \(f_k\) — положительное целое число такое, что \(1 \leq f_k < p\). Если есть несколько возможных ответов, выведите любое. Если таких \(f_k\), при которых \(f_n = m\), не существует, выведите \(-1\).

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

Примечание

В первом примере \(f_4 = f_3^2 \cdot f_2^3 \cdot f_1^5\). Поэтому, если \(f_3 = 4\), то \(f_4 = 16\). Обратите внимание, возможно есть несколько различных ответов.

В третьем примере из \(f_7 = 1\) следует \(f_{23333} = 1\).

В четвертом примере нет такого \(f_1\), что \(f_{88888} = 66666\). Поэтому нужно вывести \(-1\).

B. Цифровой корень

математика теория чисел *1000

Сегодня на уроке математики Петя узнал про цифровой корень.

Цифровой корень натурального числа — это цифра, полученная в результате итеративного процесса суммирования цифр, на каждой итерации которого для подсчета суммы цифр берут результат, полученный на предыдущей итерации. Этот процесс повторяется до тех пор, пока не будет получена одна цифра.

Обозначим цифровой корень числа \(x\) как \(S(x)\). Тогда \(S(5)=5\), \(S(38)=S(3+8=11)=S(1+1=2)=2\), \(S(10)=S(1+0=1)=1\).

В качестве домашнего задания Пете задали \(n\) задач вида: найдите \(k\)-е натуральное число, цифровой корень которого равен \(x\).

Петя уже решил все задачи, но не знает, правильно ли. Ваша задача — решить все \(n\) задач из домашнего задания Пети.

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

В первой строке задано единственное целое число \(n\) (\(1 \le n \le 10^3\)) — количество задач в домашнем задании Пети. В последующих \(n\) строках заданы по два целых числа \(k_i\) (\(1 \le k_i \le 10^{12}\)) и \(x_i\) (\(1 \le x_i \le 9\)) — \(i\)-я задача, в которой нужно найти \(k_i\)-е натуральное число, цифровой корень которого равен \(x_i\).

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

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

D. Сжатие

дп математика реализация теория чисел *1800

Вам дана двоичная матрица \(A\) размера \(n \times n\). Обозначим \(x\)-сжатие данной матрицы как матрицу \(B\) размера \(\frac{n}{x} \times \frac{n}{x}\), такую, что для всех \(i \in [1, n], j \in [1, n]\) выполняется условие \(A[i][j] = B[\lceil \frac{i}{x} \rceil][\lceil \frac{j}{x} \rceil]\).

Очевидно, \(x\)-сжатие возможно только в том случае, если \(x\) является делителем \(n\), но этого недостаточно. К примеру, у этой матрицы \(2 \times 2\) нет \(2\)-сжатия:

\(01\)
\(10\)

Для заданной матрицы \(A\) найдите максимальное \(x\), для которого возможно \(x\)-сжатие этой матрицы.

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

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

В первой строке записано одно число \(n\) (\(4 \le n \le 5200\)) — количество строк и столбцов в матрице \(A\). Гарантируется, что \(n\) делится на \(4\).

Далее следует описание матрицы. В каждой из \(n\) следующих строк следуют по \(\frac{n}{4}\) однозначных числа шестнадцатеричной системы счисления (то есть, эти числа могут задаваться либо как цифры от \(0\) до \(9\), либо как прописные латинские буквы от \(A\) до \(F\)). Двоичная запись каждого из этих чисел задаёт очередные \(4\) элемента матрицы в текущей строке. Например, если число равно \(B\), то очередные четыре элемента матрицы равны 1011, а если число равно \(5\), то очередные четыре элемента матрицы равны 0101.

Элементы в каждой строке задаются без пробелов.

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

Выведите одно число: максимальное \(x\), для которого возможно \(x\)-сжатие.

Примечание

В первом примере задается матрица:

\(11100111\)
\(11100111\)
\(11100111\)
\(00000000\)
\(00000000\)
\(11100111\)
\(11100111\)
\(11100111\)

Довольно легко увидеть, что ответ равен \(1\).

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. Саша и интересный факт из теории графов

Деревья дп Комбинаторика математика Перебор *2400

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

В данной задаче деревом называется взвешенный связный граф, состоящий из \(n\) вершин и \(n-1\)-го ребра, такой, что веса всех рёбер — целые числа от \(1\) до \(m\). Красоту дерева Кефа оценивает следующим образом: он находит в дереве две свои любимые врешины — вершины с номерами \(a\) и \(b\), и считает расстояние между ними. Расстоянием между двумя вершинами \(x\) и \(y\) назовём сумму весов всех рёбер на простом пути из \(x\) в \(y\). Если расстояние от вершины \(a\) до вершины \(b\) равно \(m\), то дерево красивое.

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

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

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

Первая строка содержит четыре целых числа \(n\), \(m\), \(a\), \(b\) (\(2 \le n \le 10^6\), \(1 \le m \le 10^6\), \(1 \le a, b \le n\), \(a \neq b\)) — количество вершин в дереве, максимальный вес ребра и две любимые вершины Кефы.

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

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

Примечание

В первом примере существует \(5\) красивых деревьев:

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

A. Чётность

математика *900

Вам дано целое число \(n\) (\(n \ge 0\)), представленное в виде \(k\) цифр в системе счисления \(b\). То есть

\(\)n = a_1 \cdot b^{k-1} + a_2 \cdot b^{k-2} + \ldots a_{k-1} \cdot b + a_k.\(\)

Например, если \(b=17, k=3\) и \(a=[11, 15, 7]\), то \(n=11\cdot17^2+15\cdot17+7=3179+255+7=3441\).

Выясните, является ли \(n\) чётным или нет.

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

Первая строка содержит два целых числа \(b\) и \(k\) (\(2\le b\le 100\), \(1\le k\le 10^5\)) — основание системы счисления и количество цифр.

Вторая строка содержит \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) (\(0\le a_i < b\)) — цифры \(n\).

Гарантируется, что представление \(n\) не содержит лишних лидирующих нулей. Иначе говоря, \(a_1\) может быть равно \(0\), только если \(k = 1\).

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

Если \(n\) является чётным, выведите «even». Иначе выведите «odd».

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

Примечание

В первом примере \(n = 3 \cdot 13^2 + 2 \cdot 13 + 7 = 540\), то есть чётно.

Во втором примере \(n = 123456789\) и нечётно.

В третьем примере \(n = 32 \cdot 99^4 + 92 \cdot 99^3 + 85 \cdot 99^2 + 74 \cdot 99 + 4 = 3164015155\) и нечётно.

В четвёртом примере \(n = 2\).

C. Операции, не имеющие смысла

Конструктив математика теория чисел *1500

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

Пусть вам дано целое положительное число \(a\). Вы хотите выбрать такое целое число \(b\) от \(1\) до \(a - 1\) включительно, чтобы наибольший общий делитель (НОД) чисел \(a \oplus b\) и \(a \> \& \> b\) был как можно больше. Иными словами, необходимо вычислить следующую функцию:

\(\)f(a) = \max_{0 < b < a}{gcd(a \oplus b, a \> \& \> b)}.\(\)

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ, а \(\&\) обозначает операцию побитового И.

Наибольший общий делитель двух целых чисел \(x\) и \(y\) — максимальное целое число \(g\) такое, что и \(x\), и \(y\) делится на \(g\) без остатка.

Вам дано \(q\) чисел \(a_1, a_2, \ldots, a_q\). Для каждого из этих чисел посчитайте наибольшее возможное значение наибольшего общего делителя (при оптимальном выборе \(b\)).

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

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

Далее следуют \(q\) целых чисел по одному в строке: \(a_1, a_2, \ldots, a_q\) (\(2 \le a_i \le 2^{25} - 1\)) — числа, для которых нужно вычислить ответ.

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

Для каждого числа выведите ответ на него в том же порядке, в котором числа даны во входных данных.

Примечание

Для первого числа оптимально выбрать \(b = 1\), тогда \(a \oplus b = 3\), \(a \> \& \> b = 0\), наибольший общий делитель чисел \(3\) и \(0\) равен \(3\).

Для второго числа один возможный вариант — выбрать \(b = 2\), тогда \(a \oplus b = 1\), \(a \> \& \> b = 2\), наибольший общий делитель чисел \(1\) и \(2\) равен \(1\).

Для третьего числа оптимально выбрать \(b = 2\), тогда \(a \oplus b = 7\), \(a \> \& \> b = 0\), наибольший общий делитель чисел \(7\) и \(0\) равен \(7\).

E. Магические камни

Конструктив математика сортировки *2200

У Гриши есть \(n\) магических камней, пронумерованных от \(1\) до \(n\). Заряд \(i\)-го камня равняется \(c_i\).

Иногда Грише становится скучно и он выбирает некоторый внутренний камень (иными словами, камень с индексом \(i\), где \(2 \le i \le n - 1\)), после чего синхронизирует его с соседними камнями. В результате этой операции камень теряет собственный заряд, но приобретает заряды соседних с них камней. То есть его заряд \(c_i\) превращается в \(c_i' = c_{i + 1} + c_{i - 1} - c_i\).

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

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

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

Вторая строка содержит целые числа \(c_1, c_2, \ldots, c_n\) (\(0 \le c_i \le 2 \cdot 10^9\)) — заряды камней Гриши.

Третья строка содержит целые числа \(t_1, t_2, \ldots, t_n\) (\(0 \le t_i \le 2 \cdot 10^9\)) — заряды камней Андрея.

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

Если существует (возможно, пустая) последовательность операций синхронизации, применение которой меняет заряды всех камней на искомые, выведите «Yes».

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

Примечание

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

  • На первом шаге синхронизируем третий камень: \([7, 2, \mathbf{4}, 12] \rightarrow [7, 2, \mathbf{10}, 12]\).
  • На второй шаге синхронизируем второй камень: \([7, \mathbf{2}, 10, 12] \rightarrow [7, \mathbf{15}, 10, 12]\).

Во втором примере любое действие со вторым камнем не изменит его заряд.

B. Средняя сила супергероев

математика Перебор реализация *1700

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

Изначально в команде \(n\) супергероев с силами \(a_1, a_2, \ldots, a_n\), соответственно. За одну операцию можно убрать супергероя из команды (если сейчас их не меньше двух) или увеличить силу одного супергероя на \(1\). Можно выполнить не более \(m\) операций. Кроме того, нельзя увеличивать силу одного супергероя больше, чем в \(k\) операциях.

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

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

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

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

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

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

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

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

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

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

C. Изобретательный щелчок

Бинарный поиск математика Перебор разделяй и властвуй *1700

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

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

  • если текущая длина базы хотя бы \(2\), разделить базу на \(2\) равные половины и продолжить их уничтожать независимо, или
  • сжечь текущую базу. Если на ней нет мстителей, это отнимает \(A\) единиц энергии, иначе это отнимает \(B \cdot n_a \cdot l\) единиц энергии, где \(n_a\) — число мстителей на этой базе, а \(l\) — длина текущей базы.

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

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

Первая строка содержит четыре целых числа \(n\), \(k\), \(A\) и \(B\) (\(1 \leq n \leq 30\), \(1 \leq k \leq 10^5\), \(1 \leq A,B \leq 10^4\)), где \(2^n\) — длина базы, \(k\) — число мстителей, а \(A\) и \(B\) — константы, описанные в условие.

Вторая строка содержит \(k\) целых чисел \(a_{1}, a_{2}, a_{3}, \ldots, a_{k}\) (\(1 \leq a_{i} \leq 2^n\)), где \(a_{i}\) — позиция очередного мстителя на базе.

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

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

Примечание

Рассмотрим первый пример.

Один из вариантов для Таноса — сжечь базу \(1-4\) целиком, затратив \(2 \cdot 2 \cdot 4 = 16\) единиц энергии.

В другом варианте он может разделить базу на две части \(1-2\) и \(3-4\).

Для базы \(1-2\) он может либо сжечь ее целиком, затратив \(2 \cdot 1 \cdot 2 = 4\) единиц энергии, либо разделить ее на \(2\) части \(1-1\) и \(2-2\).

Для базы \(1-1\) он может сжечь ее, затратив \(2 \cdot 1 \cdot 1 = 2\) единиц энергии. Для базы \(2-2\), он может сжечь ее, затратив \(1\) единицу энергии, так как на ней нет мстителей. Поэтому он может уничтожить базу \(1-2\) за \(2 + 1 = 3\) единицы энергии, что меньше, чем \(4\).

Аналогично, необходимо \(3\) единицы энергии, чтобы уничтожить \(3-4\). Итого, можно уничтожить всю базу за \(6\) единиц энергии.

D. Уничтожить поселение

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

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

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

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

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

Железный человек задает Джарвису \(q\) вопросов. В каждом вопросе он дает Джарвису два номера \(x\) и \(y\). Джарвис должен ответить, сколько различных вариантов поселения он может сделать из исходного таких, что все злодеи, тип которых совпадает с типом злодея, находящегося изначально в \(x\)-м или \(y\)-м логове, живут в одной и той же половине, и Железный человек может уничтожить это поселение.

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

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

Первая строка содержит строку \(s\) (\(2 \le |s| \le 10^{5}\)), описывающую начальный вариант поселения. Строка \(s\) состоит из строчных и заглавных латинских букв и имеет четную длину.

Вторая строка содержит одно целое число \(q\) (\(1 \le q \le 10^{5}\)) — количество вопросов.

\(i\)-я из следующих \(q\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le |s|\), \(x_i \ne y_i\)) — два номера, данные Джарвису в \(i\)-м вопросе.

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

Для каждого вопроса выведите остаток от деления количества вариантов поселений на \(10^9+7\).

Примечание

Рассмотрим первый пример. В первом вопросе возможные варианты поселения это «aabb» и «bbaa». Во втором вопросе логово \(1\) содержит злодея типа «a», а логово \(2\) содержит злодея типа «b», и не существует варианта поселения, где все «a» и «b» находятся в одной половине.

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

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

C. Замыкающие нули

математика Перебор реализация теория чисел *1700

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

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

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

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

Единственная строка входных данных содержит два целых числа \(n\) и \(b\) (\(1 \le n \le 10^{18}\), \(2 \le b \le 10^{12}\)).

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

Выведите одно целое число — количество замыкающих нулей в \(b\)-ичной записи числа \(n!\).

Примечание

В первом примере \(6!_{(10)} = 720_{(10)} = 880_{(9)}\).

Во втором и третьем примерах \(5!_{(10)} = 120_{(10)} = 1111000_{(2)}\).

Последовательность \(d_1, d_2, \ldots, d_k\) называется представлением числа \(x\) в \(b\)-ичной системе счисления, если \(x = d_1 b^{k - 1} + d_2 b^{k - 2} + \ldots + d_k b^0\), где \(d_i\) являются целыми числами и \(0 \le d_i \le b - 1\). Например, число \(720\) из первого примера имеет представление \(880_{(9)}\) так как \(720 = 8 \cdot 9^2 + 8 \cdot 9 + 0 \cdot 1\).

Вы можете прочитать ещё о системах счисления здесь.

F. Очередная задача про запросы к массиву

битмаски математика разделяй и властвуй Структуры данных теория чисел *2400

Вам дан массив \(a_1, a_2, \ldots, a_n\).

Необходимо выполнить \(q\) запросов следующих двух видов:

  1. «MULTIPLY l r x» — для каждого \(i\) (\(l \le i \le r\)) нужно умножить \(a_i\) на \(x\).
  2. «TOTIENT l r» — вычислить \(\varphi(\prod \limits_{i=l}^{r} a_i)\) по модулю \(10^9+7\), где \(\varphi\) обозначает функцию Эйлера.

Функцией Эйлера целого положительного числа \(n\) (обозначается как \(\varphi(n)\)) называется количество целых чисел \(x\) (\(1 \le x \le n\)), таких что \(\gcd(n,x) = 1\).

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

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

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

Следующие \(q\) строк задают запросы в формате, приведённом в условии.

  1. «MULTIPLY l r x» (\(1 \le l \le r \le n\), \(1 \le x \le 300\)) означает запрос умножения.
  2. «TOTIENT l r» (\(1 \le l \le r \le n\)) означает запрос вычисления функции Эйлера.

Гарантируется, что существует хотя бы один запрос типа «TOTIENT».

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

Для каждого запроса типа «TOTIENT» выведите ответ на него.

Примечание

В первом примере \(\varphi(1) = 1\) для первого запроса, \(\varphi(2) = 1\) для второго запроса и \(\varphi(6) = 2\) для третьего.

A. Лучший подотрезок

математика реализация *1100

Вам задан массив \(a_1, a_2, \dots, a_n\). Найдите его подотрезок \(a_l, a_{l+1}, \dots, a_r\) (\(1 \le l \le r \le n\)) с максимальным значением среднего арифметического \(\frac{1}{r - l + 1}\sum\limits_{i=l}^{r}{a_i}\) (без какого-либо округления).

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

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

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

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

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

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

Примечание

Подотрезок \([3, 4]\) — самый длинный среди всех подотрезков с максимальным средним арифметическим.

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

D. Магические камни

дп математика матрицы *2100

У Reziba есть много магических камней. Каждый магический камень может быть разделен на \(M\) обычных камней. Каждый магический (и обычный) камень занимает \(1\) единицу пространства. Обычный камень не может быть разделен.

Reziba хочет выбрать набор магических камней и разделить некоторые из них таким образом, чтобы общее пространство, занятое получившимся множеством, было равно \(N\). Если магический камень выбран и разделен, он занимает \(M\) единиц пространства (потому что это разделение на \(M\) камней); если же магический камень не разделен, то он занимает \(1\) единицу пространства.

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

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

Выходные данные содержат единственную строку, содержащую \(2\) целых числа \(N\) и \(M\) (\(1 \le N \le 10^{18}\), \(2 \le M \le 100\)).

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

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

Примечание

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

Пусть \(1\) обозначает магический камень, а \(0\) обозначает обычный камень.

Все конфигурации, которые вы можете иметь:

  • \(1 1 1 1\) (никакие камни не разделены);
  • \(0 0 1 1\) (первый магический камень разделен на \(2\) обычных камня);
  • \(1 0 0 1\) (второй магический камень разделен на \(2\) обычных камня);
  • \(1 1 0 0\) (третий магический камень разделен на \(2\) обычных камня);
  • \(0 0 0 0\) (первый и второй магические камни разделены суммарно на \(4\) обычных камня).

Таким образом, ответ равен \(5\).

E. Расшифруй строку

битмаски интерактив китайская теорема об остатках Конструктив математика *2200

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Вам дана строка \(t\), состоящая из \(n\) строчных латинских букв. Эта строка была получена следующим образом: сначала у жюри была строка \(s\), состоящая также из \(n\) строчных латинских букв. Затем к ней применили не более \(n\) (возможно, ни одной) операций. \(i\)-я операция обозначается двумя целыми числами \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)), и означает обмен символов строки под номерами \(a_i\) и \(b_i\). Все операции были выполнены в том порядке, в котором они расположены в последовательности. Например, если \(s\)xyz, и было выполнено \(2\) операции: \(a_1 = 1, b_1 = 2\); \(a_2 = 2, b_2 = 3\), то после первой операции текущая строка будет yxz, после второй — yzx, поэтому \(t\)yzx.

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

Можете ли вы восстановить исходную строку \(s\), использовав последовательность операций не более \(3\) раз?

Строка \(s\) и последовательность операций в каждом тесте являются фиксированными; интерактор не пытается адаптировать тест под ваше решение.

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

Изначально тестирующая система выводит одну строку \(t\), состоящую из строчных латинских букв (\(1 \le |t| = n \le 10^4\)).

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

Чтобы дать ответ, ваша программа должна вывести одну строку \(!\) \(s\) с переводом строки в конце. После этого программа должна сбросить буфер вывода и завершиться.

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

До того, как ваша программа даст ответ, она может отправить не более \(3\) запросов. Чтобы отправить запрос, выведите строку следующего формата: \(?\) \(s'\), где \(s'\) должна быть строкой из ровно \(n\) строчных латинских букв. Строка, которую вы отправляете, должна заканчиваться символов перевода строки. После отправки запроса программа должна сбросить буфер вывода и прочитать ответ на запрос — строку \(t'\), состоящую из \(n\) строчных латинских букв, которая будет являться результатом применения последовательности обменов к \(s'\). Ответ будет дан на отдельной строке, заканчивающейся символом перевода строки.

Если вы зададите некорректный запрос (или же количество запросов превысит \(3\)), ответом будет строка 0. Если ваша программа получила такой ответ, она должна немедленно завершиться — иначе вы можете получить вердикт «Ошибка исполнения», «Превышено ограничение времени» или какой-нибудь другой, а не «Неправильный ответ».

Примечание

В примере рассматривается тест, который приводился в условии. Участник задает запрос со строкой baa, которая превращается в aab. Во втором запросе задается строка aba, которая превращается в baa. В третьем запросе задается строка aab, которая превращается в aba. Участник может понять, что изначально строка \(s\) была xyz.

Замечание к фазе взломов:

Чтобы отправить тест в фазу взломов, предоставьте его в следующем виде:

В первой строке должна быть записана строка \(s\), которую вы загадываете, состоящая из \(n \in [1, 10000]\) строчных латинских букв.

Во второй строке должно быть записано одно целое число \(k\) (\(0 \le k \le n\)) — количество операций в последовательности обменов.

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

Например, тест из условия выглядел бы вот так:

xyz

2

1 2

2 3

A. Покупка воды

математика *800

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

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

Бутылка первого типа стоит \(a\) бурлей, а бутылка второго типа стоит \(b\) бурлей соответственно.

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

Вам также необходимо ответить на \(q\) независимых запросов.

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

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

Следующие \(q\) строк содержат запросы. \(i\)-й запрос описывается тремя целыми числами \(n_i\), \(a_i\) и \(b_i\) (\(1 \le n_i \le 10^{12}, 1 \le a_i, b_i \le 1000\)) — как много литров Поликарпу нужно в \(i\)-м запросе, стоимость (в бурлях) бутылки первого типа в \(i\)-м запросе и стоимость (в бурлях) бутылки второго типа в \(i\)-м запросе соответственно.

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

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

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.

H. Тройки

бпф математика *3200

Вы получили подарок на день рождения — \(n\) троек целых чисел! \(i\)-я из них равна \(\lbrace a_{i}, b_{i}, c_{i} \rbrace\). Все числа не меньше \(0\) и строго меньше чем \(2^{k}\), где \(k\) — фиксированное целое число.

Однажды вам надоело играть с этими тройками, и вы выбрали три новых целых числа \(x\), \(y\), \(z\), а затем составили \(n\) массивов. \(i\)-й массив состоит из \(a_i\), повторенного \(x\) раз, \(b_i\), повторенного \(y\) раз и \(c_i\), повторенного \(z\) раз. Таким образом, каждый массив имеет длину \((x + y + z)\).

Вы хотите выбрать ровно одно число из каждого массива так, чтобы их побитовое исключающее ИЛИ (XOR) было равно \(t\). Найдите количество способов так выбрать числа для каждого \(t\) от \(0\) до \(2^{k} - 1\) включительно по модулю \(998244353\).

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

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

Вторая строка содержит три целых числа \(x\), \(y\), \(z\) (\(0 \leq x,y,z \leq 10^{9}\)) — числа, которые вы выбрали.

В следующих \(n\) строках содержатся описания троек. \(i\)-я из них содержит три целых числа \(a_{i}\), \(b_{i}\) и \(c_{i}\) (\(0 \leq a_{i} , b_{i} , c_{i} \leq 2^{k} - 1\)) — целые числа, составляющие \(i\)-й массив.

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

Выведите одну строку, содержащую \(2^{k}\) целых чисел. \(i\)-е из них должно быть равно количеству способов выбрать ровно одно число из каждого массива так, чтобы их побитовое исключающее ИЛИ (XOR) было равно \(t = i-1\) по модулю \(998244353\).

Примечание

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

Во втором примере два массива равны \((0, 1, 1, 2)\) и \((1, 2, 2, 3)\). Всего есть шестнадцать \((4 \cdot 4)\) способов выбрать числа, \(4\) из них (\(1 \oplus 1\) и \(2 \oplus 2\) по два раза) дают \(0\), \(2\) из них (\(0 \oplus 1\) и \(2 \oplus 3\)) дают \(1\), \(4\) из них (\(0 \oplus 2\) и \(1 \oplus 3\) по два раза) дают \(2\), и наконец \(6\) из них (\(0 \oplus 3\), \(2 \oplus 1\) и четыре раза \(1 \oplus 2\)) дают \(3\).

B. Петя и квадрат

математика реализация *1200

Маленький Петя любит играть с квадратами. Мама подарила Пете квадрат размера 2n × 2n. Петя отметил одну клетку квадрата и теперь решает следующую задачу.

Требуется разрезать квадрат на две равные части ломаной, проходящей по линиям сетки. При этом линия разреза не должна иметь общих точек с отмеченной клеткой, а получившиеся две части должны быть равными с точностью до поворота.

По заданным размерам стороны квадрата и координатам отмеченной клетки Петя хочет определить можно ли разрезать квадрат требуемым образом. Помогите ему.

Входные данные

В первой строке через пробел записано три целых числа 2n, x и y (2 ≤ 2n ≤ 100, 1 ≤ x, y ≤ 2n) — размер стороны квадрата и координаты отмеченной клетки. Гарантируется, что 2n — четное число.

Координаты отмеченной клетки — это пара чисел x y, где x обозначает номер строки, а y — номер столбца. Строки и столбцы нумеруются последовательными целыми числами от 1 до 2n. Строки нумеруются сверху вниз, а столбцы — слева направо.

Выходные данные

Если квадрат можно разрезать, выведите «YES», иначе выведите «NO» (без кавычек).

Примечание

Рисунок, описывающий тест из условия и показывающий один из возможных вариантов разрезания квадрата:

C. Счастье на двоих

математика Перебор теория чисел *2200

На уроке математики учительница попросила каждого ученика предложить свое множество счастливых чисел. Будучи без ума от теории чисел, Петя сразу же заявил, что простые числа — это его счастливые числа. Вася оказался оригинальнее, он сказал, что число t для него счастливое, если и только если оно может быть представлено в виде:

t = a2 + b2, 
где a, b — произвольные положительные целые числа.

Теперь мальчики решили выяснить сколько дней на отрезке [l, r] (l ≤ r) подходят для парного программирования. Они решили, что день i (l ≤ i ≤ r) подходит для парного программирования, если и только если i является счастливым числом как для Пети, так и для Васи. Помогите мальчикам найти количество таких дней на отрезке [l, r].

Входные данные

В единственной строке входных данных записана пара целых чисел l, r (1 ≤ l, r ≤ 3·108).

Выходные данные

Выведите единственное число — количество дней в отрезке [l, r], которые подходят для парного программирования.

D. Музей

математика матрицы Теория вероятностей *2700

Однажды на одной из своих многочисленных поездок Петя и его друг Вася решили сходить в замок-музей. Музей был особой формы: он состоял из n комнат, соединенных m коридорами, так что из любой комнаты можно дойти до любой другой.

Немного походив по нему, они решили разойтись и рассматривать экспонаты, которые интересны каждому из них, и договорились встретиться в одной из комнат в 6 вечера. Правда друзья забыли договориться об одной вещи: где именно встретиться, поэтому когда настал назначенный час, они начали метаться по музею в поисках друг друга (связаться друг с другом возможности не было, так как звонки в роуминге очень дорогие).

Но даже несмотря на всю спешку, они не могли насмотреться на произведения искусства, поэтому каждый из них действовал следующим образом: каждую минуту он решал куда ему идти — с вероятностью pi он в эту минуту не совершал перехода (оставался в комнате), а с вероятностью 1 - pi равновероятно выбирал одну из прилегающих комнат и переходит в нее по коридору. Здесь i — порядковый номер комнаты, в которой сейчас находится данный человек. В древности строительные работы стоили дорого, поэтому каждый коридор соединял две различные комнаты, при этом между любыми двумя комнатами было не более одного коридора.

Все действия ребята выполняли одновременно. В силу того, что в коридорах темно, в них встреча невозможна, однако по ним можно ходить в обоих направлениях (в том числе, и одновременно обоим ребятам, при этом встреча не происходит). Друзья действуют описанным образом, пока не встретятся. Более формально, встреча — это когда в какой-то момент времени они оба захотели оказаться в одной и той же комнате.

Для каждой из комнат найдите вероятность встречи в ней, при условии что в 6 часов вечера они находятся в комнатах a и b соответственно.

Входные данные

В первой строке идут четыре числа n (1 ≤ n ≤ 22) — количество комнат, m — количество переходов, a, b (1 ≤ a, b ≤ n) — номера начальных комнат Пети и Васи соответственно.

В следующих m строках идут пары чисел — номера комнат, соединенных переходом. В последующих n строках заданы вероятности pi (0.01 ≤ pi ≤ 0.99) с точностью до четырех знаков после десятичной точки — вероятность остаться в i-ой комнате.

Гарантируется, что из любой комнаты можно дойти до любой другой по коридорам.

Выходные данные

В единственной строке выведите n чисел, разделенных пробелом, i-ое число должно означать вероятность встречи в i-ой комнате с абсолютной или относительной погрешностью не более 10 - 6.

Примечание

В первом примере из соображений симметрии вероятности встретиться в комнатах 1 и 2 равны между собой, а их сумма равна единице. Значит, каждая вероятность равна 0.5.

E. Сон

Комбинаторика математика реализация *2700

Однажды Вася лежал в кровати и для того, чтобы быстрее заснуть, наблюдал за своими электронными часами.

Вася живет в странной стране, где в сутках h часов, а в каждом часе m минут. Часы показывают время в десятичной системе счисления в формате H:M, где строка H всегда имеет фиксированную длину, равную количеству цифр в десятичной записи числа h - 1, для этого, при необходимости, добавляются лидирующие нули. Строка M имеет аналогичный вид, и ее длина всегда равна количеству цифр в записи числа m - 1. Например, если h = 17, m = 1000, то время равное 13 часам и 75 минутам будет отображаться как «13:075».

Вася наблюдал за часами с момента h1 часов m1 минут до h2 часов m2 минут включительно, а затем он заснул. Теперь он просит вас подсчитать, сколько раз он видел момент, в который на часах переключилось не менее k цифр одновременно.

Например, при переключении 04:19  →  04:20 изменяется две цифры, при 23:59  →  00:00 — четыре цифры.

Считайте, что Вася наблюдал за часами строго меньше суток. Обратите внимание, что последние значения, которые увидел Вася на часах до того, как заснуть, — это «h2:m2». То есть момент, в который время «h2:m2» переключается на следующее значение, Вася не видит.

Входные данные

В первой строке входного файла записаны через пробел три целых числа h, m и k (2 ≤ h, m ≤ 109, 1 ≤ k ≤ 20). Во второй строке записаны разделенные пробелом целые числа h1, m1 (0 ≤ h1 < h, 0 ≤ m1 < m). В третьей строке записаны разделенные пробелом целые числа h2, m2 (0 ≤ h2 < h, 0 ≤ m2 < m).

Выходные данные

Выведите единственное число — сколько раз Вася увидел момент переключения не менее k цифр одновременно.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

Примечание

В первом примере Вася увидит следующие моменты времени: 4:4 0:0  →  0:1  →  0:2  →  0:3  →  0:4 1:0  →  1:1  →  1:2  →  1:3  →  1:4 2:0  →  2:1  →  2:2  →  2:3  →  2:4. Двойной стрелкой () обозначены искомые моменты времени (в данном примере — когда Вася видит переключение двух цифр одновременно).

Во втором примере k = 1. Нам подходит любое переключение времени, так как при каждом переключении меняется хотя бы одна цифра. Всего переключений 24·60 = 1440, но из них Вася не увидел одно переключение 23:59 00:00.

В третьем примере Вася уснул сразу после того, как начал смотреть на часы, значит он не увидел ни одного переключения.

A. Морской бой

математика *800

Чтобы разнообразить игру «морской бой» Боря решил добавить в неё новый тип кораблей. Эти корабли состоят из двух прямоугольников. Первый прямоугольник имеет ширину \(w_1\) и высоту \(h_1\), а второй прямоугольник — \(w_2\) и \(h_2\) соответственно, причём \(w_1 \ge w_2\). В этой игре используется ровно один корабль, составленный из двух прямоугольников. Других кораблей на поле нет.

Прямоугольники располагаются один над другим и выровнены по левому краю. Прямоугольники примыкают друг к другу без промежутка. Ознакомьтесь с рисунками внизу условия: первый прямоугольник — красный, а второй — синий.

Опишем формально их расположение. Введём на поле систему координат так, чтобы левая нижняя клеточка первого прямоугольника имела координаты \((1, 1)\). Тогда верхняя правая клеточка первого прямоугольника имеет координаты \((w_1, h_1)\), левая нижняя клеточка второго прямоугольника имеет координаты \((1, h_1 + 1)\), а правая верхняя клеточка второго прямоугольника имеет координаты \((w_2, h_1 + h_2)\).

По правилам морского боя, после уничтожения корабля необходимо отметить все клеточки, соседние по стороне или углу с клеточками, в которых есть корабль, потому что в этих клеточках уже не могут стоять другие корабли. При этом отмечаются только не принадлежащие кораблю клетки.

Определите, сколько клеток надо будет отметить после уничтожения корабля, придуманного Борей. Поле, на котором, происходит игра, бесконечно во все стороны.

Входные данные

В четырёх строках заданы четыре целых числа \(w_1, h_1, w_2\) и \(h_2\) (\(1 \leq w_1, h_1, w_2, h_2 \leq 10^8\), \(w_1 \ge w_2\)) — ширина первого прямоугольника, высота первого прямоугольника, ширина второго прямоугольника и высота второго прямоугольника, соответственно. Вращать прямоугольники нельзя.

Выходные данные

Выведите одно целое число — количество клеток, которые необходимо закрасить после уничтожения корабля.

Примечание

В первом примере поле выглядит так (красным обозначен первый прямоугольник, синим обозначен второй прямоугольник, зеленым обозначены отмеченные клеточки):

Во втором примере поле выглядит так:

B. Подготовка к 8 марта

математика теория чисел *1200

Совсем скоро наступит Международный женский день! Поликарп готовится к празднику.

В магазине продается \(n\) коробок с конфетами, в \(i\)-й коробке \(d_i\) конфет.

Поликарп хочет подготовить максимальное количество подарков для \(k\) подруг. Каждый подарок будет состоять из ровно двух коробок конфет. Чтобы \(k\) девушек могли поделить подарок поровну, сумма количеств конфет в подарке (в паре коробок) должна делится на \(k\). Иными словами, две коробки \(i\) и \(j\) (\(i \ne j\)) можно объединить в подарок, если \(d_i + d_j\) делится на \(k\).

Сколько максимум коробок сможет подарить Поликарп? Конечно, каждая коробка может быть в составе не более одного подарка. Поликарп не может использовать коробки «частично» или перераспределять конфеты между ними.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5, 1 \le k \le 100\)) — количество коробок конфет и количество девушек.

Вторая строка входных данных содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^9\)), где \(d_i\) означает количество конфет в \(i\)-й коробке.

Выходные данные

Выведите одно целое число — максимальное количество коробок конфет, сколько сможет подарить Поликарп.

Примечание

В первом тестовом примере Поликарп сможет подарить следующие пары коробок (пары представлены номерами соответствующих коробок):

  • \((2, 3)\);
  • \((5, 6)\);
  • \((1, 4)\).

Таким образом, ответ равен \(6\).

Во втором тестовом примере Поликарп сможет подарить следующие пары коробок (пары представлены номерами соответствующих коробок):

  • \((6, 8)\);
  • \((2, 3)\);
  • \((1, 4)\);
  • \((5, 7)\).

Таким образом, ответ равен \(8\).

В третьем тестовом примере Поликарп сможет подарить следующие пары коробок (пары представлены номерами соответствующих коробок):

  • \((1, 2)\);
  • \((6, 7)\).

Таким образом, ответ равен \(4\).

D. Максимизация количества нулей

математика теория чисел хэши *1500

Задано два массива \(a\) и \(b\), каждый состоит из \(n\) целых чисел.

Вы хотите создать новый массив \(c\) следующим образом: выбрать какое-то вещественное (то есть не обязательно целое) число \(d\), и для каждого \(i \in [1, n]\) присвоить \(c_i := d \cdot a_i + b_i\).

Ваша задача — максимизировать количество нулей в массиве \(c\). Чему равен максимально возможный ответ, если вы выберете значение \(d\) оптимально?

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в обоих массивах.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(-10^9 \le a_i \le 10^9\)).

Третья строка входных данных содержит \(n\) целых чисел \(b_1\), \(b_2\), ..., \(b_n\) (\(-10^9 \le b_i \le 10^9\)).

Выходные данные

Выведите одно целое число — максимальное количество нулей в массиве \(c\), если вы выберете \(d\) оптимально.

Примечание

В первом тестовом примере мы можем выбрать \(d = -2\).

Во втором тестовом примере мы можем выбрать \(d = -\frac{1}{13}\).

В третьем тестовом примере мы не можем получить ни одного нуля в массиве \(c\), какое бы значение \(d\) мы ни выбрали.

В четвертом тестовом примере мы можем выбрать \(d = 6\).

B. Настя играет в компьютер

Конструктив математика *1000

Сделав уроки, Настя решила поиграть в компьютерную игру. На очередном уровне, Настя оказалась в комнате, полной чудовищ, из которой нужно как можно быстрее выйти. В комнате есть \(n\) люков, расположенных на одной прямой, но, к сожалению, все люки закрыты, да еще и сверху каждого люка лежит один камень. Под каждым люком лежит монетка, и чтобы пройти этот уровень, Насте нужно собрать все монетки. Изначально Настя стоит рядом с \(k\)-м по порядку слева люком и думает, что ей делать.

За один ход Настя может сделать одну из следующих операций:

  • если на люке, рядом с которым стоит Настя, есть хотя бы один камень, бросить ровно один камень с него на любой другой люк (да, Настя сильная);
  • перейти к соседнему люку;
  • если на люке, рядом с которым стоит Настя, не лежит камней, то Настя может открыть люк и взять оттуда монетку. После этого она должна немедленно закрыть люк (это не требует дополнительного хода).
На рисунке показано промежуточное состояние игры. В текущей позиции Настя может бросить камень на любой другой люк или переместиться влево или вправо к соседнему люку. Если бы она была рядом с крайним левым люком, она могла бы открыть его (так как на нем нет камней).

Собрав все монетки, Настя сможет покинуть комнату. Так как чудовища повсюду, скажите, сколько Насте нужно минимально сделать ходов, чтобы собрать все монетки.

Заметьте еще раз, что Настя может открыть люк только в том случае, если на нем не лежит ни одного камня.

Входные данные

В единственной строка находятся два целых числа, разделенных пробелом: \(n\) и \(k\) (\(2 \leq n \leq 5000\), \(1 \leq k \leq n\)) — количество люков в комнате и номер люка по порядку, рядом с которым изначально стоит Настя. Изначально ровно один камень лежит на каждом из \(n\) люков.

Выходные данные

Выведите одно целое число — минимальное число ходов, за которое Настя сможет собрать все монетки.

Примечание

Рассмотрим пример, где \(n = 2\), \(k = 2\). Настя сделает следующее:

  • бросит камень со второго люка на первый. Теперь на первом люке лежат два камня;
  • откроет второй люк и возьмет оттуда монетку;
  • пройдет к первому люку, бросит оттуда два камня, который там лежат, на второй люк, и затем откроет первый люк.

То есть за \(6\) ходов Настя соберет все монетки.

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\).

C. Дерево и рёбра

графы Деревья математика поиск в глубину и подобное снм *1500

Вам дано дерево (связный неориентированный граф без циклов), состоящее из \(n\) вершин. Каждое из \(n - 1\) рёбер дерева покрашено в чёрный или красный цвет.

Вам также дано целое число \(k\). Рассмотрим последовательности из \(k\) вершин. Скажем, что последовательность \([a_1, a_2, \ldots, a_k]\) является хорошей, если она удовлетворяет следующему:

  • Мы пройдём некоторый путь в дереве (возможно посещающий несколько раз одну и ту же вершину или ребро), начинающийся в \(a_1\) и заканчивающийся в \(a_k\).
  • Начнём в \(a_1\), затем перейдём в \(a_2\) по кратчайшему пути между \(a_1\) и \(a_2\), затем перейдём в \(a_3\) аналогичным образом, и так далее, пока наконец не пройдём кратчайший путь из \(a_{k-1}\) в \(a_k\).
  • Если в результате такого процесса мы пройдём хотя бы по одному чёрному ребру, то последовательность является хорошей.

Рассмотрим дерево, изображенное на рисунке. Если \(k=3\), то следующие последовательности являются хорошими: \([1, 4, 7]\), \([5, 5, 3]\) и \([2, 3, 7]\). Следующие последовательности не являются хорошими: \([1, 4, 6]\), \([5, 5, 5]\), \([3, 7, 3]\).

Всего есть \(n^k\) последовательностей вершин, посчитайте сколько из них являются хорошими. Так как это число может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(2 \le k \le 100\)),  — размер дерева и длина последовательности вершин.

Каждая из следующих \(n - 1\) строк содержит три целых числа \(u_i\), \(v_i\) и \(x_i\) (\(1 \le u_i, v_i \le n\), \(x_i \in \{0, 1\}\)) — где \(u_i\) и \(v_i\) задают концы соответствующего ребра, а \(x_i\) задаёт его цвет (\(0\) обозначает красное ребро, а \(1\) чёрное).

Выходные данные

Выведите одно число — количество хороших последовательностей по модулю \(10^9 + 7\).

Примечание

В первом примере все последовательности (\(4^4\)) длины \(4\) являются хорошими, кроме следующих:

  • \([1, 1, 1, 1]\)
  • \([2, 2, 2, 2]\)
  • \([3, 3, 3, 3]\)
  • \([4, 4, 4, 4]\)

Во втором примере, все рёбра красные, а значит нет ни одной хорошей последовательности.

D. Получить единицу

дп математика Теория вероятностей теория чисел *2300

У Вивека есть изначально пустой массив \(a\) и некоторая целая константа \(m\).

Он выполняет следующий алгоритм:

  1. Выбрать случайное целое число \(x\) равновероятно в диапазоне от \(1\) до \(m\) и добавить в конец \(a\).
  2. Вычислить наибольший общий делитель чисел в массиве \(a\).
  3. Если он равен \(1\), то закончить.
  4. Иначе продолжить с шага \(1\).

Найдите математическое ожидание длины массива \(a\). Можно показать, что его можно представить как \(\frac{P}{Q}\), где \(P\) и \(Q\) взаимнопростые целые числа и \(Q\neq 0 \pmod{10^9+7}\). Выведите значение \(P \cdot Q^{-1} \pmod{10^9+7}\).

Входные данные

Первая и единственная строка содержит целое число \(m\) (\(1 \leq m \leq 100000\)).

Выходные данные

Выведите одно целое число — математическое ожидание длины массива \(a\) как \(P \cdot Q^{-1} \pmod{10^9+7}\).

Примечание

В первом примере Вивек может добавлять только числа в диапазоне от \(1\) до \(1\), так что у него получится массив \(a=[1]\), после чего алгоритм завершится. Так как длина массива \(a\) всегда получится равной \(1\), то математическое ожидание также будет равно \(1\).

Во втором примере Вивек каждый раз будет дописывать в массив или \(1\) или \(2\), так что после выполнения алгоритма он получит список, который состоит из некоторого количества \(2\) (возможно нулевого) и заканчивается одной \(1\). Математическое ожидание длины списка равно \(1\cdot \frac{1}{2} + 2\cdot \frac{1}{2^2} + 3\cdot \frac{1}{2^3} + \ldots = 2\).

A. Cifera

математика *1000

Когда Петя пошел в школу, то заинтересовался большими числами и их названиями в древности. В частности, он узнал, что в древней России 1000 (тысяча) называлась «тьма», а миллион — «тьма тьмущая».

Решив немного осовременить такие названия, он придумал название для числа k, назвав его petricium. При этом petricium la petricium он называл число k2, petricium la petricium la petricium он называл k3 и так далее. Все числа такого вида он назвал petriciumus cifera, а важностью числа он называл количество артиклей la в его названии.

В связи с этим, у него возникла важная задача, которую необходимо было решать быстро: принадлежит ли какое-то число l множеству petriciumus cifera? Так как Петя очень занятой школьник, то ему необходима автоматизация этого процесса, заняться которой он и попросил вас.

Входные данные

В первой строке задается целое число k, а во второй — целое число l (2 ≤ k, l ≤ 231 - 1).

Выходные данные

В первой строке необходимо вывести «YES», если число принадлежит набору petriciumus cifera и «NO» в противном случае. Если число принадлежит набору, то во второй строке необходимо вывести важность числа l.

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\).

A. Игра 23

математика реализация *1000

«Игра 23» — вот во что сейчас играет Поликарп. Изначально у него есть целое число \(n\) и его цель преобразовать его в целое число \(m\). За один ход он может умножить \(n\) на \(2\) или умножить \(n\) на \(3\). Он может совершать любое количество ходов.

Выведите количество ходов, сколько необходимо Поликарпу, чтобы получить из числа \(n\) число \(m\). Выведите -1, если это невозможно сделать.

Легко доказать, что любой способ преобразования из числа \(n\) в число \(m\) содержит одинаковое количество ходов (т.е. количество ходов не зависит от способа преобразования).

Входные данные

В единственной строке входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le m \le 5\cdot10^8\)).

Выходные данные

Выведите количество ходов, чтобы получить из числа \(n\) число \(m\). Выведите -1, если это невозможно сделать.

Примечание

В первом примере одна из возможных последовательностей ходов: \(120 \rightarrow 240 \rightarrow 720 \rightarrow 1440 \rightarrow 4320 \rightarrow 12960 \rightarrow 25920 \rightarrow 51840.\) Всего совершено \(7\) ходов.

Во втором примере Поликарп не должен совершать ходы. Таким образом, ответ равен \(0\).

В третьем примере из \(48\) невозможно получить \(72\).

C. Поликарп восстанавливает перестановку

математика *1500

Массив целых чисел \(p_1, p_2, \dots, p_n\) называется перестановкой, если он содержит каждое число от \(1\) до \(n\) ровно один раз. Например, следующие массивы являются перестановками: \([3, 1, 2]\), \([1]\), \([1, 2, 3, 4, 5]\) и \([4, 3, 1, 2]\). Следующие массивы перестановками не являются: \([2]\), \([1, 1]\), \([2, 3, 4]\).

Поликарп изобрел невероятно крутую перестановку \(p_1, p_2, \dots, p_n\) длины \(n\). К сожалению, он забыл эту перестановку. Единственное, что он помнит, это массив \(q_1, q_2, \dots, q_{n-1}\) длины \(n-1\), где \(q_i=p_{i+1}-p_i\).

Заданы \(n\) и \(q=q_1, q_2, \dots, q_{n-1}\), помогите Поликарпу по этой информации восстановить придуманную им перестановку.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 2\cdot10^5\)) — длину перестановки, которую надо восстановить. Следующая строка содержит \(n-1\) целое число \(q_1, q_2, \dots, q_{n-1}\) (\(-n < q_i < n\)).

Выходные данные

Выведите -1, если перестановки длины \(n\), которая соответствует массиву \(q\), не существует. В противном случае выведите \(p_1, p_2, \dots, p_n\). Если существует несколько подходящих перестановок, то выведите любую из них.

E. Супергеройская битва

математика *1700

Супергерой сражается с монстром. Битва состоит из раундов, каждый из которых длится ровно \(n\) минут. Как только заканчивается очередной раунд, тут же начинается следующий, и так далее.

Каждый раунд проходит по одному и тому же сценарию. Этот сценарий описывается последовательностью из \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(-10^6 \le d_i \le 10^6\)), где \(i\)-й элемент обозначает, что жизненная сила монстра (его hp) изменяется на величину \(d_i\) за \(i\)-ю минуту раунда. Формально, если в начале \(i\)-й минуты раунда жизненная сила монстра была равна \(h\), то сразу после окончания \(i\)-й минуты она изменяется следующим образом \(h := h + d_i\).

Начальная жизненная сила монстра равна \(H\). Это означает, что перед битвой его hp равен \(H\). Выведите первую минуту битвы, после которой монстр умрёт. Монстр умирает, если его hp становится равен или меньше \(0\). Выведите -1, если битва будет продолжаться бесконечно.

Входные данные

В первой строке записаны два целых числа \(H\) и \(n\) (\(1 \le H \le 10^{12}\), \(1 \le n \le 2\cdot10^5\)). Вторая строка содержит последовательность целых чисел \(d_1, d_2, \dots, d_n\) (\(-10^6 \le d_i \le 10^6\)), где \(d_i\) — это изменение hp монстра в \(i\)-ю минуту каждого раунда.

Выходные данные

Выведите -1, если герой не сможет убить монстра, и битва будет продолжаться бесконечно. В противном случае выведите положительное целое число \(k\) такое, что \(k\) — это первая минута, после которой монстр мёртв.

A. The Beatles

математика Перебор *1700

В Байтландии появилась Золотая Окружность Жуколюбителей (сокращённо ЗОЖ) — маршрут, проходящий по \(n \cdot k\) городам, и, понятно, представляющий из себя окружность. Города пронумерованы по кругу от \(1\) до \(n \cdot k\), расстояние между соседними городами на окружности равно \(1\) км.

Сергей не любит жуков, а любит бургеры. Хорошо, что на окружности есть \(n\) ресторанов фастфуда, которые расположены в \(1\)-м, \((k + 1)\)-м, \((2k + 1)\)-м, и так далее, \(((n-1)k + 1)\)-м городах, то есть через каждые \(k\) км.

Сергей начал своё путешествие из какого-то города \(s\) и ехал по кругу, останавливаясь в городах через равные расстояния \(l\) км (\(l > 0\)), пока не остановился вновь в городе \(s\). Сергей забыл числа \(s\) и \(l\), но он помнит, что от города \(s\) расстояние до ближайшего фастфуда было равно \(a\) км, а из города, в котором он остановился, проехав первые \(l\) км из \(s\), расстояние до ближайшего фастфуда было равно \(b\) км. Сергей ехал всегда в одну и ту же сторону по кругу, но при измерении расстояния до фастфуда учитывал оба направления.

Теперь его интересуют два числа. Первое \(x\) — минимальное число остановок (не считая первой), которое мог сделать Сергей до того, как вновь оказался в \(s\). Второе число \(y\) — максимальное число остановок (не считая первой), которое мог сделать Сергей до того, как вновь оказался в \(s\).

Входные данные

В первой строке находятся два целых числа \(n\) и \(k\) (\(1 \le n, k \le 100\,000\)) — число ресторанов фастфуда на ЗОЖ и расстояние между соседними городами с ресторанами фастфуда, соответственно.

Во второй строке находятся два целых числа \(a\) и \(b\) (\(0 \le a, b \le \frac{k}{2}\)) — расстояния до ближайших фастфудов в начальном городе пути и первом городе, в котором остановился Сергей, соответственно.

Выходные данные

Выведите два целых числа \(x\) и \(y\).

Примечание

В первом примере бургерные стоят в городах \(1\) и \(4\), начальный город \(s\) мог располагаться в городах \(2\), \(3\), \(5\), \(6\). Следующий город на пути мог также располагаться в городах \(2, 3, 5, 6\). Переберём все попарные комбинации этих городов. Тогда, если и \(s\), и город первой остановки Сергея — это город \(2\) (например, \(l = 6\)), Сергей уже в первой остановке оказался в \(s\), значит, \(x = 1\). В остальных же парах, потребуется \(1, 2, 3\) или \(6\) ходов для того, чтобы вновь попасть в \(s\), значит, \(y = 6\).

Во втором примере Сергей оба раза был в городах с ресторанами фастфуда, значит \(l\) равно \(2\), \(4\) или \(6\). Отсюда \(x = 1\), \(y = 3\).

В третьем примере бургерная всего одна, значит, существует два различных варианта расположения \(s\) и первого города в маршруте: \((6, 8)\) и \((6, 4)\), тогда для первого варианта \(l = 2\), для второго \(l = 8\). В обоих случаях для попадания в \(s\) Сергею потребуется сделать по \(x=y=5\) остановок.

B. Lynyrd Skynyrd

Деревья дп математика поиск в глубину и подобное Структуры данных *2000

Недавно Линэрд и Скинэрд отправились в магазин, где Линэрд купил себе перестановку \(p\) длины \(n\), а Скинэрд купил себе массив \(a\) длины \(m\), состоящий из чисел от \(1\) до \(n\).

Линэрду и Скинэрду скучно, поэтому они решили задать вам \(q\) вопросов, имеющих следующий вид: «есть ли у подотрезка массива \(a\) c \(l\)-й по \(r\)-ю позицию включительно подпоследовательность, которая является циклическим сдвигом \(p\)?».

Перестановка длины \(n\) — это последовательность из \(n\) чисел, в которой каждое число от \(1\) до \(n\) встречается ровно один раз.

Циклический сдвиг перестановки \((p_1, p_2, \ldots, p_n)\) — это перестановка \((p_i, p_{i + 1}, \ldots, p_{n}, p_1, p_2, \ldots, p_{i - 1})\) для какого-то \(i\) от \(1\) до \(n\). Так, например, у перестановки \((2, 1, 3)\) есть три различных циклических сдвига: \((2, 1, 3)\), \((1, 3, 2)\), \((3, 2, 1)\).

Подпоследовательность подотрезка массива \(a\) с \(l\)-й по \(r\)-ю позицию включительно — это последовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) для каких-то \(i_1, i_2, \ldots, i_k\) таких, что \(l \leq i_1 < i_2 < \ldots < i_k \leq r\).

Входные данные

В первой строке даны три целых числа \(n\), \(m\), \(q\) (\(1 \le n, m, q \le 2 \cdot 10^5\)) — длина перестановки \(p\), длина массива \(a\) и число запросов.

В следующей строке даны \(n\) целых чисел от \(1\) до \(n\), \(i\)-е из них — \(i\)-й элемент перестановки. Каждое число от \(1\) до \(n\) встречается ровно один раз.

В следующей строке даны \(m\) целых чисел от \(1\) до \(n\), \(i\)-е из них — \(i\)-й элемент массива \(a\).

В следующих \(q\) строках дано описание запросов. В \(i\)-й из этих строк даны два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)), означающие, что \(i\)-й вопрос относится к отрезку массива с \(l_i\)-й по \(r_i\)-ю позицию включительно.

Выходные данные

В единственной строке выведите строку длины \(q\), состоящую из \(0\) и \(1\), при этом на \(i\)-й позиции должна стоять \(1\), если у подотрезка массива \(a\) c \(l_i\)-й по \(r_i\)-ю позицию включительно есть подпоследовательность, которая является циклическим сдвигом \(p\), и \(0\) в противном случае.

Примечание

В первом примере отрезок с \(1\)-й по \(5\)-ю позицию это \(1, 2, 3, 1, 2\). В нём есть подпоследовательность \(1, 3, 2\), которая является циклическим сдвигом перестановки. В отрезке с \(2\)-й по \(6\)-ю позицию есть подпоследовательность \(2, 1, 3\), совпадающая с перестановкой. Отрезок с \(3\)-й по \(5\)-ю позицию это \(3, 1, 2\), в нём есть только одна подпоследовательность длиной \(3\) (\(3, 1, 2\)), но она не совпадает ни с каким циклическим сдвигом перестановки.

Во втором примере у перестановки циклические сдвиги это \(1, 2\) и \(2, 1\). Отрезок с \(1\)-й по \(2\)-ю позицию это \(1, 1\), его подпоследовательности не совпадает ни с каким циклическим сдвигом перестановки. Отрезок с \(2\)-й по \(3\)-ю позицию это \(1, 2\), он совпадает с перестановкой. Отрезок с \(3\)-й по \(4\)-ю позицию это \(2, 2\), его подпоследовательности не совпадает ни с каким циклическим сдвигом перестановки.

B. Nirvana

математика Перебор теория чисел *1200

Курт достигает состояние нирваны, когда находит произведение всех цифр некоторого целого положительного числа. Чем больше найденное произведение, тем более глубокую нирвану он достигает.

Помогите Курту найти максимальное возможное произведение цифр среди всех целых чисел от \(1\) до \(n\).

Входные данные

В единственной строке входных данных записано целое число \(n\) (\(1 \le n \le 2\cdot10^9\)).

Выходные данные

Выведите максимальное произведение цифр среди всех целых чисел от \(1\) до \(n\).

Примечание

В первом примере максимальное произведение достигается для числа \(389\) (произведение цифр равно \(3\cdot8\cdot9=216\)).

Во втором примере максимальное произведение достигается для числа \(7\) (произведение цифр равно \(7\)).

Во третьем примере максимальное произведение достигается для числа \(999999999\) (произведение цифр равно \(9^9=387420489\)).

E. Медианная строка

битмаски математика Строки теория чисел *1900

Заданы две строки \(s\) и \(t\), обе состоят ровно из \(k\) строчных букв латинского алфавита, \(s\) лексикографически меньше \(t\).

Рассмотрим список всех строк, состоящих ровно из \(k\) строчных латинских букв, лексикографически не меньших, чем \(s\) и не больше, чем \(t\) (включая \(s\) и \(t\)) в лексикографическом порядке. Например, для \(k=2\), \(s=\)«az» и \(t=\)«bf» список будет равен [«az», «ba», «bb», «bc», «bd», «be», «bf»].

Ваша задача — вывести медиану (средний элемент) этого списка. Для примера выше это будет «bc».

Гарантируется, что количество строк, лексикографически не меньших, чем \(s\) и не больших, чем \(t\), нечетно.

Входные данные

Первая строка входных данных содержит одно целое число \(k\) (\(1 \le k \le 2 \cdot 10^5\)) — длину строк.

Вторая строка входных данных содержит строку \(s\), состоящую ровно из \(k\) строчных букв латинского алфавита.

Третья строка входных данных содержит строку \(t\), состоящую ровно из \(k\) строчных букв латинского алфавита.

Гарантируется, что \(s\) лексикографически меньше \(t\).

Гарантируется, что количество строк, лексикографически не меньших, чем \(s\) и не больших, чем \(t\), нечетно.

Выходные данные

Выведите одну строку, состоящую ровно из \(k\) строчных букв латинского алфавита — медиану (средний элемент) списка строк длины \(k\), лексикографически не меньших, чем \(s\) и не больших, чем \(t\).

D. Прыгание лягушки

математика поиск в глубину и подобное теория чисел *2100

Лягушка изначально находится в позиции \(0\) на числовой прямой. У лягушки есть два положительных числа \(a\) и \(b\). Из позиции \(k\) он может перейти либо в позицию \(k+a\), либо в \(k-b\).

Пусть \(f(x)\) — количество различных целых чисел, координаты которых лягушка может достичь, если она всегда будет находиться в интервале \([0, x]\). Лягушке не нужно посещать все эти числа за один раз, то есть число считается, если лягушка может каким-то образом достичь его, если она начинает с \(0\).

Дается число \(m\), найдите \(\sum_{i=0}^{m} f(i)\). Другими словами, найдите сумму по всем \(f(i)\) для всех \(i\) от \(0\) до \(m\).

Входные данные

Первая строка содержит три целых числа \(m, a, b\) (\(1 \leq m \leq 10^9, 1 \leq a,b \leq 10^5\)).

Выходные данные

Выведите одно целое число — искомую сумму.

Примечание

В первом примере нам нужно найти \(f(0)+f(1)+\ldots+f(7)\). У нас есть \(f(0) = 1, f(1) = 1, f(2) = 1, f(3) = 1, f(4) = 1, f(5) = 3, f(6) = 3, f(7) = 8\). Сумма этих чисел равна \(19\).

Во втором примере \(f(i) = i+1\), то есть нужно найти сумму \(\sum_{i=0}^{10^9} i+1\).

В третьем примере лягушка не может прыгать.

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]\).

G. Gold Experience

графы Конструктив математика Теория вероятностей теория чисел *3300

Рассмотрим неориентированный граф \(G\) из \(n\) вершин. В каждой вершине расположено целое число \(a_i\).

Две вершины \(i\) и \(j\) соединены ребром, если и только если \(gcd(a_i, a_j) > 1\), где \(gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Рассмотрим множество вершин. Скажем, что вершина в этом множестве честная, если она соединена ребром со всеми остальными вершинами в этом множестве.

Вам нужно найти множество из \(k\) вершин (\(k\) — фиксированное целое число, \(2 \cdot k \le n\)) такое, что в нём все вершины честные или все вершины не являются честными. Можно показать, что хотя бы одно такое множество всегда существует.

Входные данные

Первая строка содержит целые числа \(n\) и \(k\) (\(6 \leq 2 \cdot k \leq n \leq 10^5\)) — the количество вершин и значение параметра \(k\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(2 \le a_i \le 10^7\)) — значения, записанные в вершинах.

Выходные данные

Выведите ровно \(k\) различных целых чисел — индексы элементов в множестве в любом порядке.

Примечание

В первом примере, множество \(\{2, 4, 5\}\) является примером множества без честных вершин. Видно, что вершина \(2\) не имеет общего ребра с вершиной \(4\), так как \(gcd(15, 8) = 1\). Вершина \(4\) не имеет общего ребра с вершиной \(2\). Вершина \(5\) не имеет общего ребра с вершиной \(2\).

Во втором примере множество \(\{8, 5, 6, 4\}\) является примером множества, где все вершины честные.

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}}\) (пять простых).

Простые числа отмечены жирно и синим цветом. В каждом из этих случаев количество полученных простых является максимально возможным.

C. Водопроводчик

математика *2200

Маленький Джон мечтает стать водопроводчиком. Сегодня он нарисовал клетчатое поле размером n × m, состоящее из n строк и m столбцов.

В каждой клетке Джон хочет нарисовать фрагмент трубы. Он умеет рисовать фрагменты четырех типов, которые нумеруются от 1 до 4 как показано на картинке:

Каждый фрагмент трубы имеет два конца, они обозначены стрелками на картинке. Например, концы фрагмента номер 1 направлены влево и вверх.

Маленький Джон считает, что система труб протекает, если хотя бы один конец одного фрагмента не подсоединен ни к другому концу, ни к краю поля. Ниже приведены примеры двух систем труб размера 1 × 2. Система труб в левом примере протекает, в правом — не протекает.

Маленький Джон уже начал рисовать трубы. Вам дано поле, каждая клетка которого либо содержит один из четырех фрагментов трубы, либо пуста. Найдите количество способов нарисовать во всех пустых клетках фрагменты трубы так, чтобы получившаяся система труб не протекала. Выведите это число по модулю 1000003 (106 + 3).

Учтите, что повороты и отражения поля не разрешаются. То есть если два способа равны только после поворота или отражения, то эти способы следует считать различными.

Входные данные

В первой строке через пробел записаны два целых числа n и m (1 ≤ n, m, n·m ≤ 5·105) — количество строк и столбцов соответственно. Далее следует n строк по m символов — описание поля. Один символ описывает одну клетку:

  • «1» - «4» — фрагмент трубы одного из четырех типов, описанных выше
  • «.» — пустая клетка
Выходные данные

Выведите одно число — количество способов завершить рисунок так, чтобы система труб не имела протечек, по модулю 1000003 (106 + 3). Если это сделать невозможно, выведите 0.

Примечание

В первом примере начальная конфигурация труб выглядит следующим образом:

Два способа завершить рисунок:

Во втором примере начальная конфигурация сразу протекает, поэтому невозможно завершить рисунок так, чтобы получившаяся система труб не протекала.

В последнем примере возможна одна система труб без протечек:

C. Задача для Назара

Конструктив математика *1800

Назар, ученик научного лицея Королевства Кремляндия, известен своими выдающимися математическими способностями. Сегодня учитель математики дал ему очень сложную задачу.

Рассмотрим два бесконечных множества чисел. Первое состоит из нечётных положительных чисел (\(1, 3, 5, 7, \ldots\)), а второе — из чётных положительных чисел (\(2, 4, 6, 8, \ldots\)). На первом этапе учитель выписывает на бесконечную доску первое число из первого множества, на втором этапе — первых два числа из второго множества, на третьем этапе — следующих четыре числа из первого множества, на четвёртом — следующих восемь чисел из второго множества и так далее. Другими словами, на каждом этапе, начиная со второго, он выписывает в два раза больше чисел, чем на предыдущем, а также меняет множество, из которого эти числа выписываются, на другое.

Десять первых выписанных чисел: \(1, 2, 4, 3, 5, 7, 9, 6, 8, 10\). Пронумеруем выписанные числа, начиная с единицы.

Задача состоит в том, чтобы по заданным числам \(l\) и \(r\) находить сумму чисел с номерами от \(l\) до \(r\). Ответ может получиться большим, так что нужно найти его остаток от деления на \(1000000007\) (\(10^9+7\)).

Назар очень долго думал над этой задачей, но так и не придумал решение. Помогите ему решить эту задачу.

Входные данные

Первая строка содержит два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq 10^{18}\)) — диапазон, на котором необходимо найти сумму.

Выходные данные

Выведите единственное целое число — ответ по модулю \(1000000007\) (\(10^9+7\)).

Примечание

В первом примере ответом является сумма первых трёх выписанных чисел (\(1 + 2 + 4 = 7\)).

Во втором примере числа с номерами от \(5\) до \(14\): \(5, 7, 9, 6, 8, 10, 12, 14, 16, 18\). Их сумма равна \(105\).

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\).

E. Количество компонент

дп Комбинаторика математика Структуры данных *2100

Королевство Кремляндия представляет собой дерево (связный неориентированный граф без циклов), состоящее из \(n\) вершин. У каждой вершины \(i\) есть своя стоимость \(a_i\). Все вершины последовательно соединены рёбрами. Формально, для каждого \(1 \leq i < n\) существует ребро между вершинами \(i\) и \(i+1\).

Введём понятие функции \(f(l, r)\), принимающую два целых числа \(l\) и \(r\) (\(l \leq r\)):

  • Оставим в дереве только вершины, стоимости которых находятся в пределах от \(l\) до \(r\).
  • Значением функции будет количество компонент связности в новом графе.

Ваша задача состоит в том, чтобы посчитать следующую сумму: \(\)\sum_{l=1}^{n} \sum_{r=l}^{n} f(l, r) \(\)

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — стоимости вершин.

Выходные данные

Выведите одно число — ответ на задачу.

Примечание

В первом примере значения функции будут такими:

  • \(f(1, 1)=1\) (остается только вершина под номером \(2\), которая образует одну компоненту)
  • \(f(1, 2)=1\) (остаются вершины \(1\) и \(2\), которые образуют одну компоненту)
  • \(f(1, 3)=1\) (все вершины остаются, получается одна компонента)
  • \(f(2, 2)=1\) (только вершина под номером \(1\))
  • \(f(2, 3)=2\) (остаются вершины \(1\) и \(3\), которые образуют две компоненты)
  • \(f(3, 3)=1\) (только вершина \(3\))
Суммарно выходит \(7\).

Во втором примере значения функции будут такими:

  • \(f(1, 1)=1\)
  • \(f(1, 2)=1\)
  • \(f(1, 3)=1\)
  • \(f(1, 4)=1\)
  • \(f(2, 2)=1\)
  • \(f(2, 3)=2\)
  • \(f(2, 4)=2\)
  • \(f(3, 3)=1\)
  • \(f(3, 4)=1\)
  • \(f(4, 4)=0\) (никакой вершины не остаётся, а значит количество компонент равно \(0\))
Суммарно выходит \(11\).

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\) сундука выглядит следующим образом:

  • Использовать первый ключ чтобы открыть пятый сундук,
  • Использовать третий ключ, чтобы открыть второй сундук,
  • Использовать четвёртый ключ, чтобы открыть первый сундук.

Во втором примере вы можете использовать единственный ключ, чтобы открыть один произвольный сундук (обратите внимание что один ключ нельзя использовать дважды).

В третьем примере ни один из ключей не поможет открыть сундук.

B. Кошачье преобразование фурфурье

битмаски Конструктив математика поиск в глубину и подобное *1300

Кошачье преобразование фурфурье это популярный алгоритм в программировании, использующийся при создании длинных кошек. Неко хочет применить этот алгоритм, чтобы создать идеальную длинную кошку.

Предположим у нас есть кошка с целым числом \(x\). Идеальная длинная кошка это кошка с числом равным \(2^m - 1\) для некоторого неотрицательного \(m\). Например числа \(0\), \(1\), \(3\), \(7\), \(15\) подходят для идеальных длинных кошек.

В кошачьем преобразовании фурфурье можно менять \(x\) используя следующие операции:

  • (Операция А): вы выбираете произвольное неотрицательное число \(n\) и заменяете \(x\) на \(x \oplus (2^n - 1)\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.
  • (Операция Ы): заменить \(x\) на \(x + 1\).

Первая применённая операция должна быть типа А, вторая операция — типа Ы, третья снова типа А, и так далее. Формально, если пронумеровать операции с единицы в порядке их выполнения, то операции с нечётным номером должны быть типа А, а операции с чётным номером — типа Ы.

Неко хочет производит идеальных длинных кошек в промышленном масштабе, поэтому на одну кошку он может потратить не более \(40\) операций. Можете ли вы ему помочь и составить план операций, которые нужно проделать?

Обратите внимание, что не требуется минимизировать число выполненных операций. Достаточно лишь, чтобы число операций не превосходило \(40\).

Входные данные

Единственная строка содержит одно целое число \(x\) (\(1 \le x \le 10^6\)).

Выходные данные

В первой строке выведите одно целое число \(t\) (\(0 \le t \le 40\)) — количество операций, которое нужно применить.

Затем для каждой операции с нечётным номером выведите соответствующее число \(n_i\) в ней. В частности, выведите \(\lceil \frac{t}{2} \rceil\) целых чисел \(n_i\) (\(0 \le n_i \le 30\)), обозначающих замену \(x\) на \(x \oplus (2^{n_i} - 1)\) в соответствующем шаге.

В случае если существует несколько возможных ответов, выведите любой из них. Можно показать, что в ограничениях задачи существует хотя бы один возможный ответ.

Примечание

В первом примере один из возможных способов преобразовывать число выглядит следующим образом: \(39 \to 56 \to 57 \to 62 \to 63\). Или более подробно:

  1. Выбираем \(n = 5\). \(x\) заменяется на \(39 \oplus 31\), то есть \(56\).
  2. Увеличиваем \(x\) на \(1\), тем самым он становится равным \(57\).
  3. Выбираем \(n = 3\). \(x\) заменяется на \(57 \oplus 7\), то есть \(62\).
  4. Увеличиваем \(x\) на \(1\), тем самым он становится равным \(63 = 2^6 - 1\).

Во втором и третьем примере число можно не преобразовывать.

C. Неко занимается математикой

математика Перебор теория чисел *1800

Неко любит делители. На последнем уроке по теории чисел он получил интересное упражнение от своего учителя.

У Неко есть два целых числа \(a\) и \(b\). Он должен найти такое целое неотрицательное число \(k\), что наименьшее общее кратное чисел \(a+k\) и \(b+k\) является минимально возможным. В случае если есть несколько подходящих чисел \(k\), он должен выбрать наименьшее из них.

Учитывая его математические способности, Неко без особого труда получил «Неправильный ответ» по этой задаче. Не могли бы вы помочь ему решить её?

Входные данные

Единственная строка содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)).

Выходные данные

Выведите наименьшее неотрицательное число \(k\) (\(k \ge 0\)), такое что наименьшее общее кратное чисел \(a+k\) и \(b+k\) является минимально возможным.

В случае если есть несколько целых чисел \(k\), приводящих к одному и тому же наименьшему общему кратному, выведите наименьшее из них.

Примечание

В первом пример следует выбрать \(k = 2\), тогда наименьшее общее кратное \(6 + 2\) и \(10 + 2\) будет равно \(24\), что является наименьшим возможным наименьшим общим кратным.

A. Сервал и автобус

математика Перебор *1000

Идет сильный дождь. Но Сервалу сегодня исполнилось 3 года, и это его первый день, когда он должен пойти в детский сад! К сожалению, он живет далеко от детского сада, а его отец слишком занят, чтобы отвезти его туда. Единственный выбор для этого бедного маленького мальчика в этот дождливый день — ждать автобуса. При таких обстоятельствах Сервал воспользуется первым попавшимся автобусом, куда бы он ни поехал. Если одновременно придет несколько автобусов, он выберет любой из них случайно.

Сервал придет на автобусную остановку во время \(t\), через эту автобусную остановку проходят \(n\) автобусных маршрутов. Первый автобус \(i\)-го маршрута приходит в момент времени \(s_i\) минут, а каждый следующий автобус этого маршрута приходит на \(d_i\) минут позже предыдущего.

Вы — лучший друг Сервала, и вы хотите узнать, на какой автобус он сядет. Если одновременно приходит несколько автобусов, вы можете вывести любой из них.

Входные данные

Первая строка содержит два целых числа \(n\) и \(t\) (\(1\leq n\leq 100\), \(1\leq t\leq 10^5\)) — количество автобусных маршрутов и время прибытия Сервала.

Каждая из следующих \(n\) строк содержит два целых числа \(s_i\) и \(d_i\) (\(1\leq s_i,d_i\leq 10^5\)) — время прибытия первого автобуса этого маршрута и интервал между двумя автобусами этого маршрута.

Выходные данные

Выведите одно число — номер автобуса, на который сядет Сервал. Если есть несколько возможных ответов, вы можете вывести любой.

Примечание

В первом примере первый автобус первого маршрута приходит во время \(6\), а автобус второго маршрута приходит во время \(9\), поэтому ответом является первый маршрут.

Во втором примере третий автобус приходит во время \(5\), поэтому это и есть ответ.

В третьем примере автобусы первого маршрута приходят во времена \(2\), \(4\), \(6\), \(8\) и так далее, автобусы второго маршрута приходят во времена \(2\), \(5\), \(8\) и так далее, автобусы третьего маршрута приходят во времена \(2\), \(6\), \(10\) и так далее, поэтому \(1\) и \(2\) являются правильными ответами, а \(3\) — нет.

F. Сервал и бонусная задача

дп Комбинаторика математика Теория вероятностей *2600

Продвигаясь в своем пути к становлению математиком, Сервал стал студентом математического Университета Джапари. На уроке математики учитель научил его вычислять математическое ожидание длины случайного подотрезка данного отрезка. Затем он оставил бонусную задачу в качестве домашнего задания. Эта бонусная задача — расширить разобранную задачу на произвольный случай, как описано ниже.

Задан отрезок длиной \(l\). Мы случайным образом выбираем \(n\) отрезков, выбирая равновероятно две точки (возможно, с нецелыми координатами) из данного отрезка и получая отрезок между двумя этими точками. Вам дано количество случайных отрезков \(n\) и еще одно целое число \(k\). \(2n\) концов выбранных отрезков делят исходный отрезок на \((2n+1)\) отрезков. Ваша задача — вычислить математическое ожидание суммарной длины тех из отрезков, которые покрыты хотя бы \(k\) отрезками из \(n\) случайных отрезков.

Вам требуется вычислить ответ на эту задачу по модулю \(998244353\).

Входные данные

Единственная строка содержит три целых числа \(n\), \(k\) и \(l\) (\(1\leq k \leq n \leq 2000\), \(1\leq l\leq 10^9\)).

Выходные данные

Выведите одно целое число — математическое ожидание суммарной длины всех отрезков, покрытых хотя бы \(k\) отрезками из \(n\) случайных отрезков по модулю \(998244353\).

Формально, пусть \(M = 998244353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом примере математическое ожидание равно \(\int_0^1 \int_0^1 |x-y| \,\mathrm{d}x\,\mathrm{d}y = {1\over 3}\), а \(3^{-1}\) по модулю \(998244353\) равно \(332748118\).

A. Восстановление трех чисел

математика *800

Поликарп загадал три целых положительных числа \(a\), \(b\) и \(c\). Эти числа он держит в секрете, но он выписал на доску в случайном порядке четыре числа — их попарные суммы (три числа) и сумму всех трех чисел (одно число). Таким образом, на доске в случайном порядке записаны четыре числа: \(a+b\), \(a+c\), \(b+c\) и \(a+b+c\).

По заданным числам восстановите три загаданных Поликарпом числа \(a\), \(b\) и \(c\). Выведите три загаданные числа в любом порядке.

Обратите внимание, что среди загаданных чисел \(a\), \(b\) и \(c\) могут быть одинаковые значения (в том числе допустимо, что \(a=b=c\)).

Входные данные

В единственной строке входных данных записаны четыре целых положительных числа \(x_1, x_2, x_3, x_4\) (\(2 \le x_i \le 10^9\)) — числа на доске, заданные в случайном порядке. Гарантируется, что для заданных чисел \(x_1, x_2, x_3, x_4\) ответ существует.

Выходные данные

Выведите такие целые положительные \(a\), \(b\) и \(c\), что четыре числа на доске — это записанные в некотором порядке значения \(a+b\), \(a+c\), \(b+c\) и \(a+b+c\). Выведите \(a\), \(b\) и \(c\) в любом порядке. Если ответов несколько, то выведите любой из них. Гарантируется, что ответ существует.

B. Сделай равными

математика *1200

Вам задана последовательность \(a_1, a_2, \dots, a_n\), которая состоит из \(n\) целых чисел.

Вы можете выбрать любое неотрицательное целое число \(D\) (т.е. \(D \ge 0\)) и для каждого \(a_i\) совершить одно из следующих действий:

  • прибавить \(D\) (только один раз), т.е. выполнить \(a_i := a_i + D\);
  • вычесть \(D\) (только один раз), т.е. выполнить \(a_i := a_i - D\);
  • оставить значение \(a_i\) без изменения.

Возможно, что после какой-либо операции значение какого-либо \(a_i\) может стать отрицательным.

Ваша задача выбрать такое минимальное неотрицательное целое \(D\) и выполнить последовательность действий, что все \(a_i\) станут равными (т.е. \(a_1=a_2=\dots=a_n\)).

Выведите искомое \(D\) или, если требуемое \(D\) найти невозможно, выведите -1.

Например, для массива \([2, 8]\) значение \(D=3\) является минимально возможным, потому что Вы можете получить массив \([5, 5]\), если Вы добавите \(D\) к \(2\) и вычтете \(D\) из \(8\). А для массива \([1, 4, 7, 7]\) значение \(D=3\) также является минимально возможным. Вы можете добавить его к \(1\) и вычесть его из \(7\) и получить массив \([4, 4, 4, 4]\).

Входные данные

В первой строке входных данных записано одно целое число \(n\) (\(1 \le n \le 100\)) — длина последовательности \(a\).

Вторая строка входных данных содержит последовательность из \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)) — элементы последовательности \(a\).

Выходные данные

Выведите одно целое число — такое минимальное неотрицательное целое значение \(D\), что его возможно прибавить к некоторым \(a_i\), вычесть из некоторых \(a_i\) и оставить остальные \(a_i\) без изменения так, что в результате последовательность все элементы последовательности будут одинаковыми.

Если требуемое значение \(D\) найти невозможно, выведите -1.

C. Котик-гурман

математика реализация *1400

У Поликарпа есть котик, который настоящий гурман! В зависимости от дня недели он ест определенный тип еды:

  • по понедельникам, четвергам и воскресеньям он ест рыбный корм;
  • по вторникам и субботам он ест рагу из кролика;
  • в остальные дни недели он ест куриную отбивную.

Поликарп планирует отправиться в поход и уже собрал рюкзак. В рюкзаке находится:

  • \(a\) порций рыбного корма;
  • \(b\) порций рагу из кролика;
  • \(c\) порций куриных отбивных.

Поликарп хочет выбрать такой день недели для начала похода, чтобы его котик как можно дольше мог питаться без пополнения запасов. Выведите максимальное количество дней, сколько в походе котик может питаться без пополнения запасов, если Поликарп выбирает день недели для старта похода оптимальным образом.

Входные данные

В первой строке входных данных записаны три целых положительных числа \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 7\cdot10^8\)) — количество порций рыбного корма, рагу из кролика и куриных отбивных в рюкзаке Поликарпа соответственно.

Выходные данные

Выведите максимальное количество дней, сколько в походе котик может питаться без пополнения запасов, если Поликарп выбирает день недели для старта похода оптимальным образом.

Примечание

В первом примере поход следует начать в воскресенье. В таком случае, в воскресенье и понедельник котик съест рыбный корм, во вторник — рагу из кролика и в среду — куриную отбивную. Таким образом, после четырёх дней похода все запасы подойдут к концу.

Во втором примере поход можно начать в любой из дней недели. В любом случае запасов хватает ровно на одну неделю.

В третьем примере поход можно начать в любой день, кроме среды, субботы и воскресенья. В таком случае, за три дня котик съест три разных блюда. Несмотря на то, что после трёх дней похода в рюкзаке останется \(99\) порций рагу из кролика на четвертый день похода котику будет нечего есть.

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\). Если существует несколько возможных ответов, выведите любой.

C. Будильники повсюду

математика теория чисел *1300

Сейчас Иван собирается пойти спать и хочет поставить будильник. Завтра произойдет много важных событий, \(i\)-е из них начнется в \(x_i\)-ю минуту. Иван не хочет пропускать ни одного из них, поэтому он хочет поставить будильник таким образом, чтобы он звонил в течение минут \(x_1, x_2, \dots, x_n\), чтобы он смог проснуться в течение каждой из этих минут (заметьте, что не важно, что будильник может звонить в течение любой другой минуты).

Иван может выбрать два свойства будильника — первую минуту, когда он зазвонит (обозначим ее как \(y\)) и интервал между двумя последовательными звонками (обозначим его за \(p\)). После того, как Иван поставит будильник, он будет звонить в течение минут \(y, y + p, y + 2p, y + 3p\) и так далее.

Иван может выбрать любую минуту как первую, но он не может выбирать произвольное значение \(p\). Он может выбрать его только среди значений \(p_1, p_2, \dots, p_m\) (его телефон не поддерживает других вариантов этого свойства).

Таким образом, Иван хочет выбрать первую минуту \(y\), когда будильник начнет звонить и интервал между двумя последовательными звонками \(p_j\) таким образом, чтобы он звонил в течение всех заданных минут \(x_1, x_2, \dots, x_n\) (и не важно, что он может звонить в любые другие минуты).

Ваша задача — сообщить первую минуту \(y\) и индекс \(j\) такие, что если Иван поставит будильник со свойствами \(y\) и \(p_j\), то он будет звонить в течение всех заданных минут \(x_1, x_2, \dots, x_n\) или сказать, что невозможно выбрать такие значения заданных свойств. Если существует несколько ответов, вы можете вывести любой.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5, 1 \le m \le 3 \cdot 10^5\)) — количество событий и количество возможных значений интервалов между звонками.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^{18}\)), где \(x_i\) равно номеру минуты, когда начнется \(i\)-е событие. Гарантируется, что все \(x_i\) заданы в возрастающем порядке (то есть выполняется условие \(x_1 < x_2 < \dots < x_n\)).

Третья строка входных данных содержит \(m\) целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_j \le 10^{18}\)), где \(p_j\) равно \(j\)-му значению интервала между двумя последовательными сигналами.

Выходные данные

Если невозможно выбрать такие значения \(y\) и \(j\), что все ограничения выполняются, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке. Затем выведите два целых числа \(y\) (\(1 \le y \le 10^{18}\)) и \(j\) (\(1 \le j \le m\)) во второй строке, где \(y\) — первая минута, когда будильник Ивана должен начать звонить, а \(j\) — индекс значения интервала между двумя последовательными звонками (значения пронумерованы от \(1\) до \(m\) в порядке входных данных) такие, что будильник будет звонить в течение всех заданных минут \(x_1, x_2, \dots, x_n\). Если существует несколько возможных ответов, выведите любой.

E. Угадай корень

интерактив математика Перебор *2200

Жюри загадало многочлен \(f(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + \dots + a_k \cdot x^k\). \(k \le 10\) и все \(a_i\) — целые числа с \(0 \le a_i < 10^6 + 3\). Гарантируется, что существует хотя бы одно \(i\), для которого \(a_i > 0\).

Теперь жюри просит вас найти такое \(x_0\), что \(f(x_0) \equiv 0 \mod (10^6 + 3)\) или сказать, что такого \(x_0\) не существует.

Вы можете задать не более \(50\) запросов: вы спрашиваете значение \(x_q\), а жюри говорит вам значение \(f(x_q) \mod (10^6 + 3)\).

Заметьте, вывод ответа не является запросом.

Протокол взаимодействия

Чтобы спросить значение, выведите "? \(x_q\)" \((0 \le x_q < 10^6 + 3)\). Жюри ответит вам единственным числом \(f(x_q) \mod (10^6 + 3)\). Если вы получите в ответ \(−1\) (из-за неправильного запроса), завершите программу, чтобы избежать получения другого вердикта.

После вывода запроса не забудьте сбросить буфер, иначе вы можете получить вердикт Idleness limit exceeded. Для этого вы можете использовать:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • изучите документацию для других языков.

Когда вы готовы вывести ответ, выведите "! \(x_0\)", где \(x_0\) — ответ на задачу, либо \(-1\) если такого значения \(x_0\) не существует.

Вы можете задать не более \(50\) запросов.

Формат взломов

Для взломов используйте следующий формат:

В единственной строке выведите \(11\) целых чисел \(a_0, a_1, \dots, a_{10}\) (\(0 \le a_i < 10^6 + 3\), \(\max\limits_{0 \le i \le 10}{a_i} > 0\)) — соответствующие коэффициенты многочлена.

Примечание

Многочлен из первого примера — это \(1000002 + x^2\).

Многочлен из второго примера — это \(1 + x^2\).

F. Мешок с карточками

дп математика Теория вероятностей *2300

У вас есть мешок с \(n\) карточками. На каждой карточке написано какое-то число; на \(i\)-й карточке написано число \(a_i\).

Вы играете в следующую игру. Во время каждого хода вы берете и удаляете случайную карточку из мешка (все карточки, оставшиеся в мешке, выбираются равновероятно). Больше ничего в первый ход не происходит, но во время каждого следующего хода после удаления карточки из мешка (обозначим число, написанное на ней, как \(x\)) вы сравниваете ее с карточкой, которая была удалена на предыдущий ход (обозначим число, написанное на ней, как \(y\)). Есть три возможных варианта:

  • если \(x < y\), вы проиграли, игра заканчивается;
  • если \(x = y\), вы выиграли, игра заканчивается;
  • если \(x > y\), игра продолжается.

Если в мешке не осталось карточек — вы проиграли. Карточки не возвращаются в мешок после того, как вы их удалили.

Вам нужно посчитать вероятность выиграть в этой игре. Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{P}{Q}\), где \(P\) и \(Q\) — положительные целые числа, и \(Q \neq 0\), \(P \le Q\). Вам нужно вывести \(P \cdot Q^{−1} ~(mod ~~ 998244353)\).

Входные данные

Первая строка содержит число \(n\) (\(2 \le n \le 5000\)) — количество карточек в мешке.

Следующая строка содержит \(n\) чисел \(a_1, a_2, \dots a_n\) (\(1 \le a_i \le n\)) — \(i\)-е число обозначает число, записанное на \(i\)-й карточке.

Выходные данные

Выведите одно число — вероятность выиграть в игре по модулю \(998244353\).

Примечание

В первом тестовом примере вероятность выиграть равна \(\frac{1}{10}\).

Во втором тестовом примере вероятность выиграть равна \(1\).

В третьем тестовом примере вероятность выиграть равна \(0\).

В четвертом тестовом примере вероятность выиграть равна \(\frac{1}{4}\).

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\)-го дня. Если существует несколько возможных ответов, вы можете вывести любой из них.

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\) конфеты.

B. Минимальная уникальная подстрока

Конструктив математика Строки *2200

Пусть у вас есть строка \(s\) из символов "0" и "1". Будем называть строку \(t\) подстрокой строки \(s\), если существует \(1 \leq l \leq |s| - |t| + 1\), такое что \(t = s_l s_{l+1} \ldots s_{l + |t| - 1}\). Будем называть подстроку \(t\) строки \(s\) уникальной, если существует единственное такое \(l\).

Например, пусть \(s = \)"1010111". Тогда \(t = \)"010" является уникальной подстрокой \(s\), так как существует единственное подходящее \(l = 2\). Заметим, что \(t = \)"10" не является уникальной подстрокой \(s\), так как подходят \(l = 1\) и \(l = 3\). А, например, \(t =\)"00" вообще не является подстрокой строки \(s\), так как не существует подходящих \(l\).

Сегодня Вася на уроке информатики решал такую задачу: дана строка из символов "0" и "1", надо найти длину её кратчайшей уникальной подстроки. Написав решение к этой задаче, он решил его протестировать. Он просит помощи у вас.

Вам даны \(2\) таких целых положительных числа \(n\) и \(k\), что \((n \bmod 2) = (k \bmod 2)\), где \((x \bmod 2)\) — это операция взятия остатка числа \(x\) при делении на \(2\). Найдите любую строку \(s\) состоящую из \(n\) символов "0" и "1", такую что наименьшая длина её уникальной подстроки равна \(k\).

Входные данные

В первой строке даны два целых числа \(n\) и \(k\), разделённые пробелом (\(1 \leq k \leq n \leq 100\,000\), \((k \bmod 2) = (n \bmod 2)\)).

Выходные данные

Выведите строку \(s\) длины \(n\), состоящую из символов "0" и "1". Минимальная длина уникальной подстроки \(s\) должна равняться \(k\). Среди таких строк разрешается вывести любую. Гарантируется, что хотя бы одна подходящая строка существует.

Примечание

В первом тесте легко видеть, что единственной уникальной подстрокой строки \(s = \)"1111" является вся строка \(s\), длина которой \(4\).

Во втором тесте у строки \(s = \)"01010" минимальной по длине уникальной подстрокой является строка \(t =\)"101" длина которой \(3\).

Во третьем тесте у строки \(s = \)"1011011" минимальной по длине уникальной подстрокой является строка \(t =\)"110" длина которой \(3\).

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\) теста:

E. Странный прибор

Бинарный поиск Деревья интерактив математика *3400

Это интерактивная задача.

Вася обожает решать загадки и разгадывать головоломки. На этот раз он нашел странный прибор и хочет выяснить принцип его работы.

Этот прибор зашифрован с помощью дерева (связного неориентированного графа без циклов), состоящего из \(n\) вершин, пронумерованных целыми числами от \(1\) до \(n\). Чтобы решить головоломку надо угадать это дерево.

К счастью прибор умеет выполнять одну операцию, исходя из которой надо разгадать его шифр. Можно ввести в прибор последовательность \(d_1, d_2, \ldots, d_n\) целых неотрицательных чисел. На приборе есть \(n\) лампочек, \(i\)-я из которых отвечает за \(i\)-ю вершину дерева-шифра. Для всех \(i\) из этих лампочек \(i\)-я загорится, если существует такая вершина дерева-шифра с номером \(j \neq i\), что \(dist(i, j) \leq d_j\). Здесь \(dist(i, j)\) обозначает расстояние между вершинами \(i\) и \(j\) в дереве-шифре, то есть количество ребер в простом пути между вершинами \(i\) и \(j\).

Вася хочет за \(\leq 80\) операций с прибором решить головоломку и угадать дерево-шифр. Помогите ему!

Протокол взаимодействия

В начале вашей программе вводится единственное целое число \(n\) — количество вершин в дереве-шифре прибора (\(2 \leq n \leq 1000\)).

Далее вы можете выполнять операции в следующем формате. Сначала выведите символ "?" (без кавычек) и за ним \(n\) целых чисел \(d_1, d_2, \ldots, d_n\), разделенных пробелами. Заметьте, что в операциях для всех \(i\) должно быть выполнено неравенство \(0 \leq d_i < n\). В ответ будет выведена строка \(s\) длины \(n\), состоящая из символов "0" и "1" (без кавычек). Для всех \(i\) символ \(s_i\) будет равен "0", если у прибора не включилась лампочка, соответствующая \(i\)-й вершине дерева-шифра и "1", иначе.

После нескольких запросов вы должны вывести угаданное дерево. Для этого в первой строке выведите единственный символ "!" (без кавычек). В следующих \(n-1\) строках выведите по \(2\) целых числа \(a_i\), \(b_i\) — номера вершин, соединяющих \(i\)-е ребро дерева. Выведенные числа должны удовлетворять условиям \(1 \leq a_i, b_i \leq n\) и \(a_i \neq b_i\). Эти ребра должны образовывать дерево, совпадающее с загаданным. Выводить ребра можно в любом порядке. После этого ваша программа должна завершиться.

Гарантируется, что в каждом тесте дерево-шифр будет зафиксировано заранее и не будет меняться в зависимости от выполняемых операций.

Ваша программа может выполнить от \(0\) до \(80\) операций с прибором и после этого сообщить дерево, совпадающее с загаданным.

Если ваша программа сделает больше \(80\) операций, то она может получить любой вердикт, потому что будет считывать данные из закрытого потока ввода. Также, если ваша программа сделает операцию или выведет ответ в неверном формате, она может получить любой вердикт. Будьте внимательны.

Не забудьте сбрасывать буфер вывода после того, как выведете данные для операции или ответ.

Чтобы сбросить буфер вывода вы можете использовать:

  • fflush(stdout) в C++.
  • System.out.flush() в Java.
  • stdout.flush() в Python.
  • flush(output) в Pascal.
  • Прибегните к документации других языков.

Взломы:

Первая строка должна содержать единственное целое число \(n\) — количество вершин в дереве-шифре (\(2 \leq n \leq 1000\)). Следующая \(n-1\) строка должна содержать по \(2\) целых числа \(a_i\), \(b_i\) — номера вершин, соединяющих \(i\)-е ребро дерева (\(1 \leq a_i, b_i \leq n\), \(a_i \neq b_i\)). Выведенные ребра должны образовывать дерево. Будьте внимательны, лишние пробелы или переводы строк запрещены.

Примечание

Дерево-шифр из первого теста выглядит так:

Таблица попарных расстояний между вершинами выглядит так:

  • Если сделать операцию, в которой \(d = [0, 0, 0, 0, 0]\), то ни одна лампочка не загорится, потому что \(dist(i, j) > 0\) при всех \(i \neq j\).
  • Если сделать операцию, в которой \(d = [1, 1, 2, 0, 2]\), то загорятся все лампочки, кроме лампочки, соответсвующей вершине дерева-шифра с номером \(3\). Например, лампочка, соответсвующая вершине с номером \(1\) загорится, потому что \(dist(1, 5) = 1 \leq 2 = d_5\).
  • Если сделать операцию, в которой \(d = [0, 0, 0, 1, 0]\), то загорятся все лампочки, кроме лампочек, соответсвующих вершинам дерева-шифра с номерами \(4\) и \(5\).
  • Если сделать операцию, в которой \(d = [0, 1, 0, 0, 1]\), то загорятся только лампочки, соответсвующие вершинам дерева-шифра с номерами \(1\) и \(4\).

F. Плотности подмассивов

дп математика *3500

Есть некоторое целое положительное число \(c\). Будем называть массив \(a_1, a_2, \ldots, a_n\) целых чисел \(c\)-массивом, если для всех \(i\) выполнено \(1 \leq a_i \leq c\). Будем называть \(c\)-массив \(b_1, b_2, \ldots, b_k\) подмассивом \(c\)-массива \(a_1, a_2, \ldots, a_n\), если существует такой набор из \(k\) индексов \(1 \leq i_1 < i_2 < \ldots < i_k \leq n\), такой, что \(b_j = a_{i_j}\) для всех \(1 \leq j \leq k\). Плотностью \(c\)-массива \(a_1, a_2, \ldots, a_n\) будем называть максимальное целое неотрицательное число \(p\), такое что любой \(c\)-массив, состоящий из \(p\) чисел, будет являться подмассивом \(a_1, a_2, \ldots, a_n\).

Вам дано число \(c\) и некоторый \(c\)-массив \(a_1, a_2, \ldots, a_n\). Найдите для всех \(0 \leq p \leq n\) количество последовательностей индексов \(1 \leq i_1 < i_2 < \ldots < i_k \leq n\) для \(1 \leq k \leq n\), таких что плотность массива \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) равна \(p\). Так как эти количества могут получиться очень большими, найдите их по модулю \(998\,244\,353\).

Входные данные

В первой строке находятся два целых числа \(n\) и \(c\), разделённых пробелами (\(1 \leq n, c \leq 3\,000\)). В следующей строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), разделённых пробелами (\(1 \leq a_i \leq c\)).

Выходные данные

Выведите \(n + 1\) число \(s_0, s_1, \ldots, s_n\). Число \(s_p\) должно равняться количеству последовательностей индексов \(1 \leq i_1 < i_2 < \ldots < i_k \leq n\) для \(1 \leq k \leq n\) по модулю \(998\,244\,353\), таких что плотность массива \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) равна \(p\).

Примечание

В первом примере, заметим, что плотность массива будет всегда равна его длине. Существует \(4\) последовательности индексов из одного индекса, \(6\) из двух, \(4\) из трех и \(1\) из четырех.

Во втором примере, единственная последовательность индексов, такая что получится массив ненулевой плотности это все индексы, так как иначе будет не хватать хотя бы одного из чисел от \(1\) до \(3\) в массиве, а значит он не будет удовлетворять условию плотности для \(p \geq 1\).

A. Куча из камней

математика реализация *800

У Васи была куча, состоящая из нескольких камней. Он \(n\) раз либо убирал один камень из кучи, либо добавлял один камень в кучу. Куча до применения любой операции удаления всегда была непустой.

Вам даны \(n\) операций, которые сделал Вася. Найдите минимальное количество камней, которое может оказаться в конце в куче, после применения всех операций.

Входные данные

В первой строке находится одно целое число \(n\) — количество операций, сделанных Васей (\(1 \leq n \leq 100\)).

В следующей строке находится строка \(s\), состоящая из \(n\) символов, равных "-" (без кавычек) или "+" (без кавычек). Если Вася убирал камень на \(i\) операции, то \(s_i\) равно "-" (без кавычек), а если добавлял, то \(s_i\) равно "+" (без кавычек).

Выходные данные

Выведите одно целое число, равное минимальному количеству камней, которое могло остаться в куче, после применения Васей \(n\) операций.

Примечание

В первом тесте, если у Васи изначально в куче было \(3\) камня, то после применения операций станет \(0\) камней. Меньше камней оказаться не может, поэтому ответ \(0\). Также заметьте, что у Васи изначально не могло быть меньше \(3\)-x камней, так как иначе он не смог бы убрать камень из пустой кучи.

Во втором тесте, если у Васи изначально в куче было \(0\) камней, то после применения операций станет \(4\) камня. Меньше камней оказаться не может, потому что за \(4\) операции в куче становится на \(4\) камня больше. Поэтому ответ \(4\).

В третьем тесте, если у Васи изначально был \(1\) камень, то после применения операций останется \(1\) камень. Можно понять, что меньше камней быть не может.

В четвертом тесте, если у Васи изначально было \(0\) камней, то после применения операций станет \(3\) камня.

B. Коэффициент расширения массива

математика реализация *1300

Массив неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\) будем называть \(k\)-расширением, для некоторого целого неотрицательного \(k\), если для всех возможных пар индексов \(1 \leq i, j \leq n\) выполнено неравенство \(k \cdot |i - j| \leq min(a_i, a_j)\). Коэффициентом расширения массива \(a\) будем называть такое максимальное целое число \(k\), что массив \(a\) является \(k\)-расширением. Любой массив является 0-расширением, так что коэффициент расширения всегда существует.

Вам дан массив неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\). Найдите его коэффициент расширения.

Входные данные

В первой строке задано одно целое число \(n\) — количество элементов массива \(a\) (\(2 \leq n \leq 300\,000\)). В следующей строке находится \(n\) неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\), разделенных пробелами (\(0 \leq a_i \leq 10^9\)).

Выходные данные

Выведите одно целое число — коэффициент расширения массива \(a_1, a_2, \ldots, a_n\).

Примечание

В первом тесте коэффициент расширения массива \([6, 4, 5, 5]\) равен \(1\), так как \(|i-j| \leq min(a_i, a_j)\), так как все числа \(a_i \geq 3\). С другой стороны, этот массив не является \(2\)-расширением, так как неверно, что \(6 = 2 \cdot |1 - 4| \leq min(a_1, a_4) = 5\).

Во втором тесте коэффициент расширения массива \([0, 1, 2]\) равен \(0\), так как этот массив не является \(1\)-расширением, но является \(0\)-расширением.

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\) групп кошек.

C2. Передача энергии (усложнённая версия)

геометрия математика реализация Структуры данных *1900

Эта задача такая же как и предыдущая, но с большими ограничениями.

Воскресным утром, три друга Селена, Широ и Кэти решили отправится на прогулку к ближайшей электростанции (не повторяйте этого дома). Когда они туда пришли, кошки впечатлились огромной системой передачи энергии, состоящей из множества дымоходов, электрических полюсов и проводов. Будучи кошками, они сочли эти вещи просто гигантскими.

На входе на станцию висит карта, описывающая систему проводов электростанции. Селена лучше всего из друзей разбирается в математике. Он решил нарисовать карту на декартовой плоскости. Теперь каждый полюс это точка по координатам \((x_i, y_i)\). Так как все полюса различны, то различны и точки, представляющие их. Также каждые два полюса соединены друг с другом проводом, представляющим из себя бесконечную в обе стороны прямую на плоскости. В случае если более двух полюсов лежат на одной прямой, то они все соединены одним общим проводом.

Селена думает, что когда два различных электрических провода пересекаются, то между ними может возникать опасная интерференция. Поэтому он интересуется, сколько пар проводов пересекаются?

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 1000\)) — количество электрических полюсов.

Каждая из \(n\) следующих строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^4 \le x_i, y_i \le 10^4\)) — координаты полюсов.

Гарантируется что все эти \(n\) точек различны.

Выходные данные

Выведите одно целое число — количество пересекающихся пар проводов.

Примечание

В первом примере:

Во втором примере:

Обратите внимание, что три полюса \((0, 0)\), \((0, 2)\) и \((0, 4)\) соединены одним проводом.

В третьем примере:

E. Волшебные перестановки

битмаски графы Конструктив математика Перебор Структуры данных *2400

Куро только что узнал о перестановках и этого его вдохновило придумать новый вид перестановок. Он выбрал \(n\) различных целых положительных чисел и сделал из них множество \(S\). Теперь он определяет волшебную перестановку следующим образом:

  • Это перестановка всех целых чисел от \(0\) до \(2^x - 1\), где \(x\) это какое-то неотрицательное целое число.
  • Побитовое исключающее или любых двух соседних элементов перестановки лежит в множестве \(S\).

Так как Куро очень восхищённо относится к волшебным перестановкам, то он хочет создать самую длинную возможную волшебную перестановку. Иначе говоря, он хочет найти такое наибольшее неотрицательное целое число \(x\), что существует волшебная перестановка целых чисел от \(0\) до \(2^x - 1\). Поскольку он немного новичок в вопросе перестановок, он хочет чтобы вы ему помогли и нашли это \(x\), а также волшебную перестановку для этого \(x\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество элементов в множестве \(S\).

Вторая строка содержит \(n\) различных целых чисел \(S_1, S_2, \ldots, S_n\) (\(1 \leq S_i \leq 2 \cdot 10^5\)) — элементы множества \(S\).

Выходные данные

В первой строке выведите наибольшее неотрицательное целое число \(x\), такое что существует волшебная перестановка чисел от \(0\) до \(2^x - 1\).

Затем выведите \(2^x\) целых чисел задающую волшебную перестановку чисел от \(0\) до \(2^x - 1\). В случае если существует несколько таких волшебных перестановок, выведите любую из них.

Примечание

В первом примере \(0, 1, 3, 2\) образует волшебную перестановку так как:

  • \(0 \oplus 1 = 1 \in S\)
  • \(1 \oplus 3 = 2 \in S\)
  • \(3 \oplus 2 = 1 \in S\)

Где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

A. Остаток

математика реализация *1100

Вам задано длинное десятичное число, состоящее из \(n\) цифр. Гарантируется, что в нем отсутствуют лидирующие нули. Каждая цифра этого числа равна либо 0, либо 1.

Вы можете совершать операции над этим числом некоторое (возможно, нулевое) количество раз. Каждая операция позволяет вам изменить любую цифру этого числа; вы можете изменить 0 на 1 или 1 на 0. Возможно, что после какой-то операции вы получите число с лидирующими нулями, но это не важно для этой задачи.

Вам также задано два целых числа \(0 \le y < x < n\). Ваша задача — посчитать минимальное количество операций, которое вам необходимо совершить, чтобы получить число, которое имеет остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Входные данные

Первая строка входных данных содержит три целых числа \(n, x, y\) (\(0 \le y < x < n \le 2 \cdot 10^5\)) — длина числа и числа \(x\) и \(y\), соответственно.

Вторая строка входных данных содержит одно десятичное число, состоящее из \(n\) цифр, каждая цифра этого числа равна либо 0, либо 1. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое необходимо совершить, чтобы получить число, имеющее остаток \(10^y\) по модулю \(10^x\). Иными словами, полученное число должно иметь остаток \(10^y\) при делении на \(10^x\).

Примечание

В первом тестовом примере число будет равно \(11010100100\) после совершения одной операции. Оно имеет остаток \(100\) по модулю \(100000\).

Во втором тестовом примере число будет равно \(11010100010\) после применения трех операций. Оно имеет остаток \(10\) по модулю \(100000\).

D. Почти все делители

математика теория чисел *1600

Мы загадали некоторые целое число \(x\). Вам задан список почти всех его делителей. Почти всех означает, что в списке есть все делители кроме \(1\) и \(x\).

Ваша задача — найти минимально возможное целое число \(x\), которое может быть загаданным числом, или сказать, что входные данные противоречивы и невозможно найти такое число.

Вам необходимо ответить на \(t\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 25\)) — количество запросов. Далее следуют \(t\) запросов.

Первая строка запроса содержит одно целое число \(n\) (\(1 \le n \le 300\)) — количество делителей в списке.

Вторая строка запроса содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(2 \le d_i \le 10^6\)), где \(d_i\) равно \(i\)-му делителю заданного числа. Гарантируется, что все значения \(d_i\) различны.

Выходные данные

Выведите ответ на каждый запрос.

Если входные данные противоречивы и невозможно найти такое число \(x\), что заданный список делителей — это список почти всех его делителей, выведите -1. Иначе выведите минимально возможное такое \(x\).

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\). Заметьте, что вы должны минимизировать ответ, а не его остаток.

B. Больше гласных!

Конструктив математика теория чисел *1100

Том любит гласные, он обожает длинные слова с большим количеством гласных букв. Его любимые слова — те, которые набиты гласными. Мы считаем, что слово длины \(k\) набито гласными, если существуют такие положительные целые числа \(n\) и \(m\), что \(n\cdot m = k\), и если записать буквы слова в таблицу с \(n\) строками и \(m\) столбцами (сначала заполняется первая строка, потом вторая и так далее, каждая строка заполняется слева направо), то каждая гласная буква латинского алфавита встречается (один или более раз) в каждой строке и каждом столбце.

Вам дано целое число \(k\). Найдите набитое гласными слово длины \(k\) или выведите \(-1\), если такого слова не существует.

Гласными буквами латинского алфавита в этой задаче считаются буквы «a», «e», «i», «o», «u». Словом в данной задаче называется любая последовательность строчных букв латинского алфавита.

Входные данные

Единственная строка содержит одно целое число \(k\) (\(1\leq k \leq 10^4\)) — необходимую длину слова.

Выходные данные

Выведите одну строку, содержащую набитое гласными слово длины \(k\), состоящее только из строчных букв латинского алфавита, или \(-1\), если таких слов нет.

Если существует несколько таких слов, выведите любое из них.

Примечание

Во втором примере слово «agoeuioaeiruuimaeoieauoweouoiaouimae» может быть записано в таблицу \(6 \times 6\):

Видно, что в каждом столбце и каждой строке есть все гласные.

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\).

E. НОКи должны быть большими

битмаски Конструктив математика Перебор теория чисел *2100

Даша-путешественница решила использовать все заработанные за несколько лет отчисления на шоппинг. А где же еще лучше магазины, чем в Нлогонии?

Всего в Нлогонии \(n\) магазинов, пронумерованных от \(1\) до \(n\). В \(i\)-м из этих магазинов можно купить положительное целое число \(a_i\).

В каждый из последних \(m\) дней Даша покупала по одному числу в некоторых магазинах. В каждый из этих дней лисенок Жулик покупал по одному числу во всех магазинах, в которых Даша не купила число в этот день.

Дора считает, что Жулик соперничает с ней; она считает, что выиграла у Жулика в день \(i\), если и только если наименьшее общее кратное чисел, которые она купила в \(i\)-й день строго больше наименьшего общего кратного чисел, которые купил в \(i\)-й день Жулик.

Наименьшем общем кратном (НОК) набора целых чисел называется наименьшее положительное целое число, делящееся на все числа из набора.

К сожалению, Даша забыла, чему равны значения \(a_i\). Помогите Даше определить, существуют ли такие положительные целые числа \(a_i\), что она выигрывала у Жулика каждый день. Сами значения \(a_i\) находить не нужно.

Обратите внимание, возможно, что некоторые значения \(a_i\) в решении совпадают.

Входные данные

Первая строка содержит два целых числа \(m\) и \(n\) (\(1\leq m \leq 50\), \(1\leq n \leq 10^4\)) — количество дней и количество магазинов.

Далее следуют \(m\) строк, \(i\)-я из них начинается с целого числа \(s_i\) (\(1\leq s_i \leq n-1\)) — количества чисел, которые купила Даша в день \(i\), а затем находятся \(s_i\) различных целых чисел — номера магазинов, в которых Даша купила число в день \(i\). Все индексы находятся в диапазоне от \(1\) до \(n\).

Выходные данные

Выведите единственную строку, содержащую "possible", если существуют положительные целые числа \(a_i\) такие, что в каждый день наименьшее общее кратное чисел, купленных Дашей, было строго больше наименьшего общего кратного всех чисел, купленных Жуликом в тот же день. В противном случае выведите "impossible".

Обратите внимание, вам не нужно находить сами подходящие числа.

Примечание

В первом примере возможные числа \(a_i\) равны \(3, 4, 3, 5, 2\). В первый день Даша покупает числа \(3, 4\) и \(3\), НОК которых равен \(12\), а Жулик покупает числа \(5\) и \(2\), НОК которых равен \(10\). Во второй день Дора покупает числа \(3, 5\) и \(2\), НОК которых равен \(30\), а Жулик покупает числа \(3\) и \(4\), НОК которых равен \(12\).

B. Lost Numbers

интерактив математика Перебор разделяй и властвуй *1400

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Жюри загадало некоторый массив \(a\), состоящий из \(6\) чисел. Существуют \(6\) особых чисел — \(4\), \(8\), \(15\), \(16\), \(23\), \(42\) — и каждое из них встречается в массиве \(a\) ровно один раз (то есть \(a\) — некоторая перестановка этих чисел).

Вы не знаете ничего о их порядке в массиве, но вы можете отправить до \(4\) запросов. В каждом запросе вы выбираете два индекса \(i\) и \(j\) (\(1 \le i, j \le 6\), \(i\) и \(j\) не обязательно должны быть различны), и в ответ вы получите значение \(a_i \cdot a_j\).

Можете ли вы отгадать массив \(a\)?

Массив \(a\) в каждом тесте фиксирован заранее, тестирующая программа не пытается адаптировать его в зависимости от ваших запросов.

Протокол взаимодействия

До того, как ваша программа даст ответ на задачу, она может отправить до \(4\) запросов. Чтобы задать запрос, выведите одну строку следующего вида: \(?\) \(i\) \(j\), где \(i\) и \(j\) должны быть двумя целыми числами, удовлетворяющими условию \(1 \le i, j \le 6\). Строка, которую вы отправляете, должна заканчиваться символом перевода строки. После отправки запроса программа должна сбросить буфер вывода и прочитать ответ на запрос — строку, содержащую одно целое число \(a_i \cdot a_j\). Если вы отправите некорректный запрос (или отправите более \(4\) запросов), ответом будет строка 0. Если ваша программа получила такой ответ, она должна немедленно завершиться — иначе вы можете получить вердикт «Ошибка исполнения», «Превышено ограничение времени» или какой-нибудь другой, а не «Неправильный ответ».

Чтобы дать ответ на задачу, ваша программа должна отправить строку \(!\) \(a_1\) \(a_2\) \(a_3\) \(a_4\) \(a_5\) \(a_6\) с символом перевода строки в конце. После этого она должна сбросить буфер вывода и завершиться.

Примечание

Если вы хотите отправить взлом по этой задаче, ваш тест должен содержать ровно шесть целых чисел \(a_1\), \(a_2\), ..., \(a_6\), разделенных пробелами. Каждое из \(6\) особых чисел должно встречаться в тесте ровно один раз. Тест должен заканчиваться символом конца строки.

F. Скалярные запросы

Комбинаторика математика сортировки Структуры данных *2300

Вам задан массив \(a_1, a_2, \dots, a_n\). Все \(a_i\) попарно различные.

Определим функцию \(f(l, r)\) следующим образом:

  • создадим массив \(b_1, b_2, \dots, b_{r - l + 1}\), где \(b_i = a_{l - 1 + i}\);
  • отсортируем массив \(b\) в порядке возрастания;
  • результатом функции \(f(l, r)\) назовем значение \(\sum\limits_{i = 1}^{r - l + 1}{b_i \cdot i}\).

Посчитайте \(\left(\sum\limits_{1 \le l \le r \le n}{f(l, r)}\right) \mod (10^9+7)\). Другими словами — сумму функций \(f\) для всех подотрезков массива \(a\) по модулю \(10^9+7\).

Входные данные

В первой строке содержится целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длина массива \(a\).

Во второй строке содержится \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\), \(a_i \neq a_j\) for \(i \neq j\)) — массив \(a\).

Выходные данные

Выведите единственное число — сумму функций \(f\) для всех подотрезков массива \(a\) по модулю \(10^9+7\).

Примечание

Описание первого примера:

  • \(f(1, 1) = 5 \cdot 1 = 5\);
  • \(f(1, 2) = 2 \cdot 1 + 5 \cdot 2 = 12\);
  • \(f(1, 3) = 2 \cdot 1 + 4 \cdot 2 + 5 \cdot 3 = 25\);
  • \(f(1, 4) = 2 \cdot 1 + 4 \cdot 2 + 5 \cdot 3 + 7 \cdot 4 = 53\);
  • \(f(2, 2) = 2 \cdot 1 = 2\);
  • \(f(2, 3) = 2 \cdot 1 + 4 \cdot 2 = 10\);
  • \(f(2, 4) = 2 \cdot 1 + 4 \cdot 2 + 7 \cdot 3 = 31\);
  • \(f(3, 3) = 4 \cdot 1 = 4\);
  • \(f(3, 4) = 4 \cdot 1 + 7 \cdot 2 = 18\);
  • \(f(4, 4) = 7 \cdot 1 = 7\);

E. Xor-перестановки

Конструктив математика *3100

У жабы Михаила есть \(2^k\) целых чисел \(a_1, a_2, \ldots, a_{2^k}\).

Найдите две такие перестановки \(p\) и \(q\) целых чисел \(0, 1, \ldots, 2^k-1\), что \(a_i\) равно \(p_i \oplus q_i\) для всех возможных \(i\), или определите, что таких перестановок нет. Здесь \(\oplus\) обозначает операцию побитовое исключающее ИЛИ.

Входные данные

В первой строке записано одно целое число \(k\) (\(2 \leq k \leq 12\)), обозначающее, что размер массива равен \(2^k\).

Во второй строке записаны \(2^k\) целых чисел, разделенных пробелами: \(a_1, a_2, \ldots, a_{2^k}\) (\(0 \leq a_i < 2^k\)) — элементы данного массива.

Выходные данные

Если данный массив не может быть представлен как поэлементный XOR двух перестановок целых чисел \(0, 1, \ldots, 2^k-1\), выведите «Fou».

В противном случае выведите «Shi» в первой строке.

Следующие две строки должны содержать описания подходящих перестановок. Первая из этих строк должна содержать \(2^k\) целых чисел, разделенных пробелами, \(p_{1}, p_{2}, \ldots, p_{2^k}\), и вторая должна содержать \(2^k\) целых чисел, разделенных пробелами, \(q_{1}, q_{2}, \ldots, q_{2^k}\).

Все элементы \(p\) и \(q\) должны быть от \(0\) до \(2^k - 1\) включительно; \(p_i \oplus q_i\) должно быть равно \(a_i\) для всех \(i\) таких, что \(1 \leq i \leq 2^k\). Если существует несколько возможных решений, вы можете вывести любое.

A. Кольцевое метро

математика реализация *900

На кольцевой линии метро Рофланполиса есть \(n\) станций.

В этом метро есть два параллельных маршрута. Первый посещает станции в порядке \(1 \to 2 \to \ldots \to n \to 1 \to 2 \to \ldots\) (следующая остановка после станции \(x\) равна \((x+1)\), если \(x < n\), и \(1\) иначе). Второй маршрут посещает станции в порядке \(n \to (n-1) \to \ldots \to 1 \to n \to (n-1) \to \ldots\) (следующая остановка после станции \(x\) равна \((x-1)\), если \(x>1\), и \(n\) иначе). Все поезда отправляются со своих станций одновременно, путь до следующей станции занимает ровно \(1\) минуту.

Две жабы живут в этом городе, их зовут Дэниел и Влад.

Дэниел в данный момент находится в поезде первого маршрута на станции \(a\) и выйдет из метро, когда его поезд прибудет на станцию \(x\).

По удивительному совпадению, Влад в данный момент находится в поезде второго маршрута на станции \(b\) и выйдет из метро, когда его поезд прибудет на станцию \(y\).

Также оказалось, что все числа \(a,x,b,y\) различны.

Жаба Илья просит вас проверить, будут ли когда-либо Дэниел и Влад одновременно на одной станции во время их поездки. Иначе говоря, проверьте, остановятся ли когда-либо их поезда на одной и той же станции в один и тот же момент времени. Обратите внимание, что моменты, когда Дэниел или Влад заходят или выходят из метро, тоже необходимо учитывать.

Входные данные

В первой строке записаны пять целых чисел, разделенных пробелами: \(n\), \(a\), \(x\), \(b\), \(y\) (\(4 \leq n \leq 100\), \(1 \leq a, x, b, y \leq n\), все числа среди \(a\), \(x\), \(b\), \(y\) различны) — количество станций в Рофланполисе, начальная станция Дэниеля, конечная станция Дэниеля, начальная станция Влада и конечная станция Влада, соответственно.

Выходные данные

Выведите «YES», если Дэниел и Влад когда-нибудь окажутся одновременно на одной станции во время поездки, и «NO» иначе. Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом примере исходно Дэниел и Влад находятся на станциях \((1, 3)\). Через одну минуту они будут на станциях \((2, 2)\). Они находятся на одной станции в этот момент. Обратите внимание, что сразу после этого Влад покинет метро.

Рассмотрим второй пример. Будем отмечать станции, на которых находятся Влад и Дэниел. Они равны:

  • исходно \((2, 9)\),
  • спустя \(1\) минуту \((3, 8)\),
  • спустя \(2\) минуты \((4, 7)\),
  • спустя \(3\) минуты \((5, 6)\),
  • спустя \(4\) минуты \((6, 5)\),
  • спустя \(5\) минут \((7, 4)\),
  • спустя \(6\) минут \((8, 3)\),
  • спустя \(7\) минут \((9, 2)\),
  • спустя \(8\) минут \((10, 1)\),
  • спустя \(9\) минут \((1, 10)\).

После этого они оба покинут метро, так как они оба находятся на их конечных станциях, так что не существует момента, когда они оба были на одной станции.

A. Лифт

математика реализация *1300

Вот и закончились многочисленные отборочные турниры на одно из самых престижных соревнований России Russian Codec Cup. Все n участников, прошедшие в финал соревнования, попали в огромный m-этажный 108- звездочный отель. Конечно же, первая мысль, приходящая в голову в таком месте: «А не покататься ли нам на лифте?».

Лифт в этом отеле перемещается между этажами всегда по одной и той же схеме. Изначально (в момент времени 0) лифт находится на этаже 1, далее он перемещается на этаж 2, потом на этаж 3, и так до этажа с номером m. После этого лифт перемещается на этаж m - 1, далее на этаж m - 2, и так до первого этажа. Этот процесс бесконечно повторяется. Известно, что лифт имеет бесконечную вместимость, а также что посадка пассажиров на любом этаже осуществляется мгновенно. Перемещение между этажами происходит за единицу времени.

Для каждого из n участников вам даны: si — на какой этаж приходит i-ый участник, fi — на какой этаж ему нужно попасть, ti — время, в которое i-ый участник приходит на этаж si.

Для каждого участника выведите минимальное время его прибытия на этаж fi.

Если участник приходит на этаж ровно в тот момент, когда приезжает лифт, считается, что участник успевает зайти в лифт. Если участник приходит на этаж si и на этот же этаж ему нужно попасть (si = fi), то время прибытия этого участника на этаж fi считается равным ti.

Входные данные

В первой строке записаны два целых числа n и m через пробел (1 ≤ n ≤ 105, 2 ≤ m ≤ 108).

В следующих n строках дана информация об участниках. В каждой строке через пробел записано три целых числа: si fi ti (1 ≤ si, fi ≤ m, 0 ≤ ti ≤ 108) — числа, описанные в условии задачи.

Выходные данные

Выведите n строк по одному целому числу в каждой — для каждого участника время его прибытия на нужный этаж.

Примечание

Рассмотрим первый пример. Первый участник приходит ко времени t = 3 на этаж s = 2. Чтобы добраться до этажа f = 4, ему придется подождать до момента времени 7, когда лифт во второй раз будет ехать наверх, сесть в лифт и проехать два этажа. В таком случае первый участник доберется до этажа f в момент времени 9. Второй участник приходит ко времени t = 0 на этаж s = 1, сразу же садится в лифт, и приезжает на этаж f = 2. Третий участник не ждет лифта, так как ему надо попасть на тот же этаж, на котором он начинает.

D. Небыстрое преобразование

математика разделяй и властвуй *2500

Пусть a — массив из n чисел, элементы которого пронумерованы от 1 до n, even — массив из чисел, номера которых в a четные (eveni = a2i, 1 ≤ 2i ≤ n), odd — массив из чисел, номера которых в а нечетные (oddi = a2i - 1, 1 ≤ 2i - 1 ≤ n). Тогда определим преобразование массива F(a) следующим образом:

  • если n > 1, F(a) = F(odd) + F(even), где операция « + » обозначает конкатенацию (склейку) массивов
  • если n = 1, F(a) = a

Выберем в качестве a массив из n чисел 1, 2, 3, ..., n. Тогда b — результат применения преобразования к массиву a (то есть b = F(a)). Вам дано m запросов (l, r, u, v). Ваша задача — для каждого запроса найти сумму чисел bi, таких что l ≤ i ≤ r и u ≤ bi ≤ v. Ответы на запросы нужно выводить по модулю mod.

Входные данные

В первой строке заданы три целых числа n, m, mod (1 ≤ n ≤ 1018, 1 ≤ m ≤ 105, 1 ≤ mod ≤ 109). В следующих m строках описываются запросы. Каждый запрос задан четырьмя целыми числами l, r, u, v (1 ≤ l ≤ r ≤ n, 1 ≤ u ≤ v ≤ 1018).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Используйте спецификатор %I64d.

Выходные данные

Выведите m строк по одному целому числу в каждой — остатки от деления ответов на запросы на mod.

Примечание

Рассмотрим первый пример. Сначала построим массив b = F(a) = F([1, 2, 3, 4]).

  • Шаг 1. F([1, 2, 3, 4]) = F([1, 3]) + F([2, 4])
  • Шаг 2. F([1, 3]) = F([1]) + F([3]) = [1] + [3] = [1, 3]
  • Шаг 3. F([2, 4]) = F([2]) + F([4]) = [2] + [4] = [2, 4]
  • Шаг 4. b = F([1, 2, 3, 4]) = F([1, 3]) + F([2, 4]) = [1, 3] + [2, 4] = [1, 3, 2, 4]
Итак b = [1, 3, 2, 4]. Рассмотрим первый запрос l = 2, r = 3, u = 4, v = 5. На второй и третьей позиции в массиве b нет чисел в диапазоне [4, 5], очевидно, что сумма ноль. Рассмотрим второй запрос l = 2, r = 4, u = 1, v = 3. Есть два числа на второй и третьей позиции, которые попадают в диапазон [1, 3], их сумма 5.

A. Очередные три числа

*особая задача математика

Мы загадали три положительных целых числа \(a\), \(b\) и \(c\). Вы не знаете их, но Вы знаете некоторую информацию о них. Рассмотрим все три их попарные суммы, то есть числа \(a+b\), \(a+c\) и \(b+c\). Вы знаете ровно два (любые) из трех попарных сумм.

Ваша задача — найти такие три положительных целых числа \(a\), \(b\) и \(c\), которые подходят под заданную информацию. Это означает, что если Вы рассмотрите \(a+b\), \(a+c\) и \(b+c\), то два из трех этих чисел окажутся заданы во входных данных. Среди всех таких троек вам необходимо выбрать такую, что имеет минимально возможную сумму \(a+b+c\), а среди всех таких троек с минимальной суммой Вы можете вывести любую.

Вам необходимо обработать \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество запросов.

Следующие \(q\) строк содержат запросы. Каждый запрос задан парой целых чисел \(x\) и \(y\) (\(2 \le x, y \le 2 \cdot 10^9\)), где \(x\) и \(y\) — любые два числа из трех чисел \(a+b\), \(a+c\) и \(b+c\).

Выходные данные

Для каждого запроса выведите ответ на него: три положительных целых числе \(a\), \(b\) и \(c\), подходящие под заданную информацию. Среди всех таких троек выберите такую, что имеет минимально возможную сумму \(a+b+c\). Среди всех троек с минимальной суммой Вы можете вывести любую.

E. Ихаб и обычная задача на OEIS

дп Комбинаторика математика теория чисел *2500

Определим функцию \(f(p)\) от перестановки \(p\) следующим образом. Пусть \(g_i\) — наибольший общий делитель (НОД) чисел \(p_1\), \(p_2\), ..., \(p_i\) (другими словами, НОД на префиксе длины \(i\)). Тогда \(f(p)\) равно числу различных значений среди \(g_1\), \(g_2\), ..., \(g_n\).

Пусть \(f_{max}(n)\) — максимальное значение \(f(p)\) среди всех перестановок \(p\) чисел \(1\), \(2\), ..., \(n\).

Вам дано число \(n\), подсчитайте число перестановок \(p\) чисел \(1\), \(2\), ..., \(n\) таких, что \(f(p)\) равно \(f_{max}(n)\). Так как ответ может быть большим, выведите остаток от деления этого числа на \(1000\,000\,007 = 10^9 + 7\).

Входные данные

Единственная строка содержит целое число \(n\) (\(2 \le n \le 10^6\)) — длину рассматриваемых перестановок.

Выходные данные

В единственной строке выведите ответ по модулю \(10^9+7\).

Примечание

Рассмотрим второй пример: ниже перечислены перестановки длины \(3\):

  • \([1,2,3]\), \(f(p)=1\).
  • \([1,3,2]\), \(f(p)=1\).
  • \([2,1,3]\), \(f(p)=2\).
  • \([2,3,1]\), \(f(p)=2\).
  • \([3,1,2]\), \(f(p)=2\).
  • \([3,2,1]\), \(f(p)=2\).

Максимальное значение \(f_{max}(3) = 2\), и существуют \(4\) перестановки \(p\) такие, что \(f(p)=2\).

A. Путь к нулю

математика реализация *900

Вам заданы два числа \(n\) и \(k\).

За один шаг вы можете делать следующие действия:

  • уменьшить \(n\) на \(1\);
  • разделить \(n\) на \(k\) если \(n\) делится \(k\).
Например, если \(n = 27\) и \(k = 3\) Вы можете совершить следующую последовательность шагов: \(27 \rightarrow 26 \rightarrow 25 \rightarrow 24 \rightarrow 8 \rightarrow 7 \rightarrow 6 \rightarrow 2 \rightarrow 1 \rightarrow 0\).

Вам нужно посичтать минимальное количество шагов, необходимое для получения \(0\) из \(n\).

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество запросов.

Единственная строка каждого запроса содержит два числа \(n\) и \(k\) (\(1 \le n \le 10^{18}\), \(2 \le k \le 10^{18}\)).

Выходные данные

Для каждого запроса выведите минимальное количество шагов для получения \(0\) из \(n\) в отдельной строке.

Примечание

В первом тестовм примере необходимо выполнить следующую последовательность шагов: \(59 \rightarrow 58 \rightarrow 57 \rightarrow 19 \rightarrow 18 \rightarrow 6 \rightarrow 2 \rightarrow 1 \rightarrow 0\).

Во втором тестовом примере необходимо \(18\) раз разделить \(n\) на \(k\) а затем уменьшить \(n\) на \(1\).

F. Количество подперестановок

математика Перебор разделяй и властвуй Структуры данных хэши *2500

У вас есть массив \(a_1, a_2, \dots, a_n\).

Назовем подотрезок \(a_l, a_{l + 1}, \dots , a_r\) этого массива подперестановкой если он содержит все числа от \(1\) до \(r-l+1\) ровно по одному разу. Например, массив \(a = [2, 2, 1, 3, 2, 3, 1]\) содержит \(6\) подотрезков, являющихся подперестановками: \([a_2 \dots a_3]\), \([a_2 \dots a_4]\), \([a_3 \dots a_3]\), \([a_3 \dots a_5]\), \([a_5 \dots a_7]\), \([a_7 \dots a_7]\).

Вам нужно посчитать количество подперестановок.

Входные данные

Первая строка содержит число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le n\)).

Этот массив может содержать одинаковые числа.

Выходные данные

В единственной строке выведите количество подперестановок массива \(a\).

Примечание

В первом тестовом примере \(7\) подперестановок: \([1, 4]\), \([3, 3]\), \([3, 6]\), \([4, 7]\), \([6, 7]\), \([7, 7]\) и \([7, 8]\).

Во втором тестовом примере \(6\) подперестановок: \([1, 1]\), \([2, 2]\), \([2, 3]\), \([3, 4]\), \([4, 4]\) и \([4, 5]\).

B. Объединяй!

математика *1100

Задан массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \dots , a_n\).

За одну операцию можно выбрать два элемента массива и заменить их на элемент, равный их сумме (не важно, куда в массиве вы вставите новый элемент). Например, из массива \([2, 1, 4]\) можно получить следующие массивы: \([3, 4]\), \([1, 6]\) и \([2, 5]\).

Можно произвести данную операцию произвольное (возможно, нулевое) количество раз.

Ваша задача — найти максимально возможное количество элементов, кратных \(3\), которые могут получиться в массиве после применения этой операции любое (возможно, нулевое) количество раз.

Требуется ответить на \(t\) независимых запросов.

Входные данные

В первой строке записано одно целое число \(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\)).

Выходные данные

Для каждого запроса выведите ответ на отдельной строке — максимально возможное количество элементов, кратных \(3\), которые могут получиться в массиве после применения описанной операции любое (возможно, нулевое) количество раз.

Примечание

В первом запросе тестового примера Вы можете применить следующую последовательность операций, чтоб получить \(3\) элемента, делящихся на \(3\): \([3, 1, 2, 3, 1] \rightarrow [3, 3, 3, 1]\).

Во втором запросе Вы можете получить \(3\) элемента, делящихся на \(3\) при помощи следующей последовательности операций: \([1, 1, 1, 1, 1, 2, 2] \rightarrow [1, 1, 1, 1, 2, 3] \rightarrow [1, 1, 1, 3, 3] \rightarrow [2, 1, 3, 3] \rightarrow [3, 3, 3]\).

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\), что тоже является простым числом, поэтому все условия выполнены.

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\), так что его получит Сергей. После второго запроса все блюда уже будут куплены до того, как настанет очередь Сергея. После третьего запроса запросе третий и пятый школьники купят соответственно первое и второе блюдо, а четвертое уже не купит никто.

A. Саня и ромб

дп математика реализация *800

Играясь с геометрическими фигурами, Саня случайно ввел понятие ромба \(n\)-го порядка на клеточной сетке.

Ромб \(1\)-го порядка — это квадратик \(1 \times 1\) (т.е просто одна клетка).

Ромб \(n\)-го порядка для \(n \geq 2\) получается из ромба \(n-1\)-го порядка путём добавления к нему всех клеток, соседних с ним по стороне (для лучшего понимания смотрите картинку).

Саня просит вас посчитать количество клеток в ромбе \(n\)-го порядка.

Входные данные

Первая и единственная строка ввода содержит число \(n\) (\(1 \leq n \leq 100\)) — порядок ромба, для которого нужно посчитать количество клеток в нем.

Выходные данные

Выведите одно число — количество клеток в ромбе \(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\) кокосов.

A. Заполнение формами

дп математика *1000

Вам дано целое число \(n\). Найдите количество способов заполнить все \(3 \times n\) плитки формой, описанной на рисунке ниже. Нельзя, чтобы после заполнения были пустые плитки. Формы не могут перекрываться.

Эта картина описывает ситуацию, когда \(n = 4\). Слева — форма, а справа — \(3 \times n\) плиток.
Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 60\)) — длину.

Выходные данные

Выведите количество способов.

Примечание

В первом примере есть всего \(4\) возможных способов заполнения.

Во втором примере вы не можете заполнить \(3 \times 1\) плиток.

E. Рекуррентность произведений

дп математика матрицы теория чисел *2300

Пусть \(f_{x} = c^{2x-6} \cdot f_{x-1} \cdot f_{x-2} \cdot f_{x-3}\) для \(x \ge 4\).

Вам даны \(n\), \(f_{1}\), \(f_{2}\), \(f_{3}\) и \(c\). Найдите \(f_{n} \bmod (10^{9}+7)\).

Входные данные

Первая строка содержит пять целых чисел \(n\), \(f_{1}\), \(f_{2}\), \(f_{3}\) и \(c\) (\(4 \le n \le 10^{18}\), \(1 \le f_{1}\), \(f_{2}\), \(f_{3}\), \(c \le 10^{9}\)).

Выходные данные

Выведите \(f_{n} \bmod (10^{9} + 7)\).

Примечание

В первом примере \(f_{4} = 90\), \(f_{5} = 72900\).

Во втором примере \(f_{17} \approx 2.28 \times 10^{29587}\).

B. Приравнивание цен

математика *900

В магазине продается \(n\) предметов. Цена \(i\)-го предмета равна \(a_i\). Владелец магазина хочет приравнять цены всех предметов. Но он хочет изменить цены аккуратно.

Фактически, владелец магазина может изменять цену какого-то предмета \(i\) таким образом, что разница между старой ценой этого предмета \(a_i\) и новой ценой \(b_i\) не превышает \(k\). Другими словами, должно выполняться условие \(|a_i - b_i| \le k\) (\(|x|\) — это абсолютное значение \(x\)).

Он может изменять цену каждого предмета не более одного раза. Заметьте, что он может оставить старые цены некоторым предметам. Новая цена \(b_i\) каждого предмета \(i\) должна быть положительной (то есть должно выполняться условие \(b_i > 0\) для всех \(i\) от \(1\) до \(n\)).

Ваша задача — найти максимально возможную равную цену \(B\) всех предметов с ограничением, что для всех предметов должно выполняться условие \(|a_i - B| \le k\) (где \(a_i\) равно старой цене предмета, а \(B\) — это одинаковая новая цена всех предметов) или сказать, что невозможно найти такую цену \(B\).

Заметьте, что выбранная цена \(B\) должна быть целой.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 100\)) — количество запросов. Каждый запрос представлен двумя строками.

Первая строка запроса содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100, 1 \le k \le 10^8\)) — количество предметов и величину \(k\). Вторая строка запроса содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^8\)), где \(a_i\) равно цене \(i\)-го предмета.

Выходные данные

Выведите \(q\) целых чисел, где \(i\)-е целое число является ответом \(B\) на \(i\)-й запрос.

Если невозможно приравнять цены всех заданных предметов с ограничением, что для всех предметов должно выполняться условие \(|a_i - B| \le k\) (где \(a_i\) равно старой цене предмета, а \(B\) равно новой равной цене всех предметов), выведите -1. Иначе выведите максимально возможную равную цену всех предметов.

Примечание

В первом запросе тестового примера Вы можете выбрать цену \(B=2\). Легко заметить, что разница между каждой старой ценой и новой ценой \(B=2\) не превышает \(1\).

В первом запросе тестового примера Вы можете выбрать цену \(B=6\), тогда все разницы между старыми ценами и новыми ценами \(B=6\) не превысит \(2\).

В третьем запросе тестового примера Вы не можете выбрать никакую подходящую цену \(B\). Для любого значения \(B\) хотя бы одно условие из двух будет нарушено: \(|1-B| \le 2\), \(|6-B| \le 2\).

В четвертом запросе тестового примера все значения \(B\) между \(1\) и \(7\) являются корректными. Но самое максимальное равно \(7\), поэтому оно является ответом.

C. Компьютерная игра

Бинарный поиск математика *1400

Вова играет в компьютерную игру. Всего в игре есть \(n\) ходов и Вова очень хочет сыграть каждый из них. Изначальный заряд батареи его ноутбука (то есть заряд перед началом игры) равен \(k\).

В течение каждого хода Вова может выбрать, что именно делать:

  • Если текущий заряд батареи его ноутбука строго больше, чем \(a\), то Вова может просто играть, и тогда заряд батареи его ноутбука уменьшится на \(a\);
  • если текущий заряд батареи его ноутбука строго больше, чем \(b\) (\(b<a\)), то Вова может играть и заряжать свой ноутбук, и тогда заряд батареи его ноутбука уменьшится на \(b\);
  • если текущий заряд батареи его ноутбука меньше либо равен, чем \(a\) и \(b\) одновременно, то Вова не может сделать ничего и проигрывает игру.

Независимо от ходов Вовы заряд батареи ноутбука всегда уменьшается.

Вова хочет завершить игру (Вова может завершить игру, если после каждого из \(n\) ходов заряд батареи его ноутбука строго больше \(0\)). Вове необходимо сыграть ровно \(n\) ходов. Среди всех возможных способов завершить игру Вова хочет выбрать такой, в котором количество ходов, где он просто играет (ход первого типа) является максимально возможным. Также возможно, что Вова в принципе не может завершить игру.

Ваша задача — найти максимально возможное количество ходов, которое Вова может просто играть (делать ход первого типа) или сообщить, что Вова не может завершить игру.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов. Каждый запрос представлен единственной строкой.

Единственная строка запроса содержит четыре целых числа \(k, n, a\) и \(b\) (\(1 \le k, n \le 10^9, 1 \le b < a \le 10^9\)) — изначальный заряд батареи ноутбука Вовы, количество ходов в игре и значения \(a\) и \(b\), соответственно.

Выходные данные

Для каждого запроса выведите одно целое число: -1, если Вова не может завершить игру или же максимальное количество ходов, в которые Вова может просто играть (делать ход первого типа) в ином случае.

Примечание

В первом запросе тестового примера Вова может просто играть \(4\) хода и потратить \(12\) единиц заряда, а затем один ход играть и заряжать и потратить еще \(2\) единицы. Таким образом, оставшийся заряд батареи будет равен \(1\).

Во втором запросе тестового примера Вова не может завершить игру, потому что даже если он будет играть и заряжать батарею в течение каждого хода, то заряд батареи его ноутбука будет равен \(0\) после последнего хода.

F. Возвращение Topforces

математика Перебор сортировки *2100

Скоро на самой известной платформе по программированию (Topforces) будет проходить очень важное соревнование!

У авторов есть набор из \(n\) задач и они должны выбрать не более трех из них в контест. Красота \(i\)-й задачи равна \(a_i\). Авторы хотят составить самый красивый контест (другими словами, суммарная красота выбранных задач должна быть максимально возможной).

Но в подготовке контеста есть одна очень важная особенность: из-за некоторых предрассудков авторов красоты задач не могут делить друг друга. Иными словами, если красоты выбранных задач равны \(x, y, z\), тогда \(x\) не должен делиться ни на \(y\), ни на \(z\), \(y\) не должен делиться ни на \(x\), ни на \(z\) и \(z\) не должен делиться ни на \(x\), ни на \(y\). Если красоты выбранных задач равны \(x\) и \(y\), то \(x\) должен не делиться на \(y\) и \(y\) должен не делиться на \(x\). Любой контест, составленный из одной задачи, является хорошим.

Ваша задача — найти максимально возможную суммарную красоту контеста, составленного из не более трех задач из заданного набора.

Вам необходимо ответить на \(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\) (\(2 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) равно красоте \(i\)-й задачи.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите одно целое число — максимально возможную суммарную красоту контеста, составленного из не более трех задач из заданного набора задач в этом запросе.

A1. Хайди изучает хеширование (лёгкая)

математика Перебор теория чисел *1200

Мадам Ковариан украла новорожденную Мелоди Понд у её родителей, чтобы та стала оружием молчания в крестовом походе против Доктора. Мадам Ковариан изменила имя Мелоди на Ривер Сонг, что дало ей новую личность и позволило убить Одиннадцатого Доктора.

Хайди выяснила, что Мадам Ковариан использует достаточно сложную хеш-функцию, чтобы менять имена украденных малышей. Чтобы такое не произошло с будущими Докторами, Хайди решила подговиться и изучить основные технологии хеширования.

Первая хеш-функция, которую она рассматривает, выглядит следующим образом:

Предположим, что даны положительные целые числа \((x, y)\), тогда она определяет \(H(x,y):=x^2+2xy+x+1\).

Теперь, Хайди интересуется, является ли данная функция обратимой. В частности, у неё есть целое положительное \(r\), не могли бы вы найти пару \((x, y)\) (целые положительные числа), такие что \(H(x, y) = r\)?

Если существуют несколько таких пар, то выведите пару с минимальным \(x\). Если ни одной такой пары не существует, то выведите «NO».

Входные данные

Первая и единственная строка содержит единственное целое число \(r\) (\(1 \le r \le 10^{12}\)).

Выходные данные

Выведите целые числа \(x, y\), такие что \(H(x,y) = r\) и \(x\) является минимально возможным, или «NO», если такой пары не существует.

A3. Хайди изучает хеширование (сложная)

бпф математика теория чисел *3100

Теперь Хайди готова взломать хеш-функцию Мадам Ковариан.

Мадам Ковариан пользуется весьма сложным набором правил для замены имён. Два имени могут быть заменены друг на друга только если следующая хеш-функция на них приводит к коллизии. Однако, хеш-функция параметризована, так что всегда можно подобрать набор параметров, который приводит к коллизии. Хайди решила воспользоваться этим в свою пользу.

Пусть даны строки \(w_1\) и \(w_2\) одинаковой длины \(n\), состоящей из строчных латинских букв, и целое число \(m\).

Рассмотрим стандартный полиномиальный хеш:

\(H_p(w) := \left( \sum_{i=0}^{|w|-1} w_i r^i \right) \mbox{mod}(p)\)

Где \(p\) некоторое простое, а \(r\) это некоторое целое число, такое что \(2\leq r \leq p-2\).

Вам нужно найти \(r\) и простое число \(p\) (\(m \leq p \leq 10^9\)), такие что \(H_p(w_1) = H_p(w_2)\).

Строки \(w_1\) и \(w_2\) выбраны случайно и независимо среди всех строк длины \(n\), состоящих из строчных латинских букв.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(10 \le n \le 10^5\), \(2 \le m \le 10^5\)).

Вторая и третья строки содержат строки \(w_1\) и \(w_2\), которые были выбраны случайно и независимо друг от друга из всех слов длины \(n\), состоящих из строчных латинских букв.

Выходные данные

Выведите целые числа \(p, r\).

\(p\) должно быть простым числом в диапазоне \([m, 10^9]\), а \(r\) должно быть таким целым числом, что \(r\in [2,p-2]\).

Гарантируется, что существует хотя бы одно решение. В случае, если существует несколько решений, выведите любое из них.

Примечание

В первом примере, параметры \(p=3\) и \(r=2\) тоже приводят к коллизии хешей, но они не являются корректным решением, так как \(m\) равно \(5\) и нужно решение с \(p\geq 5\).

Во втором примере мы знаем о дополнительной букве «g» в конце. Просто у строк «River Song» и «Melody Pond» разные длины...

D2. Параллельные вселенные (сложная)

математика матрицы *3100

Хайди понравилось проводить моделирование, потому что она точно знала, где и как рождаются новые вселенные, и где и как ломаются несуществующие связи.

Однако, мультивселенная работает куда более загадочным образом. Для начала, она работает с случайным образом согласно некоторым вероятностям, что для некоторых людей уже может показаться загадочным.

В каждый момент, когда принимается решение, происходит одно из двух событий. Обозначим за \(l\) текущую длину мультивселенной. С вероятностью \(p_{create} = 1 - \frac{l}{m}\) создаётся новая вселенная. С вероятностью \(p_{break}=\frac{l}{m}\) разрывается одна из несуществующих связей.

В частности,

  • Если создаётся вселенная, то она встраивается либо между двумя соседними вселенными, либо с одного из двух сторон. Каждая из позиций выбирается равновероятно с вероятностью \(\frac{1}{l + 1}\).
  • Когда ломается одна из связей, возникает разрез между двумя соседними вселенными, где каждый из разрезов выбирается равновероятно с вероятностью \(\frac{1}{l-1}\). Таким образом мультивселенная разбивается на два отрезка, и отрезок НЕ содержащий Доктора изчезает.

Как и раньше, Доктор находится в одной конкретной вселенной. Однако, если в какой-то момент времени мультивселенная изменится так, что Доктор обнаружит себя в крайней левой или крайней правой вселенной, то ТАРДИС перестанет функционировать.

В таком случае Доктору придётся обойти всю мультивселенную, чтобы найти способ её исправить.

Нас интересует математическое ожидание длины мультивселенной, к тому моменту, когда это событие произойдёт.

Входные данные

Первая и единственная строка содержит три целых числа \(n\), \(k\) и \(m\) \((1 \le k \le n \le m \le 250)\) — изначальная длина мультивселенной, изначальная позиция Доктора, а также максимальная возможная длина мультивселенная.

Выходные данные

Выведите единственное целое число — математическое ожидание длины вселенной.

В случае если ответом является \(\frac{p}{q}\), то выведите \(r\), где \(p \equiv r \cdot q (\text{mod } 10^9 + 7)\).

Примечание

В первом и втором примере Доктор уже находится на одном из концов мультивселенной, а значит не будет произведено никаких изменений.

В третьем примере мультивселенная может сломатся только в позиции, которая приведёт к тому, что Доктор окажется на одном из концов мультивселенной.

В четвёртом примере ситуация несколько более запутанная, так как мультивселенная может расширяться и сужаться много раз.

A. Канатоходцы

математика *800

Поликарп в свой выходной день решил отдохнуть и пошёл на выступление известных канатоходцев: Агафона, Бонифация и Кондрата.

Канат представляет собой прямую веревку, бесконечную в обе стороны. В начале выступления Агафон, Бонифаций и Кондрат находятся на позициях \(a\), \(b\) и \(c\) соответственно. В конце выступления расстояние между любой парой канатоходцев должно оказаться не менее \(d\).

Канатоходцы могут ходить по канату. За одну секунду только один канатоходец может изменить свою позицию — он перемещается ровно на \(1\) (то есть сдвигается на \(1\) влево или вправо по канату). Агафон, Бонифаций и Кондрат не могут ходить одновременно. Канатоходцы могут занимать одинаковые позиции и во время движения не мешают друг другу (то есть могут «проходить сквозь друг друга»).

Найдите минимальное время (в секундах), через которое может закончиться представление. Иными словами, найдите минимальное количество секунд, через которое между каждой парой канатоходцев расстояние будет больше или равно \(d\).

Канатоходцы могут уходить в отрицательные координаты, так как веревка бесконечна в обе стороны.

Входные данные

В единственной строке входных данных заданы четыре целых числа \(a\), \(b\), \(c\), \(d\) (\(1 \le a, b, c, d \le 10^9\)). Допустимо, что любые два (или все три) канатоходца изначально находятся в одной позиции.

Выходные данные

Выведите одно целое число — минимальное количество секунд, через которое канатоходцы смогут завершить выступление.

Примечание

В первом тесте в первые две секунды Кондрат сдвигается на 2 позиции вправо (на позицию \(8\)), а Агафон и Бонифаций остаются на месте. Тогда после второй секунды расстояние между Агафоном и Бонифацием составит \(|5 - 2| = 3\), между Бонифацием и Кондратом составит \(|2 - 8| = 6\), а между Агафоном и Кондратом будет равно \(|5 - 8| = 3\). Таким образом, все три расстояния будут больше или равны \(d=3\). Следовательно, представление может завершиться через две секунды.

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. Лишний элемент

математика реализация *1700

Последовательность \(a_1, a_2, \dots, a_k\) называется арифметической прогрессией, если для всех \(i\) от \(1\) до \(k\) верно равенство \(a_i = a_1 + c \cdot (i - 1)\) для некоторого числа \(c\).

Например, следующие пять последовательностей являются арифметическими прогрессиями: \([5, 7, 9, 11]\), \([101]\), \([101, 100, 99]\), \([13, 97]\) и \([5, 5, 5, 5, 5]\). Следующие четыре последовательности не являются арифметическими прогрессиями: \([3, 1, 2]\), \([1, 2, 4, 8]\), \([1, -1, 1, -1]\) и \([1, 2, 3, 3, 3]\).

Задана последовательность целых чисел \(b_1, b_2, \dots, b_n\). Найдите любой такой индекс \(j\) (\(1 \le j \le n\)), что если из заданной последовательности удалить элемент \(b_j\), то оставшийся \(n-1\) элемент можно переставить (переупорядочить) так, что получится арифметическая прогрессия. Если искомого индекса не существует, то выведите -1.

Входные данные

В первой строке входных данных записано целое число \(n\) (\(2 \le n \le 2\cdot10^5\)) — длина последовательности \(b\). Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(-10^9 \le b_i \le 10^9\)) — элементы последовательности \(b\).

Выходные данные

Выведите такой индекс \(j\) (\(1 \le j \le n\)), что если из заданной последовательности удалить \(j\)-й элемент, то оставшиеся элементы можно расставить в таком порядке, что получится арифметическая прогрессия. Если решений несколько, выведите любое из них. Если искомого индекса не существует, то выведите -1.

Примечание

Пояснение к первому примеру: если удалить \(4\)-й элемент, то из полученной последовательности можно составить арифметическую прогрессию \([2, 4, 6, 8]\).

Пояснение ко второму примеру: исходная последовательность уже является арифметической прогрессией, поэтому мы можем удалить либо \(1\)-й элемент, либо последний, и всё равно получим арифметическую прогрессию.

C. Казак Вус и строки

математика реализация *1800

У Казака Вуса есть две бинарные строки, то есть строки, которые состоят только из «0» и «1». Назовем эти строки \(a\) и \(b\). Известно, что \(|b| \leq |a|\), то есть длина \(b\) не более \(a\).

Казак рассматривает каждую подстроку длины \(|b|\) строки \(a\). Назовем эту подстроку \(c\). Он сопоставляет соответствующие символы в \(b\) и \(c\), после чего считает количество позиций, где эти две строки различны. Назовем эту функцию \(f(b, c)\).

Например, пусть \(b = 00110\), а \(c = 11000\). В этих строках первая, вторая, третья и четвертая позиции различны.

Казак Вус считает количество таких подстрок \(c\), что \(f(b, c)\) — четное.

Например, пусть \(a = 01100010\), а \(b = 00110\). У \(a\) есть четыре подстроки длины \(|b|\): \(01100\), \(11000\), \(10001\), \(00010\).

  • \(f(00110, 01100) = 2\);
  • \(f(00110, 11000) = 4\);
  • \(f(00110, 10001) = 4\);
  • \(f(00110, 00010) = 1\).

Поскольку в трех подстроках \(f(b, c)\) четное, то ответ — \(3\).

Вус не умеет находить ответ для больших строк, поэтому просит вас помочь ему в этом.

Входные данные

Первая строка содержит бинарную строку \(a\) (\(1 \leq |a| \leq 10^6\)) — первая строка.

Вторая строка содержит бинарную строку \(b\) (\(1 \leq |b| \leq |a|\)) — вторая строка.

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

Первый пример объяснен в легенде.

Во втором примере подходят подстроки \(1010\), \(0101\), \(1111\), \(1111\).

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\).

Если существует несколько решений, выведите любое из них.

Примечание

Первый пример объяснен в условии.

Во втором примере можно округлить первое и пятое числа вверх, а второе и третье вниз. Мы не можем округлить четвертое число ни в одну сторону.

E. Казак Вус и поле

математика разделяй и властвуй реализация *2500

У Казака Вуса есть поле с размерами \(n \times m\), которое состоит из «0» и «1». Он строит из этого поля бесконечное поле. Это он делает так:

  1. Берет текущее поле и находит для него новое инвертированное поле. Другими словами, в новом поле будет «1» там, где был «0», а «0» там, где был «1».
  2. К начальному полю приписывает справа инвертированное поле.
  3. К начальному полю приписывает снизу инвертированное поле.
  4. К начальному полю приписывает справа снизу начальное поле.
  5. Повторяет все это.

Например, если начальное поле было таким:

\(\begin{matrix} 1 & 0 & \\ 1 & 1 & \\ \end{matrix}\)

После первой итерации оно станет таким:

\(\begin{matrix} 1 & 0 & 0 & 1 \\ 1 & 1 & 0 & 0 \\ 0 & 1 & 1 & 0 \\ 0 & 0 & 1 & 1 \\ \end{matrix}\)

После второй итерации оно станет таким:

\(\begin{matrix} 1 & 0 & 0 & 1 & 0 & 1 & 1 & 0 \\ 1 & 1 & 0 & 0 & 0 & 0 & 1 & 1 \\ 0 & 1 & 1 & 0 & 1 & 0 & 0 & 1 \\ 0 & 0 & 1 & 1 & 1 & 1 & 0 & 0 \\ 0 & 1 & 1 & 0 & 1 & 0 & 0 & 1 \\ 0 & 0 & 1 & 1 & 1 & 1 & 0 & 0 \\ 1 & 0 & 0 & 1 & 0 & 1 & 1 & 0 \\ 1 & 1 & 0& 0 & 0 & 0 & 1 & 1 \\ \end{matrix}\)

И так далее...

Пронумеруем строки сверху вниз от \(1\) до бесконечности, а столбцы слева направо от \(1\) до бесконечности. Назовем подматрицей \((x_1, y_1, x_2, y_2)\) все числа, которые имеют координаты \((x, y)\), такие что \(x_1 \leq x \leq x_2\) и \(y_1 \leq y \leq y_2\).

Казаку иногда нужно находить сумму всех чисел на подматрицах. Так как он очень занят сейчас, помогите ему найти ответы!

Входные данные

Первая строка содержит три целых числа \(n\), \(m\), \(q\) (\(1 \leq n, m \leq 1\,000\), \(1 \leq q \leq 10^5\)) — размеры начальной матрицы и количество запросов.

Каждая из следующих \(n\) строк содержит \(m\) символов \(c_{ij}\) (\(0 \leq c_{ij} \leq 1\)) — символы в матрице.

Каждая из следующих \(q\) строк содержит четыре числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(1 \leq x_1 \leq x_2 \leq 10^9\), \(1 \leq y_1 \leq y_2 \leq 10^9\)) — координаты верхней левой крайней точки и нижней правой, между которыми нужно найти сумму всех чисел.

Выходные данные

Для каждого запроса выведите ответ.

Примечание

Первый пример объяснен в легенде.

A. Наклейки и игрушки

математика *900

В ваш любимый магазин поступила партия из \(n\) шоколадных яиц Киндер-сюрприз. Вы знаете, что суммарно в этих \(n\) Киндер-сюрпризах ровно \(s\) наклеек и ровно \(t\) игрушек.

Каждый Киндер-сюрприз может быть одного из трех видов:

  • содержит только одну наклейку, без игрушки;
  • содержит только одну игрушку, без наклеек;
  • содержит как одну наклейку, так и одну игрушку.

Но вы не знаете, какой Киндер-сюрприз какого типа. Все Киндер-сюрпризы выглядят одинаково и неотличимы друг от друга.

Какое минимальное количество Киндер-сюрпризов вам необходимо приобрести, чтобы быть уверенным в том, что, независимо от содержимого яиц, вы получите хотя бы одну наклейку и хотя бы одну игрушку?

Заметим, что вы не вскрываете яйца по время покупки, а просто приобретаете какое-то их количество. Гарантируется, что ответ всегда существует.

Входные данные

Первая строка содержит единственное целое число \(T\) (\(1 \le T \le 100\)) — количество запросов.

Следующие \(T\) строк содержат по три целых числа \(n\), \(s\) и \(t\) (\(1 \le n \le 10^9\), \(1 \le s, t \le n\), \(s + t \ge n\)) — количество яиц, наклеек и игрушек.

Все запросы независимы.

Выходные данные

Выведите \(T\) чисел (по одному числу на запрос) — минимальное количество Киндер-сюрпризов, которые вам необходимо приобрести, чтобы быть уверенным в том, что, независимо от содержимого яиц, вы получите хотя бы одну наклейку и хотя бы одну игрушку.

Примечание

В первом запросе нам необходимо приобрести хотя бы \(6\) яиц, потому что в данном наборе ровно \(5\) яиц с только игрушкой. В худшем случае, нам попадутся все они.

Во втором запросе, все Киндер-сюрпризы содержат и наклейку, и игрушку, поэтому достаточно купить ровно одно яйцо.

В третьем запросе, нам необходимо приобрести оба яйца: одно с наклейкой, одно с игрушкой.

F. Ожидаемый квадрат красоты

дп математика Теория вероятностей *2500

Пусть \(x\) — массив целых чисел \(x = [x_1, x_2, \dots, x_n]\). Обозначим \(B(x)\) как наименьший размер разбиения \(x\) на подотрезки, такие что все элементы в каждом подотрезке равны. Например, \(B([3, 3, 6, 1, 6, 6, 6]) = 4\) благодаря такому разбиению: \([3, 3\ |\ 6\ |\ 1\ |\ 6, 6, 6]\).

У вас нет точного массива \(x\), но вы знаете, что \(x_i\) может принимать любое целое значение из отрезка \([l_i, r_i]\) (\(l_i \le r_i\)) случайно и равновероятно. Все \(x_i\) независимы.

Посчитайте ожидаемое значение (матожидание) значения \((B(x))^2\) или \(E((B(x))^2)\). Гарантируется, что матожидание может быть представлено как рациональная дробь \(\frac{P}{Q}\), где \((P, Q) = 1\), поэтому выведите значение \(P \cdot Q^{-1} \mod 10^9 + 7\).

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(x\).

Вторая строка содержит \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \le l_i \le 10^9\)).

Третья строка содержит \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(l_i \le r_i \le 10^9\)).

Выходные данные

Выведите единственное число — значение \(E((B(x))^2)\) как \(P \cdot Q^{-1} \mod 10^9 + 7\).

Примечание

Опишем все возможные значения массива \(x\) из первого примера:

  • \([1, 1, 1]\): \(B(x) = 1\), \(B^2(x) = 1\);
  • \([1, 1, 2]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([1, 1, 3]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([1, 2, 1]\): \(B(x) = 3\), \(B^2(x) = 9\);
  • \([1, 2, 2]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([1, 2, 3]\): \(B(x) = 3\), \(B^2(x) = 9\);
В результате \(E = \frac{1}{6} (1 + 4 + 4 + 9 + 4 + 9) = \frac{31}{6}\) или \(31 \cdot 6^{-1} = 166666673\).

Все возможные значения \(x\) из второго примера:

  • \([3, 4, 5]\): \(B(x) = 3\), \(B^2(x) = 9\);
  • \([3, 4, 6]\): \(B(x) = 3\), \(B^2(x) = 9\);
  • \([3, 5, 5]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([3, 5, 6]\): \(B(x) = 3\), \(B^2(x) = 9\);
  • \([4, 4, 5]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([4, 4, 6]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([4, 5, 5]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([4, 5, 6]\): \(B(x) = 3\), \(B^2(x) = 9\);
В результате \(E = \frac{1}{8} (9 + 9 + 4 + 9 + 4 + 4 + 4 + 9) = \frac{52}{8}\) или \(13 \cdot 2^{-1} = 500000010\).

B. Посчитайте пары

математика матрицы теория чисел *2300

Вам даны простое число \(p\), \(n\) чисел \(a_1, a_2, \ldots, a_n\) и целое число \(k\).

Посчитайте количество пар индексов \((i, j)\) (\(1 \le i < j \le n\)) для которых \((a_i + a_j)(a_i^2 + a_j^2) \equiv k \bmod p\).

Входные данные

Первая строка содержит целые числа \(n, p, k\) (\(2 \le n \le 3 \cdot 10^5\), \(2 \le p \le 10^9\), \(0 \le k \le p-1\)). Гарантируется, что \(p\) простое.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le p-1\)). Гарантируется, что все числа различны.

Выходные данные

Выведите одно число — ответ к задаче.

Примечание

В первом примере:

\((0+1)(0^2 + 1^2) = 1 \equiv 1 \bmod 3\).

\((0+2)(0^2 + 2^2) = 8 \equiv 2 \bmod 3\).

\((1+2)(1^2 + 2^2) = 15 \equiv 0 \bmod 3\).

Поэтому только \(1\) пара удовлетворяет условию.

Во втором примере таких пар \(3\): \((1, 5)\), \((2, 3)\), \((4, 6)\).

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. Конфеты!

дп математика реализация Структуры данных *1400

Рассмотрим последовательность цифр длины \(2^k\) \([a_1, a_2, \ldots, a_{2^k}]\). Будем выполнять с ней следующую операцию: заменить пару \((a_{2i+1}, a_{2i+2})\) на \((a_{2i+1} + a_{2i+2})\bmod 10\) для \(0\le i<2^{k-1}\). За каждое \(i\) такое, что \(a_{2i+1} + a_{2i+2}\ge 10\), мы получаем конфету! В результате, мы получим последовательность цифр длины \(2^{k-1}\).

Менее формально, последовательность длины \(2^k\) мы разбиваем на \(2^{k-1}\) пар, каждая из которых состоит из двух чисел: первая пара состоит из первых двух чисел, вторая из третьего и четвертого, \(\ldots\), последняя пара состоит из (\(2^k-1\))-го и (\(2^k\))-го чисел. За каждую пару, сумма чисел в которой не менее \(10\), мы получаем конфету. После этого, мы заменяем каждую пару чисел на остаток от деления их суммы на \(10\) (при этом сохраняем порядок чисел).

Будем выполнять данную операцию с последовательностью, пока она не станет длины \(1\). Пусть \(f([a_1, a_2, \ldots, a_{2^k}])\) обозначает количество конфет, которые мы получим в процессе.

К примеру: если изначальной последовательностью была \([8, 7, 3, 1, 7, 0, 9, 4]\), то:

После первой операции последовательность станет \([(8 + 7)\bmod 10, (3 + 1)\bmod 10, (7 + 0)\bmod 10, (9 + 4)\bmod 10]\) \(=\) \([5, 4, 7, 3]\), и мы получим \(2\) конфеты так как \(8 + 7 \ge 10\) и \(9 + 4 \ge 10\).

После второй операции последовательность станет \([(5 + 4)\bmod 10, (7 + 3)\bmod 10]\) \(=\) \([9, 0]\), и мы получим еще одну конфету так как \(7 + 3 \ge 10\).

После последней операции последовательность станет \([(9 + 0) \bmod 10]\) \(=\) \([9]\).

Следовательно, \(f([8, 7, 3, 1, 7, 0, 9, 4]) = 3\), так как мы получили всего \(3\) конфеты.

Вам дана последовательность цифр длины \(n\) \(s_1, s_2, \ldots s_n\). Вы должны ответить на \(q\) запросов вида \((l_i, r_i)\), где для \(i\)-го запроса вы должны вывести \(f([s_{l_i}, s_{l_i+1}, \ldots, s_{r_i}])\). Гарантируется, что \(r_i-l_i+1\) имеет вид \(2^k\) для некоторого неотрицательного целого \(k\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину последовательности.

Вторая строка содержит \(n\) цифр \(s_1, s_2, \ldots, s_n\) (\(0 \le s_i \le 9\)).

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\), \(r_i\) (\(1 \le l_i \le r_i \le n\)) — \(i\)-й запрос. Гарантируется, что \(r_i-l_i+1\) является неотрицательной целой степенью \(2\).

Выходные данные

Выведите \(q\) строк, в \(i\)-й строке выведите единственное число — \(f([s_{l_i}, s_{l_i + 1}, \ldots, s_{r_i}])\), ответ на \(i\)-й запрос.

Примечание

Первый пример иллюстрирует пример из условия

\(f([7, 3, 1, 7]) = 1\): последовательность операций такая — \([7, 3, 1, 7] \to [(7 + 3)\bmod 10, (1 + 7)\bmod 10]\) \(=\) \([0, 8]\) и одна конфета так как \(7 + 3 \ge 10\) \(\to\) \([(0 + 8) \bmod 10]\) \(=\) \([8]\), поэтому мы получаем всего \(1\) конфету.

\(f([9]) = 0\), так как мы не выполняем с ним операции.

A. Парк аттракционов

*особая задача дп математика

Вас наняли руководить разработкой проекта нового парка аттракционов. В парке будет некоторая изюминка: от одного аттракциона к другому посетителей будут доставлять специальные направленные спуски.

Владелец парка передал вам текущий проект: список планируемых к постройке аттракционов и список спусков, которые должны быть построены. Так как он предприниматель, то он, как обычно, вообразил невозможное: кроме всего прочего, он запланировал спуск от замка с привидениями к американским горкам, спуск от американских горок к башни свободного падения, а также спуск от башни свободного падения к замку с привидениями. Так как спуски могут вести только вниз, очевидно, что это невозможно. У вас нет привилегий игнорировать законы физики при постройке парка, поэтому в проект нужно внести изменения. Может, владелец примет изменение направления спуска между башней и замком?

Формально:

  • Проектом называется список аттракционов и список направленных спусков. Каждый спуск начинается около одного аттракциона и заканчивается у другого.
  • Предложение получается из проекта изменением направлений некоторых спусков (возможно, ни одного или всех).
  • Предложение корректно, если существует способ выбрать высоты расположений всех аттракционов так, чтобы все спуски вели вниз.
  • Стоимостью предложения называется количество спусков, направление которых нужно изменить.

Для данного проекта найдите сумму стоимостей всех корректных предложений по модулю \(998,244,353\).

Входные данные

Первая строка содержит два целых числа \(n\), \(m\) (\(1 \leq n \leq 18\), \(0 \leq m \leq n(n-1)/2\)) — количество аттракционов и количество спусков, соответственно. Аттракционы пронумерованы от \(1\) до \(n\).

Далее следуют \(m\) строк. \(i\)-я из этих строк содержит два целых числа \(a_i\), \(b_i\) (\(1 \leq a_i, b_i \leq n\)), обозначающие спуск от \(a_i\) к \(b_i\).

Можете рассчитывать, что:

  • Нет петель, то есть для всех \(i\) выполняется \(a_i \neq b_i\).
  • Никакой спуск не встречается дважды, то есть для всех \(i \neq j\) выполняется \(a_i \neq a_j\) или \(b_i \neq b_j\).)
  • Никакая пара аттракционов не соединена в обоих направлениях, то есть неупорядоченные пары \(\{a_i, b_i\}\) различны.
Выходные данные

Выведите одно целое число — сумму стоимостей всех корректных предложений по модулю \(998,244,353\).

Система оценки

Подзадача 1 (7 баллов): \(n \leq 3\)

Подзадача 2 (12 баллов): \(n \leq 6\)

Подзадача 3 (23 балла): \(n \leq 10\)

Подзадача 4 (21 балл): \(n \leq 15\)

Подзадача 5 (37 баллов): нет дополнительных ограничений

Примечание

В первом примере есть два предложения:

  • Направление спуска не изменено. Стоимость \(0\).
  • Направление спуска изменено. Стоимость \(1\).
Так как оба предложения корректны, то ответ равен \(0 + 1 = 1\).

Во втором примере есть восемь предложений, где спуски направлены так:

  • \(1 \rightarrow 2\), \(2 \rightarrow 3\), \(1 \rightarrow 3\) (стоимость \(0\))
  • \(1 \rightarrow 2\), \(2 \rightarrow 3\), \(3 \rightarrow 1\) (стоимость \(1\))
  • \(1 \rightarrow 2\), \(3 \rightarrow 2\), \(1 \rightarrow 3\) (стоимость \(1\))
  • \(1 \rightarrow 2\), \(3 \rightarrow 2\), \(3 \rightarrow 1\) (стоимость \(2\))
  • \(2 \rightarrow 1\), \(2 \rightarrow 3\), \(1 \rightarrow 3\) (стоимость \(1\))
  • \(2 \rightarrow 1\), \(2 \rightarrow 3\), \(3 \rightarrow 1\) (стоимость \(2\))
  • \(2 \rightarrow 1\), \(3 \rightarrow 2\), \(1 \rightarrow 3\) (стоимость \(2\))
  • \(2 \rightarrow 1\), \(3 \rightarrow 2\), \(3 \rightarrow 1\) (стоимость \(3\))

Второе предложение некорректно, так как есть последовательность спусков \(1 \rightarrow 2 \rightarrow 3 \rightarrow 1\). Это означает, что аттракцион \(1\) должен быть строго выше чем он сам, что, очевидно, невозможно. Аналогично, седьмое предложение тоже некорректно. Поэтому ответ равен \(0 + 1 + 2 + 1 + 2 + 3 = 9\).

A. Удали прогрессию

математика *800

У вас есть список чисел от \(1\) по \(n\), записанных слева направо на доске.

Вы выполняете алгоритм, состоящий из нескольких шагов (шаги нумеруются с \(1\)). На \(i\)-м шаге вы стираете \(i\)-е число (вы учитываете только оставшиеся числа). Вы стираете с доски число полностью (а не только одну цифру).

Когда на доске осталось меньше, чем \(i\) чисел, вы прекращаете выполнение алгоритма.

Вам стало интересно: чему равно \(x\)-е оставшееся число после завершения алгоритма?

Входные данные

В первой строке задано одно число \(T\) (\(1 \le T \le 100\)) — количество запросов. Следующие \(T\) строк содержат сами запросы — по одному в строке. Все запросы независимы.

Каждая строка содержит два целых числа \(n\) и \(x\) (\(1 \le x < n \le 10^{9}\)) — длину списка и позицию, о которой мы хотим узнать. Гарантируется, что после завершения алгоритма, список будет содержать хотя бы \(x\) чисел.

Выходные данные

Выведите \(T\) чисел (по одному на запрос) — значения \(x\)-х чисел после завершения алгоритма для соответствующих запросов.

D. 1-2-K игра

игры математика *1700

Алиса и Боб играют в игру. У них есть полоска, разлинованная на n + 1 клетку; клетки пронумерованы слева направо начиная с 0. Первоначально, в n-й клетке (в самой последней) расположена фишка.

Игроки ходят по очереди, первой начинает Алиса. Каждый игрок на своем ходу должен сдвинуть фишку на 1, 2 или k клеток влево (то есть, если фишка стоит в позиции i, игрок может переместить ее в клетку i - 1, i - 2 либо i - k). Фишка не может выходить за границы полоски: например, невозможно сдвинуть ее на k клеток левее, если текущая клетка i < k. Игрок, который не может сделать ход, проигрывает игру.

Кто выиграет, если оба участника играют оптимально?

Алиса и Боб хотят сыграть несколько игр — помогите им определить победителя в каждой игре.

Входные данные

В первой строке задано одно число T (1 ≤ T ≤ 100) — количество игр. Следующие T строк содержат описание игр — по одному в строке. Все игры независимы.

Каждая из следующих T строк содержит по два целых числа n и k (0 ≤ n ≤ 109, 3 ≤ k ≤ 109) — длина полоски и число, описывающее третий ход, соответственно.

Выходные данные

Для каждой игры выведите Alice, если Алиса выиграет в данной игре, или Bob, если выиграет Боб.

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\) (то есть первый, третий или четвертый).

B. Спортивная мафия

Бинарный поиск математика Перебор *1000

Каждый вечер после ужина ЛКШата собираются в лодочной станции, чтобы насладиться игрой в спортивную мафию.

Для турнира Аля набирает в банку конфеты — это будет призовой фонд. Она делает это за \(n\) ходов. На первом ходу она кладёт в банку одну конфету. Каждый следующий ход у неё есть выбор:

  • первый вариант хода — если в банке есть хотя бы одна конфета, то она может за ход вытащить ровно одну конфету из банки и съесть её (таким образом, за один ход количество конфет в банке уменьшается на \(1\));
  • второй вариант хода — положить в банку конфеты, в этом случае она кладёт на \(1\) конфету больше, чем клала в последний раз перед этим.

Таким образом, если банка пуста, то она может осуществить только второй вариант хода.

Например, возможная последовательность действий Али такая:

  • положить в банку одну конфету;
  • положить в банку две конфеты;
  • съесть одну конфету из банки;
  • съесть одну конфету из банки;
  • положить в банку три конфеты;
  • съесть одну конфету из банки;
  • положить в банку четыре конфеты;
  • съесть одну конфету из банки;
  • положить в банку пять конфет.

В этом случае будет совершено \(9\) ходов, количество конфет в банке в итоге будет равно \(11\), а Аля съест суммарно \(4\) конфеты.

Известно общее количество ходов \(n\) и количество конфет \(k\) после всех ходов Али. Найдите суммарное количество съеденных Алей конфет (то есть количество ходов первого варианта). Гарантируется, что для заданных \(n\) и \(k\) ответ существует.

Обратите внимание, что за один ход первого варианта Аля вытаскивает и съедает ровно одну конфету.

Входные данные

В первой строке входных данных заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9\); \(0 \le k \le 10^9\)) — суммарное количество ходов и количество конфет в банке в конце.

Гарантируется, что для заданных \(n\) и \(k\) ответ существует.

Выходные данные

Выведите одно целое число — количество конфет, которые съела Аля. Обратите внимание, что в этой задаче не может быть нескольких правильных ответов — ответ однозначно определяется по входных данным.

Примечание

В первом примере Аля совершила только один ход. По условию задачи первый ход — это всегда положить одну конфету. Таким образом, Аля съела \(0\) конфет.

Во втором примере возможна такая последовательность действий Али:

  • положила \(1\) конфету,
  • положила \(2\) конфеты,
  • съела конфету,
  • съела конфету,
  • положила \(3\) конфеты,
  • съела конфету,
  • положила \(4\) конфеты,
  • съела конфету,
  • положила \(5\) конфет.

В таком случае, она совершит \(n=9\) ходов, в итоге банке будет \(1+2-1-1+3-1+4-1+5=11\) конфет. Ответ равен \(4\) так как суммурно она съела \(4\) конфеты.

D1. Подводная лодка в Рыбинском море (упрощённая редакция)

Комбинаторика математика теория чисел *1500

Эта задача отличается от следующей исключительно наличием ограничения на равную длину всех чисел \(a_1, a_2, \dots, a_n\). На самом деле эта задача является подзадачей D2 из этого же контеста, и решение D2 решает эту подзадачу в том числе.

Команда ЛКШ-ат собралась совершить путешествие на подводной лодке. Цель их плавания — древний клад на затонувшем судне, лежащем на дне Великого Рыбинского моря. К сожалению, ребята не знают координаты судна, и поэтому обратились за помощью к потомственному магу Мишане. Он согласился помочь команде, но только если они решат его задачку.

Определим функцию, чередующую цифры двух чисел, \(f(a_1 a_2 \dots a_{p - 1} a_p, b_1 b_2 \dots b_{q - 1} b_q)\), где \(a_1 \dots a_p\) и \(b_1 \dots b_q\) — цифры двух чисел в десятичной системе счисления, записанные без ведущих нулей.

Иными словами, функция \(f(x, y)\) перемешивает цифры чисел \(x\) и \(y\) выписывая их по очереди от младщих цифр к старшим, начиная с числа \(y\). Результат функции тоже строится справа налево (то есть от младших цифр к старшим). Если цифры одного из аргументов закончились, то выписываются оставшиеся цифры другого аргумента. Ознакомьтесь с примерами и формальным определением функции.

Например: \(\)f(1111, 2222) = 12121212\(\) \(\)f(7777, 888) = 7787878\(\) \(\)f(33, 44444) = 4443434\(\) \(\)f(555, 6) = 5556\(\) \(\)f(111, 2222) = 2121212\(\)

Формально:

  • если \(p \ge q\), то \(f(a_1 \dots a_p, b_1 \dots b_q) = a_1 a_2 \dots a_{p - q + 1} b_1 a_{p - q + 2} b_2 \dots a_{p - 1} b_{q - 1} a_p b_q\);
  • если \(p < q\), то \(f(a_1 \dots a_p, b_1 \dots b_q) = b_1 b_2 \dots b_{q - p} a_1 b_{q - p + 1} a_2 \dots a_{p - 1} b_{q - 1} a_p b_q\).

Мишаня дал вам массив из \(n\) целых чисел \(a_i\). Все числа в этом массиве имеют равную длину (то есть состоят из одинакового количества цифр). Помогите ребятам посчитать \(\sum_{i = 1}^{n}\sum_{j = 1}^{n} f(a_i, a_j)\) по модулю \(998\,244\,353\).

Входные данные

В первой строке дано число \(n\) (\(1 \le n \le 100\,000\)) — количество чисел в массиве. Во второй строке даны \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива. Все числа \(a_1, a_2, \dots, a_n\) имеют равную длину (то есть состоят из одинакового количества цифр).

Выходные данные

Выведите ответ по модулю \(998\,244\,353\).

D2. Подводная лодка в Рыбинском море (усложнённая редакция)

Комбинаторика математика теория чисел *1800

Эта задача отличается от предыдущей исключительно отсутствием ограничения на равную длину всех чисел \(a_1, a_2, \dots, a_n\).

Команда ЛКШ-ат собралась совершить путешествие на подводной лодке. Цель их плавания — древний клад на затонувшем судне, лежащем на дне Великого Рыбинского моря. К сожалению, ребята не знают координаты судна, и поэтому обратились за помощью к потомственному магу Мишане. Он согласился помочь команде, но только если они решат его задачку.

Определим функцию, чередующую цифры двух чисел, \(f(a_1 a_2 \dots a_{p - 1} a_p, b_1 b_2 \dots b_{q - 1} b_q)\), где \(a_1 \dots a_p\) и \(b_1 \dots b_q\) — цифры двух чисел в десятичной системе счисления, записанные без ведущих нулей.

Иными словами, функция \(f(x, y)\) перемешивает цифры чисел \(x\) и \(y\) выписывая их по очереди от младщих цифр к старшим, начиная с числа \(y\). Результат функции тоже строится справа налево (то есть от младших цифр к старшим). Если цифры одного из аргументов закончились, то выписываются оставшиеся цифры другого аргумента. Ознакомьтесь с примерами и формальным определением функции.

Например: \(\)f(1111, 2222) = 12121212\(\) \(\)f(7777, 888) = 7787878\(\) \(\)f(33, 44444) = 4443434\(\) \(\)f(555, 6) = 5556\(\) \(\)f(111, 2222) = 2121212\(\)

Формально:

  • если \(p \ge q\), то \(f(a_1 \dots a_p, b_1 \dots b_q) = a_1 a_2 \dots a_{p - q + 1} b_1 a_{p - q + 2} b_2 \dots a_{p - 1} b_{q - 1} a_p b_q\);
  • если \(p < q\), то \(f(a_1 \dots a_p, b_1 \dots b_q) = b_1 b_2 \dots b_{q - p} a_1 b_{q - p + 1} a_2 \dots a_{p - 1} b_{q - 1} a_p b_q\).

Мишаня дал вам массив из \(n\) целых чисел \(a_i\), помогите ребятам посчитать \(\sum_{i = 1}^{n}\sum_{j = 1}^{n} f(a_i, a_j)\) по модулю \(998\,244\,353\).

Входные данные

В первой строке дано число \(n\) (\(1 \le n \le 100\,000\)) — количество чисел в массиве. Во второй строке даны \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите ответ по модулю \(998\,244\,353\).

F. Клуб анонимных геометров

геометрия математика сортировки Структуры данных *2500

Сегодня Денис проводит в ЛКШ клуб анонимных геометров. Он заготовил для клуба \(n\) выпуклых многоугольников, пронумерованных от \(1\) до \(n\). Он планирует предложить участникам клуба посчитать суммы Минковского этих многоугольников. А именно, он планирует дать \(q\) заданий, в \(i\)-м из них нужно посчитать сумму Минковского многоугольников с номерами от \(l_i\) до \(r_i\) включительно.

Суммой Минковского двух множеств \(A\) и \(B\) называется множество \(C = \{a + b : a \in A, b \in B\}\). Можно доказать, что если \(A\) и \(B\) являются выпуклыми многоугольниками, то \(C\) тоже будет выпуклым многоугольником.

Сумма двух выпуклых многоугольников

Чтобы посчитать сумму Минковского \(p\) многоугольников (\(p > 2\)), нужно посчитать сумму Минковского первых \(p - 1\) многоугольников, а потом сумму Минковского результата и \(p\)-го многоугольника.

Для того, чтобы было удобнее проверять правильность выполнения заданий, Денис решил подготовиться и посчитать количество вершин в сумме Минковского для каждого задания. Помогите ему сделать это.

Входные данные

В первой строке дано одно целое число \(n\) — количество выпуклых многоугольников, которые подготовил Денис (\(1 \le n \le 100\,000\)).

Далее дано описание \(n\) выпуклых многоугольников. Описание \(i\)-го многоугольника начинается с целого числа \(k_i\) — количество вершин в \(i\)-м многоугольнике (\(3 \le k_i\)). После чего в \(k_i\) строках даны по два целых числа \(x_{ij}\), \(y_{ij}\) — координаты вершин \(i\)-го многоугольника в порядке обхода против часовой стрелки (\(|x_{ij}|, |y_{ij}| \le 10 ^ 9\)).

Гарантируется, что многоугольники не содержат трех последовательных вершин, лежащих на одной прямой. Суммарное количество вершин в многоугольниках не превышает \(300\,000\).

В следующей строке одно целое число \(q\) — количество заданий (\(1 \le q \le 100\,000\)). В следующих \(q\) строках дано описание заданий. Описание \(i\)-го задания содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

Выходные данные

Для каждого задания выведите одно целое число — количество вершин в сумме Минковского многоугольников с номерами от \(l_i\) до \(r_i\).

Примечание

Пояснение к примеру:

Первый, второй и третий многоугольники из тестового примера
Суммы Минковского первого и второго, второго и третьего и всех трех многоугольников соответственно

A. Три кучки с конфетами

Конструктив математика Перебор *800

Алиса и Боб получили три большие кучки конфет в качестве подарка. Теперь они хотят разделить эти конфеты между собой настолько честно, насколько это возможно. Чтобы сделать это, Алиса забирает одну кучку с конфетами себе, затем Боб забирает одну из других двух кучек себе. Последняя кучка делится между Алисой и Бобом так, как они хотят: например, возможно, что Алиса возьмет всю кучку себе, а Боб не получит из нее ничего.

После того как они возьмут все конфеты из кучек, если у Алисы будет больше конфет, чем у Боба, она выкидывает некоторые конфеты таким образом, что количество ее конфет становится равным количеству конфет Боба. Конечно, Боб сделает то же самое, если у него больше конфет.

Алиса и Боб хотят иметь как можно больше конфет каждый, и будут планировать процесс разделения конфет соответственно. Пожалуйста, посчитайте максимально возможное количество конфет, которое может оказаться у Алисы после процесса их разделения (конечно же, у Боба будет столько же конфет).

Вам необходимо ответить на \(q\) независимых запросов.

Рассмотрим следующий пример: \([1, 3, 4]\). Здесь Алиса может взять третью кучку, Боб может взять вторую кучу, и единственную оставшуюся конфету из первой кучки получает Боб — тогда у Алисы будет \(4\) конфеты и у Боба тоже будет \(4\) конфеты.

Другой возможный пример — это \([1, 10, 100]\). Тогда Алиса может выбрать вторую кучку, Боб может выбрать первую кучку, и конфеты из третьей кучки могут быть разделены таким образом, что Боб получит \(54\) конфеты, а Алиса получит \(46\) конфет. Теперь у Боба есть \(55\) конфет, а у Алисы — \(56\) конфет, таким образом, она должна выкинуть одну конфету — и после этого у нее будет также \(55\) конфет.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество запросов. Затем следуют \(q\) запросов.

Единственная строка запроса содержит три целых числа \(a, b\) и \(c\) (\(1 \le a, b, c \le 10^{16}\)) — количество конфет в первой, второй и третьей кучках соответственно.

Выходные данные

Выведите \(q\) строк. \(i\)-я строка должна содержать ответ на \(i\)-й запрос — максимальное количество конфет, которое Алиса может иметь после разделения, если и Алиса, и Боб будут действовать оптимально (конечно же, Боб будет иметь такое же количество конфет).

B. Отрезки с нечетной суммой

Конструктив математика *1200

Вам задан массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Вы хотите разделить его ровно на \(k\) непустых непересекающихся подотрезков таким образом, что каждый подотрезок имеет нечетную сумму (то есть для каждого подотрезка должно выполняться, что сумма элементов, принадлежащих этому подотрезку, нечетна). Переставлять элементы заданного массива нельзя. Каждый из \(n\) элементов массива \(a\) должен принадлежать ровно одному из \(k\) подотрезков.

Рассмотрим некоторые примеры разделения массива длины \(5\) на \(3\) подотрезка (необязательно с нечетной суммой): \([1, 2, 3, 4, 5]\) — это изначальный массив, тогда все возможные способы разделить его на \(3\) непустых непересекающихся подотрезка описаны ниже:

  • \([1], [2], [3, 4, 5]\);
  • \([1], [2, 3], [4, 5]\);
  • \([1], [2, 3, 4], [5]\);
  • \([1, 2], [3], [4, 5]\);
  • \([1, 2], [3, 4], [5]\);
  • \([1, 2, 3], [4], [5]\).

Конечно же, существуют случаи, когда невозможно разделить изначальный массив ровно на \(k\) подотрезков таким образом, что сумма элементов в каждом из них будет нечетна. В этом случае выведите «NO». Иначе выведите «YES» и любое возможное разделение массива. Посмотрите в формат вывода для более детального объяснения.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов. Затем следуют \(q\) запросов.

Первая строка запроса содержит два целых числа \(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\)-му элементу \(a\).

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого запроса выведите ответ на него. Если невозможно разделить изначальный массив на ровно \(k\) подотрезков таким образом, что сумма элементов в каждом из них будет нечетна, выведите «NO» в первой строке. Иначе выведите «YES» в первой строке и любое возможное разделение массива во второй строке. Разделение может быть представлено в виде \(k\) целых чисел \(r_1\), \(r_2\), ..., \(r_k\) таких, что \(1 \le r_1 < r_2 < \dots < r_k = n\), где \(r_j\) равно правой границе \(j\)-го отрезка (индексу последнего элемента, который принадлежит \(j\)-му отрезку), таким образом, массив разделен на подотрезки \([1; r_1], [r_1 + 1; r_2], [r_2 + 1, r_3], \dots, [r_{k - 1} + 1, n]\). Заметьте, что \(r_k\) всегда равно \(n\), но вам все равно необходимо его вывести.

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\) представлены на картинке выше:

О качестве полученных лестниц:

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\).

B. Водяная лилия

геометрия математика *1000

Инесса плавала по озеру в лодке и заметила прекрасный цветок водяной лилии над поверхностью воды. Она подплыла к цветку поближе и оказалось, что цветок находится на высоте \(H\) над уровнем воды. Инесса взяла цветок и отплыла на расстояние \(L\). В этот момент цветок коснулся воды.

Предположим, лилия растёт из точки \(A\) на дне озера, а стебель лилии всегда является отрезком прямой, один из концов которого закреплён в точке \(A\). Предположим также, что изначально цветок находился прямо над точкой \(A\), то есть стебель был вертикальным. Можете ли вы определить глубину дна озера в точке \(A\)?

Входные данные

В единственной строке ввода записаны два целых числа \(H\) и \(L\) (\(1 \le H < L \le 10^{6}\)).

Выходные данные

Выведите одной действительное число — глубину озера в точке \(A\). Абсолютная или относительная погрешность ответа не должна превышать \(10^{-6}\).

Более формально, пусть \(A\) — ваш ответ, \(B\) — ответ жюри. Тогда ваш ответ будет считаться правильным, если \(\frac{|A - B|}{\max{(1, |B|)}} \le 10^{-6}\)

A. Лифт

математика Перебор реализация *1000

Недавно в городе N-ске достроили 1000-этажный небоскреб. Для перемещения по этажам небоскреба используются современные сверхскоростные лифты. У каждого лифта имеются две двери: передняя и задняя. Если человек входит в лифт через переднюю дверь, то выходит он через заднюю, и наоборот. В лифте имеются два поручня, пронумерованных числами 1 и 2. Поручень номер 1 находится слева от входа в переднюю дверь (или, соответственно, справа от входа в заднюю дверь), а поручень номер 2 — справа (слева от входа в заднюю дверь). Известно, что каждый человек в N-ске держится за поручень той рукой, которая у него наиболее развита.

Некоторое время назад город посетил очень важный человек, который не преминул посетить небоскреб и проехаться на лифте. Срочно необходимо определить, является ли он левшой или правшой, зная, в какую дверь он зашел и за какой поручень держался.

Входные данные

В первой строке записано, через какую дверь важный человек зашел в лифт. В ней записано «front», если человек зашел в лифт через переднюю дверь, и «back», если через заднюю. Во второй строке содержится целое число a (1 ≤ a ≤ 2), обозначающее номер поручня, за который держался пассажир.

Выходные данные

Выведите символ «R», если очень важный человек является правшой, или «L», если он является левшой.

C. Винни-Пух и мед

математика реализация *1100

Винни-Пух, как известно, очень любит мед. Как-то раз они с Пятачком прознали, что у Кролика вновь появилось изрядное количество этого сладкого лакомства. Как вы можете догадаться, вскоре Винни и Пятачок напросились в гости. Итак, перед Винни-Пухом стоят в ряд n баночек с медом, в банке с номером i находится ai килограмм меда. Винни-Пух ест мед следующим образом: каждый раз он выбирает банку, в которой больше всего меда (в случае, если таких банок несколько, он берет любую из них). Если в этой банке меньше, чем k килограмм меда, или же Винни уже трижды ел мед из этой банки, то он отдает ее Пятачку. В противном случае он ест из нее ровно k килограмм меда и ставит ее на место. Винни делает так до тех пор, пока не отдаст все банки Пятачку. Посчитайте, сколько меда в сумме получит Пятачок после того, как Винни удовлетворит свой аппетит.

Входные данные

В первой строке записано два целых числа n и k (1 ≤ n ≤ 100, 1 ≤ k ≤ 100). Во второй строке записаны n целых чисел a1, a2, ..., an, разделенных пробелами (1 ≤ ai ≤ 100).

Выходные данные

Выведите одно число — сколько килограмм меда достанется Пятачку.

E. Поставь Коня!

игры математика *1400

Петя и Гена играют в очень занимательную игру «Поставь Коня!» на шахматной доске размером n × n. В этой игре ребята по очереди ставят на доску шахматных коней так, чтобы никакие два коня не находились под ударом друг друга. Под ударом шахматного коня, находящегося в клетке (r, c), находятся клетки (r - 1, c + 2), (r - 1, c - 2), (r + 1, c + 2), (r + 1, c - 2), (r - 2, c + 1), (r - 2, c - 1), (r + 2, c + 1) и (r + 2, c - 1) (некоторые из них могут находиться вне доски). Проигрывает тот, кто не может сделать ход. Определите, кто выиграет при оптимальной игре обоих, если первым ходит Петя.

Входные данные

В первой строке задано целое число T (1 ≤ T ≤ 100) — количество досок, для которых вам надо определить исход игры. В следующих T строках заданы T целых чисел ni (1 ≤ ni ≤ 10000) — размеры шахматных досок.

Выходные данные

Для каждой доски ni × ni выведите в отдельной строке «0», если при оптимальной игре выигрывает Петя, иначе выведите «1».

C. Круглый коридор

математика теория чисел *1400

Амуга находится в большом круглом коридоре. Коридор состоит из двух колец. Внутреннее кольцо разбито на \(n\) равных секторов, а внешнее — на \(m\) равных секторов. Между каждой парой соседних секторов в одной части (внешней или внутренней) есть стена, но стены между внутренней и внешней частями нет. Сектора расположены так, что в положении «12 часов» стена есть в обоих секторах.

Сектора внутреннего кольца обозначаются \((1,1), (1,2), \dots, (1,n)\) по часовой стрелке. Сектора внешнего кольца обозначаются \((2,1), (2,2), \dots, (2,m)\) таким же образом. Для лучшего понимания смотрите рисунок выше.

Амуга хочет знать, может ли он переместиться между двумя заданными секторами. У него \(q\) таких вопросов.

Для каждого вопроса выведите, может ли он переместиться между двумя заданными секторами.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 10^{18}\), \(1 \le q \le 10^4\)) — количество внутренних секторов, количество внешних секторов и количество вопросов.

Каждая из следующих \(q\) строк содержит четыре целых числа \(s_x\), \(s_y\), \(e_x\), \(e_y\) (\(1 \le s_x, e_x \le 2\); если \(s_x = 1\), то \(1 \le s_y \le n\), иначе \(1 \le s_y \le m\); такие же ограничения на \(e_y\)). Амуга хочет узнать, можно ли пройти из сектора \((s_x, s_y)\) в сектор \((e_x, e_y)\).

Выходные данные

Для каждого вопроса выведите «YES», если Амуга может добраться из \((s_x, s_y)\) в \((e_x, e_y)\), и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

Пример показан на рисунке в условии.

F. Graph Traveler

графы дп математика Перебор поиск в глубину и подобное реализация Структуры данных теория чисел *2300

Гильдон проводит эксперименты с интересной машиной под названием Graph Traveler. В этой машине есть ориентированный граф из \(n\) вершин, пронумерованных от \(1\) до \(n\). \(i\)-я вершина имеет \(m_i\) выходящих ребер, они обозначаются \(e_i[0]\), \(e_i[1]\), \(\ldots\), \(e_i[m_i-1]\), где каждый элемент обозначает номер вершины конца ребра. В графе могут быть кратные ребра и петли. Кроме того, в каждой вершине \(i\) написано некоторое целое число \(k_i\).

Путь по графу определяется следующим образом.

  1. Гильдон выбирает вершину, с которой начнет путь, а также некоторое начальное целое число. Запомним это число в переменную \(c\).
  2. Когда Гильдон приходит в вершину \(i\), а также, в начале, если путь начинается с вершины \(i\), он добавляет значение \(k_i\) к \(c\).
  3. Следующая вершина пути — это \(e_i[x]\), где \(x\) — такое целое число \(0 \le x \le m_i-1\), что \(x \equiv c \pmod {m_i}\). Гильдон переходит в эту следующую вершину и возвращается на шаг 2.

Ясно, что такой путь никогда не кончается, потому что шаги 2 и 3 будут повторяться бесконечное число раз.

Например, предположим, что Гильдон начинает в вершине \(1\) с \(c = 5\), при этом \(m_1 = 2\), \(e_1[0] = 1\), \(e_1[1] = 2\), \(k_1 = -3\). Сразу после того, как он начинает в вершине \(1\), \(c\) становится равным \(2\). Так как единственное целое число \(x\) (\(0 \le x \le 1\)) такое, что \(x \equiv c \pmod {m_i}\), это \(0\), то Гильдон пойдет в вершину \(e_1[0] = 1\). После того как он попадет в вершину \(1\) снова, \(c\) станет равной \(-1\). Единственное целое число \(x\), удовлетворяющее сравнению, есть \(1\), поэтому он идет в вершину \(e_1[1] = 2\), и так далее.

Так как Гильдон достаточно любознательный, он хочет спросить у вас \(q\) вопросов. Каждый раз он хочет узнать, сколько различных вершин он посетит бесконечное число раз, если он начнет с определенной вершины с определенным числом \(c\). Обратите внимание, что не нужно учитывать вершины, которые будут посещены только конечное число раз.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество вершин в графе.

Вторая строка содержит \(n\) целых чисел. \(i\)-е из них равно \(k_i\) (\(-10^9 \le k_i \le 10^9\)) — число, написанное в \(i\)-й вершине.

Следующие \(2 \cdot n\) строк описывают ребра, выходящие из каждой вершины. \((2 \cdot i + 1)\)-я строка содедржит одно целое число \(m_i\) (\(1 \le m_i \le 10\)) — число исходящих ребер из вершины \(i\). \((2 \cdot i + 2)\)-я строка содержит \(m_i\) целых чисел \(e_i[0]\), \(e_i[1]\), \(\ldots\), \(e_i[m_i-1]\), все значения которых лежат в пределах от \(1\) до \(n\) включительно.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество вопросов Гильдона.

Каждая из следующих \(q\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x \le n\), \(-10^9 \le y \le 10^9\)), которые означают, что Гильдон хочет начать путь с вершины \(x\), а начальное значение переменной \(c\) должно быть \(y\).

Выходные данные

Для каждого запроса выведите количество различных вершин, которые будут посещены бесконечно много раз, если Гильдон начнет путь из вершины \(x\) с начальным значением \(y\).

Примечание

Граф в первом примере показан на рисунке ниже:

Три числа, показанные на вершине \(i\), равны соответственно \(i\), \(k_i\) и \(m_i\). Числа на ребрах показывают их номер в списке выходящих ребер из \(i\)-й вершины.

Путь для каждого запроса показан ниже. Он описывается последовательностью фраз, каждая в формате «вершина (\(c\) после добавления \(k_i\))».

  • \(1(0) \to 2(0) \to 2(0) \to \ldots\)
  • \(2(0) \to 2(0) \to \ldots\)
  • \(3(-1) \to 1(-1) \to 3(-1) \to \ldots\)
  • \(4(-2) \to 2(-2) \to 2(-2) \to \ldots\)
  • \(1(1) \to 3(1) \to 4(1) \to 1(1) \to \ldots\)
  • \(1(5) \to 3(5) \to 1(5) \to \ldots\)

Во втором примере граф такой же, как в первом, но у вершин ненулевые значения. Поэтому ответы отличаются от ответов в первом примере.

Пути во втором примере показаны ниже:

  • \(1(4) \to 2(-1) \to 2(-6) \to \ldots\)
  • \(2(-5) \to 2(-10) \to \ldots\)
  • \(3(-4) \to 1(0) \to 2(-5) \to 2(-10) \to \ldots\)
  • \(4(-3) \to 1(1) \to 3(-2) \to 4(-3) \to \ldots\)
  • \(1(5) \to 3(2) \to 1(6) \to 2(1) \to 2(-4) \to \ldots\)
  • \(1(9) \to 3(6) \to 2(1) \to 2(-4) \to \ldots\)

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\).

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)\).

D. Выведите 1337-строку...

Комбинаторика Конструктив математика Строки *1900

Подпоследовательность — это последовательность, которую можно получить из другой последовательности путем удаления некоторых элементов, не меняя порядок оставшихся элементов.

Вам задано число \(n\).

Вам нужно найти такую последовательность \(s\), состоящую из цифр \(\{1, 3, 7\}\), что она имеет ровно \(n\) подпоследовательностей \(1337\).

Например, последовательность \(337133377\) имеет \(6\) подпоследовательностей \(1337\):

  1. \(337\underline{1}3\underline{3}\underline{3}7\underline{7}\) (нужно удалить второй и пятый символы);
  2. \(337\underline{1}\underline{3}3\underline{3}7\underline{7}\) (нужно удалить третий и пятый символы);
  3. \(337\underline{1}\underline{3}\underline{3}37\underline{7}\) (нужно удалить четверты и пятый символы);
  4. \(337\underline{1}3\underline{3}\underline{3}\underline{7}7\) (нужно удалить второй и шестой символы);
  5. \(337\underline{1}\underline{3}3\underline{3}\underline{7}7\) (нужно удалить третий и шестой символы);
  6. \(337\underline{1}\underline{3}\underline{3}3\underline{7}7\) (нужно удалить четвертый и шестой символы).

Обратите внимание, что длина последовательности \(s\) не должна превышать \(10^5\).

Вам нужно ответить на \(t\) независимых запросов.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 10\)) — количество запросов.

Следующие \(t\) строк содержат описание запросов: \(i\)-я строка содержит единственное число \(n_i\) (\(1 \le n_i \le 10^9\)).

Выходные данные

На \(i\)-й запрос выведите строку \(s_i\) (\(1 \le |s_i| \le 10^5\)), состоящую из цифр \(\{1, 3, 7\}\). Строка \(s_i\) должна содержать ровно \(n_i\) подпоследовательностей \(1337\). Если подходящих строк несколько, выведите любую из них.

F. Вам заданы буквы...

Бинарный поиск математика реализация *2700

У вас есть \(a\) заглавных латинских букв 'A' и \(b\) латинских букв 'B'.

Период строки — это такое наименьшее целое \(k\), что \(s_i = s_{i~mod~k}\)\(0\)-индексации) для всех \(i\). Заметим, что это подразумевает, что \(k\) не обязательно делит \(a+b = |s|\).

Например, период строки «ABAABAA» равен \(3\), период «AAAA» равен \(1\), а период «AABBB» равен \(5\).

Найдите количество различных периодов всех возможных строк из \(a\) букв 'A' и \(b\) букв 'B'.

Входные данные

В первой строке записаны два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)) — количество букв 'A' и 'B', соответственно.

Выходные данные

Выведите количество различных периодов всех возможных строк из \(a\) букв 'A' и \(b\) букв 'B'.

Примечание

Все возможные периоды для первого примера:

  • \(3\) «BBABBA»
  • \(4\) «BBAABB»
  • \(5\) «BBBAAB»
  • \(6\) «AABBBB»

Все возможные периоды для второго примера:

  • \(3\) «BAABAABA»
  • \(5\) «BAABABAA»
  • \(6\) «BABAAABA»
  • \(7\) «BAABAAAB»
  • \(8\) «AAAAABBB»

Обратите внимание, что это не единственные возможные строки для данных периодов.

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».

C. Общие делители

математика реализация *1300

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

Ваша задача — найти количество таких положительных целых чисел \(x\), что \(x\) делит каждое число в массиве. Другими словами, вам необходимо найти количество общих делителей всех элементов массива.

Например, если массив \(a\) будет равен \([2, 4, 6, 2, 10]\), то \(1\) и \(2\) делят каждое число в массиве (таким образом, ответ на этот тест равен \(2\)).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{12}\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Выходные данные

Выведите одно целое число — количество таких положительных целых чисел \(x\), что \(x\) делит каждое число из заданного массива (другими словами, ответ равен количеству общих делителей всех элементов массива).

A. BowWow и расписание

математика *1000

В городе Санкт-Петербург день длится \(2^{100}\) минут. С главной станции города Санкт-Петербург поезда отъезжают в моменты времени \(1\) минута, \(4\) минуты, \(16\) минут и т. д., то есть в моменты времени \(4^k\) для целых \(k \geq 0\). Team BowWow прибыли на станцию в момент времени \(s\) и хотят понять, сколько поездов они уже пропустили, то есть сколько поездов отъехало со станции строго раньше, чем в момент времени \(s\). Например, если \(s = 20\), то они пропустили поезда, отъехавшие в моменты времени \(1\), \(4\) и \(16\). Так как время знаете только вы, подскажите им!

Обратите внимание, что число \(s\) будет дано вам в двоичной системе счисления без ведущих нулей.

Входные данные

Первая строка содержит единственное число \(s\) (\(0 \leq s < 2^{100}\)), представленное в двоичной системе счисления без ведущих нулей.

Выходные данные

Выведите одно число — количество поездов, отправившихся со станции строго раньше, чем в момент времени \(s\).

Примечание

В первом примере \(100000000_2 = 256_{10}\), пропущенные поезда отъехали в моменты времени \(1\), \(4\), \(16\), \(64\).

Во втором примере \(101_2 = 5_{10}\), поезда отъезжали в моменты времени \(1\) и \(4\).

Третий пример был разобран в условии.

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]\).

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\);

Второй пример аналогичен первому.

E. Наташа, Саша и префиксные суммы

дп Комбинаторика математика теория чисел *2300

Два любимых числа Наташи — это \(n\) и \(1\), а два любимых числа Саши — \(m\) и \(-1\). Однажды Саша и Наташа встретились и выписали все возможные массивы из \(n+m\) элементов, в которых \(n\) элементов равны \(1\), а другие \(m\) элементов равны \(-1\). Для каждого массива они посчитали его максимальную префиксную сумму, возможно пустую, равную \(0\) (т. е. если каждая непустая префиксная сумма меньше нуля, то она считается равной нулю). Более формально, обозначим за \(f(a)\) максимальную префиксную сумму массива \(a_{1, \ldots ,l}\) длины \(l \geq 0\). Тогда:

\(\)f(a) = \max (0, \smash{\displaystyle\max_{1 \leq i \leq l}} \sum_{j=1}^{i} a_j )\(\)

Теперь они хотят посчитать сумму максимальных префиксных сумм по всем выписанным массивам и просят вас в этом помочь. Так как эта сумма может быть очень большой, выведите её по модулю \(998\: 244\: 853\).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(0 \le n,m \le 2\,000\)).

Выходные данные

Выведите ответ на задачу по модулю \(998\: 244\: 853\).

Примечание

В первом примере существует единственный возможный массив: [-1,-1], его максимальная префиксная сумма равна \(0\).

Во втором примере существует единственный возможный массив: [1,1], его максимальная префиксная сумма равна \(2\).

В третьем примере существуют \(6\) возможных массивов:

[1,1,-1,-1], f([1,1,-1,-1]) = 2

[1,-1,1,-1], f([1,-1,1,-1]) = 1

[1,-1,-1,1], f([1,-1,-1,1]) = 1

[-1,1,1,-1], f([-1,1,1,-1]) = 1

[-1,1,-1,1], f([-1,1,-1,1]) = 0

[-1,-1,1,1], f([-1,-1,1,1]) = 0

Ответ для третьего примера равен \(2+1+1+1+0+0 = 5\).

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\) в порядке в котором они будут стоять на окружности. Каждое число должно встречаться только один раз. Если есть несколько решений, выведите любое.

Примечание

Пример из условия приведен для первого примера.

Можно доказать, что для второго примера решения не существует.

F. Красота перестановки

Конструктив математика *3400

Назовем красотой перестановки чисел от \(1\) до \(n\) \((p_1, p_2, \dots, p_n)\) количество пар \((L, R)\) таких, что \(1 \le L \le R \le n\) и числа \(p_L, p_{L+1}, \dots, p_R\) являются последовательными \(R-L+1\) числами в каком-то порядке. К примеру, красота перестановки \((1, 2, 5, 3, 4)\) равна \(9\), а отрезки, соответствующие парам индексов — это \([1]\), \([2]\), \([5]\), \([4]\), \([3]\), \([1, 2]\), \([3, 4]\), \([5, 3, 4]\), \([1, 2, 5, 3, 4]\).

Вам нужно ответить на \(q\) независимых запросов. В каждом запросе вам будут даны целые положительные числа \(n\), \(k\). Определите, существует ли перестановка чисел от \(1\) до \(n\) с красотой, равной \(k\), а если существует, то выведите одну из таких.

Входные данные

Первая строка содержит целое число \(q\) (\(1\le q \le 10\,000\)) — число запросов.

Далее следует \(q\) строк. Каждая строка содержит два целых числа \(n\), \(k\) (\(1 \le n \le 100\), \(1 \le k \le \frac{n(n+1)}{2}\)) — длину перестановки и необходимую красоту соответственно.

Выходные данные

Для запроса выведите «NO», если не существует нужной перестановки. Иначе выведите «YES», а в следующей строке выведите \(n\) чисел — элементы перестановки в нужном порядке.

Примечание

Посмотрим на первый пример.

Первый запрос: в \((1)\) есть только один отрезок, состоящий из последовательных чисел — вся перестановка.

Второй запрос: в \((2, 4, 1, 5, 3)\) есть \(6\) таких отрезков: \([2]\), \([4]\), \([1]\), \([5]\), \([3]\), \([2, 4, 1, 5, 3]\).

Для третьего запроса таких перестановок не существует.

Четвертый запрос: в \((2, 3, 1, 4, 5)\) есть \(10\) таких отрезков: \([2]\), \([3]\), \([1]\), \([4]\), \([5]\), \([2, 3]\), \([2, 3, 1]\), \([2, 3, 1, 4]\), \([4, 5]\), \([2, 3, 1, 4, 5]\).

A. Выберите два числа

математика сортировки *800

Вам дан массив \(A\), состоящий из \(n\) положительных целых чисел \(a_1, a_2, \dots, a_n\), а также массив \(B\), состоящий из \(m\) положительных целых чисел \(b_1, b_2, \dots, b_m\).

Выберите какой-то элемент \(a\) массива \(A\) и какой-то элемент \(b\) массива \(B\) так, чтобы числа \(a+b\) не было ни в массиве \(A\), ни в массиве \(B\).

К примеру, если \(A = [2, 1, 7]\), \(B = [1, 3, 4]\), то можно выбрать \(1\) с массива \(A\) и \(4\) с массива \(B\), так как числа \(5 = 1 + 4\) нет ни в \(A\), ни в \(B\). В то же время, выбрать \(2\) с \(A\) и \(1\) с \(B\) нельзя, так как \(3 = 2 + 1\) входит в \(B\).

Можно показать, что такая пара чисел найдется. Если существует несколько решений, выведите любое из них.

Выберите и выведите любые такие два числа.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n \le 100\)) — количество элементов \(A\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 200\)) — элементы \(A\).

Третья строка содержит одно целое число \(m\) (\(1\le m \le 100\)) — количество элементов \(B\).

Четвертая строка содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le 200\)) — элементы \(B\).

Можно показать, что ответ всегда существует.

Выходные данные

Выведите два числа \(a\) и \(b\) такие, что \(a\) входит в \(A\), \(b\) входит в \(B\), а \(a+b\) не входит ни в \(A\), ни в \(B\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере мы можем выбрать \(20\) с массива \([20]\) и \(20\) с массива \([10, 20]\). Числа \(40 = 20 + 20\) нет ни в одном из этих массивов. Хотя с второго массива можно выбрать и \(10\).

Во втором примере мы можем выбрать \(3\) с массива \([3, 2, 2]\) и \(1\) с массива \([1, 5, 7, 7, 9]\). Числа \(4 = 3 + 1\) нет ни в одном из этих массивов.

В третьем примере мы можем выбрать \(1\) с массива \([1, 3, 5, 7]\) и \(1\) с массива \([7, 5, 3, 1]\). Числа \(2 = 1 + 1\) нет ни в одном из этих массивов.

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\).

В третьем запросе вы не можете создать ни одного бургера, так как у вас всего одна булочка. Таким образом, ваш доход равен нулю.

E. XOR-угадайка

битмаски интерактив математика *1900

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Мы загадали целое число \(x\), не меньше \(0\) и не больше \(2^{14} - 1\). Вы должны угадать это число.

Для этого вы можете задать не более \(2\) запросов. Каждый запрос должен состоять из \(100\) целых чисел \(a_1\), \(a_2\), ..., \(a_{100}\) (каждое число должно быть не меньше \(0\) и не больше \(2^{14} - 1\)). В ответ на запрос мы выберем целое число \(i\) (\(1 \le i \le 100\)) и сообщим вам значение \(a_i \oplus x\) (побитовое исключающее ИЛИ чисел \(a_i\) и \(x\)). Все \(200\) чисел, которые вы используете в запросах, обязательно должны быть различны.

Гарантируется, что значение \(x\) в каждом тесте зафиксировано, но выбор числа \(i\) в каждом запросе может зависеть от того, какие числа вы посылаете.

Выходные данные

Чтобы дать ответ на задачу, ваша программа должна отправить одну строку \(!\) \(x\) с переводом строки в конце. После этого программа должна сбросить буфер вывода и завершиться.

Протокол взаимодействия

До того, как ваша программа даст ответ, она может отправить не более \(2\) запросов. Чтобы отправить запрос, выведите строку следующего формата: \(?\) \(a_1\) \(a_2\) ... \(a_{100}\), где каждое \(a_j\) должно быть целым числом из отрезка \([0, 2^{14} - 1]\). Строка, которую вы отправляете, должна заканчиваться символов перевода строки. После отправки запроса программа должна сбросить буфер вывода и прочитать ответ на запрос — значение \(a_i \oplus x\) для некоторого \(i \in [1, 100]\). Никакое число не должно быть использовано в запросах дважды, ни в пределах одного и того же запроса, ни в разных запросах.

Если вы зададите некорректный запрос (или же количество запросов превысит \(2\)), ответом будет число \(-1\). Если ваша программа получила такой ответ, она должна немедленно завершиться — иначе вы можете получить вердикт «Ошибка исполнения», «Превышено ограничение времени» или какой-нибудь другой, а не «Неправильный ответ».

Примечание

Пример взаимодействия не является корректным — вы должны отправить ровно \(100\) целых чисел в каждом запросе. Все остальное корректно.

Взломы в этой задаче запрещены.

A. XORиначчи

математика *900

Дженгиз недавно узнал, что такое числа Фибоначчи, и сейчас он занимается изучением алгоритмов для их поиска. Вскоре ему стало скучно читать про них, и он придумал новый тип чисел, который он назвал числами XORиначчи. Он определил их следующим образом:

Вам даны три целых числа \(a\), \(b\) и \(n\), найдите \(f(n)\).

Вам нужно решить \(T\) независимых тестовых примеров.

Входные данные

Ввод состоит из нескольких тестовых примеров.

Первая строка ввода содержит целое число \(T\) (\(1 \le T \le 10^3\)), количество тестовых примеров.

Каждая из следующих \(T\) строк содержит три целых числа, разделенных пробелами: \(a\), \(b\) и \(n\) (\(0 \le a, b, n \le 10^9\)) соответственно.

Выходные данные

Для каждого теста выведите \(f(n)\).

Примечание

В первом примере \(f(2) = f(0) \oplus f(1) = 3 \oplus 4 = 7\).

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\).

B. Коала и лампы

математика реализация теория чисел *1300

Сейчас идёт праздничный сезон, и Коала декорирует свой дом разными лампами. У него есть \(n\) ламп, каждая из которых периодически моргает.

После того как Коала взглянул на лампы, он заметил, у каждой лампы есть два параметра \(a_i\) и \(b_i\). Лампа с параметрами \(a_i\) и \(b_i\) переключается (т.е. переходит из включённого состояния в выключенное или наоборот) каждую \(a_i\)-ю секунду начиная с \(b_i\)-й. Иначе говоря, она переключается (меняет своё состояние) в моменты \(b_i\), \(b_i + a_i\), \(b_i + 2 \cdot a_i\) и так далее.

Вы знаете для каждой лампы, включена она изначально или нет, а также соответствующие параметры \(a_i\) и \(b_i\). Коала интересуется, чему будет равно наибольшее число ламп, которые будут одновременно включены. Вам нужно это выяснить.

Так выглядит состояние ламп в первом примере.
Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\)) — число ламп.

Следующая строка содержит строку \(s\) длины \(n\), \(i\)-й символ строки равен «1», если \(i\)-я лампа изначально включена. Иначе \(i\)-й символ равен «0».

\(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 5\)) — параметры \(i\)-й лампы.

Выходные данные

Выведите одно число — максимальное возможное число одновременно горящих ламп.

Примечание

В первом примере состояния ламп изображены на картинке выше. Наибольшее число одновременно включённых ламп равно \(2\) (например в момент \(2\)).

Во втором примере все лампы изначально включены. Значит ответ равен \(4\).

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\).

C. Камил и проведение стрима

Деревья математика теория чисел *2000

Камил любит стримить видео по спортивному программированию. Его канал на MeTube недавно набрал \(100\) миллионов подписчиков. Чтобы отпраздновать это, он выложил видео с интересной задачей, которую он пока не может решить. Можете ли вы помочь ему?

Вам дано дерево — связный неориентированный граф состоящий из \(n\) вершин и \(n - 1\) ребер. Дерево подвешено за вершину \(1\). Вершина \(u\) является предком \(v\) если она лежит на кратчайшем пути между корнем и \(v\). В частности, вершина является предком себя.

У каждой вершины \(v\) есть красота \(x_v\) — неотрицательное целое число не большее \(10^{12}\). Это позволяет нам определить красоту пути. Пусть \(u\) предок \(v\). Тогда определим красоту \(f(u, v)\) как наибольший общий делитель красот всех вершин на кратчайшем пути между \(u\) и \(v\). Формально, если \(u=t_1, t_2, t_3, \dots, t_k=v\) — вершины на кратчайшем пути между \(u\) и \(v\), тогда \(f(u, v) = \gcd(x_{t_1}, x_{t_2}, \dots, x_{t_k})\). Тут \(\gcd\) обозначает наибольший общий делитель множества чисел. В частности, \(f(u, u) = \gcd(x_u) = x_u\).

Ваша задача найти сумму

\(\) \sum_{u\text{ предок }v} f(u, v). \(\)

Так как ответ может быть слишком большим, выведите его по модулю \(10^9 + 7\).

Обратите внимание что для любого \(y\), \(\gcd(0, y) = \gcd(y, 0) = y\). В частности, \(\gcd(0, 0) = 0\).

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\,000\)) — количество вершин в дереве.

В следующей строке записаны \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 \le x_i \le 10^{12}\)). Значение \(x_v\) обозначает красоту вершины \(v\).

В следующих \(n - 1\) строках описаны ребра дерева. Каждая из них содержит два целых числа \(a, b\) (\(1 \le a, b \le n\), \(a \neq b\)) — вершины соединенные ребром.

Выходные данные

Выведите сумму красот всех таких путей \((u, v)\), что \(u\) предок \(v\). Эта сумма должна быть выведена по модулю \(10^9 + 7\).

Примечание

На следующей иллюстрации изображены все \(10\) возможных путей, в которых один из концов является предком другого. Сумма красот всех этих путей равна \(42\):

E. Войтек и карточные фокусы

математика *2700

Войтек только что выиграл олимпиаду по математике в Байтландии! Приз восхитителен - отличная книга под названием 'Карточные фокусы для чайников.' 'Отлично!' он подумал, 'Наконец-то я смогу воспользоваться запылившейся колодой карт, которая без дела лежит у меня на столе!'

Первая глава книги это 'Как перемешать \(k\) карт в любом порядке, который вы хотите.' Формально это список из \(n\) детерминированных методов перемешать \(k\) карт. Более формально, \(i\)-й метод может быть описан перестановкой \((P_{i,1}, P_{i,2}, \dots, P_{i,k})\) целых чисел от \(1\) до \(k\). Если мы упорядочим карты в колоде от \(1\) до \(k\) сверху вниз, тогда \(P_{i,j}\) обозначает номер \(j\)-й карты сверху колоды после перемешивания.

Войтек хочет научиться только некоторым фокусам сегодня. Он выберет два целых числа \(l, r\) (\(1 \le l \le r \le n\)), и запомнит все фокусы от \(l\)-го до \(r\)-го, включительно. Затем он возьмет отсортированную колоду из \(k\) карт и будет применять случайные запомненные фокусы, пока ему не станет скучно. Он все еще любит математику, и поэтому заинтересовался: а сколько различных колод он может получить?

Войтек все еще не выбрал \(l\) и \(r\), но ему очень любопытно. Так он определил \(f(l, r)\) как количество различных колод которое он может получить, если выучит все фокусы от \(l\)-го до \(r\)-го, включительно. Чему равно

\(\)\sum_{l=1}^n \sum_{r=l}^n f(l, r)?\(\)

Входные данные

В первой строке записано два целых числа \(n\), \(k\) (\(1 \le n \le 200\,000\), \(1 \le k \le 5\)) — количество фокус и карт в колоде Войтека.

Каждая из следующих \(n\) строк описывает один фокус и содержит \(k\) различных целых чисел \(P_{i,1}, P_{i,2}, \dots, P_{i, k}\) (\(1 \le P_{i, j} \le k\)).

Выходные данные

Выведите сумму, описанную в условии.

Примечание

Рассмотрим первый пример:

  • Первый фокус меняет две верхние карты.
  • Второй фокус берет карту снизу колоды и кладет ее наверх.
  • Третий фокус меняет две нижние карты.

Первый и третий фокусы сами по себе позволяют получить только две колоды (либо две карты поменяны местами, либо нет). Таким образом, \(f(1, 1) = f(3, 3) = 2\).

Второй фокус позволяет совершать циклические сдвиги, таким образом \(f(2,2)=3\).

Оказывается, что два первых и два последних фокуса позволяют получить все возможные перестановки колоды Войтека. Таким образом \(f(1,2) = f(2,3) = f(1,3) = 3! = 6\).

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\) заданных игроков.

G. Путь короля

*особая задача Деревья математика *2500

В Древляндии \(n\) городов и \(n-1\) двусторонняя дорога. Каждая дорога соединяет пару различных городов. Из любого города можно проехать в любой другой, двигаясь только по дорогам. Города пронумерованы от \(1\) до \(n\). Да, конечно, вы узнали в этом описании неориентированное дерево.

В каждом городе хранится один флаг, цвет флага в \(i\)-м городе равен \(c_i\). Возможно, что цвета флагов в разных городах совпадают.

Если король едет по маршруту \([u_1, u_2, u_3, \dots, u_k]\), то это значит, что он стартует в городе \(u_1\), затем перемещается в город \(u_2\) (\(u_2\) соединён дорогой с \(u_1\)), затем из \(u_2\) в \(u_3\) (\(u_3\) соединён дорогой с \(u_2\)), и так далее пока не приедет в город \(u_k\). Возможно, что в процессе такого маршрута король посетит один и тот же город более одного раза. Иными словами, маршрут \([u_1, u_2, u_3, \dots, u_k]\) не обязательно состоит только из различных городов. В терминах теории графов — король перемещается из \(u_1\) в \(u_k\) по некоторому пути \([u_1, u_2, u_3, \dots, u_k]\), который не обязательно является простым (для всех \(j\) от \(1\) до \(k-1\) города \(u_j\) и \(u_{j+1}\) соединены дорогой).

Когда король перемещается из одного города в другой, то главы городов в знак своей дружбы обмениваются флагами.

Пример перемещения короля по маршруту \([1, 4, 2, 6]\). Цвет вершины соответствуют цвету флага в этой вершине.

Из эстетических соображений, король хочет, чтобы цвет флага в городе \(i\) был равен \(d_i\) для всех \(i\) от \(1\) до \(n\). Определите, может ли король выбрать какой-то маршрут и проехать по нему так, чтобы для каждого города цвет флага в нём оказался равен желаемому цвету \(d_i\). Обратите внимание, что король может выбрать (и проехать) ровно один маршрут. В случае положительного ответа, найдите кратчайший возможный маршрут короля.

В случае, если начальные цвета флагов уже соответствуют требованиям короля (то есть \(c_i=d_i\) для всех \(i\)), то считайте, что король совершает маршрут длины \(k=0\).

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных в тесте. Далее следуют наборы входных данных.

Каждый набор входных данных начинается строкой, содержащей целое число \(n\) (\(2 \le n \le 2\cdot10^5\)) — количество городов Древляндии.

Далее следует строка из \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^6\)), где \(c_i\) обозначает цвет флага в \(i\)-й вершине до старта перемещения короля.

Далее следует строка из \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^6\)), где \(d_i\) обозначает требуемый цвет флага в \(i\)-й вершине после завершения перемещения короля.

Далее в \(n-1\) строке перечислены дороги Древляндии. Каждая дорога задана строкой, содержащей два целых числа \(x_j, y_j\) (\(1 \le x_j, y_j \le n\)) — номера городов, которые соединены \(j\)-й дорогой.

Гарантируется, что из каждого города можно добраться в любой другой по дорогам (иными словами, система городов и дорог образует неориентированное дерево).

Сумма всех значений \(n\) по всем наборам входных данных в одном тесте не превосходит \(2\cdot10^5\).

Выходные данные

Выведите ответы на все наборы в порядке их следования во входных данных.

Каждый ответ должен начинаться со строки, содержащей «Yes» (в случае положительного ответа) или «No» (в случае, если искомого маршрута не существует). В случае положительного ответа следующая строка должна содержать целое число \(k\) — количество городов в кратчайшем возможном маршруте короля. Следующая строка должна содержать сам искомый маршрут \(u_1, u_2, \dots, u_k\) (\(1 \le u_i \le n\)). Вы можете не выводить эту строку, если \(k=0\).

A. Перемещение фишек

математика *900

Вам задано \(n\) фишек на числовой прямой. \(i\)-я фишка располагается в целочисленной координате \(x_i\). Некоторые фишки могут иметь одинаковые координаты.

Вы можете совершать любой из следующих двух типов ходов любое (возможно, нулевое) количество раз над любой фишкой:

  • Переместить фишку \(i\) на \(2\) влево или на \(2\) вправо бесплатно (то есть заменить текущую координату \(x_i\) на \(x_i - 2\) или \(x_i + 2\));
  • переместить фишку \(i\) на \(1\) влево или на \(1\) вправо и заплатить одну монету за этот ход (то есть заменить текущую координату \(x_i\) на \(x_i - 1\) или \(x_i + 1\)).

Заметьте, что разрешается перемещать фишки в любые целочисленные координаты, включая нулевую и отрицательные.

Ваша задача — найти минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату (то есть после какой-то последовательности ходов все \(x_i\) должны быть равны).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество фишек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) равно координате \(i\)-й фишки.

Выходные данные

Выведите одно целое число — минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату.

Примечание

В первом тестовом примере вам необходимо переместить первую фишку на \(2\) вправо и вторую фишку на \(1\) вправо или переместить третью фишку на \(2\) влево и вторую фишку на \(1\) влево, таким образом ответ равен \(1\).

Во втором тестовом примере вам необходимо передвинуть две фишки с координатами \(3\) на \(1\) влево, таким образом ответ равен \(2\).

A. Перемещение фишек

математика *900

Вам задано \(n\) фишек на числовой прямой. \(i\)-я фишка располагается в целочисленной координате \(x_i\). Некоторые фишки могут иметь одинаковые координаты.

Вы можете совершать любой из следующих двух типов ходов любое (возможно, нулевое) количество раз над любой фишкой:

  • Переместить фишку \(i\) на \(2\) влево или на \(2\) вправо бесплатно (то есть заменить текущую координату \(x_i\) на \(x_i - 2\) или \(x_i + 2\));
  • переместить фишку \(i\) на \(1\) влево или на \(1\) вправо и заплатить одну монету за этот ход (то есть заменить текущую координату \(x_i\) на \(x_i - 1\) или \(x_i + 1\)).

Заметьте, что разрешается перемещать фишки в любые целочисленные координаты, включая нулевую и отрицательные.

Ваша задача — найти минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату (то есть после какой-то последовательности ходов все \(x_i\) должны быть равны).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество фишек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) равно координате \(i\)-й фишки.

Выходные данные

Выведите одно целое число — минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату.

Примечание

В первом тестовом примере вам необходимо переместить первую фишку на \(2\) вправо и вторую фишку на \(1\) вправо или переместить третью фишку на \(2\) влево и вторую фишку на \(1\) влево, таким образом ответ равен \(1\).

Во втором тестовом примере вам необходимо передвинуть две фишки с координатами \(3\) на \(1\) влево, таким образом ответ равен \(2\).

A. Перемещение фишек

математика *900

Вам задано \(n\) фишек на числовой прямой. \(i\)-я фишка располагается в целочисленной координате \(x_i\). Некоторые фишки могут иметь одинаковые координаты.

Вы можете совершать любой из следующих двух типов ходов любое (возможно, нулевое) количество раз над любой фишкой:

  • Переместить фишку \(i\) на \(2\) влево или на \(2\) вправо бесплатно (то есть заменить текущую координату \(x_i\) на \(x_i - 2\) или \(x_i + 2\));
  • переместить фишку \(i\) на \(1\) влево или на \(1\) вправо и заплатить одну монету за этот ход (то есть заменить текущую координату \(x_i\) на \(x_i - 1\) или \(x_i + 1\)).

Заметьте, что разрешается перемещать фишки в любые целочисленные координаты, включая нулевую и отрицательные.

Ваша задача — найти минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату (то есть после какой-то последовательности ходов все \(x_i\) должны быть равны).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество фишек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) равно координате \(i\)-й фишки.

Выходные данные

Выведите одно целое число — минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату.

Примечание

В первом тестовом примере вам необходимо переместить первую фишку на \(2\) вправо и вторую фишку на \(1\) вправо или переместить третью фишку на \(2\) влево и вторую фишку на \(1\) влево, таким образом ответ равен \(1\).

Во втором тестовом примере вам необходимо передвинуть две фишки с координатами \(3\) на \(1\) влево, таким образом ответ равен \(2\).

A. Перемещение фишек

математика *900

Вам задано \(n\) фишек на числовой прямой. \(i\)-я фишка располагается в целочисленной координате \(x_i\). Некоторые фишки могут иметь одинаковые координаты.

Вы можете совершать любой из следующих двух типов ходов любое (возможно, нулевое) количество раз над любой фишкой:

  • Переместить фишку \(i\) на \(2\) влево или на \(2\) вправо бесплатно (то есть заменить текущую координату \(x_i\) на \(x_i - 2\) или \(x_i + 2\));
  • переместить фишку \(i\) на \(1\) влево или на \(1\) вправо и заплатить одну монету за этот ход (то есть заменить текущую координату \(x_i\) на \(x_i - 1\) или \(x_i + 1\)).

Заметьте, что разрешается перемещать фишки в любые целочисленные координаты, включая нулевую и отрицательные.

Ваша задача — найти минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату (то есть после какой-то последовательности ходов все \(x_i\) должны быть равны).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество фишек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) равно координате \(i\)-й фишки.

Выходные данные

Выведите одно целое число — минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату.

Примечание

В первом тестовом примере вам необходимо переместить первую фишку на \(2\) вправо и вторую фишку на \(1\) вправо или переместить третью фишку на \(2\) влево и вторую фишку на \(1\) влево, таким образом ответ равен \(1\).

Во втором тестовом примере вам необходимо передвинуть две фишки с координатами \(3\) на \(1\) влево, таким образом ответ равен \(2\).

A. Перемещение фишек

математика *900

Вам задано \(n\) фишек на числовой прямой. \(i\)-я фишка располагается в целочисленной координате \(x_i\). Некоторые фишки могут иметь одинаковые координаты.

Вы можете совершать любой из следующих двух типов ходов любое (возможно, нулевое) количество раз над любой фишкой:

  • Переместить фишку \(i\) на \(2\) влево или на \(2\) вправо бесплатно (то есть заменить текущую координату \(x_i\) на \(x_i - 2\) или \(x_i + 2\));
  • переместить фишку \(i\) на \(1\) влево или на \(1\) вправо и заплатить одну монету за этот ход (то есть заменить текущую координату \(x_i\) на \(x_i - 1\) или \(x_i + 1\)).

Заметьте, что разрешается перемещать фишки в любые целочисленные координаты, включая нулевую и отрицательные.

Ваша задача — найти минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату (то есть после какой-то последовательности ходов все \(x_i\) должны быть равны).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество фишек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) равно координате \(i\)-й фишки.

Выходные данные

Выведите одно целое число — минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату.

Примечание

В первом тестовом примере вам необходимо переместить первую фишку на \(2\) вправо и вторую фишку на \(1\) вправо или переместить третью фишку на \(2\) влево и вторую фишку на \(1\) влево, таким образом ответ равен \(1\).

Во втором тестовом примере вам необходимо передвинуть две фишки с координатами \(3\) на \(1\) влево, таким образом ответ равен \(2\).

A. Перемещение фишек

математика *900

Вам задано \(n\) фишек на числовой прямой. \(i\)-я фишка располагается в целочисленной координате \(x_i\). Некоторые фишки могут иметь одинаковые координаты.

Вы можете совершать любой из следующих двух типов ходов любое (возможно, нулевое) количество раз над любой фишкой:

  • Переместить фишку \(i\) на \(2\) влево или на \(2\) вправо бесплатно (то есть заменить текущую координату \(x_i\) на \(x_i - 2\) или \(x_i + 2\));
  • переместить фишку \(i\) на \(1\) влево или на \(1\) вправо и заплатить одну монету за этот ход (то есть заменить текущую координату \(x_i\) на \(x_i - 1\) или \(x_i + 1\)).

Заметьте, что разрешается перемещать фишки в любые целочисленные координаты, включая нулевую и отрицательные.

Ваша задача — найти минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату (то есть после какой-то последовательности ходов все \(x_i\) должны быть равны).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество фишек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) равно координате \(i\)-й фишки.

Выходные данные

Выведите одно целое число — минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату.

Примечание

В первом тестовом примере вам необходимо переместить первую фишку на \(2\) вправо и вторую фишку на \(1\) вправо или переместить третью фишку на \(2\) влево и вторую фишку на \(1\) влево, таким образом ответ равен \(1\).

Во втором тестовом примере вам необходимо передвинуть две фишки с координатами \(3\) на \(1\) влево, таким образом ответ равен \(2\).

A. Перемещение фишек

математика *900

Вам задано \(n\) фишек на числовой прямой. \(i\)-я фишка располагается в целочисленной координате \(x_i\). Некоторые фишки могут иметь одинаковые координаты.

Вы можете совершать любой из следующих двух типов ходов любое (возможно, нулевое) количество раз над любой фишкой:

  • Переместить фишку \(i\) на \(2\) влево или на \(2\) вправо бесплатно (то есть заменить текущую координату \(x_i\) на \(x_i - 2\) или \(x_i + 2\));
  • переместить фишку \(i\) на \(1\) влево или на \(1\) вправо и заплатить одну монету за этот ход (то есть заменить текущую координату \(x_i\) на \(x_i - 1\) или \(x_i + 1\)).

Заметьте, что разрешается перемещать фишки в любые целочисленные координаты, включая нулевую и отрицательные.

Ваша задача — найти минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату (то есть после какой-то последовательности ходов все \(x_i\) должны быть равны).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество фишек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) равно координате \(i\)-й фишки.

Выходные данные

Выведите одно целое число — минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату.

Примечание

В первом тестовом примере вам необходимо переместить первую фишку на \(2\) вправо и вторую фишку на \(1\) вправо или переместить третью фишку на \(2\) влево и вторую фишку на \(1\) влево, таким образом ответ равен \(1\).

Во втором тестовом примере вам необходимо передвинуть две фишки с координатами \(3\) на \(1\) влево, таким образом ответ равен \(2\).

A. Перемещение фишек

математика *900

Вам задано \(n\) фишек на числовой прямой. \(i\)-я фишка располагается в целочисленной координате \(x_i\). Некоторые фишки могут иметь одинаковые координаты.

Вы можете совершать любой из следующих двух типов ходов любое (возможно, нулевое) количество раз над любой фишкой:

  • Переместить фишку \(i\) на \(2\) влево или на \(2\) вправо бесплатно (то есть заменить текущую координату \(x_i\) на \(x_i - 2\) или \(x_i + 2\));
  • переместить фишку \(i\) на \(1\) влево или на \(1\) вправо и заплатить одну монету за этот ход (то есть заменить текущую координату \(x_i\) на \(x_i - 1\) или \(x_i + 1\)).

Заметьте, что разрешается перемещать фишки в любые целочисленные координаты, включая нулевую и отрицательные.

Ваша задача — найти минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату (то есть после какой-то последовательности ходов все \(x_i\) должны быть равны).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество фишек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) равно координате \(i\)-й фишки.

Выходные данные

Выведите одно целое число — минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату.

Примечание

В первом тестовом примере вам необходимо переместить первую фишку на \(2\) вправо и вторую фишку на \(1\) вправо или переместить третью фишку на \(2\) влево и вторую фишку на \(1\) влево, таким образом ответ равен \(1\).

Во втором тестовом примере вам необходимо передвинуть две фишки с координатами \(3\) на \(1\) влево, таким образом ответ равен \(2\).

A. Перемещение фишек

математика *900

Вам задано \(n\) фишек на числовой прямой. \(i\)-я фишка располагается в целочисленной координате \(x_i\). Некоторые фишки могут иметь одинаковые координаты.

Вы можете совершать любой из следующих двух типов ходов любое (возможно, нулевое) количество раз над любой фишкой:

  • Переместить фишку \(i\) на \(2\) влево или на \(2\) вправо бесплатно (то есть заменить текущую координату \(x_i\) на \(x_i - 2\) или \(x_i + 2\));
  • переместить фишку \(i\) на \(1\) влево или на \(1\) вправо и заплатить одну монету за этот ход (то есть заменить текущую координату \(x_i\) на \(x_i - 1\) или \(x_i + 1\)).

Заметьте, что разрешается перемещать фишки в любые целочисленные координаты, включая нулевую и отрицательные.

Ваша задача — найти минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату (то есть после какой-то последовательности ходов все \(x_i\) должны быть равны).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество фишек.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) равно координате \(i\)-й фишки.

Выходные данные

Выведите одно целое число — минимальное суммарное количество монет, необходимое для того, чтобы переместить все \(n\) фишек в одну координату.

Примечание

В первом тестовом примере вам необходимо переместить первую фишку на \(2\) вправо и вторую фишку на \(1\) вправо или переместить третью фишку на \(2\) влево и вторую фишку на \(1\) влево, таким образом ответ равен \(1\).

Во втором тестовом примере вам необходимо передвинуть две фишки с координатами \(3\) на \(1\) влево, таким образом ответ равен \(2\).

C. Чтение книги

математика *1200

Поликарп читает книгу, состоящую из \(n\) страниц, пронумерованных от \(1\) до \(n\). Каждый раз, когда он завершает читать страницу с номером, делящимся на \(m\), он выписывает последнюю цифру номера страницы. Например, если \(n=15\) и \(m=5\), то страницы, делящиеся на \(m\), имеют номера \(5, 10, 15\). Их последние цифры равны \(5, 0, 5\) соответственно, а их сумма равна \(10\).

Ваша задача — посчитать сумму всех цифр, которые Поликарп выпишет.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество запросов.

Следующие \(q\) строк содержат запросы, по одному в строке. Каждый запрос описывается двумя целыми числами \(n\) и \(m\) (\(1 \le n, m \le 10^{16}\)) — количеством страниц в книге и необходимым делителем соответственно.

Выходные данные

Для каждого запроса выведите ответ на него — сумму цифр, выписанных Поликарпом.

D2. Приравнивание делением (сложная версия)

математика Перебор сортировки *1600

Единственное отличие между легкой и сложной версиями — количество элементов в массиве.

Вам задан массив \(a\), состоящий из \(n\) целых чисел. За один ход вы можете выбрать любое \(a_i\) и разделить его на \(2\) с округлением вниз (иными словами, за один ход вы можете присвоить \(a_i := \lfloor\frac{a_i}{2}\rfloor\)).

Вы можете совершать эту операцию любое (возможно, нулевое) количество раз с любым \(a_i\).

Ваша задача — посчитать минимально возможное количество операций, необходимое для того, чтобы получить хотя бы \(k\) равных чисел в массиве.

Не забудьте, что допустимо иметь \(a_i = 0\) после каких-то операций, таким образом, ответ всегда существует.

Входные данные

Первая строка входных данных содержит два целых числа \(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 2 \cdot 10^5\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Выходные данные

Выведите одно целое число — минимально возможное количество операций, необходимое для того, чтобы получить хотя бы \(k\) равных элементов в массиве.

A. Оптимальный обмен валюты

математика Перебор *1400

Дни олимпиады Мегаполисов пролетели быстро, и вот участник Андрей уже в аэропорту. После пребывания в Москве у него осталось \(n\) рублей. Андрей хочет обменять их на купюры долларов или евро в любой комбинации (то есть, можно покупать одновременно и доллары, и евро). За один доллар придется отдать \(d\) рублей, а за один евро — \(e\) рублей.

Напомним, что долларовые купюры имеют номиналы \(1\), \(2\), \(5\), \(10\), \(20\), \(50\), \(100\), а купюры евро — \(5\), \(10\), \(20\), \(50\), \(100\), \(200\) (купюры номиналом в \(500\) евро в задаче отсутствуют, их тяжело найти в обменниках). Андрей может купить любой набор любых купюр. Он хочет сделать так, чтобы рублей у него осталось как можно меньше.

Помогите ему это сделать — напишите программу, которая по значениям \(n\), \(e\) и \(d\) определит, какое минимальное число рублей может остаться у Андрея после оптимального обмена валюты.

Входные данные

В первой строке входных данных находится целое число \(n\) (\(1 \leq n \leq 10^8\)) — количество рублей у Андрея.

Во второй строке находится целое число \(d\) (\(30 \leq d \leq 100\)) — стоимость одного доллара в рублях.

В третьей строке находится целое число \(e\) (\(30 \leq e \leq 100\)) — стоимость одного евро в рублях.

Выходные данные

Выведите одно целое число — минимальную сумму в рублях, которая может остаться у Андрея после оптимального обмена.

Примечание

В первом примере можно купить только \(1\) доллар, потому что купюры в \(1\) евро не существует.

Во втором примере оптимально купить \(5\) евро и \(1\) доллар.

В третьем примере можно купить одну \(10\)-долларовую купюру.

B. Бейджи

математика Перебор *1100

На Олимпиаду Мегаполисов приехали \(b\) мальчиков и \(g\) девочек. Известно, что \(n\) из них согласились принять участие в турнире по настольным играм. Организаторы не знают сколько именно среди них мальчиков и девочек.

Для того чтобы знакомство прошло быстрее, организаторы решили приготовить бейджи: красные для девочек и синие для мальчиков.

Вася приготовил \(n+1\) колоду с бейджами. В \(i\)-й (где \(i\) от \(0\) до \(n\), включительно) колоде у Васи \(i\) синих бейджей и \(n-i\) красных. Суммарное количество бейджей в любой колоде равно \(n\).

Определите, сколько минимум колод из этих \(n+1\) Вася должен взять на турнир, чтобы вне зависимости от количества мальчиков и девочек среди них, нашлась подходящая стопка.

Входные данные

В первой строке находится целое число \(b\) (\(1 \le b \le 300\)) — количество мальчиков, которые приехали на олимпиаду.

Во второй строке находится целое число \(g\) (\(1 \le g \le 300\)) — количество девочек, которые приехали на олимпиаду.

В третьей строке находится целое число \(n\) (\(1 \le n \le b + g\)) — количество участников в турнире.

Выходные данные

Выведите одно целое число — искомое минимальное количество колод.

Примечание

В первом примере все 4 колоды должны быть использованы: (0 синих, 3 красных), (1 синий, 2 красных), (2 синих, 1 красный), (3 синих, 0 красных).

Во втором примере 4 колоды должны быть использованы: (2 синих, 3 красных), (3 синих, 2 красных), (4 синих, 1 красный), (5 синих, 0 красных). Стопки (0 синих, 5 красных) и (1 синий, 4 красных) не могут понадобиться.

E. Петя и конструктор

графы Деревья Конструктив математика сортировки *2000

Недавно у Пети был день рождения. Его друзья знают, что Петя очень сильно любит головоломки, поэтому они подарили ему популярный конструктор «Электрик-\(n\)».

Конструктор «Электрик-\(n\)» состоит из \(2n - 1\) проводов и \(2n\) лампочек. При этом каждая лампочка имеет свой уникальный номер, являющийся целыми числом от \(1\) до \(2n\), а все провода являются одинаковыми и неразличимы. Чтобы собрать конструктор требуется каждый из проводов использовать для соединения каких-то двух различных лампочек. Цепочкой в собранном конструкторе назовём последовательность из не менее чем двух различных лампочек, такую что любые две соседние в цепочке лампочки соединены проводом напрямую. Итоговая конфигурация конструктора является корректной, если сеть из проводов и лампочек имеет древовидную структуру, то есть любые две различные лампочки являются концами какой-нибудь цепочки.

На протяжении нескольких дней Петя собирал различные конфигурации. Он обратил внимание на то, что иногда некоторые лампочки начинают светиться. После продолжительных экспериментов Петя выяснил, что лампочки с номерами \(2i\) и \(2i - 1\) горят тогда, когда цепочка между ними состоит ровно из \(d_i\) проводов. При этом выполнялось важное условие: значение \(d_i\) всегда было не больше \(n\).

Сколько бы Петя не старался, у него так и не получилось найти конфигурацию, в которой бы светились все лампочки, поэтому он решил попросить помощи у вас. Требуется найти любую корректную конфигурацию, в которой горят все лампочки. Гарантируется, что это всегда возможно сделать.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 100\,000\)) — параметр конструктора, определяющий количество лампочек и количество проводов.

В следующей строке записаны \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(1 \leq d_i \leq n\)), где \(d_i\) — требуемое число проводов в цепочке, чтобы лампочки \(2i\) и \(2i - 1\) светились.

Выходные данные

Выведите \(2n - 1\) строк. В \(i\)-й строке должны быть записаны два различных целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i, b_i \leq 2n\), \(a_i \ne b_i\)), которые означают, что в вашей конфигурации лампочки с этими номерами соединены проводом.

Если существует несколько правильных ответов, то разрешается вывести любой из них.

Примечание
Ответ на первый тест из условия.
Ответ на второй тест из условия.

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)\), поэтому при любом ходе игры были удалены все игроки обеих команд.

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» (без кавычек).

Примечание

В первом примере нет ни одной стертой цифры в билете, поэтому игроки не смогут сделать ни одного хода. Так как билет счастливый, то выиграет Бикарп.

Во втором примере выиграет Бикарп, для этого ему нужно поставить на место стертой цифры ту же цифру, которую поставит Монокарп на своем ходу.

C. Белый лист

геометрия математика *1700

На прямоугольном столе лежит белый лист бумаги. Он имеет прямоугольную форму, а его стороны параллельны сторонам стола. Если смотреть на стол сверху, и представить, что левая нижняя точка стола имеет координаты \((0, 0)\), а оси координат совпадают с левой и нижней сторонами стола, то левый нижний угол белого листа имеет координаты \((x_1, y_1)\), а правый верхний — \((x_2, y_2)\).

После этого на стол положили два черных листа бумаги. Стороны обоих черных листов параллельны сторонам стола. Координаты левого нижнего угла первого черного листа равны \((x_3, y_3)\), а правого верхнего — \((x_4, y_4)\). Координаты левого нижнего угла второго черного листа равны \((x_5, y_5)\), а правого верхнего — \((x_6, y_6)\).

Пример расположения трёх прямоугольников.

Определите, осталось видно хотя бы часть белого листа, если смотреть на стол сверху, после того, как на стол положили два черных листа. Часть белого листа видно в том случае, если существует хотя бы одна точка, лежащая нестрого внутри белого листа и лежащая строго вне обоих черных листов.

Входные данные

В первой строке следуют четыре целых числа \(x_1, y_1, x_2, y_2\) \((0 \le x_1 < x_2 \le 10^{6}, 0 \le y_1 < y_2 \le 10^{6})\) — координаты левого нижнего и правого верхнего углов белого листа.

Во второй строке следуют четыре целых числа \(x_3, y_3, x_4, y_4\) \((0 \le x_3 < x_4 \le 10^{6}, 0 \le y_3 < y_4 \le 10^{6})\) — координаты левого нижнего и правого верхнего углов первого черного листа.

В третьей строке следуют четыре целых числа \(x_5, y_5, x_6, y_6\) \((0 \le x_5 < x_6 \le 10^{6}, 0 \le y_5 < y_6 \le 10^{6})\) — координаты левого нижнего и правого верхнего углов второго черного листа.

Стороны каждого листа бумаги параллельны (перпендикулярны) осям координат.

Выходные данные

Если после того, как на стол положили два черных листа, осталось видно хотя бы часть белого листа, выведите «YES» (без кавычек). В противном случае, выведите «NO».

Примечание

В первом примере белый лист полностью будет покрыт черными листами.

Во втором примере часть белого листа будет видно, после того, как на стол положили два черных листа. Например, точка \((6.5, 4.5)\) лежит нестрого внутри белого листа и лежит строго вне обоих черных листов.

D. Мечи

математика *1300

В подвале театра находилось \(n\) видов мечей, которые использовались во время представлений. Каждого вида мечей было ровно по \(x\) штук. В подвал проникли \(y\) человек, каждый из которых взял ровно по \(z\) мечей, причем каждый человек брал мечи только одного вида. Заметьте, что изначально вы не знаете значения \(x, y\) и \(z\).

На следующий день директор театра обнаружил пропажу. Пересчитав мечи, директор понял, что в подвале осталось \(a_i\) мечей \(i\)-го вида.

Например, если \(n=3\), \(a = [3, 12, 6]\), то одной из возможных ситуаций является \(x=12\), \(y=5\) и \(z=3\). Тогда первые три человека взяли мечи первого типа, а другие два взяли мечи третьего типа. Заметьте, что изначально вы не знаете значения \(x, y\) и \(z\), но знаете значения \(n\) и \(a\).

Директор не помнит, сколько изначально мечей каждого вида было в подвале, а также не знает, сколько человек проникли в подвал и сколько мечей взял каждый из них. Вам предстоит определить минимальное количество людей \(y\), которые могли проникнуть в подвал театра, а также по сколько мечей \(z\) взял каждый из них.

Входные данные

В первой строке следует целое число \(n\) \((2 \le n \le 2 \cdot 10^{5})\) — количество видов мечей.

Во второй строке следует последовательность \(a_1, a_2, \dots, a_n\) \((0 \le a_i \le 10^{9})\), где \(a_i\) равно количеству мечей \(i\)-го вида, которые остались в подвале после проникновения. Гарантируется, что найдется такая пара индексов \((j, k)\), что \(a_j \neq a_k\).

Выходные данные

Выведите два целых числа \(y\) и \(z\) — минимальное количество людей, которые могли проникнуть в подвал, а также количество мечей, которое взял каждый из них.

Примечание

В первом примере минимальное значение \(y\) равно \(5\), то есть минимальное количество людей, которые могли проникнуть в подвал, равно \(5\). Каждый из них взял по \(3\) меча, причем трое из них взяли по \(3\) меча первого вида, а двое из них взяли по \(3\) меча третьего вида.

Во втором примере минимальное значение \(y\) равно \(1\), то есть минимальное количество людей, которые могли проникнуть в подвал, равно \(1\). Этот человек взял \(7\) мечей первого вида.

E1. Числовая последовательность (простая версия)

Бинарный поиск математика Перебор *1900

Единственное отличие между простой и сложной версиями — максимальное значение \(k\).

Вам задана бесконечная последовательность вида «112123123412345\(\dots\)», в которой следуют блоки всех последовательных целых чисел, записанных друг за другом. Первый блок содержит все числа от \(1\) до \(1\), второй — от \(1\) до \(2\), третий — от \(1\) до \(3\), \(\dots\), \(i\)-й блок содержит все числа от \(1\) до \(i\).

Таким образом, первые \(56\) элементов последовательности равны «11212312341234512345612345671234567812345678912345678910». Элементы последовательности нумеруются с единицы. Например, \(1\)-й элемент последовательности равен \(1\), \(3\)-й элемент последовательности равен \(2\), \(20\)-й элемент последовательности равен \(5\), \(38\)-й элемент равен \(2\), \(56\)-й элемент последовательности равен \(0\).

Перед вами стоит задача ответить на \(q\) независимых запросов. Для \(i\)-го запроса задано целое число \(k_i\). Определите элемент последовательности, который находится в позиции \(k_i\).

Входные данные

В первой строке следует целое число \(q\) (\(1 \le q \le 500\)) — количество запросов.

В \(i\)-й из следующих \(q\) строк следует целое число \(k_i\) \((1 \le k_i \le 10^9)\) — описание очередного запроса.

Выходные данные

Выведите \(q\) строк. В \(i\)-ю строку должна быть выведена цифра \(x_i\) \((0 \le x_i \le 9)\) — ответ на запрос номер \(i\), то есть \(x_i\) должно быть равно элементу последовательности, который находится в позиции \(k_i\).

Примечание

Ответы на запросы из первого примера подробно разобраны в условии.

E2. Числовая последовательность (сложная версия)

Бинарный поиск математика *2200

Единственное отличие между простой и сложной версиями — максимальное значение \(k\).

Вам задана бесконечная последовательность вида «112123123412345\(\dots\)», в которой следуют блоки всех последовательных целых чисел, записанных друг за другом. Первый блок содержит все числа от \(1\) до \(1\), второй — от \(1\) до \(2\), третий — от \(1\) до \(3\), \(\dots\), \(i\)-й блок содержит все числа от \(1\) до \(i\).

Таким образом, первые \(56\) элементов последовательности равны «11212312341234512345612345671234567812345678912345678910». Элементы последовательности нумеруются с единицы. Например, \(1\)-й элемент последовательности равен \(1\), \(3\)-й элемент последовательности равен \(2\), \(20\)-й элемент последовательности равен \(5\), \(38\)-й элемент равен \(2\), \(56\)-й элемент последовательности равен \(0\).

Перед вами стоит задача ответить на \(q\) независимых запросов. Для \(i\)-го запроса задано целое число \(k_i\). Определите элемент последовательности, который находится в позиции \(k_i\).

Входные данные

В первой строке следует целое число \(q\) (\(1 \le q \le 500\)) — количество запросов.

В \(i\)-й из следующих \(q\) строк следует целое число \(k_i\) \((1 \le k_i \le 10^{18})\) — описание очередного запроса.

Выходные данные

Выведите \(q\) строк. В \(i\)-ю строку должна быть выведена цифра \(x_i\) \((0 \le x_i \le 9)\) — ответ на запрос номер \(i\), то есть \(x_i\) должно быть равно элементу последовательности, который находится в позиции \(k_i\).

Примечание

Ответы на запросы из первого примера подробно разобраны в условии.

A. Создавая персонажа

Бинарный поиск математика *1300

В очередной раз вы играете в свою любимую игру. Вы уже выбрали персонажа, за которого еще не играли. У него есть базовые \(str\) очков силы и \(int\) очков интеллекта. Также, в начале игры, персонаж имеет \(exp\) свободных очков опыта, которые вы можете вложить либо в силу, либо в интеллект (вкладывая одно очко вы можете либо увеличить силу на \(1\), либо интеллект на \(1\)).

Так как вы хотите повеселиться, вы хотите создать тупого качка, у которого будет больше очков силы, чем интеллекта (финальная сила строго больше финального интеллекта).

Посчитайте количество различных билдов персонажа, которые вы можете создать (все ради реиграбельности), если вы обязаны вложить все свободные очки. Два билда считаются различными, если различаются их уровень силы и/или интеллекта.

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 100\)) — количество запросов. Следующие \(T\) строк содержат описания запросов — по одному в строке.

В этой строке заданы три целых числа \(str\), \(int\) и \(exp\) (\(1 \le str, int \le 10^8\), \(0 \le exp \le 10^8\)) — первоначальные сила, интеллект и количество свободных очков для распределения, соответственно.

Выходные данные

Выведите \(T\) чисел — по одному на запрос. Для каждого запроса выведите количество различных билдов, которые вы сможете создать.

Примечание

В первом запросе есть только три подходящих билда: \((str = 7, int = 5)\), \((8, 4)\) и \((9, 3)\). Во всех остальных либо персонаж получается слишком умным, либо не используются все свободные очки.

Во втором запросе есть только один возможный билд: \((2, 1)\).

В третьем запросе есть два подходящих билда: \((7, 6)\), \((8, 5)\).

В четвертом запросе во всех билдах у персонажа слишком много мозгов.

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\). Обратите внимание, что требуется выбрать мультимножество, поэтому оно может включать в себя одинаковые элементы.

B. Таблица умножения

математика теория чисел *1300

Саша подросла и пошла в первый класс. В честь этого события мама подарила ей таблицу умножения \(M\) с \(n\) строками и \(n\) столбцами, такую что \(M_{ij}=a_i \cdot a_j\), где \(a_1, \dots, a_n\) — некоторый массив целых положительных чисел.

Конечно же, девочка решила взять её с собой в школу. Но пока она обедала, хулиган Гриша стёр числа на главной диагонали и выкинул массив \(a_1, \dots, a_n\). Помогите Саше восстановить исходный массив!

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \leqslant n \leqslant 10^3\)) —размер таблицы умножения.

Каждая из следующих \(n\) строк содержит \(n\) целых чисел. \(j\)-е число в \(i\)-й строке содержит число \(M_{ij}\) (\(1 \leq M_{ij} \leq 10^9\)). На главной диагонали таблицы указаны нули, то есть, \(M_{ii}=0\).

Выходные данные

В единственной строке выведите \(n\) целых чисел, исходный массив \(a_1, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)). Гарантируется, что ответ всегда существует. Если существует несколько решений, выведите любое из них.

D. Леша и Ульяна

битмаски математика теория чисел *1900

Мальчик Дима подарил Ульяне на день рождения множество \(B\), состоящее из положительных целых чисел. Однако он не учел, что Ульяна терпеть не может множества, а больше всего на свете любит двудольные графы!

Ульяна уже была готова расстроиться, но её друг Леша сказал, что может построить неориентированный граф с помощью этого множества следующим образом: рассмотрим все целые числа как вершины графа и соединим ребрами все \(i\) и \(j\) такие, что \(|i - j|\) принадлежит \(B\).

К сожалению, граф, построенный по множеству \(B\) не очень нравится Ульяне. Леша решил исправить ситуацию и хочет незаметно выкинуть из \(B\) несколько чисел так, чтобы граф, построенный на новом множестве был двудольным. Сложность этой задачи заключается в том, что граф, с которым придется работать Леше, содержит бесконечное число вершин и ребер! Одному с такой задачей не справиться, поэтому Леша просит Вас о помощи. Напишите программу, которая удаляет из \(B\) минимальное по размеру подмножество чисел так, чтобы граф, построенный на оставшемся множестве стал двудольным.

Напомним, что граф называется двудольным, если вершины можно разбить на 2 множества так, что не существует ребер между вершинами из одного множествами.

Входные данные

Первая строка содержит целое число \(n ~ (1 \leqslant n \leqslant 200\,000)\) — размер множества \(B\).

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n ~ (1 \leqslant b_i \leqslant 10^{18})\) — элементы множества \(B\), все \(b_i\) уникальны (не повторяются)

Выходные данные

В первой строке выведите целое число \(k\) — количество удаляемых элементов множества, а во второй строке выведите \(k\) чисел через пробел — значения удаляемых элементов в любом порядке.

Если возможных ответов несколько, выведите любой

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\) изначально.

C. Идеальная команда

Бинарный поиск математика *1200

Возможно вы уже знаете, что обычная команда для ICPC состоит из ровно трех человек. Однако для идеальной команды необходимо нечто большее. У студента может быть некоторая специализация: кодер или математик. Она/он может не иметь специализации, но иметь обе сразу не может.

Команда считается идеальной, когда в нее входит хотя бы один кодер, хотя бы один математик, и она состоит из ровно трех человек.

Вы тренер в очень большом университете и Вы знаете, что \(c\) из Ваших студентов — кодеры, \(m\) — математики и \(x\) не имеют никакой специализации.

Какое наибольшее число полных идеальных команд Вы можете из них составить?

Обратите внимание, что некоторые студенты могут остаться без команды, и каждый студент может входить не более чем в одну команду.

Вам также необходимо ответить на \(q\) независимых запросов.

Входные данные

В первой строке записано одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество запросов.

В каждой из следующих \(q\) строк записаны три целых числа \(c\), \(m\) и \(x\) (\(0 \le c, m, x \le 10^8\)) — количество кодеров, математиков и студентов без специализации в университете, соответственно.

Обратите внимание, что ни один студент не является кодером и математиком одновременно.

Выходные данные

Выведите \(q\) чисел — \(i\)-е из них должно быть ответом на \(i\)-й запрос в том же порядке, в которым запросы следуют во входных данных. Ответ равен наибольшему числу полных идеальных команд, которые Вы можете составить из Ваших студентов.

Примечание

В первом примере команды составляются следующим образом:

  1. единственная команда состоит из 1 кодера, 1 математика и 1 без специализации;
  2. все три команды состоят из 1 кодера и 2 математиков;
  3. нельзя составить ни одной команды;
  4. нельзя составить ни одной команды;
  5. одна команда состоит из 1 кодера, 1 математика и 1 без специализации, остальные не могут образовать команду;
  6. одна команда состоит из 1 кодера, 1 математика и 1 без специализации, одна из 2 кодеров и 1 математика и одна из 1 кодера и 2 математиков.

A. КУС

математика *800

Назовем корректным уравнением из спичек (обозначим его как КУС) уравнение вида \(a + b = c\), где все числа \(a\), \(b\) и \(c\) целые и больше нуля.

Например, уравнения \(2 + 2 = 4\) (||+||=||||) и \(1 + 2 = 3\) (|+||=|||) являются КУС, а уравнения \(1 + 2 = 4\) (|+||=||||), \(2 + 2 = 3\) (||+||=|||) и \(0 + 1 = 1\) (+|=|) — нет.

У вас есть \(n\) спичек. Вы хотите составить КУС используя все ваши спички. К сожалению, возможно, что у вас не получится составить КУС, используя все ваши спички. Но вы можете докупить несколько спичек и затем собрать КУС!

Например, если \(n = 2\), вы можете купить две спички и составить |+|=||, и если \(n = 5\) вы можете купить одну и составить ||+|=|||.

Посчитайте минимальное количество спичек, которое вам нужно купить для составления КУС.

Обратите внимание, что вам нужно ответить на \(q\) независимых запросов.

Входные данные

Первая строка содержит одно число \(q\) (\(1 \le q \le 100\)) — количество запросов.

Единственная строка каждого запроса содержит одно число \(n\) (\(2 \le n \le 10^9\)) — количество спичек.

Выходные данные

На каждый запрос выведите одно число — минимальное количество спичек, которое вам нужно купить для составления КУС.

Примечание

Первый и второй запросы объяснены в условии.

В третьем запросе вы можете составить \(1 + 3 = 4\) (|+|||=||||), не докупая спичек.

В четвертом запросе вам нужно купить одну спичку и составить \(2 + 4 = 6\) (||+||||=||||||).

G. Деревянный плот

Бинарный поиск математика теория чисел *3200

Представьте, что вы застряли на необитаемом острове. Единственный способ спастись — построить деревянный плот и выйти на нем в море. К счастью, вы смогли смастерить пилу, а на острове оказался лес. Более того, вы уже спилили несколько деревьев и подготовили их, получив в конечном счёте \(n\) бревен, где длина \(i\)-го бревна равна \(a_i\).

Деревянный плот, который вы хотите построить, имеет следующий вид: \(2\) бревна длины \(x\) и \(x\) бревен длины \(y\). Площадь такого плота будет равна \(x \cdot y\). При этом оба значения \(x\) и \(y\) должны быть целыми, так как это единственный метод измерения, который вы освоили, будучи на необитаемом острове. А также, оба значения \(x\) и \(y\) должны быть не менее \(2\), так как плот шириной в одно бревно неустойчив.

Вы можете разрезать бревна на части, но не можете соединять два бревна в одно. Плот какой максимальной площади вы сможете построить?

Входные данные

В первой строке задано единственное целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество бревен в вашем распоряжении.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(2 \le a_i \le 5 \cdot 10^5\)) — соответствующие длины бревен.

Гарантируется, что бы всегда сможете построить плот размера хотя бы \(2 \times 2\).

Выходные данные

Выведите единственное число — максимальную площадь плота, который вы сможете построить.

Примечание

В первом примере, вы можете разрезать бревно длины \(9\) на \(5\) частей: \(2 + 2 + 2 + 2 + 1\). Теперь мы сможете собрать плот \(2 \times 2\), используя \(2\) бревна длины \(x = 2\) и \(x = 2\) бревна длины \(y = 2\).

Во втором примере, вы можете разрезать \(a_4 = 18\) на две части \(9 + 9\) и \(a_8 = 28\) на три части \(10 + 9 + 9\). Теперь вы можете собрать плот \(10 \times 9\), используя \(2\) бревна длины \(10\) и \(10\) бревен длины \(9\).

A. Забывчивость

математика *900

Коля очень забывчивый. Сегодня учитель математики задал ему простой пример с равенством \(a + 1 = b\) с положительными целыми числами \(a\) и \(b\), но Коля забыл числа \(a\) и \(b\). Однако, он помнит, что первая (самая левая) цифра \(a\) была \(d_a\), а первая (самая левая) цифра \(b\) была \(d_b\).

Можете ли вы восстановить любое равенство \(a + 1 = b\) с этим свойством? Может быть такое, что Коля перепутал цифры, и решения не существует, в таком случае требуется это сообщить.

Входные данные

В единственной строке через пробел записаны две цифры \(d_a\) и \(d_b\) (\(1 \leq d_a, d_b \leq 9\)).

Выходные данные

Если не существует равенства \(a + 1 = b\) с положительными целыми числами \(a\) и \(b\), такое что первая цифра \(a\) равна \(d_a\), а первая цифра \(b\) равна \(d_b\), выведите одно число \(-1\).

В противном случае, выведите любые подходящие числа \(a\) и \(b\), каждое из которых положительно и не превосходит \(10^9\). Гарантируется, что если решение существует, то существует и решение, в котором оба числа не превосходит \(10^9\).

C. p-двоичные числа

битмаски математика Перебор *1600

Васе нравятся любые числа, лишь бы они были целыми степенями двойки. Петя, в отличие от Васи, более консервативен, и ему нравится только одно число \(p\) (оно может быть положительным, отрицательным или нулём). Они решили объединить свои вкусы и изобрели \(p\)-двоичные числа вида \(2^x + p\), где \(x\) — неотрицательное целое число.

Например, некоторые \(-9\)-двоичные («минус девять» двоичные) числа — это \(-8\) (минус восемь), \(7\) и \(1015\) (\(-8=2^0-9\), \(7=2^4-9\), \(1015=2^{10}-9\)).

Теперь ребята используют \(p\)-двоичные числа, чтобы представлять всё вокруг. Они столкнулись с проблемой: для данного положительного целого \(n\), какое наименьшее количество \(p\)-двоичных чисел (не обязательно различных) им понадобится, чтобы представить \(n\) в виде их суммы? Возможно, что представления вообще не существует. Помогите им справиться с этой задачей.

Например, при \(p=0\) число \(7\) можно представить как \(2^0 + 2^1 + 2^2\).

А при \(p=-9\) число \(7\) можно представить одним числом \((2^4-9)\).

Обратите внимание, что отрицательные \(p\)-двоичные числа разрешается использовать в сумме (пример есть в секции Примечание).

Входные данные

В единственной строке записано два целых числа \(n\) и \(p\) (\(1 \leq n \leq 10^9\), \(-1000 \leq p \leq 1000\)).

Выходные данные

Если \(n\) нельзя представить как сумму какого угодно количества \(p\)-двоичных чисел, выведите одно число \(-1\). В противном случае, выведите минимальное число слагаемых.

Примечание

\(0\)-двоичные числа — это обычные степени двойки, поэтому в первом примере мы можем представить \(24 = (2^4 + 0) + (2^3 + 0)\).

Во втором примере мы можем представить \(24 = (2^4 + 1) + (2^2 + 1) + (2^0 + 1)\).

В третьем примере мы можем представить \(24 = (2^4 - 1) + (2^2 - 1) + (2^2 - 1) + (2^2 - 1)\). Обратите внимание, что одинаковые слагаемые разрешены.

В четвёртом примере мы можем представить \(4 = (2^4 - 7) + (2^1 - 7)\). Обратите внимание, что второе слагаемое отрицательное, и это разрешено.

В пятом примере ни одного представления не существует.

D. Произведения-степени

математика теория чисел хэши *1800

Вам дано \(n\) целых положительных чисел \(a_1, \ldots, a_n\) и целое \(k \geq 2\). Посчитайте количество пар \(i, j\), таких что \(1 \leq i < j \leq n\), а также существует целое \(x\), такое что \(a_i \cdot a_j = x^k\).

Входные данные

В первой строке записано два целых числа \(n\) и \(k\) (\(2 \leq n \leq 10^5\), \(2 \leq k \leq 100\)).

Во второй строке записано \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)).

Выходные данные

Выведите одно число — количество подходящих пар.

Примечание

В примере подходят следующие пары:

  • \(a_1 \cdot a_4 = 8 = 2^3\);
  • \(a_1 \cdot a_6 = 1 = 1^3\);
  • \(a_2 \cdot a_3 = 27 = 3^3\);
  • \(a_3 \cdot a_5 = 216 = 6^3\);
  • \(a_4 \cdot a_6 = 8 = 2^3\).

A. Математическая задача

математика *1100

Ваш учитель по математике задал вам следующую задачку:

Есть \(n\) отрезков на оси (прямой) \(x\), \([l_1; r_1], [l_2; r_2], \ldots, [l_n; r_n]\). Отрезок \([l; r]\) включает свои границы, то есть это множество таких \(x\), что \(l \le x \le r\). Длина отрезка \([l; r]\) равна \(r - l\).

Два отрезка \([a; b]\) и \([c; d]\) имеют общую точку (пересекаются), если найдется такое \(x\), что \(a \leq x \leq b\) и \(c \leq x \leq d\). Например, отрезки \([2; 5]\) и \([3; 10]\) имеют общую точку, но отрезки \([5; 6]\) и \([1; 4]\) — не имеют.

Вам требуется добавить один отрезок, который имеет хотя бы одну общую точку с каждым данным отрезком, и имеет как можно меньшую длину. Искомый отрезок может вырождаться в точку (то есть быть отрезком длины ноль). Искомый отрезок может как быть, так и не быть среди заданных \(n\) отрезков.

Другими словами, вам нужно найти такой отрезок \([a; b]\), что \([a; b]\) и \([l_i; r_i]\) имеют общую точку для всех \(i\), и при этом значение \(b-a\) минимально.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

В первой строке набора входных данных содержится одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — количество отрезков. Следующие \(n\) строк содержат описания отрезков — \(i\)-я из них содержит два целых числа \(l_i,r_i\) (\(1 \le l_i \le r_i \le 10^{9}\)).

Сумма всех значений \(n\) по всем наборам входных данных в тесте не превосходит \(10^5\).

Выходные данные

Для каждого из наборов входных данных выведите одно целое число — минимальную длину отрезка, который имеет хотя бы одну общую точку с каждым из данных отрезков.

Примечание

В первом примере, можно взять отрезок \([5;7]\) как ответ. Это самый короткий отрезок, который имеет хотя бы одну общую точку со всеми данными.

F2. Неправильный ответ на тесте 233 (усложненная версия)

Комбинаторика математика *2400

Ваша программа снова не работает, на этот раз она получает вердикт «Неправильный ответ на тесте 233»

Это усложненная версия задачи, в этой версии \(1 \le n \le 2\cdot10^5\). Вы можете взламывать эту задачу, если вы ее заблокировали. Но вы можете взламывать предыдущую версию задачи, только если вы заблокировали обе версии.

В задаче идёт речь о тесте из \(n\) вопросов. Каждый вопрос содержит \(k\) вариантов ответа, и только один из них правильный. Ответ на \(i\)-й вопрос это \(h_{i}\). Если ваш ответ на вопрос \(i\) равен \(h_{i}\), вы получите \(1\) балл, в противном случае вы получите \(0\) баллов за этот вопрос. В этой задаче значения \(h_1, h_2, \dots, h_n\) вам известны (заданы).

Однако, вы допустили ошибку в вашей программе! Расположим все \(n\) ответов на окружности по часовой стрелке. Из-за ошибки в вашей программе, они сдвигаются на один по циклу в направлении часовой стрелки.

Формально, ошибка двигает ответ на вопрос \(i\) к вопросу \(i \bmod n + 1\). Так она двигает ответ на вопрос \(1\) к вопросу \(2\), ответ на вопрос \(2\) к вопросу \(3\), ..., ответ на вопрос \(n\) к вопросу \(1\).

Назовем все \(n\) ответов вместе набором ответов. Всего есть \(k^n\) возможных наборов ответов.

Вас интересует количество наборов ответов удовлетворяющих следующему условию: после сдвига по часовой стрелки на \(1\), итоговое количество баллов нового набора ответов строго больше чем старого. Вам необходимо найти это количество по модулю \(998\,244\,353\).

Например, если \(n = 5\) и ваш набор ответов \(a=[1,2,3,4,5]\), он будет изменен вашей программой на \(a'=[5,1,2,3,4]\) из-за ошибки. Если набор правильных ответов равен \(h=[5,2,2,3,4]\), тогда набор ответов \(a\) получит \(1\) балл, а набор ответов \(a'\) получит \(4\) балла. Так как \(4 > 1\), набор ответов \(a=[1,2,3,4,5]\) удовлетворяет условию и должен быть посчитан.

Входные данные

В первой строке записаны два целых числа \(n\), \(k\) (\(1 \le n \le 2\cdot10^5\), \(1 \le k \le 10^9\)) — количество вопросов и количество вариантов ответа в каждом вопросе.

Во второй строке записаны \(n\) целых чисел \(h_1, h_2, \dots, h_n\), (\(1 \le h_{i} \le k)\) — правильные ответы на вопросы.

Выходные данные

Выведите одно целое число — количество наборов ответов, удовлетворяющих данному ограничению, по модулю \(998\,244\,353\).

Примечание

На первый пример, корректные наборы ответов — это \([2,1,1], [2,1,2], [2,1,3], [3,1,1], [3,1,2], [3,1,3], [3,2,1], [3,2,2], [3,2,3]\).

B. Заполнение таблицы

математика реализация *1400

Предположим, что есть прямоугольная таблица \(h \times w\), которая состоит из белых и черных ячеек. Определим следующее:

  • \(r_{i}\) — Количество подряд идущих черных ячеек, с которых начинается \(i\)-я строка при просмотре слева направо (\(1 \le i \le h\)). В частности, \(r_i=0\), если крайняя левая ячейка \(i\)-й строки является белой.
  • \(c_{j}\) — Количество подряд идущих черных ячеек, с которых начинается \(j\)-й столбец при просмотре сверху вниз (\(1 \le j \le w\)). В частности, \(c_j=0\), если самая верхняя ячейка \(j\)-го столбца является белой.

Иными словами, если \(i\)-я строка начинается ровно с \(r_i\) черных ячеек. Аналогично, \(j\)-й столбец начинается ровно с \(c_j\) черных ячеек.

Пример значений \(r\) и \(c\) таблицы \(3 \times 4\).

Даны \(r\) и \(c\). Изначально все ячейки белые. Найдите количество способов заполнить ячейки так, чтобы в заданной таблице значения \(r\) и \(c\) были равны заданным. Поскольку ответ может быть очень большим, найдите по модулю \(1000000007\,(10^{9} + 7)\). Другими словами, найдите остаток от деления ответа на число \(1000000007\,(10^{9} + 7)\).

Входные данные

Первая строка содержит два целых числа \(h\) и \(w\) (\(1 \le h, w \le 10^{3}\)) — количество строк и столбцов таблицы.

Вторая строка содержит \(h\) целых чисел \(r_{1}, r_{2}, \ldots, r_{h}\) (\(0 \le r_{i} \le w\)) — значения \(r\).

Третья строка содержит \(w\) целых чисел \(c_{1}, c_{2}, \ldots, c_{w}\) (\(0 \le c_{j} \le h\)) — значения \(c\).

Выходные данные

Выведите ответ по модулю \(1000000007\,(10^{9} + 7)\).

Примечание

В первом примере есть другой возможный ответ.

Во втором примере нет таких сеток, у которых \(r\) и \(c\) такие же.

В третьем примере убедитесь вывести ответ по модулю \((10^9 + 7)\).

C. Простые числа и произведение

математика теория чисел *1700

Введем несколько определений, которые нам понадобятся ниже.

Пусть \(prime(x)\) будет множеством целочисленных простых делителей числа \(x\). Например, \(prime(140) = \{ 2, 5, 7 \}\), \(prime(169) = \{ 13 \}\).

Пусть \(g(x, p)\) будет максимальное число вида \(p^k\), где \(k\) — целое число, такое, что \(x\) делится на \(p^k\). Например:

  • \(g(45, 3) = 9\) (\(45\) делится на \(3^2=9\), но не на \(3^3=27\)),
  • \(g(63, 7) = 7\) (\(63\) делится на \(7^1=7\), но не на \(7^2=49\)).

Пусть \(f(x, y)\) будет произведением \(g(y, p)\) для всех \(p\), которые содержатся в множестве \(prime(x)\). Например:

  • \(f(30, 70) = g(70, 2) \cdot g(70, 3) \cdot g(70, 5) = 2^1 \cdot 3^0 \cdot 5^1 = 10\),
  • \(f(525, 63) = g(63, 3) \cdot g(63, 5) \cdot g(63, 7) = 3^2 \cdot 5^0 \cdot 7^1 = 63\).

Даны числа \(x\) и \(n\). Найдите \(f(x, 1) \cdot f(x, 2) \cdot \ldots \cdot f(x, n) \bmod{(10^{9} + 7)}\).

Входные данные

Первая строка содержит два целых числа \(x\) и \(n\) (\(2 \le x \le 10^{9}\), \(1 \le n \le 10^{18}\)) — числа, которые используются в формулах.

Выходные данные

Выведите ответ.

Примечание

В первом примере \(f(10, 1) = g(1, 2) \cdot g(1, 5) = 1\), \(f(10, 2) = g(2, 2) \cdot g(2, 5) = 2\).

Во втором примере само число равно \(1.597 \cdot 10^{171}\). Убедитесь вывести ответ по модулю \((10^{9} + 7)\).

В третьем примере будьте осторожны с переполнением.

E. Другое заполнение таблицы

дп Комбинаторика математика *2300

Дана квадратная таблица \(n \times n\) и целое число \(k\). Поставьте в каждую клетку по одному целому числу так, чтобы все условия были удовлетворены.

  • Все числа в таблице должны быть от \(1\) до \(k\) включительно.
  • Минимальное число \(i\)-й строки должно быть равно \(1\) (\(1 \le i \le n\)).
  • Минимальное число \(j\)-го столбца должно быть равно \(1\) (\(1 \le j \le n\)).

Найдите количество способов расставить числа в клетках. Так как ответ может быть очень большой, найдите его по модулю \((10^{9} + 7)\).

Пример правильной (слева) и неправильной (справа) таблицы, где \(n=k=2\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 250\), \(1 \le k \le 10^{9}\)).

Выходные данные

Выведите ответ по модулю \((10^{9} + 7)\).

Примечание

В первом примере есть \(7\) способов.

Во втором примере убедитесь, что вы выводите ответ по модулю \((10^{9} + 7)\).

B. Клетки

математика *1800

Дано бесконечное клетчатое поле. Требуется попасть из клетки (x1; y1) в клетку (x2; y2), но не обязательно по кратчайшему пути. Двигаться по клеткам поля можно в четырех направлениях. То есть, находясь в некоторой клетке, можно перейти в любую соседнюю по стороне.

Клетка (x; y) считается плохой, если выполняется хотя бы одно из двух условий:

  • |x + y| ≡ 0 (mod 2a),
  • |x - y| ≡ 0 (mod 2b).

Требуется узнать, какое наименьшее количество плохих клеток придется посетить по пути из (x1; y1) в (x2; y2).

Входные данные

В единственной строке заданы целые числа a, b, x1, y1, x2 и y2 — параметры плохих клеток, координаты начальной и конечной клеток соответственно (2 ≤ a, b ≤ 109 и |x1|,|y1|,|x2|,|y2| ≤ 109). Гарантируется, что начальная и конечная клетки не являются плохими.

Выходные данные

Выведите одно число — наименьшее количество плохих клеток, которые придется посетить чтобы попасть из клетки (x1; y1) в клетку (x2; y2).

Примечание

В третьем примере один из возможных путей: (3;-1)->(3;0)->(3;1)->(3;2)->(4;2)->(4;3)->(4;4)->(4;5)->(4;6)->(4;7)->(3;7). Клетки (3;1) и (4;4) плохие.

A. Очередное приравнивание цен

математика *800

Вы являетесь владельцем и продавцом в небольшом магазине поблизости. У вас продается \(n\) товаров, \(i\)-й товар стоит \(a_i\) монет.

Вы устали вспоминать цену каждого товара, когда покупатели спрашивают ее, поэтому вы решили упростить себе жизнь. Если выражаться более точно, вы решили установить одну и ту же цену для всех \(n\) товаров, имеющихся в наличии.

Тем не менее, вы не хотите терять деньги, поэтому вам необходимо выбрать цену таким образом, чтобы сумма новых цен была не меньше суммы изначальных цен. Это значит, что если вы продадите все \(n\) товаров по новой цене каждый, вы получите хотя бы столько же (или больше) денег, как если бы вы продали их по старым ценам.

С другой стороны, вы не хотите терять покупателей из-за слишком больших цен, поэтому среди всех цен, которые вы можете выбрать, вам необходимо выбрать минимально возможную.

Итак, вам необходимо найти такую минимально возможную равную цену всех \(n\) товаров, что если вы продадите их по этой цене, вы получите хотя бы столько же (или больше) денег, как если бы вы продали их по старым ценам.

Вам необходимо ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 100\)) — количество запросов. Затем следуют \(q\) запросов.

Первая строка запроса содержит одно целое число \(n\) (\(1 \le n \le 100)\) — количество товаров. Вторая строка запроса содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^7\)), где \(a_i\) равно цене \(i\)-го товара.

Выходные данные

Для каждого запроса выведите ответ на него — минимально возможную равную цену всех \(n\) товаров, что если вы продадите их по этой цене, вы получите хотя бы столько же (или больше) денег, как если бы вы продали их по старым ценам.

E. Специальные перестановки

математика *2000

Определим \(p_i(n)\) как перестановку следующего вида: \([i, 1, 2, \dots, i - 1, i + 1, \dots, n]\). Это значит, что \(i\)-я перестановка является почти тождественной (то есть та, которая отображает каждый элемент сам в себя) перестановкой, но элемент \(i\) стоит на первой позиции. Примеры:

  • \(p_1(4) = [1, 2, 3, 4]\);
  • \(p_2(4) = [2, 1, 3, 4]\);
  • \(p_3(4) = [3, 1, 2, 4]\);
  • \(p_4(4) = [4, 1, 2, 3]\).

Вам задан массив \(x_1, x_2, \dots, x_m\) (\(1 \le x_i \le n\)).

Определим \(pos(p, val)\) как позицию элемента \(val\) в \(p\). Таким образом, \(pos(p_1(4), 3) = 3, pos(p_2(4), 2) = 1, pos(p_4(4), 4) = 1\).

Определим функцию \(f(p) = \sum\limits_{i=1}^{m - 1} |pos(p, x_i) - pos(p, x_{i + 1})|\), где \(|val|\) равно абсолютной величине \(val\). Эта функция означает сумму дистанций между соседними элементами \(x\) в \(p\).

Ваша задача — посчитать \(f(p_1(n)), f(p_2(n)), \dots, f(p_n(n))\).

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 2 \cdot 10^5\)) — количество элементов в каждой перестановке и количество элементов в \(x\).

Вторая строка входных данных содержит \(m\) целых чисел (\(m\), не \(n\)) \(x_1, x_2, \dots, x_m\) (\(1 \le x_i \le n\)), где \(x_i\) равно \(i\)-му элементу \(x\). Элементы \(x\) могут повторяться и идти в случайном порядке.

Выходные данные

Выведите \(n\) целых чисел: \(f(p_1(n)), f(p_2(n)), \dots, f(p_n(n))\).

Примечание

Рассмотрим первый тестовый пример:

\(x = [1, 2, 3, 4]\), таким образом

  • для перестановки \(p_1(4) = [1, 2, 3, 4]\) ответ равен \(|1 - 2| + |2 - 3| + |3 - 4| = 3\);
  • для перестановки \(p_2(4) = [2, 1, 3, 4]\) ответ равен \(|2 - 1| + |1 - 3| + |3 - 4| = 4\);
  • для перестановки \(p_3(4) = [3, 1, 2, 4]\) ответ равен \(|2 - 3| + |3 - 1| + |1 - 4| = 6\);
  • для перестановки \(p_4(4) = [4, 1, 2, 3]\) ответ равен \(|2 - 3| + |3 - 4| + |4 - 1| = 5\).

Рассмотрим второй тестовый пример:

\(x = [2, 1, 5, 3, 5]\), so

  • для перестановки \(p_1(5) = [1, 2, 3, 4, 5]\) ответ равен \(|2 - 1| + |1 - 5| + |5 - 3| + |3 - 5| = 9\);
  • для перестановки \(p_2(5) = [2, 1, 3, 4, 5]\) ответ равен \(|1 - 2| + |2 - 5| + |5 - 3| + |3 - 5| = 8\);
  • для перестановки \(p_3(5) = [3, 1, 2, 4, 5]\) ответ равен \(|3 - 2| + |2 - 5| + |5 - 1| + |1 - 5| = 12\);
  • для перестановки \(p_4(5) = [4, 1, 2, 3, 5]\) ответ равен \(|3 - 2| + |2 - 5| + |5 - 4| + |4 - 5| = 6\);
  • для перестановки \(p_5(5) = [5, 1, 2, 3, 4]\) ответ равен \(|3 - 2| + |2 - 1| + |1 - 4| + |4 - 1| = 8\).

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\).

B. Алиса и список подарков

Комбинаторика математика *1500

Недавно Алиса получила много подарков. Поэтому она решила упаковать некоторые из них в коробки и отправить своим друзьям.

Всего есть \(n\) типов подарков. Подарки одного типа полностью одинаковые (то есть подарки одного типа неотличимы). Подарки разных типов отличаются между собой (то есть любые два подарка разных типов отличаются друг от друга). Количество подарков каждого типа, которое есть у Алисы, очень большое, поэтому мы можем считать его бесконечным.

Также есть \(m\) коробок. Они все предназначены для разных людей, поэтому все попарно различны (предположим, что имена \(m\) ее друзей написаны на каждой коробке). Например, положить подарок первого типа в первую коробку, но не положить во вторую отличается от того, чтобы положить подарок первого типа во вторую коробку, но не положить в первую.

Алиса хочет упаковать подарки по следующим правилам:

  • Она не будет класть больше одного подарка какого-то типа в одну и ту же коробку, поэтому в каждой коробке типы подарков должны быть различны (то есть каждая коробка содержит некоторое подмножество \(n\) типов подарков, пустые коробки разрешены);
  • Подарок каждого типа должен быть упакован в хотя бы одну коробку.

Сейчас Алисе стало интересно, сколькими способами она может упаковать подарки. Помогите ей и посчитайте это количество. Поскольку ответ может быть слишком большим, найдите его по модулю \(10^9+7\).

Посмотрите на примеры и их пояснение для лучшего понимания условия.

Входные данные

В первой строке находится два целых числа \(n\) и \(m\), разделенных пробелами (\(1 \leq n,m \leq 10^9\)) — количество типов подарков и количество коробок, которое есть у Алисы.

Выходные данные

Выведите одно целое число — количество способов упаковать подарки в коробки по правилам Алисы, взятое по модулю \(10^9+7\).

Примечание

В первом примере существует семь способов упаковать подарки:

\(\{1\}\{\}\{\}\)

\(\{\}\{1\}\{\}\)

\(\{\}\{\}\{1\}\)

\(\{1\}\{1\}\{\}\)

\(\{\}\{1\}\{1\}\)

\(\{1\}\{\}\{1\}\)

\(\{1\}\{1\}\{1\}\)

Во втором примере существует девять способов упаковать подарки:

\(\{\}\{1,2\}\)

\(\{1\}\{2\}\)

\(\{1\}\{1,2\}\)

\(\{2\}\{1\}\)

\(\{2\}\{1,2\}\)

\(\{1,2\}\{\}\)

\(\{1,2\}\{1\}\)

\(\{1,2\}\{2\}\)

\(\{1,2\}\{1,2\}\)

Например, способ упаковать подарки \(\{2\}\{2\}\) неправильный, потому что подарки первого типа должны быть упакованы в хотя бы одну коробку.

F. Алиса и кактус

графы математика поиск в глубину и подобное Теория вероятностей *3000

Алиса недавно нашла несколько кактусов, растущих рядом с ее домом! Спустя несколько месяцев, все больше и больше кактусов стало появляться и вскоре они заблокировали всю дорогу. Поэтому Алиса хочет уничтожить их.

Кактус это связный неориентированный граф. Никакое ребро такого графа не принадлежит более, чем одному простому циклу. Простым циклом будем называть последовательность различных вершин \(x_1, x_2, \ldots, x_k\) графа, такую что \(k \geq 3\) и пары вершин \(x_1\) и \(x_2\), \(x_2\) и \(x_3\), \(\ldots\), \(x_{k-1}\) и \(x_k\), \(x_k\) и \(x_1\) соединены ребром. Ребра \((x_1, x_2)\), \((x_2, x_3)\), \(\ldots\), \((x_{k-1}, x_k)\), \((x_k, x_1)\) называются принадлежащими этому циклу.

Количество кактусов очень большое, поэтому уничтожить их будет тяжело. Но Алиса обладает магией. Когда она использует магию, каждая вершина кактуса удаляется независимо от других с вероятностью \(\frac{1}{2}\). Когда вершина удаляется, все ребра, соседние с этой вершиной также удаляются.

Алиса хочет протестировать свою магию. Она выбрала кактус с \(n\) вершинами и \(m\) ребрами. Обозначим за \(X[S]\) (где \(S\) это подмножество удаленных вершин) количество компонент связности в оставшемся графе после удаления вершин множества \(S\). Перед тем, как использовать магию, она хочет узнать дисперсию случайной величины \(X\), если все вершины графа имеют вероятность \(\frac{1}{2}\) быть удаленными и все эти \(n\) событий независимы. По определению дисперсия равна \(E[(X - E[X])^2]\), где \(E[X]\) это математическое ожидание случайной величины \(X\). Помогите ей и посчитайте это число по модулю \(10^9+7\).

Формально, обозначим за \(M = 10^9 + 7\) (простое число). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) это целые числа и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, найдите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\), разделенных пробелом (\(1 \leq n \leq 5 \cdot 10^5, n - 1 \leq m \leq 5 \cdot 10^5\)) — количество вершин и ребер в кактусе.

Следующие \(m\) строк содержат по два целых числа \(u\) и \(v\), разделенных пробелом каждая (\(1 \leq u, v \leq n, u \neq v\)), означающих, что существует ребро между вершинами \(u\) и \(v\).

Гарантируется, что заданный граф не содержит петель и кратных ребер и является кактусом.

Выходные данные

Выведите одно целое число — дисперсию количества компонент связности в графе, остающемся после удаления множества вершин, при том, что любая вершина имеет вероятность \(\frac{1}{2}\) быть удаленной и эти события независимы. Это число надо найти и вывести по модулю \(10^9+7\).

Примечание

В первом примере ответ равен \(\frac{7}{64}\). Когда все вершины удалены, значение \(X\) равно \(0\), иначе оно равно \(1\). Поэтому математическое ожидание \(X\) равно \(0\times\frac{1}{8}+1\times\frac{7}{8}=\frac{7}{8}\). Тогда дисперсия \(X\) равна \((0 - \frac{7}{8})^2\times\frac{1}{8}+(1-\frac{7}{8})^2\times\frac{7}{8} = (\frac{7}{8})^2\times\frac{1}{8}+(\frac{1}{8})^2\times\frac{7}{8} = \frac{7}{64}\).

Во втором примере ответ равен \(\frac{1}{4}\).

A. Сбалансированные изменения рейтинга

математика реализация *1000

Только что завершился очередной раунд на Codeforces! Раунд собрал \(n\) участников. В соответствии с результатами, ожидаемое изменение рейтинга участника \(i\) равно \(a_i\). Эти изменения рейтинга идеально сбалансированы — их сумма равна \(0\).

К сожалению, из-за небольших технических проблем раунд был объявлен полурейтинговым. Это значит, что все изменения рейтинга должны быть поделены на два.

Однако есть два условия:

  • Для каждого участника \(i\) обновлённое изменение рейтинга \(b_i\) должно быть целым числом, максимально близким к \(\frac{a_i}{2}\). Это значит, что либо \(b_i = \lfloor \frac{a_i}{2} \rfloor\), либо \(b_i = \lceil \frac{a_i}{2} \rceil\). В частности, если \(a_i\) чётно, то \(b_i = \frac{a_i}{2}\). Здесь \(\lfloor x \rfloor\) обозначает округление вниз до наибольшего целого числа, не большего \(x\), а \(\lceil x \rceil\) — округление вверх до наименьшего целого числа, не меньшего \(x\).
  • Обновлённые изменения рейтинга должны быть идеально сбалансированы — их сумма должна равняться \(0\).

Можете ли вы помочь с этой задачей?

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 13\,845\)) — число участников раунда.

Каждая из следующих \(n\) строк содержит целое число \(a_i\) (\(-336 \le a_i \le 1164\)) — ожидаемое изменение рейтинга \(i\)-го участника.

Сумма всех \(a_i\) равна \(0\).

Выходные данные

Выведите \(n\) целых чисел \(b_i\), каждое из которых равно обновлённому изменению рейтинга \(i\)-го участника в порядке ввода.

Для всех \(i\) должно быть верно либо \(b_i = \lfloor \frac{a_i}{2} \rfloor\), либо \(b_i = \lceil \frac{a_i}{2} \rceil\). Сумма всех \(b_i\) должна быть равна \(0\).

Если есть несколько решений, выведите любое. Можно показать, что решение существует для любого корректного ввода.

Примечание

В первом примере, \(b_1 = 5\), \(b_2 = -3\) и \(b_3 = -2\) также является правильным ответом.

Во втором примере есть \(6\) возможных решений, приведено одно из них.

E. Сбалансированные деревья поиска

дп математика *2400

Напомним, что двоичным деревом поиска называется корневое дерево, каждая вершина которого хранит ключ и может иметь не более двух поддеревьев — левого и правого. Ключ в каждой вершине должен быть больше любого ключа в левом поддереве и меньше любого ключа в правом поддереве.

Глубина вершины определяется как число рёбер на простом пути между вершиной и корнем дерева. В частности, глубина корня равна \(0\).

Будем называть двоичное дерево поиска идеально сбалансированным, если не существует двоичного дерева поиска с тем же числом вершин, у которого суммарная глубина всех вершин строго меньше.

Будем называть двоичное дерево поиска с целочисленными ключами полосатым, если для каждой вершины \(v\) выполняются оба следующих условия:

  • Если у \(v\) есть левое поддерево с корнем в \(u\), чётность ключа \(v\) должна отличаться от чётности ключа \(u\).
  • Если у \(v\) есть правое поддерево с корнем в \(w\), чётность ключа \(v\) должна совпадать с чётностью ключа \(w\).

Вам дано целое число \(n\). Найдите число идеально сбалансированных полосатых двоичных деревьев поиска из \(n\) вершин, ключи которых — различные целые числа от \(1\) до \(n\) включительно. Выведите остаток от деления этого числа на \(998\,244\,353\).

Входные данные

Единственная строка содержит целое число \(n\) (\(1 \le n \le 10^6\)) — требуемое число вершин в дереве.

Выходные данные

Выведите число идеально сбалансированных полосатых двоичных деревьев поиска из \(n\) вершин, ключи которых — различные целые числа от \(1\) до \(n\) включительно, по модулю \(998\,244\,353\).

Примечание

В первом примере единственное дерево, удовлетворяющее условиям, выглядит так:

А так выглядят деревья, не удовлетворяющие различным условиям во втором примере:

A. Вычитание простого

математика теория чисел *900

Вам заданы два целых числа \(x\) и \(y\) (гарантируется, что \(x > y\)). Вы можете выбрать любое простое целое число \(p\) и вычесть его любое количество раз из \(x\). Можно ли сделать \(x\) равным \(y\)?

Напомним, что простым называется целое положительное число, которое имеет ровно два положительных делителя: \(1\) и само это целое число. Последовательность простых чисел начинается с \(2\), \(3\), \(5\), \(7\), \(11\).

Ваша программа должна ответить на \(t\) независимых тестов.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество тестов.

Следующие \(t\) строк описывают тесты. Каждая строка содержит два целых числа \(x\) и \(y\) (\(1 \le y < x \le 10^{18}\)).

Выходные данные

На каждый тест выведите YES, если возможно выбрать простое число \(p\) и вычесть его некоторое количество раз из \(x\), чтобы \(x\) стало равным \(y\). Иначе выведите NO.

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом примере вы можете выбрать \(p = 2\) и вычесть его один раз.

Во втором примере вы можете выбрать \(p = 5\) и вычесть два раза. Обратите внимание, что вы не можете выбрать \(p = 7\), вычесть его, после этого выбрать \(p = 3\) и вычесть его снова, потому что разрешена только одна такая операция.

В третьем примере вы можете выбрать \(p = 3\) и вычесть его \(333333333333333333\) раз.

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\)).

A. Иванушка-дурачок и теория вероятностей

дп Комбинаторика математика *1700

Недавно Иванушка-дурачок захотел стать умнее и поэтому начал изучать теорию вероятностей. Он считает, что уже достаточно хорошо понимает данную тему, и стал этим хвастаться перед всеми.

В качестве примера, Иванушка продемонстрировал окружающим концепцию случайного рисунка. Рисунок представляет собой клетчатое поле из \(n\) строкам и \(m\) столбцов, каждая клетка которого покрашена в белый или чёрный цвет. Иванушка считает, что рисунок случайный, если для любой клетки верно, что среди её соседей по стороне есть не более одной клетки такого же цвета, что и она.

Его братья быстро выяснили, что задумал Иванушка. Они долго пытались объяснить ему, что он, дурачок, все ещё плохо понимает, что такое случайность. Но Иванушка так и не поверил им, поэтому они попросили помощи у вас. Они хотят найти количество различных случайных (по мнению Иванушки) рисунков. Два рисунка называются различными, если существует клетка, которая покрашена в разные цвета на этих рисунках. Так как число таких картинок может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\,000\)) — количество строк и столбцов клетчатого поля.

Выходные данные

Выведите одно целое число — остаток от деления числа случайных рисунков на \(10^9 + 7\).

Примечание

На картинке ниже изображены все возможные случайные раскраски поля \(2\) на \(3\).

A. Количество позиций

математика *1000

Петя стоит в шеренге из n человек, но точно не знает на какой позиции. Он может сказать, что перед ним стоит не менее a человек, а после него — не более b человек. Найдите количество позиций, на которых может стоять Петя.

Входные данные

В единственной строке записано три целых числа n, a и b (0 ≤ a, b < n ≤ 100).

Выходные данные

Выведите одно число — количество искомых позиций.

Примечание

В первом примере возможные позиции: 2 и 3 (если нумеровать позиции с 1).

Во втором примере: 3, 4 и 5.

A. Покраска плиток

Конструктив математика теория чисел *1500

В последнее время Уджан стал весьма ленивым, но наконец-то решил привести свой двор в порядок. Сначала он решил покрасить тропинку от своего дома до ворот.

Тропинка состоит из \(n\) последовательных плиток, пронумерованных от \(1\) до \(n\). Уджан покрасит каждую из плиток в некоторый цвет. Он считает, что тропинка эстетична, если каждые две различные плитки с номерами \(i\) и \(j\) такими, что \(|j - i|\) является делителем числа \(n\) строго большим \(1\), покрашены в одинаковые цвета. Формально, любые две плитки с номерами \(i\) и \(j\) должны быть покрашены в одинаковый цвет, если \(|i-j| > 1\) и \(n \bmod |i-j| = 0\) (где \(x \bmod y\) — это остаток при делении \(x\) на \(y\)).

Уджан хочет украсить своё место. В какое наибольшее количество цветов Уджан может покрасить тропинку таким образом, чтобы она была эстетичной?

Входные данные

Единственная строка входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^{12}\)) — длину тропинки.

Выходные данные

Выведите одно число — максимальное возможное количество цветов, в которое можно покрасить тропинку.

Примечание

В первом примере тропинку можно покрасить в максимум два цвета. Плитки \(1\) и \(3\) должны иметь одинаковый цвет, так как \(4 \bmod |3-1| = 0\). Плитки \(2\) и \(4\) тоже должны иметь одинаковый цвет, так как \(4 \bmod |4-2| = 0\).

Во втором примере могут быть использованы все пять цветов.

Примеры покрасок для первого и второго теста.

D. Нахождение числа

математика *3400

Уджану нужен перерыв от уборки, поэтому он начал играться с бесконечными последовательностями. У него есть два числа \(n\) и \(k\). Он создаёт бесконечную последовательность \(s\), повторяя следующие шаги.

  1. Находятся \(k\) наименьших различных положительных целых чисел, которые не появляются в \(s\). Назовём их \(u_{1}, u_{2}, \ldots, u_{k}\) от наименьшего до наибольшего.
  2. Числа \(u_{1}, u_{2}, \ldots, u_{k}\) и \(\sum_{i=1}^{k} u_{i}\) дописываются в таком порядке в конец \(s\).
  3. Процесс переходит назад на первый шаг и повторяется.

Уджан прекратит валять дурака, когда он запишет число \(n\) в последовательности \(s\). Помогите ему найти позицию \(n\) в \(s\). Другими словами, найдите целое число \(x\) такое, что \(s_{x} = n\). Возможно доказать, что все положительные целые числа появляются в \(s\) ровно по одному разу.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^{5}\)), количество тестовых примеров.

Затем каждая из следующих \(t\) строк содержит по два целых числа \(n\) и \(k\) (\(1 \le n \le 10^{18}\), \(2 \le k \le 10^{6}\)), число, которое необходимо найти в последовательности \(s\) и параметр для создания самой последовательности \(s\).

Выходные данные

В каждой из \(t\) строк выведите ответ на соответствующий тестовый пример.

Примечание

В первом примере, \(s = (1, 2, 3, 4, 5, 9, 6, 7, 13, 8, 10, 18, \ldots)\). \(10\) является \(11\)-th по счёту числом, поэтому ответ \(11\).

Во втором примере, \(s = (1, 2, 3, 4, 5, 15, 6, 7, 8, 9, 10, 40, \ldots)\).

A. Ручки и карандаши

математика *800

Завтра Поликарпу предстоит очень тяжелый день в университете: в его расписании целых \(a\) лекционных занятий и \(b\) практических занятий! Как прилежный студент, Поликарп собирается посетить все эти пары.

Готовясь к походу в университет, Поликарп задумался, хватит ли ему письменных принадлежностей. Все лекции он пишет ручкой (не карандашом!) от руки; чернил в одной ручке хватает на запись \(c\) лекций, после чего они заканчиваются. На практических занятиях Поликарп чертит чертежи карандашом (не ручкой!); одного карандаша хватает на \(d\) практических занятий, после чего он полностью стачивается.

Пенал Поликарпа вмещает не более \(k\) предметов для письма. Поэтому, если Поликарп хочет взять с собой завтра в университет \(x\) ручек и \(y\) карандашей, они поместятся в пенал только в том случае, если \(x + y \le k\).

Сейчас Поликарп хочет определить, сколько ручек и карандашей ему нужно взять, чтобы все они влезли в пенал. Помогите ему это сделать, или сообщите, что места в пенале не хватит на письменные принадлежности для всех занятий!

Обратите внимание, что минимизировать количество предметов не нужно (но суммарное количество ручек и карандашей не должно превысить \(k\)).

Входные данные

В первой строке задано одно число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте. Затем следуют сами наборы входных данных.

Каждый набор обозначается одной строкой, содержащей пять целых чисел \(a\), \(b\), \(c\), \(d\) и \(k\), разделенных пробелами (\(1 \le a, b, c, d, k \le 100\)) — количество лекционных занятий, которые должен посетить Поликарп, количество практических занятий, которые должен посетить Поликарп, количество лекционных занятий, на которые хватает одной ручки, количество практических занятий, на которые хватает одного карандаша, и вместимость пенала Поликарпа соответственно.

Во взломах разрешается использовать только один набор входных данных, то есть \(t = 1\) должно быть выполнено.

Выходные данные

Для каждого набора входных данных выведите ответ на него следующим образом:

Если места в пенале на все необходимые предметы точно не хватит, выведите одно число \(-1\). Иначе выведите два неотрицательных целых числа \(x\) и \(y\) — сколько ручек и карандашей Поликарп должен положить в свой пенал. Если возможных ответов несколько, выведите любой из них. Обратите внимание, что минимизировать количество предметов не нужно (но суммарное количество ручек и карандашей не должно превысить \(k\)).

Примечание

В первом наборе входных данных примера много разных ответов; \(x = 7\), \(y = 1\) — лишь один из них. Например, \(x = 3\), \(y = 1\) тоже подходит.

В третьем наборе входных данных примера ответ \(x = 1\), \(y = 3\) — единственный возможный.

C. Футбольный сезон

математика Перебор теория чисел *2000

Совсем недавно закончился футбольный сезон в Берляндии. В каждом футбольном матче в Берляндии участвуют по две команды. Результатом матча может быть победа одной из команд, либо ничья. Победившая в матче команда получает \(w\) очков, а проигравшая команда получает \(0\) очков. Если результат игры ничейный, то обе команды получают по \(d\) очков.

Владелец команды столицы Берляндии захотел подвести итоги сезона, но все данные об играх его команды были утеряны. Осталась лишь информация о том, что команда столицы Берляндии провела за сезон \(n\) матчей, в которых набрала \(p\) очков.

Перед вами стоит задача определить три целых числа \(x\), \(y\) и \(z\) — сколько матчей выиграла, сыграла вничью и проиграла команда столицы Берляндии. Если подходящих ответов несколько, вы можете вывести любой из них. Если не существует ни одной подходящей тройки \((x, y, z)\), сообщите об этом.

Входные данные

В первой строке следуют четыре целых числа \(n\), \(p\), \(w\) и \(d\) \((1 \le n \le 10^{12}, 0 \le p \le 10^{17}, 1 \le d < w \le 10^{5})\) — количество матчей, количество очков, набранных в этих матчах, количество очков, которые получает команда за победу в матче, и количество очков, которые получает команда за матч, завершившийся вничью. Обратите внимание, что за победу в матче команда всегда получает больше очков, чем за ничейный результат, то есть \(w > d\).

Выходные данные

Если не существует ни одного подходящего ответа, выведите \(-1\).

В противном случае, выведите три целых неотрицательных числа \(x\), \(y\) и \(z\) — количество матчей, в которых команда столицы Берляндии одержала победу, количество матчей, в которых она сыграла вничью, и количество матчей, в которых она потерпела поражение. Если подходящих троек \((x, y, z)\) несколько, разрешается вывести любую из них. Для выведенных чисел должны выполняться следующие условия:

  • \(x \cdot w + y \cdot d = p\),
  • \(x + y + z = n\).
Примечание

В первом примере один из подходящих ответов — \(17\) побед, \(9\) ничьих и \(4\) поражения. В таком случае команда столицы Берляндии набрала за сезон \(17 \cdot 3 + 9 \cdot 1 = 60\) очков и сыграла \(17 + 9 + 4 = 30\) матчей.

Во втором примере максимальное количество очков, которое можно было набрать равно \(10 \cdot 5 = 50\). Так как \(p = 51\), то ответа не существует.

В третьем примере команда столицы Берляндии набрала \(0\) очков, следовательно, все \(20\) матчей были проиграны.

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\).

A. Старая добрая раскраска чисел

математика теория чисел *1000

Рассмотрим множество всех неотрицательных целых чисел : \({0, 1, 2, \dots}\). Даны два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^4\)). Мы раскрашиваем все числа в порядке возрастания: сначала раскрашиваем \(0\), затем раскрашиваем \(1\), затем раскрашиваем \(2\) и так далее.

Каждое число будет раскрашено в белый или черный цвет. Очередное число \(i\) раскрашивается по следующим правилам:

  • если \(i = 0\), то раскрашено в белый цвет;
  • если \(i \ge a\) и \(i - a\) раскрашен в белый цвет, то и \(i\) раскрашен в белый цвет;
  • если \(i \ge b\) и \(i - b\) раскрашен в белый цвет, то и \(i\) раскрашен в белый цвет;
  • если \(i\) не раскрашен в белый цвет, то раскрашен в черный.

Таким образом, каждое неотрицательное целое число будет раскрашено в один из двух цветов.

Например, если \(a=3\), \(b=5\), то цвета чисел (в порядке от \(0\) и далее) будут равны: белый (\(0\)), черный (\(1\)), черный (\(2\)), белый (\(3\)), черный (\(4\)), белый (\(5\)), белый (\(6\)), черный (\(7\)), белый (\(8\)), белый (\(9\)), ...

Обратите внимание, что:

  • Возможно, что существует бесконечно много неотрицательных целых чисел, раскрашенных в черный. Например, если \(a = 10\) и \(b = 10\), тогда только \(0, 10, 20, 30\) и любые другие неотрицательные целые числа, десятичная запись которых заканчивается на \(0\) — белые. Все остальные — черные.
  • Также возможно, что существует только конечно много неотрицательных целых чисел, раскрашенных в черный. Например, если \(a = 1\) и \(b = 10\), тогда ни одно число не покрашено в черный цвет.

Ваша задача — определить, конечно ли количество чисел, которые раскрашены в черный цвет, или бесконечно.

Если существует бесконечно много чисел, раскрашенных в черный, то выведите единственную строку, содержащую «Infinite» (без кавычек). Иначе выведите «Finite» (без кавычек).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте.

Затем следуют \(t\) строк, в каждой записаны по два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^4\)).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую «Infinite» or «Finite» (без кавычек). Регистр букв не имеет значения (например, «infinite», «inFiNite» или «finiTE» — все корректные значения).

A. Целые точки

геометрия математика *1000

DLS и JLS скучают на уроке математики в школе. Чтобы как-то развлечь себя, DLS достал лист клетчатой бумаги и нарисовал на ней \(n\) различных прямых, заданных уравнениями \(y = x + p_i\), для некоторых различных \(p_1, p_2, \ldots, p_n\).

JLS не заставил себя ждать и нарисовал на том же листе \(m\) различных прямых, заданных уравнениями \(y = -x + q_i\) для некоторых различных \(q_1, q_2, \ldots, q_m\).

DLS и JLS интересно, сколько пар прямых пересекаются в точках с целочисленными координатами. К сожалению, до конца урока осталось мало времени, поэтому DLS и JLS просят вас помочь им.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Затем следуют описания наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 10^5\)) — количество прямых, которые нарисовал DLS.

Вторая строка каждого набора содержит \(n\) различных целых чисел \(p_i\) (\(0 \le p_i \le 10^9\)), описывающие прямые, нарисованные DLS. Число \(p_i\) описывает прямую, заданную уравнением \(y = x + p_i\).

Третья строка каждого набора содержит целое число \(m\) (\(1 \le m \le 10^5\)) — количество прямых, которые нарисовал JLS.

Четвёртая строка каждого набора содержит \(m\) различных целых чисел \(q_i\) (\(0 \le q_i \le 10^9\)), описывающие прямые, нарисованные JLS. Число \(q_i\) описывает прямую, заданную уравнением \(y = -x + q_i\).

В тесте сумма всех значений \(n\) по всем наборам входных данных не превосходит \(10^5\). Аналогично, сумма всех значений \(m\) по всем наборам входных данных не превосходит \(10^5\)

Во взломах разрешается использовать только на одном наборе входных данных, то есть \(t=1\) должно быть выполнено.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар прямых, которые пересекаются в точке с целочисленными координатами.

Примечание

Ниже изображены прямые из первого набора входных данных примера. Чёрными кружочками выделены целочисленные точки пересечения.

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\).

A. Очередное разделение на команды

математика *800

Вы являетесь тренером группы из \(n\) студентов. Умение программировать \(i\)-го студента равно числу \(a_i\). Умения программировать всех студентов различны. Вы хотите поделить их на команды таким образом, что:

  • Не существует двух студентов \(i\) и \(j\), принадлежащих одной команде, таких, что \(|a_i - a_j| = 1\) (т.е. разница между умениями программировать в каждой паре студентов из одной команды должна быть строго больше, чем \(1\));
  • число команд минимально возможное.

Вы должны ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 100\)) — количество запросов. Затем следуют \(q\) запросов.

Первая строка запроса содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество студентов в запросе. Вторая строка запроса содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\), все \(a_i\) различны), где \(a_i\) — умение программировать \(i\)-го студента.

Выходные данные

Для каждого запроса выведите ответ на него — минимальное количество команд, которые вы можете составить, если никакие два студента \(i\) и \(j\) такие, что \(|a_i - a_j| = 1\), не принадлежат одной команде (т.е. умения программировать в каждой паре студентов из одной команды различаются строго больше, чем на \(1\))

Примечание

В первом запросе тестового примера \(n=4\) студента с умениями программировать \(a=[2, 10, 1, 20]\). Здесь есть только одно ограничение: \(1\)-й и \(3\)-й студенты не могут быть в одной команде (потому что \(|a_1 - a_3|=|2-1|=1\)). Можно разделить их на \(2\) команды: например, студенты \(1\), \(2\) и \(4\) в первой команде и студент \(3\) во второй команде.

Во втором запросе тестового примера \(n=2\) студента с умениями программировать \(a=[3, 6]\). Можно составить единственную команду, в которую входят оба студента.

B1. Обмен книгами (простая версия)

математика снм *1000

Единственное отличие между простой и сложной версиями — ограничения.

Есть \(n\) детей, каждый из которых читает уникальную книгу. В конце каждого дня \(i\)-й ребёнок отдаёт свою книгу \(p_i\)-му ребёнку (в случае, когда \(i = p_i\) ребенок отдает свою книгу самому себе). Гарантируется, что все значения \(p_i\) — различные целые числа от \(1\) до \(n\) (то есть \(p\) — перестановка). Последовательность \(p\) не меняется изо дня в день, она фиксированная.

Например, если \(n=6\) и \(p=[4, 6, 1, 3, 5, 2]\), то в конце первого дня книга \(1\)-го ребёнка будет у \(4\)-го ребёнка, книга \(2\)-го ребёнка будет у \(6\)-го ребёнка и так далее. В конце второго дня книга \(1\)-го ребёнка будет у \(3\)-го ребёнка, книга \(2\)-го ребёнка будет у \(2\)-го ребёнка и так далее.

Перед вами стоит задача — для каждого \(i\) от \(1\) до \(n\) определить число дней, через которое книга \(i\)-го ребёнка вернётся обратно к нему в первый раз.

Предположим что \(p = [5, 1, 2, 4, 3]\). Книга \(1\)-го ребёнка будет передана следующим детям:

  • после \(1\)-го дня она будет у \(5\)-го ребёнка,
  • после \(2\)-го дня она будет у \(3\)-го ребёнка,
  • после \(3\)-го дня она будет у \(2\)-го ребёнка,
  • после \(4\)-го дня она будет у \(1\)-го ребёнка.

Таким образом, после четвертого дня книга первого ребёнка вернётся к своему владельцу. Книга четвёртого ребёнка вернётся к нему в первый раз сразу после первого дня.

Вы должны ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 200\)) — количество запросов. Затем следуют \(q\) запросов.

Первая строка запроса содержит одно целое число \(n\) (\(1 \le n \le 200\)) — количество детей в запросе. Вторая строка запроса содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны, т.е. \(p\) является перестановкой), где \(p_i\) — это ребёнок, который получит книгу от \(i\)-го ребёнка.

Выходные данные

Для каждого запроса выведите ответ на него: \(n\) целых чисел \(a_1, a_2, \dots, a_n\), где \(a_i\) — номер дня, в конце которого книга \(i\)-го ребёнка вернётся к нему в первый раз в этом запросе.

B2. Обмен книгами (сложная версия)

математика поиск в глубину и подобное снм *1300

Единственное отличие между простой и сложной версиями — ограничения.

Есть \(n\) детей, каждый из которых читает уникальную книгу. В конце каждого дня \(i\)-й ребёнок отдаёт свою книгу \(p_i\)-му ребёнку (в случае, когда \(i = p_i\) ребенок отдает свою книгу самому себе). Гарантируется, что все значения \(p_i\) — различные целые числа от \(1\) до \(n\) (то есть \(p\) — перестановка). Последовательность \(p\) не меняется изо дня в день, она фиксированная.

Например, если \(n=6\) и \(p=[4, 6, 1, 3, 5, 2]\), то в конце первого дня книга \(1\)-го ребёнка будет у \(4\)-го ребёнка, книга \(2\)-го ребёнка будет у \(6\)-го ребёнка и так далее. В конце второго дня книга \(1\)-го ребёнка будет у \(3\)-го ребёнка, книга \(2\)-го ребёнка будет у \(2\)-го ребёнка и так далее.

Перед вами стоит задача — для каждого \(i\) от \(1\) до \(n\) определить число дней, через которое книга \(i\)-го ребёнка вернётся обратно к нему в первый раз.

Предположим что \(p = [5, 1, 2, 4, 3]\). Книга \(1\)-го ребёнка будет передана следующим детям:

  • после \(1\)-го дня она будет у \(5\)-го ребёнка,
  • после \(2\)-го дня она будет у \(3\)-го ребёнка,
  • после \(3\)-го дня она будет у \(2\)-го ребёнка,
  • после \(4\)-го дня она будет у \(1\)-го ребёнка.

Таким образом, после четвертого дня книга первого ребёнка вернётся к своему владельцу. Книга четвёртого ребёнка вернётся к нему в первый раз сразу после первого дня.

Вы должны ответить на \(q\) независимых запросов.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество запросов. Затем следуют \(q\) запросов.

Первая строка запроса содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество детей в запросе. Вторая строка запроса содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны, т.е. \(p\) является перестановкой), где \(p_i\) — это ребёнок, который получит книгу от \(i\)-го ребёнка.

Гарантируется, что \(\sum n \le 2 \cdot 10^5\) (сумма \(n\) по всем запросах не превосходит \(2 \cdot 10^5\)).

Выходные данные

Для каждого запроса выведите ответ на него: \(n\) целых чисел \(a_1, a_2, \dots, a_n\), где \(a_i\) — номер дня, в конце которого книга \(i\)-го ребёнка вернётся к нему в первый раз в этом запросе.

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\)хорошее число.

A. Измерение длин в Бадене

математика *1400

В Бадене используют дюймы и футы. Для перевода длины из сантиметров достаточно знать, что в Бадене один дюйм равен трем сантиметрам, а один фут содержит 12 дюймов.

Задана длина равная n сантиметрам. Ваша задача перевести ее в футы и дюймы так, чтобы количество футов было максимально. Ответ должен быть целочисленным, округленным к ближайшему значению, содержащему целое число дюймов.

Пояснение к правилам округления: 1 см округляется к 0 дюймам, в то время как 2 см округляются до 1 дюйма.

Входные данные

В единственной строке записано целое число n (1 ≤ n ≤ 10000).

Выходные данные

Выведите два целых неотрицательных числа a и b через пробел, где a — количество футов, а b — количество дюймов.

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.

H. Happy Birthday

математика *1500

You have a set of birthday cake candles. Each of such candles represents a digit between \(0\) and \(9\), inclusive.

Example of birthday cake candles.

Let's denote the candle representing the digit \(d\) as \(d\)-candle.

Your set contains \(c_0\) instances of \(0\)-candles, \(c_1\) instances of \(1\)-candles and so on. So, the total number of candles is \(c_0+c_1+\dots+c_9\).

These digits are needed to wish your cat a happy birthday. For each birthday, starting with the first, you want to compose the age of the cat using the digits from the set.

Since you light candles for a very short time, candles don't have time to burn out. For this reason you can reuse candles an arbitrary number of times (therefore your set of candles never changes).

For example, if you have one instance of each digit (i.e. \(c_0=c_1=\dots=c_9=1\)), you can compose any number from \(1\) to \(10\) using this set, but you cannot compose \(11\).

You have to determine the first birthday, on which you cannot compose the age of the cat using the candles from your set. In other words, find the minimum number \(y\) such that all numbers from \(1\) to \(y-1\) can be composed by digits from your set, but \(y\) cannot be composed.

Input

The first line contains an integer \(t\) (\(1 \le t \le 10^4\)) — the number of test cases in the input.

The only line of each test case contains ten integer numbers \(c_0, c_1, \dots, c_9\) (\(0 \le c_i \le 10^5\)) — the number of \(0\)-candles, \(1\)-candles, \(2\)-candles and so on.

It is guaranteed that the sum of all \(c_i\) in the input does not exceed \(10^6\).

Output

For each test case, output one integer in single line — the minimum age which cannot be composed by candles from your set. Please note that the age can be quite large (it may exceed the standard 64-bit integer types in your programming language).

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.

K. Addition Robot

математика матрицы Структуры данных *2100

Adding two numbers several times is a time-consuming task, so you want to build a robot. The robot should have a string \(S = S_1 S_2 \dots S_N\) of \(N\) characters on its memory that represents addition instructions. Each character of the string, \(S_i\), is either 'A' or 'B'.

You want to be able to give \(Q\) commands to the robot, each command is either of the following types:

  • 1 \(L\) \(R\). The robot should toggle all the characters of \(S_i\) where \(L \le i \le R\). Toggling a character means changing it to 'A' if it was previously 'B', or changing it to 'B' if it was previously 'A'.
  • 2 \(L\) \(R\) \(A\) \(B\). The robot should call \(f(L, R, A, B)\) and return two integers as defined in the following pseudocode:
        function f(L, R, A, B):
    FOR i from L to R
    if S[i] = 'A'
    A = A + B
    else
    B = A + B
    return (A, B)

You want to implement the robot's expected behavior.

Input

Input begins with a line containing two integers: \(N\) \(Q\) (\(1 \le N, Q \le 100\,000\)) representing the number of characters in the robot's memory and the number of commands, respectively. The next line contains a string \(S\) containing \(N\) characters (each either 'A' or 'B') representing the initial string in the robot's memory. The next \(Q\) lines each contains a command of the following types.

  • 1 \(L\) \(R\) (\(1 \le L \le R \le N\))
  • 2 \(L\) \(R\) \(A\) \(B\) (\(1 \le L \le R \le N\); \(0 \le A, B \le 10^9\))
There is at least one command of the second type.
Output

For each command of the second type in the same order as input, output in a line two integers (separated by a single space), the value of \(A\) and \(B\) returned by \(f(L, R, A, B)\), respectively. As this output can be large, you need to modulo the output by \(1\,000\,000\,007\).

Note

Explanation for the sample input/output #1

For the first command, calling \(f(L, R, A, B)\) causes the following:

  • Initially, \(A = 1\) and \(B = 1\).
  • At the end of \(i = 1\), \(A = 2\) and \(B = 1\).
  • At the end of \(i = 2\), \(A = 2\) and \(B = 3\).
  • At the end of \(i = 3\), \(A = 5\) and \(B = 3\).
  • At the end of \(i = 4\), \(A = 8\) and \(B = 3\).
  • At the end of \(i = 5\), \(A = 11\) and \(B = 3\).
Therefore, \(f(L, R, A, B)\) will return \((11, 3)\).

For the second command, string \(S\) will be updated to "ABBBB".

For the third command, the value of \(A\) will always be \(0\) and the value of \(B\) will always be \(1\,000\,000\,000\). Therefore, \(f(L, R, A, B)\) will return \((0, 1\,000\,000\,000)\).

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\).

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\).

В четвертом примере Чарли не может ничего сделать, он не может помочь Бобу сделать Алису счастливой.

C. Упорядочьте точки

геометрия интерактив Конструктив математика *2300

Это — интерактивная задача.

У Кханя есть \(n\) точек в декартовой системе координат, которые обозначаются как \(a_1, a_2, \ldots, a_n\). Все координаты точек — целые числа от \(-10^9\) до \(10^9\) включительно. Нет трех коллинеарных точек. Он говорит, что эти точки являются вершинами выпуклого многоугольника; другими словами, существует перестановка \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\), такая, что многоугольник \(a_{p_1} a_{p_2} \ldots a_{p_n}\) является выпуклым и вершины перечислены против часовой стрелки.

Кхань дает вам число \(n\), но не координаты своих точек. Ваша задача — угадать вышеуказанную перестановку, задав несколько запросов. В каждом запросе вы даете Кханю \(4\) целых чисел \(t\), \(i\), \(j\), \(k\); где либо \(t = 1\), либо \(t = 2\); и \(i\), \(j\), \(k\) — это три различных индекса от \(1\) до \(n\) включительно. В ответ Хан говорит вам:

  • Если \(t = 1\), то площадь треугольника \(a_ia_ja_k\) умноженную на \(2\).
  • Если \(t = 2\), то знак векторного произведения двух векторов \(\overrightarrow{a_ia_j}\) и \(\overrightarrow{a_ia_k}\).

Напомним, что векторное произведение вектора \(\overrightarrow{a} = (x_a, y_a)\) и вектора \(\overrightarrow{b} = (x_b, y_b)\) — это целое число \(x_a \cdot y_b - x_b \cdot y_a\). Знак числа равен \(1\), если оно положительное, и \(-1\) иначе. Можно показать, что векторное произведение в запросах никогда не будет \(0\).

Вы можете задать не более \(3 \cdot n\) запросов.

Обратите внимание, что Кхань фиксирует координаты своих точек и не меняет их, отвечая на ваши запросы. Вам не нужно угадывать координаты. В вашей перестановке \(a_{p_1}a_{p_2}\ldots a_{p_n}\), \(p_1\) должен быть равен \(1\) и все индексы вершин должны быть перечисленны против часовой стрелки.

Протокол взаимодействия

Сначала считайте целое число \(n\) (\(3 \leq n \leq 1\,000\)) — количество вершин.

Чтобы задать запрос, выведите \(4\) целых числа \(t\), \(i\), \(j\), \(k\) (\(1 \leq t \leq 2\), \(1 \leq i, j, k \leq n\)) на отдельной строке. \(i\), \(j\) и \(k\) должны быть различны.

После этого считайте ответ на запрос. Можно показать, что ответ на любой запрос всегда целое число.

Когда вы найдете перестановку, выведите \(0\). Затем выведите \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) на той же строке.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат:

Первая строка должна содержать целое число \(n\) (\(3 \leq n \leq 1\,000\)) — количество вершин.

\(i\)-я из следующих \(n\) строк должна содержать два целых числа \(x_i\) и \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты точки \(a_i\).

Примечание

Рисунок ниже показывает спрятанный многоугольник в примере:

Взаимодействие в примере идет следующим образом:

  • Участник считывает \(n = 6\).
  • Участник задает запрос \(t = 1\), \(i = 1\), \(j = 4\), \(k = 6\).
  • Жюри отвечает \(15\). Площадь \(A_1A_4A_6\) равна \(7.5\). Обратите внимание, что ответ — это площадь умноженная на два.
  • Участник задает запрос \(t = 2\), \(i = 1\), \(j = 5\), \(k = 6\).
  • Жюри отвечает \(-1\). Векторное произведение \(\overrightarrow{A_1A_5} = (2, 2)\) и \(\overrightarrow{A_1A_6} = (4, 1)\) равно \(-2\). Знак \(-2\) равен \(-1\).
  • Участник задает запрос \(t = 2\), \(i = 2\), \(j = 1\), \(k = 4\).
  • Жюри отвечает \(1\). Векторное произведение \(\overrightarrow{A_2A_1} = (-5, 2)\) и \(\overrightarrow{A_2A_4} = (-2, -1)\) равно \(1\). Знак \(1\) равен \(1\).
  • Участник отвечает \((1, 3, 4, 2, 6, 5)\).

A. Изменение громкости

математика *800

Боб смотрит телевизор каждый день. Он всегда устанавливает громкость своего телевизора на значение \(b\). Однако сегодня он разозлился, когда узнал, что кто-то изменил громкость, установив его на значение \(a\). Конечно же, у Боба есть пульт дистанционного управления, который может изменять громкость, поэтому он решил его использовать.

На элементе управления есть шесть кнопок (\(-5, -2, -1, +1, +2, +5\)), которые в одно нажатие могут увеличивать или уменьшать текущую громкость на значения \(1\), \(2\) или \(5\) соответственно. Громкость может быть очень большой, но она не может быть отрицательной. Другими словами, Боб не может нажать кнопку, если громкость станет меньше \(0\).

Поскольку Боб очень зол, он хочет изменить громкость на \(b\), используя как можно меньше нажатий кнопок. Однако он не хочет делать никакие вычисления, поэтому он просит вас помочь.

Напишите программу, которая по заданным \(a\) и \(b\), найдет минимальное количество нажатий для изменения громкости телевизора с величины \(a\) на величину \(b\).

Входные данные

Во входных данных находятся несколько (один или более) наборов входных данных. В первой строке находится одно целое число \(T\) (\(1 \le T \le 1\,000\)) — количество наборов входных данных. Далее следуют их описания.

Каждый набор состоит из одной строки, которая содержит два целых числа \(a\) и \(b\) (\(0 \le a, b \le 10^{9}\)) — текущая громкость и нужная громкость.

Выходные данные

Для каждого теста выведите одно целое число — минимальное количество нажатий, которые нужны, чтобы поменять громкость с \(a\) на \(b\). Если Бобу не нужно изменять громкость (т.е. \(a=b\)), тогда выведите \(0\).

Примечание

В первом примере Боб может нажать на кнопку \(-2\) два раза и получить \(0\). Обратите внимание, что Боб не может нажать на \(-5\) потому, что громкость \(4\) и после нажатия на кнопку громкость станет отрицательной.

Во втором примере один из оптимальных способов — это нажать два раза на \(+5\) и потом один раз на \(-1\).

В последнем примере Боб может нажать на \(+5\) один раз, после чего один раз на \(+1\).

A. Оплата без сдачи

математика *1000

У вас есть \(a\) монет стоимостью \(n\) и \(b\) монет стоимостью \(1\). Вы всегда платите без сдачи, поэтому вам хочется узнать, существуют ли такие \(x\) и \(y\), что если вы возьмете \(x\) (\(0 \le x \le a\)) монет стоимостью \(n\) и \(y\) (\(0 \le y \le b\)) монет стоимостью \(1\), суммарная стоимость всех выбранных монет составит \(S\).

Вам необходимо ответить на \(q\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных. Затем следуют \(q\) наборов входных данных.

Единственная строка набора входных данных содержит четыре целых числа \(a\), \(b\), \(n\) и \(S\) (\(1 \le a, b, n, S \le 10^9\)) — количество монет стоимостью \(n\), число монет стоимостью \(1\), значение \(n\) и необходимая сумма.

Выходные данные

Для \(i\)-го набора входных данных выведите ответ на него — YES, если существуют такие \(x\) и \(y\), что если вы возьмете \(x\) монет стоимостью \(n\) и \(y\) монет стоимостью \(1\), то суммарная стоимость выбранных монет будет равна \(S\), и NO в противном случае.

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

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\).

Во втором наборе входных данных вам не нужно менять учеников местами.

В третьем наборе входных данных вы не можете менять учеников местами.

B. Волшебная палочка

математика *1000

Недавно Петя гулял по лесу и нашел волшебную палочку.

Так как Петя очень любит числа, первым делом он выучил заклинания для изменения чисел. Пока что он знает только два заклинания, которые можно применить к целым положительным числам:

  1. Если выбранное число \(a\) четное, то заклинание превратит его в \(\frac{3a}{2}\);
  2. Если выбранное число \(a\) больше единицы, то заклинание превратит его в \(a-1\).

Обратите внимание, если число четное и больше единицы, то Петя может выбрать, какое из заклинаний применить.

Сейчас у Пети есть только число \(x\). Он хочет узнать, можно ли из числа \(x\) получить его любимое число \(y\) с помощью известных ему заклинаний. Заклинания можно использовать любое количество раз, в любом порядке. Петя может вообще не использовать заклинания, оставив \(x\) без изменений.

Входные данные

Первая строка содержит число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^9\)) — текущее число Пети и число, которое он хочет получить.

Выходные данные

Для \(i\)-го набора входных данных выведите ответ на него — YES, если с помощью известных Пете заклинаний можно получить число \(y\) из числа \(x\), и NO в противном случае.

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

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 \}\).

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

Вася хочет открыть оба крана таким образом, чтобы температура воды в ванне была не меньше t0, но при этом максимально близка к этому значению. Если оптимальных вариантов несколько, то Вася выбирает тот, при котором ванна наполнится как можно быстрее.

Определите насколько нужно открыть каждый из кранов чтобы Вася остался доволен.

Входные данные

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

Выходные данные

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

Во втором примере горячую воду выгодно вообще не включать, а холодную включить на полную мощность, чтобы ванна наполнилась как можно быстрее.

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

Вася хочет открыть оба крана таким образом, чтобы температура воды в ванне была не меньше t0, но при этом максимально близка к этому значению. Если оптимальных вариантов несколько, то Вася выбирает тот, при котором ванна наполнится как можно быстрее.

Определите насколько нужно открыть каждый из кранов чтобы Вася остался доволен.

Входные данные

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

Выходные данные

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

Во втором примере горячую воду выгодно вообще не включать, а холодную включить на полную мощность, чтобы ванна наполнилась как можно быстрее.

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

Вася хочет открыть оба крана таким образом, чтобы температура воды в ванне была не меньше t0, но при этом максимально близка к этому значению. Если оптимальных вариантов несколько, то Вася выбирает тот, при котором ванна наполнится как можно быстрее.

Определите насколько нужно открыть каждый из кранов чтобы Вася остался доволен.

Входные данные

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

Выходные данные

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

Во втором примере горячую воду выгодно вообще не включать, а холодную включить на полную мощность, чтобы ванна наполнилась как можно быстрее.

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

Вася хочет открыть оба крана таким образом, чтобы температура воды в ванне была не меньше t0, но при этом максимально близка к этому значению. Если оптимальных вариантов несколько, то Вася выбирает тот, при котором ванна наполнится как можно быстрее.

Определите насколько нужно открыть каждый из кранов чтобы Вася остался доволен.

Входные данные

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

Выходные данные

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

Во втором примере горячую воду выгодно вообще не включать, а холодную включить на полную мощность, чтобы ванна наполнилась как можно быстрее.

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

Вася хочет открыть оба крана таким образом, чтобы температура воды в ванне была не меньше t0, но при этом максимально близка к этому значению. Если оптимальных вариантов несколько, то Вася выбирает тот, при котором ванна наполнится как можно быстрее.

Определите насколько нужно открыть каждый из кранов чтобы Вася остался доволен.

Входные данные

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

Выходные данные

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

Во втором примере горячую воду выгодно вообще не включать, а холодную включить на полную мощность, чтобы ванна наполнилась как можно быстрее.

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

Вася хочет открыть оба крана таким образом, чтобы температура воды в ванне была не меньше t0, но при этом максимально близка к этому значению. Если оптимальных вариантов несколько, то Вася выбирает тот, при котором ванна наполнится как можно быстрее.

Определите насколько нужно открыть каждый из кранов чтобы Вася остался доволен.

Входные данные

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

Выходные данные

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

Во втором примере горячую воду выгодно вообще не включать, а холодную включить на полную мощность, чтобы ванна наполнилась как можно быстрее.

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

Вася хочет открыть оба крана таким образом, чтобы температура воды в ванне была не меньше t0, но при этом максимально близка к этому значению. Если оптимальных вариантов несколько, то Вася выбирает тот, при котором ванна наполнится как можно быстрее.

Определите насколько нужно открыть каждый из кранов чтобы Вася остался доволен.

Входные данные

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

Выходные данные

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

Во втором примере горячую воду выгодно вообще не включать, а холодную включить на полную мощность, чтобы ванна наполнилась как можно быстрее.

A. Горячая ванна

Бинарный поиск математика Перебор *1900

Вася собирается принять ванну.

Для наполнения ванны имеются два крана — с горячей и с холодной водой. Холодная вода имеет температуру t1, а горячая — t2. Кран с холодной водой позволяет пропускать любое целое число единиц воды в секунду в пределах от 0 до x1 включительно. Аналогично, кран с горячей водой может пропускать от 0 до x2 единиц воды в секунду.

Если по первому крану течет y1 единиц воды в секунду, а по второму — y2 единиц, то результирующая температура воды в ванне будет:

Вася хочет открыть оба крана таким образом, чтобы температура воды в ванне была не меньше t0, но при этом максимально близка к этому значению. Если оптимальных вариантов несколько, то Вася выбирает тот, при котором ванна наполнится как можно быстрее.

Определите насколько нужно открыть каждый из кранов чтобы Вася остался доволен.

Входные данные

Даны пять целых чисел t1, t2, x1, x2 и t0 (1 ≤ t1 ≤ t0 ≤ t2 ≤ 106, 1 ≤ x1, x2 ≤ 106).

Выходные данные

Выведите два целых числа y1 и y2, разделенные пробелом (0 ≤ y1 ≤ x1, 0 ≤ y2 ≤ x2).

Примечание

Во втором примере горячую воду выгодно вообще не включать, а холодную включить на полную мощность, чтобы ванна наполнилась как можно быстрее.

D. Фибоначчиевы суммы

дп математика *2300

Числа Фибоначчи имеют следующий вид:

F1 = 1, 
F2 = 2, 
Fi = Fi - 1 + Fi - 2, i > 2.

Рассмотрим какое-либо непустое множество S = {s1, s2, ..., sk}, состоящее из различных чисел Фибоначчи, и найдем сумму значений элементов этого множества:

Будем называть множество S разложением в фибоначчиеву сумму числа n.

Нетрудно видеть, что некоторые числа имеют несколько разложений в фибоначчиеву сумму. Например, для 13 имеем 13, 5 + 8, 2 + 3 + 8 — три разложения, а для 16: 3 + 13, 1 + 2 + 13, 3 + 5 + 8, 1 + 2 + 5 + 8 — четыре разложения.

По заданному числу n определите количество его различных разложений в фибоначчиеву сумму.

Входные данные

В первой строке находится целое число t — количество тестов (1 ≤ t ≤ 105). В каждой из последующих t строк находится по одному тесту.

Каждый тест — это целое число n (1 ≤ n ≤ 1018).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Для каждого теста из входных данных выведите одно число в отдельной строке — ответ на задачу.

Примечание

Два разложения различны если существует число, которое содержится в одном разложении, и не содержится в другом. Разложения, отличающиеся только порядком слагаемых, считаются одинаковыми.

A. Отопление

математика *1000

Несколько дней назад вы приобрели новый дом и сейчас планируете провести в нем капитальный ремонт. Так как зимы в вашем регионе могут быть очень суровыми, вам нужно определиться с системой отопления в каждой комнате.

У вас в доме \(n\) комнат. В \(i\)-й комнате вы можете установить не более \(c_i\) радиаторов системы отопления. Каждый радиатор может иметь несколько секций, но стоимость радиатора из \(k\) секций равна \(k^2\) бурлей.

Так как комнаты имеют разные размеры, то вы рассчитали, что на обогрев \(i\)-й комнаты вам понадобится как минимум \(sum_i\) секций суммарно по всем радиаторам.

Для каждой комнаты посчитайте минимально возможную стоимость установки не более \(c_i\) радиаторов и суммарным количеством секций не менее \(sum_i\).

Входные данные

В первой строке задано единственное число \(n\) (\(1 \le n \le 1000\)) — количество комнат.

В каждой из следующих \(n\) строк заданы описания комнат. В \(i\)-й строке задано два целых числа \(c_i\) и \(sum_i\) (\(1 \le c_i, sum_i \le 10^4\)) — максимальное количество радиаторов и минимальное необходимое количество секций в \(i\)-й комнате, соответственно.

Выходные данные

Для каждой комнаты выведите одно число — минимально возможная стоимость установки не более \(c_i\) радиаторов с суммарным количеством секций не менее, чем \(sum_i\).

Примечание

В первой комнате, вы можете установить только один радиатор, а потому выгодно приобрести радиатор с \(sum_1\) секциями. Стоимость радиатора равна \((10^4)^2 = 10^8\).

Во второй комнате вы можете установить вплоть до \(10^4\) радиаторов, но так как вам необходима только одна секция, то выгодно приобрести один радиатор на одну секцию.

В третьей комнате существует \(7\) способов установить радиаторы: \([6, 0]\), \([5, 1]\), \([4, 2]\), \([3, 3]\), \([2, 4]\), \([1, 5]\), \([0, 6]\). Оптимальным будет являться вариант \([3, 3]\) и его стоимость равна \(3^2+ 3^2 = 18\).

B. Получи два нуля

Бинарный поиск математика *1300

У вас есть два числа \(a\) и \(b\). Вы можете выполнять любое количество операций с этими числами (возможно нулевое).

В качестве каждой операции вы можете выбрать целое положительное число \(x\) и сделать присвоения \(a := a - x\), \(b := b - 2x\) либо \(a := a - 2x\), \(b := b - x\). Обратите внимание, что в разных операциях вы можете использовать разные значения \(x\).

Вам нужно выяснить, возможно ли сделать числа \(a\) и \(b\) равными \(0\) одновременно при помощи таких операций?

Вам нужно ответетить на \(t\) наборов входных данных.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два числа \(a\) и \(b\) (\(0 \le a, b \le 10^9\)).

Выходные данные

На каждый набор входных данных выведите YES если возможно сделать числа \(a\) и \(b\) равными \(0\) одновременно и NO в противном случае.

Вы можете выводить ответ в любом регистре (напрммер строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных вы можете сделать числа \(a\) и \(b\) равными нулю следующим образом:

  1. выбрать \(x = 4\) и сделать присовение \(a := a - x\), \(b := b - 2x\). Тогда числа изменятся следующим образом: \(a = 6 - 4 = 2\), \(b = 9 - 8 = 1\);
  2. затем выбрать \(x = 1\) и сделать присовение \(a := a - 2x\), \(b := b - x\). Тогда числа изменятся следующим образом: \(a = 2 - 2 = 0\), \(b = 1 - 1 = 0\).

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 (регистр не важен), в противном случае.

F. Xor-множество

битмаски математика разделяй и властвуй *3100

Вам заданы два множества: \(A\) и \(B\). Найдите сумму элементов в множестве \(C = \{x | x = a \oplus b, a \in A, b \in B\}\), по модулю \(998244353\), где \(\oplus\) означает операцию побитовое исключающее ИЛИ. Каждое число должно быть посчитано ровно один раз.

Например, если \(A = \{2, 3\}\) и \(B = \{2, 3\}\) вы должны учесть число \(1\) только один раз, несмотря на то, что вы можете получить его как \(3 \oplus 2\) и как \(2 \oplus 3\). Таким образом, ответ в этом случае будет равен \(1 + 0 = 1\).

Будем называть отрезком \([l; r]\) множество целых чисел вида \(\{l, l+1, \dots, r\}\).

Множество \(A\) задано объединением \(n_A\) отрезков, множество \(B\) задано объединением \(n_B\) отрезков.

Входные данные

В первой строке записано целое число \(n_A\) (\(1 \le n_A \le 100\)).

В \(i\)-й из следующих \(n_A\) строк записаны два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 10^{18}\)), описывающих отрезок значений из множества \(A\).

Во второй строке записано целое число \(n_B\) (\(1 \le n_B \le 100\)).

В \(i\)-й из следующих \(n_B\) строк записаны два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le 10^{18}\)), описывающих отрезок значений из множества \(B\).

Обратите внимание, что отрезки в описаниях обоих множеств могут пересекаться.

Выходные данные

Выведите одно целое число, сумму элементов в множестве \(C = \{x | x = a \oplus b, a \in A, b \in B\}\) по модулю \(998244353\).

Примечание

В первом примере можно заметить, что множество \(C = \{0,1,\dots,15\}\), что означает, что все числа от \(0\) до \(15\) могут быть представлены в виде \(a \oplus b\).

A. Сладкая задача

математика *1100

У вас есть три кучи сладостей, состоящие из красных, зеленых и синих конфет:

  • первая куча состоит только из \(r\) красных конфет,
  • вторая куча состоит только из \(g\) зеленых конфет,
  • третья куча состоит только из \(b\) синих конфет.

Каждый день Таня съедает ровно две конфеты различных цветов. Она выбирает любые цвета конфет, единственное ограничение - она не может съесть две конфеты одного цвета за один день.

Найдите максимальное количество дней, в течение которых Таня может есть сладости. Каждый день Таня должна съедать ровно две конфеты.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют \(t\) независимых наборов входных данных.

Каждый набор состоит из одной строки, в которой находятся три целых числа \(r\), \(g\) и \(b\) (\(1 \le r, g, b \le 10^8\)) — количество красных, зеленых и синих конфет соответственно.

Выходные данные

Выведите \(t\) целых чисел: \(i\)-е число соответствует ответу на \(i\)-й набор данных.

Примечание

В первом примере Таня может есть конфеты только в течение одного дня. Она может съесть любую пару конфет, потому что все они различного цвета.

Во втором примере Таня может есть конфеты в течение двух дней. Например, она может съесть красную и зеленую конфету в первый день и зеленую и синюю конфету во второй день.

В третьем примере Таня может есть конфеты в течение двух дней. Например, она может съесть красную и зеленую конфету в первый день и красную и синюю во второй день. Заметьте, что две красные конфеты остались не съедены.

C. Вы все уже победители!

meet-in-the-middle Бинарный поиск математика теория чисел *1400

На всеми известной тестирующей системе MathForces устраивается розыгрыш \(n\) единиц рейтинга. Раздача рейтинга будет происходить по следующему алгоритму: если в мероприятии принимает участие \(k\) участников, то \(n\) рейтинга поровну распределяется между ними и округляется в сторону ближайшего меньшего целого числа. По окончании распределения может остаться неиспользованный рейтинг — он не достаётся никому из участников.

К примеру, если \(n = 5\) и \(k = 3\), то каждый участник получит \(1\) единицу рейтинга, а также \(2\) единицы рейтинга останутся неиспользованными. Если же \(n = 5\), а \(k = 6\), то ни у кого из участников не увеличится рейтинг.

Вася участвует в этом розыгрыше рейтинга, но не владеет информацией об общем количестве участников этого мероприятия. Поэтому он хочет узнать, какие различные значения приращения рейтинга он может получить в результате этого розыгрыша, и просит Вас о помощи.

Например, если \(n=5\), то искомый ответ равен последовательности \(0, 1, 2, 5\). Каждое из значений последовательности (и только они) может быть получено как \(\lfloor n/k \rfloor\) для некоторое подходящего целого положительного \(k\) (где \(\lfloor x \rfloor\) — округлённое вниз значение \(x\)): \(0 = \lfloor 5/7 \rfloor\), \(1 = \lfloor 5/5 \rfloor\), \(2 = \lfloor 5/2 \rfloor\), \(5 = \lfloor 5/1 \rfloor\).

Напишите программу, которая по заданному \(n\) находит последовательность всех возможных приращений рейтинга.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных в тесте.

Далее следуют описания \(t\) наборов входных данных, по одному описанию в строке. Каждая строка содержит целое число \(n\) (\(1 \le n \le 10^9\)) — суммарное количество разыгрываемого рейтинга.

Выходные данные

Выведите ответы на \(t\) заданных наборов входных данных. Каждый ответ должен состоять из двух строк.

В первой строке выведите число \(m\) — количество различных значений приращения рейтинга, которые может получить Вася.

В следующей строке выведите \(m\) различных чисел — сами значения приращения рейтинга в порядке возрастания.

B. Красивые числа

математика реализация Структуры данных *1300

Вам дана перестановка \(p=[p_1, p_2, \ldots, p_n]\) целых чисел от \(1\) до \(n\). Назовем число \(m\) (\(1 \le m \le n\)) красивым, если существует два индекса \(l, r\) (\(1 \le l \le r \le n\)), таких что \([p_l, p_{l+1}, \ldots, p_r]\) это перестановка чисел \(1, 2, \ldots, m\).

Например, пусть \(p = [4, 5, 1, 3, 2, 6]\). В этом случае числа \(1, 3, 5, 6\) красивые, а \(2, 4\) нет. Это так, потому что:

  • если \(l = 3\) и \(r = 3\) мы получим перестановку \([1]\) для \(m = 1\);
  • если \(l = 3\) и \(r = 5\) мы получим перестановку \([1, 3, 2]\) для \(m = 3\);
  • если \(l = 1\) и \(r = 5\) мы получим перестановку \([4, 5, 1, 3, 2]\) для \(m = 5\);
  • если \(l = 1\) и \(r = 6\) мы получим перестановку \([4, 5, 1, 3, 2, 6]\) для \(m = 6\);
  • невозможно взять некоторые \(l\) и \(r\), так что \([p_l, p_{l+1}, \ldots, p_r]\) будет перестановкой чисел \(1, 2, \ldots, m\) для \(m = 2\) и для \(m = 4\).

Вам дана перестановка \(p=[p_1, p_2, \ldots, p_n]\). Для всех \(m\) (\(1 \le m \le n\)) определите, является ли это число красивым или нет.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\))  — количество тестовых случаев. В следующих строках находятся описания тестовых случаев.

В первой строке описания тестового случая находится единственное целое число \(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\) различны) — данная перестановка \(p\).

Гарантируется, что сумма \(n\) по всем тестовым случаям во входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк — ответы на тестовые случаи, в порядке их следования во входных данных.

Ответом на тестовый случай является строка длины \(n\), где \(i\)-й символ равен \(1\), если \(i\) это красивое число и равен \(0\) если \(i\) не является красивым числом.

Примечание

Первый тестовый случай описан в условии задачи.

Во втором тестовом случае все числа от \(1\) до \(5\) красивые:

  • если \(l = 3\) и \(r = 3\) мы получим перестановку \([1]\) для \(m = 1\);
  • если \(l = 3\) и \(r = 4\) мы получим перестановку \([1, 2]\) для \(m = 2\);
  • если \(l = 2\) и \(r = 4\) мы получим перестановку \([3, 1, 2]\) для \(m = 3\);
  • если \(l = 2\) и \(r = 5\) мы получим перестановку \([3, 1, 2, 4]\) для \(m = 4\);
  • если \(l = 1\) и \(r = 5\) мы получим перестановку \([5, 3, 1, 2, 4]\) для \(m = 5\).

E. Красивые зеркала

дп математика Структуры данных Теория вероятностей *2100

У Creatnx есть \(n\) зеркал, пронумерованных от \(1\) до \(n\). Каждый день Creatnx спрашивает ровно одно зеркало «Красивый ли я?». \(i\)-е зеркало скажет Creatnx, что он красивый с вероятностью \(\frac{p_i}{100}\) для всех \(1 \le i \le n\).

Creatnx спрашивает зеркала одно за другим, начиная с \(1\)-о зеркала. Каждый день, если он спрашивает \(i\)-е зеркало, есть две возможности:

  • \(i\)-е зеркало скажет Creatnx, что он красивый. В этом случае, если \(i = n\) Creatnx остановится и станет счастливым, иначе он продолжит спрашивать \(i+1\)-е зеркало на следующий день;
  • В другом случае Creatnx очень расстроится. На следующий день, Creatnx начнет спрашивать \(1\)-е зеркало заново.

Вам нужно посчитать математическое ожидание количества дней, до того как Creatnx станет счастливым.

Это число нужно найти по модулю \(998244353\). Формально, пусть \(M = 998244353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) целые числа и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество зеркал.

Во второй строке находится \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq 100\)).

Выходные данные

Выведите ответ по модулю \(998244353\) в единственной строке.

Примечание

В первом тесте, есть единственное зеркало и оно говорит, что Creatnx красивый с вероятностью \(\frac{1}{2}\). Поэтому математическое ожидание количества дней, пока Creatnx не станет счастливым равно \(2\).

A. Спортивный программист

китайская теорема об остатках математика *1000

Боб — спортивный программист. Он хочет стать красным, и для этого ему нужен строгий режим тренировок. Боб решил пойти на ежегодную встречу гроссмейстеров и спросить \(n\) из них, сколько они тренировались, чтобы стать красными.

«Я потратил \(x_i\) часов на решение задач», — ответил \(i\)-й гроссмейстер.

Боб решил потренировать свои навыки математики, поэтому для каждого ответа он записал одно целое число — количество минут (\(60 \cdot x_i\)), поблагодарил гроссмейстеров и пошел домой. Боб мог писать числа с лидирующими нулями — например, если гроссмейстер сказал, что ему потребовалось потратить \(2\) часа, Боб мог написать \(000120\) вместо \(120\).

Алиса решила разыграть Боба — она нашла записанные им числа, и для каждого из них сделала следующее (независимо от остальных чисел):

  • либо перемешала все цифры числа,
  • либо записала случайное число.

Таким образом Алиса получила \(n\) чисел, которые мы обозначим как \(y_1\), ..., \(y_n\).

Для каждого из этих чисел помогите Бобу определить, может ли \(y_i\) быть результатом перемешивания числа (возможно, имеющего лидирующие нули), кратного \(60\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 418\)) — количество гроссмейстеров, которым задал вопрос Боб.

Затем следуют \(n\) строк, в \(i\)-й из которых задано одно целое число \(y_i\), записанное Алисой.

Каждое из этих чисел состоит из не менее \(2\) и не более \(100\) цифр от '0' до '9'. Числа могут содержать ведущие нули.

Выходные данные

Выведите \(n\) строк.

Для каждого \(i\) сделайте следующее: если можно переставить цифры \(y_i\) так, что полученное число делится на \(60\), выведите «red» (без кавычек). Иначе выведите «cyan».

Примечание

В первом примере существует один способ переставить цифры так, что результат делится на \(60\) (мы должны получить \(360\)).

Во втором примере есть два решения. Одно из них — \(060\), а второе — \(600\).

В третьем примере существует \(6\) способов переставить цифры: \(025\), \(052\), \(205\), \(250\), \(502\), \(520\). Никакой из этих способов не дает число, которое делится на \(60\).

В четвертом примере существует \(3\) способа переставить цифры: \(228\), \(282\), \(822\).

В пятом примере ни один из \(24\) способов переставить цифры не дает в результате число, делящееся на \(60\).

В шестом примере \(000\dots0\) является корректным решением.

B. Башня из кубиков

Конструктив математика *1000

Боб играет со стандартными \(6\)-гранными костями (кубиками). Развертка стандартного кубика приведена на рисунке ниже.

У Боба есть бесконечное число игральных кубиков, и он хочет построить из них башню, ставя один кубик на другой и выбирая ориентацию каждого нового кубика. После того, как Боб построит башню, он посчитает количество видимых точек на гранях кубиков.

Например, количество видимых точек на башне, нарисованной ниже, равно \(29\) — число точек на верхней грани верхнего кубика равно \(1\), а с четырех сторон башни видны грани со следующим количеством точек: \(5\) и \(3\) с южной стороны, \(4\) и \(2\) с западной стороны, \(2\) и \(4\) с северной стороны, и \(3\) и \(5\) с восточной стороны.

Нижняя грань первого кубика (с единицей) и грани с шестью точками не видны, поэтому они не учитываются в количестве видимых точек.

У Боба есть \(t\) любимых чисел \(x_i\). Для каждого из чисел \(x_i\) помогите Бобу узнать, можно ли построить башню из кубиков, для которой количество видимых точек равно этому числу.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество любимых чисел Боба.

Во второй строке заданы \(t\) целых чисел \(x_i\) (\(1 \leq x_i \leq 10^{18}\)) — любимые числа Боба.

Выходные данные

Для каждого любимого числа Боба выведите «YES», если можно построить башню, или «NO» в противном случае (без кавычек).

Примечание

Первый пример разобран в условии.

Ответ на второй пример можно получить, если перевернуть верхний кубик на башне из условия.

В третьем примере достаточно единственного кубика, поставленного таким образом, что на верхней грани изображено \(5\) точек.

В четвертом примере не существует башни с нужным количеством видимых точек.

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\).

H. Красно-синий граф

meet-in-the-middle графы дп математика матрицы *3400

Дан ориентированный граф из \(n\) вершин, пронумерованных от \(1\) до \(n\), в котором из каждой вершины (кроме \(n\)) исходит две дуги, красная и синяя. В любой момент времени ровно одна исходящая дуга является активной для каждой вершины. Изначально все синие дуги активны, а в вершине \(1\) находится фишка. В начале каждой секунды у вершины, в которой стоит фишка, меняется активная дуга. Затем фишка перемещается по активной дуге. Когда фишка достигает вершины \(n\), она останавливается. Гарантируется, что вершина \(n\) достижима по дугам из всех остальных вершин графа.

Вам задаются \(q\) запросов, в каждом из которых описывается состояние графа — пара \((v, s)\) следующего вида:

  • \(v\) — вершина, в которой находится фишка;
  • \(s\) — строка из \(n - 1\) символов. \(i\)-й символ обозначает, какая дуга, ведущая из \(i\), активна (красная, если символ равен 'R', или синяя, если символ — 'B').

Для каждого запроса определите, достижимо ли заданное состояние из стартового, и если да — когда такое состояние графа появится в первый раз. Обратите внимание, что заданные две операции неразрывны между собой — состояние не считается достигнутым, если оно появляется после изменения активной дуги, но до того, как фишку переместили по дуге.

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \leq n \leq 58\)) — количество вершин.

Далее следуют \(n-1\) строк, \(i\)-я из которых содержит два целых числа \(b_i\) и \(r_i\) (\(1 \leq b_i, r_i \leq n\)), обозначающих синюю дугу \((i, b_i)\) и красную дугу \((i, r_i)\), соответственно. Гарантируется, что вершина \(n\) достижима из всех остальных.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 5000\)) — количество запросов.

Затем следуют \(q\) строк с запросами. \(j\)-я из них содержит целое число \(v\) (\(1 \leq v < n\)) и строку \(s\) из \(n-1\) символов, каждый из которых либо 'R', либо 'B'. \(i\)-й из этих символов равен 'R', если красная дуга, ведущая из вершины \(i\), активна, иначе этот символ равен 'B'.

Выходные данные

Выведите \(q\) чисел, каждое из которых содержит ответ на один запрос.

Если состояние в \(i\)-м запросе недостижимо, выведите \(-1\). Иначе выведите \(t_i\) — первый момент времени, когда это состояние появилось (выводите время в секундах, начиная отсчет с секунды \(0\), в которую появилось стартовое состояние).

Примечание

На картине изображен граф из первого примера.

Первые \(19\) запросов показывают перемещение фишки. После \(19\)-го шага фишка достигает вершины \(6\). Последние два запроса соответствуют недостижимым состояниям.

G. Game Relics

математика Теория вероятностей *3000

Esports is a form of competitive sports using video games. Dota 2 is one of the most popular competitive video games in Esports. Recently, a new video game Dota 3 was released. In Dota 3 a player can buy some relics for their hero. Relics are counters that track hero's actions and statistics in a game.

Gloria likes to play Dota 3, so she wants to buy all \(n\) available relics for her favorite hero.

Relics can be bought using an in-game currency called shards. Each relic has its own price — \(c_i\) shards for the \(i\)-th relic. A player can buy a relic using one of the following options:

  • Pay \(c_i\) shards to buy the \(i\)-th relic;
  • Pay \(x\) shards and randomly get one of all \(n\) relics. The probability of getting a relic is the same for all \(n\) relics. If a duplicate relic is received, then the relic is recycled and \(\frac{x}{2}\) shards are given back to the player.

Gloria wants to buy all \(n\) relics. Help her minimize the expected number of shards she spends to buy all the relics.

Input

The first line contains two integers \(n\) and \(x\) (\(1 \le n \le 100\); \(1 \le x \le 10\,000\)) — the number of relics and the cost to receive a random relic.

The second line consists of \(n\) integers \(c_1, c_2, \ldots, c_n\) (\(x \le c_i \le 10\,000\); \(\sum{c_i} \le 10\,000\)) — the prices of \(n\) relics.

Output

Print a single real number — the minimum expected number of shards that Gloria must spend to buy all the relics.

The absolute or relative error should not exceed \(10^{-9}\).

Note

In the first example, the optimal strategy is to randomly get one of the two relics paying \(20\) shards. Then there are two scenarios.

The first one happens if Gloria receives the first relic. Then she keeps getting random relics until she obtains the second relic. The expected number of shards to spend in this scenario is \(20 + 30 = 50\).

In the second scenario, Gloria initially gets the second relic. Then it is better to buy the first relic for \(25\) shards, so the expected number of shards to spend in this scenario is \(20 + 25 = 45\).

Thus, the expected number of shards to spend is \(\frac{50 + 45}{2} = 47.5\).

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\).

K. Key Storage

Комбинаторика математика *2100

Karl is developing a key storage service. Each user has a positive integer key.

Karl knows that storing keys in plain text is bad practice. So, instead of storing a key, he decided to store a fingerprint of a key. However, using some existing fingerprint algorithm looked too boring to him, so he invented his own one.

Karl's fingerprint is calculated by the following process: divide the given integer by 2, then divide the result by 3, then divide the result by 4, and so on, until we get a result that equals zero (we are speaking about integer division each time). The fingerprint is defined as the multiset of the remainders of these divisions.

For example, this is how Karl's fingerprint algorithm is applied to the key 11: 11 divided by 2 has remainder 1 and result 5, then 5 divided by 3 has remainder 2 and result 1, and 1 divided by 4 has remainder 1 and result 0. Thus, the key 11 produces the sequence of remainders \([1, 2, 1]\) and has the fingerprint multiset \(\{1, 1, 2\}\).

Ksenia wants to prove that Karl's fingerprint algorithm is not very good. For example, she found that both keys 178800 and 123456 produce the fingerprint of \(\{0, 0, 0, 0, 2, 3, 3, 4\}\). Thus, users are at risk of fingerprint collision with some commonly used and easy to guess keys like 123456.

Ksenia wants to make her words more persuasive. She wants to calculate the number of other keys that have the same fingerprint as the keys in the given list of some commonly used keys. Your task is to help her.

Input

The first line contains an integer \(t\) (\(1 \le t \le 50\,000\)) — the number of commonly used keys to examine. Each of the next \(t\) lines contains one integer \(k_i\) (\(1 \le k_i \le 10^{18}\)) — the key itself.

Output

For each of the keys print one integer — the number of other keys that have the same fingerprint.

Note

The other key with the same fingerprint as 11 is 15. 15 produces a sequence of remainders \([1, 1, 2]\). So both numbers have the fingerprint multiset \(\{1, 1, 2\}\).

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}\)): длины столбцов.

Выходные данные

Выведите одно целое число: наибольшее количество непересекающихся домино, которое вы можете нарисовать внутри данной диаграммы Юнга.

Примечание

Некоторые возможные решения для первого примера:

D. Инвертирования в турнире

графы математика Перебор разделяй и властвуй *3200

Вам дан турнир — полный ориентированный граф.

За одну операцию вы можете взять любую вершину \(v\) и поменять направления всех ребер с \(v\) на одном из концов (таким образом все ребра \(u \to v\) меняют направление на \(v \to u\) и наоборот).

Вам нужно сделать турнир сильно связным за минимальное количество таких операций.

А также, если это возможно, вам необходимо посчитать количество способов сделать турнир сильно связным за такое число операций (два способа отличаются, если для какого-то \(i\), вершина выбранная на \(i\)-й операции одного способа, отличается от вершины выбранной на \(i\)-й операции другого способа). Вам нужно найти остаток от деления этой величины на \(998\,244\,353\).

Входные данные

В первой строке записано одно целое число \(n\) (\(3 \leq n \leq 2000\)): количество вершин в турнире.

Следующие \(n\) строк содержат описания ребер турнира, каждая из них содержит бинарную строку длины \(n\). Если \(j\)-й символ \(i\)-й строки равен '1', тогда в графе есть ребро \(i \to j\).

Гарантируется, что в графе нет ребер \(i \to i\) и в графе есть ровно одно ребро среди \(i \to j\) и \(j \to i\) для разных \(i\) и \(j\).

Выходные данные

Если невозможно сделать турнир сильно связным за такое количество операций, выведите «-1».

Иначе, выведите два целых числа: минимальное количество операций, которое нужно, чтобы сделать турнир сильно связным и количество способов сделать турнир сильно связным за такое число операций, по модулю \(998\,244\,353\).

A. Уравнение

математика Перебор *800

Назовем положительное целое число составным если у него есть хотя бы один делитель кроме \(1\) и себя. Например:

  • следующие числа являются составными: \(1024\), \(4\), \(6\), \(9\);
  • cледующие числа не являются составными: \(13\), \(1\), \(2\), \(3\), \(37\).

Вам дано положительное целое число \(n\). Найдите два составных числа \(a,b\), что \(a-b=n\).

Гарантируется, что это возможно.

Входные данные

Входные данные содержат одно целое число \(n\) (\(1 \leq n \leq 10^7\)).

Выходные данные

Выведите два составных числа \(a,b\) (\(2 \leq a, b \leq 10^9, a-b=n\)).

Гарантируется, что решение существует. Если возможных решений несколько, вы можете вывести любое.

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\).

C. Сделай хорошим

битмаски Конструктив математика *1400

Будем называть массив \(a_1, a_2, \dots, a_m\) неотрицательных целых чисел хорошим, если \(a_1 + a_2 + \dots + a_m = 2\cdot(a_1 \oplus a_2 \oplus \dots \oplus a_m)\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

К примеру, массив \([1, 2, 3, 6]\) является хорошим, так как \(1 + 2 + 3 + 6 = 12 = 2\cdot 6 = 2\cdot (1\oplus 2 \oplus 3 \oplus 6)\). В то же время, массив \([1, 2, 1, 3]\) хорошим не является, так как \(1 + 2 + 1 + 3 = 7 \neq 2\cdot 1 = 2\cdot(1\oplus 2 \oplus 1 \oplus 3)\).

Вам дан массив длины \(n\): \(a_1, a_2, \dots, a_n\). Добавьте к нему не более \(3\) элементов, чтобы он стал хорошим. Добавленные элементы не обязаны быть различными. Можно показать, что при данных ограничениях решение всегда существует. Если существует несколько возможных решений, выведите любое из них. Обратите внимание, что минимизировать количество добавленных элементов не требуется!. В частности если массив изначально уже хороший, то вы можете не добавлять элементов.

Входные данные

Во входных данных находятся несколько (не меньше одного) тестовых случаев. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество тестовых случаев. Далее следуют описания тестовых случаев.

Первая строка описания тестового случая содержит единственное число \(n\) \((1\le n \le 10^5)\) — длину массива.

Вторая строка описания тестового случая содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0\le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Для каждого тестового случая выведите две строки.

В первой строке, выведите единственное целое число \(s\) (\(0\le s\le 3\)) — количество элементов, которые вы хотите добавить.

Во второй строке, выведите \(s\) целых чисел \(b_1, \dots, b_s\) (\(0\le b_i \le 10^{18}\)) — элементы, которые вы хотите добавить.

Если существует несколько возможных решений, вы можете вывести любое из них.

Примечание

В первом тестовом случае из примера, сумма элементов массива равна \(12\), а их \(\oplus\) равен \(6\), поэтому условие уже выполнено.

Во втором тестовом случае из примера, после добавления \(4, 4\), массив принимает вид \([8, 4, 4]\). Сумма элементов в нем равна \(16\), а их \(\oplus\) равен \(8\).

D. Странный прибор

интерактив Конструктив математика сортировки *1900

Это интерактивная задача.

Мы загадали массив \(a\) из \(n\) попарно различных чисел (это значит, что нет одинаковых чисел). Вы можете узнавать информацию об этом массиве с помощью нового прибора, который вы заказали на Amazon.

Данный прибор может отвечать на запрос следующего вида: в ответ на индексы \(k\) различных элементов массива, он вернет вам позицию и значение \(m\)-го по возрастанию среди них.

К сожалению, инструкция к прибору потерялась при доставке. Вы помните \(k\), но не помните \(m\). Ваша задача — найти \(m\) с помощью запросов к данному прибору.

Вы можете задать не более \(n\) запросов.

Обратите внимание, что массив \(a\), а также число \(m\) зафиксированы перед началом взаимодействия и не зависят от ваших запросов. Иными словами, интерактор не адаптивен.

Заметьте, что число запросов минимизировать не нужно, как и угадывать весь массив \(a\). Вам нужно только угадать \(m\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1\le k < n \le 500\)) — длина массива и количество элементов в запросе соответственно.

Гарантируется, что искомое \(m\) удовлетворяет \(1\le m \le k\), элементы \(a_1, a_2, \dots, a_n\) массива удовлетворяют \(0\le a_i \le 10^9\) и все они различны.

Протокол взаимодействия

Вы начинаете взаимодействие, считав \(n\) и \(k\).

Чтобы задать вопрос об элементах на позициях \(x_1, x_2, \dots, x_k\), в отдельной строке выведите

\(?\) \(x_1\) \(x_2\) \(x_3\) ... \(x_k\)

Числа в запросе должны удовлетворять условию \(1 \le x_i \le n\), и все \(x_i\) должны быть различными. Не забудьте сделать операцию 'flush', чтобы получить ответ.

В ответ, вы получите два числа \(pos\) и \(a_{pos}\) — позиция в массиве \(a\) \(m\)-го в порядке возрастания элемента среди \(a_{x_1}, a_{x_2}, \dots, a_{x_k}\), и сам элемент на этой позиции.

В случае, если ваш запрос не соответствует требованиям, или вы задали более \(n\) запросов, программа выведет \(-1\) и прекратит взаимодействие. Вы получите вердикт Неправильный ответ. Вам нужно завершить работу вашей программы, чтобы не получить другие вердикты.

Когда вы определили \(m\), выведите

\(!\) \(m\)

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат:

Первая строка должна содержать три целых числа \(n, k, m\) (\(1 \le m \le k < n \le 500\)) — длина массива, количество чисел в запросе, и какое в порядке возрастания число возвращает прибор.

В следующей строке выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0\le a_i \le 10^9\)) — элементы массива. Они должны быть попарно различными.

Примечание

В примере, \(n = 4\), \(k = 3\), \(m = 3\), \(a = [2, 0, 1, 9]\).

E. Разделите точки

геометрия Конструктив математика *2300

Вам дано множество из \(n\ge 2\) попарно различных точек с целыми координатами. Вы должны разделить эти точки на 2 непустые группы \(A\) и \(B\), чтобы следующее условие выполнялось:

Для любых двух точек \(P\) и \(Q\), напишите Евклидово расстояние между ними на доске: если они принадлежат одной и той же группе — желтым цветом, а если различным группам — синим цветом. Тогда ни одное желтое число не должно равняться ни одному синему числу.

Гарантируется, что такое разбиение существует при данных ограничениях. Если существуют различные разбиения, вы можете вывести любое из них.

Входные данные

Первая строка содержит одно целое число \(n\) \((2 \le n \le 10^3)\) — количество точек.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^6 \le x_i, y_i \le 10^6\)) — координаты \(i\)-й точки.

Гарантируется, что все \(n\) точек попарно различны.

Выходные данные

В первой строке, выведите \(a\) (\(1 \le a \le n-1\)) — количество точек в группе \(A\).

Во второй строке, выведите \(a\) чисел — номера точек, которые вы берете в группу \(A\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере, мы берем точку \((0, 0)\) в группу \(A\), а точки \((0, 1)\) и \((1, 0)\) в группу \(B\). Таким образом, на доске будет написано \(1\) желтое число \(\sqrt{2}\) и \(2\) синих числа \(1\).

Во втором примере, мы берем точки \((0, 1)\) и \((0, -1)\) в группу \(A\), а точки \((-1, 0)\) и \((1, 0)\) в группу \(B\). Таким образом, на доске будет написано \(2\) желтых числа \(2\) и \(4\) синих числа \(\sqrt{2}\).

F. Восхитительные подстроки

математика Строки *2600

Назовем бинарную строку \(s\) восхитительной, если она содержит по крайней мере \(1\) символ 1 и длина строки делится на количество 1 в ней. К примеру, 1, 1010, 111 являются восхитительными, но 0, 110, 01010 не являются.

Вам дана бинарная строка \(s\). Посчитайте количество ее восхитительных подстрок.

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Входные данные

Первая строка содержит строку \(s\) (\(1 \leq |s|\le 200\,000\)), состоящую только из нулей и единиц.

Выходные данные

Выведите единственное число — количество восхитительных подстрок \(s\).

Примечание

В первом примере, все подстроки \(s\) являются восхитительными.

Во втором примере, есть следующие восхитительные подстроки \(s\): 1 (\(2\) раза), 01 (\(2\) раза), 10 (\(2\) раза), 010 (\(2\) раза), 1010, 0101

В третьем примере, ни одна подстрока не является восхитительной.

G. Подмножество с суммой ноль

графы Конструктив математика поиск в глубину и подобное *2700

Вам даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\), причем для каждого \(1\le i \le n\) выполняется \(i-n\le a_i\le i-1\).

Найдите какое-то непустое подмножество этих чисел, сумма которых равна \(0\). Можно показать, что при данных ограничениях такое подмножество существует. Если существуют несколько подмножеств с суммой ноль, вы можете вывести любое из них.

Входные данные

Во входных данных находятся несколько (не меньше одного) тестовых случаев. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^6\)) — количество тестовых случаев. Далее следуют описания тестовых случаев.

Первая строка описания тестового случая содержит единственное целое число \(n\) (\(1\le n \le 10^6\)).

Вторая строка описания тестового случая содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(i-n \le a_i \le i-1\)).

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(10^6\).

Выходные данные

Для каждого теста, выведите две строки.

В первой строке выведите \(s\) (\(1\le s \le n\)) — количество элементов в вашем подмножестве.

В второй строке выведите \(s\) чисел \(i_1, i_2, \dots, i_s\) (\(1\le i_k \le n\)). Все числа должны быть попарно различными, а сумма \(a_{i_1} + a_{i_2} + \dots + a_{i_s}\) должна быть равна \(0\). Если существуют несколько подмножеств с суммой ноль, вы можете вывести любое из них.

Примечание

В первом примере, сумма равна \(a_1 = 0\).

Во втором примере, сумма равна \(a_1 + a_4 + a_3 + a_2 = 0\).

I. Ксорим на фигурах

бпф Конструктив математика *3500

Дано целое число \(k\) и доска \(2^k \times 2^k\), в клетках которой записаны числа, клетка \((i, j)\) изначально содержит число \(a_{ij}\). Доска считается тором, то есть, клетка справа от \((i, 2^k)\) это \((i, 1)\), а клетка вниз от \((2^k, i)\) это \((1, i)\). Также дана клетчатая фигурка \(F\), состоящая из \(t\) клеток, где \(t\) нечетное. \(F\) не обязана быть связной.

Мы можем выполнять следующую операцию: положить \(F\) на доску (разрешены только параллельные переносы, повороты и симметрии запрещены). Теперь выберите произвольное неотрицательное число \(p\). После этого, для каждой клетки \((i, j)\), покрытой \(F\), замените \(a_{ij}\) на \(a_{ij}\oplus p\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Более формально, пусть \(F\) задана клетками \((x_1, y_1), (x_2, y_2), \dots, (x_t, y_t)\). Тогда вы можете проделать следующую операцию: выбрать любые \(x, y\) с \(1\le x, y \le 2^k\), любое неотрицательное число \(p\), и для каждого \(i\) от \(1\) до \(n\) заменить число в клетке \((((x + x_i - 1)\bmod 2^k) + 1, ((y + y_i - 1)\bmod 2^k) + 1)\) на \(a_{((x + x_i - 1)\bmod 2^k) + 1, ((y + y_i - 1)\bmod 2^k) + 1}\oplus p\).

Мы хотим сделать все числа равными \(0\). Можем ли мы этого достичь? Если да, то найдите наименьшее возможное число операций, с помощью которых этого можно добиться.

Входные данные

Первая строка содержит единственное целое число \(k\) (\(1 \le k \le 9\)).

\(i\)-я из следующих \(2^k\) строк содержит \(2^k\) целых чисел \(a_{i1}, a_{i2}, \dots, a_{i2^k}\) (\(0 \le a_{ij} < 2^{60}\)) — изначальные значения чисел в \(i\)-й строке доски.

Следующая строка содержит единственное целое число \(t\) (\(1\le t \le \min(99, 4^k)\), \(t\) нечетное) — количество клеток фигуры.

\(i\)-я из следующих \(t\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le 2^k\)), описывающих позицию \(i\)-й клетки фигуры.

Гарантируется, что все клетки различны, но не гарантируется, что фигура связная.

Выходные данные

Если невозможно сделать все числа на доске равными \(0\) с этими операциями, выведите \(-1\).

Иначе, выведите единственное число — минимальное количество операций, необходимых, чтобы это сделать. Можно показать, что если возможно сделать все числа равными \(0\), это можно сделать за не более чем \(10^{18}\) операций.

Примечание

Фигурка и операции для примера приведены ниже:

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\) (после этого все кубики станут белого цвета).

E. Общее число

Бинарный поиск дп Комбинаторика математика *2100

Введем определение функции \(f(x)\): \(\) \begin{matrix} f(x) & = & \left\{ \begin{matrix} \frac{x}{2} & \mbox{если } x \text{ четное} \\ x - 1 & \mbox{в противном случае } \end{matrix} \right. \end{matrix} \(\)

Можно заметить, что если мы выбираем некоторое число \(v\) и применяем к нему функцию \(f\), затем применяем функцию \(f\) к числу \(f(v)\), и так далее, то рано или поздно мы получим значение \(1\). Выпишем все промежуточные значения на пути от \(v\) до \(1\) и назовем все выписанные значения \(path(v)\). Например, \(path(1) = [1]\), \(path(15) = [15, 14, 7, 6, 3, 2, 1]\), \(path(32) = [32, 16, 8, 4, 2, 1]\).

Выпишем все \(path(x)\) для всех \(x\) от \(1\) до \(n\). Перед вами стоит задача: определить максимальное число \(m\) такое, что \(m\) встречается хотя бы в \(k\) различных \(path(x)\).

Иначе говоря, нужно найти такое максимальное \(y\), что \(\left| \{ x ~|~ 1 \le x \le n, y \in path(x) \} \right| \ge k\).

Входные данные

В первой строке следуют два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^{18}\)).

Выходные данные

Выведите максимальное число \(m\) такое, что \(m\) встречается хотя бы в \(k\) различных \(path(x)\).

Примечание

В первом примере ответ равен \(5\), так как \(5\) встретится в \(path(5)\), в \(path(10)\) и в \(path(11)\).

Во втором примере ответ равен \(4\), так как \(4\) встретится в \(path(4)\), в \(path(5)\), в \(path(8)\), в \(path(9)\), в \(path(10)\) и в \(path(11)\).

В третьем примере \(n = k\), поэтому ответ равен \(1\), так как \(1\) это единственное число, содержащееся в путях всех чисел от \(1\) до \(20\).

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. А и Б

жадные алгоритмы математика *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\)).

F. Карты

дп Комбинаторика математика Теория вероятностей теория чисел *2600

Рассмотрим следующий эксперимент. У вас есть колода из \(m\) карт, ровно одна из них — джокер. \(n\) раз вы производите следующие действия: перемешиваете колоду, берете верхнюю карту, просматриваете ее и возвращаете ее в колоду.

Пусть \(x\) — количество раз, когда вы брали с вершины колоды джокера. Предполагая, что при каждом перемешивании колоды все \(m!\) перестановок карт равновероятны, чему равно математическое ожидание \(x^k\)? Выведите ответ по модулю \(998244353\).

Входные данные

В единственной строке заданы три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m < 998244353\), \(1 \le k \le 5000\)).

Выходные данные

Выведите одно число — математическое ожидание \(x^k\), взятое по модулю \(998244353\) (ответ всегда можно представить в виде несократимой дроби \(\frac{a}{b}\), где \(b \mod 998244353 \ne 0\); выведите \(a \cdot b^{-1} \mod 998244353\)).

A. Новогодняя гирлянда

математика *900

Поликарпу грустно — Новый год уже на носу, а в городе так и нет снега. Чтобы прибавить себе немного новогоднего настроения, он решил украсить свой дом гирляндами.

Местный магазин в этом году начал предоставлять новую услугу, которая называется «Создай свою гирлянду». То есть можно купить красных, зеленых и синих лампочек, предоставить их, а сотрудники магазина спаяют из них одну гирлянду. В полученной гирлянде все лампочки будут расположены в один ряд. Более того, ни одна пара лампочек одного цвета не будут находиться рядом в этой гирлянде!

Например, если предоставить \(3\) красных, \(3\) зеленых и \(3\) синих лампочки, то полученная гирлянда может выглядеть как «RGBRBGBGR» («RGB» — это красный, зеленый и синий цвет, соответственно). Обратите внимание, что лампы одного цвета могут быть на концах гирлянды.

Однако, если предоставить, например, \(1\) красную, \(10\) зеленых и \(2\) синих лампочки, то сотрудники не смогут сделать из них гирлянду. Любая гирлянда, состоящая из этих лампочек будет содержать хотя бы одну пару лампочек одного цвета, находящуюся рядом друг с другом. Обратите внимание, что сотрудники должны использовать все лампочки, которые вы предоставите.

Так что Поликарп купил несколько наборов лампочек, и теперь интересуется, смогут ли сотрудники собрать гирлянду из каждого из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов лампочек, которые купил Поликарп.

В каждой из следующих \(t\) строк записаны по три целых числа \(r\), \(g\) and \(b\) (\(1 \le r, g, b \le 10^9\)) — количество красных, зеленых и синих лампочек, соответственно.

Выходные данные

Выведите \(t\) строк — для каждого набора лампочек выведите «Yes», если сотрудники смогут собрать гирлянду из него, и «No» в противном случае.

Примечание

Первые два набора описаны в условии.

В третьем наборе можно собрать гирлянду «RBRG», например.

D. Робот Деда Мороза

Комбинаторика математика Теория вероятностей *1700

Дед Мороз получил письма от \(n\) разных детей в течение всего этого года. Конечно, каждый ребенок хочет получить от Деда Мороза какие-то подарки: в частности, \(i\)-й малыш попросил подарить ему один из \(k_i\) различных предметов в качестве подарка. Некоторые предметы могли попросить несколько детей.

Дед Мороз очень занят, поэтому он хочет, чтобы Новогодний Робот выбрал подарки для всех детей. К сожалению, алгоритм выбора подарков Роботом содержит ошибку. Чтобы выбрать подарок для какого-то малыша, Робот делает следующее:

  • равновероятно выбирает одного ребенка \(x\) среди всех \(n\) детей;
  • равновероятно выбирает некоторый предмет \(y\) среди всех \(k_x\) предметов, которые хочет ребенок \(x\);
  • равновероятно выбирает ребенка \(z\), который получит подарок, среди всех \(n\) детей (этот выбор не зависит от выбора \(x\) и \(y\)); результирующая тройка \((x, y, z)\) называется выбором Робота.

Если ребенок \(z\) хотел получить предмет \(y\), то выбор корректный. В противном случае, выбор Робота будет некорректным.

Дед Мороз знает об ошибке, но он не может оценить, действительно ли эта ошибка серьезна. Для этого он хочет знать вероятность того, что один выбор, сгенерированный в соответствии с вышеупомянутым алгоритмом, корректен. Вы можете ему помочь?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество детей, которые написали свои письма Деду Морозу.

Далее следуют \(n\) строк, \(i\)-я из них содержит список предметов, которые хочет \(i\)-й ребенок, в следующем формате: \(k_i\) \(a_{i, 1}\) \(a_{i, 2}\) ... \(a_{i, k_i}\) (\(1 \le k_i, a_{i, j} \le 10^6\)), где \(k_i\) — это количество предметов, которые хочет \(i\)-й ребенок, а \(a_{i, j}\) — это сами предметы. Ни один предмет не содержится в одном и том же списке более одного раза.

Гарантируется, что \(\sum \limits_{i = 1}^{n} k_i \le 10^6\).

Выходные данные

Выведите вероятность того, что Робот сделает корректный выбор следующим образом:

Пусть эта вероятность представлена в виде неприводимой дроби \(\frac{x}{y}\). Вам необходимо вывести \(x \cdot y^{-1} \mod 998244353\), где \(y^{-1}\) является обратным элементом к \(y\) по модулю \(998244353\) (такое целое число, что \(y \cdot y^{-1}\) имеет остаток \(1\) по модулю \(998244353\)).

E. День рождения

геометрия математика *2900

Сейчас у Ани День рождения. Она позвала много гостей и приготовила для них один большой (почти бесконечный) праздничный торт, украшенный n кружочками банана разных размеров. Через 7 минут у Маши тоже будет День рождения, а пока Аня старше, она решила немного покомандовать. Она велела Маше разрезать торт k прямолинейными разрезами на несколько частей (разрезы могут пересекаться). В результате кружочки банана разделятся на кусочки.

Гостей у Ани много, и она хочет, чтобы каждому достался хотя бы один кусочек банана с торта. Поэтому она велела Маше сделать максимально возможным суммарное количество кусочков банана, на которые разрежутся кружочки банана. Не страшно, если некоторые кусочки банана окажутся на одном куске торта — главное, чтобы общее число кусочков банана было наибольшим. Определите, какого результата удастся достичь Маше.

Входные данные

В первой строке даны два целых числа n и k — количество кружочков банана и количество разрезов, которые требуется сделать Маше (1 ≤ n ≤ 1000, 1 ≤ k ≤ 105). В следующих n строках заданы местоположение и размеры кружочков банана, которые имеют форму кругов. На торте задана декартова система координат. В каждой строке находятся три целых числа x, y и r — координаты центра соответствующего кружочка банана и его радиус ( - 1000 ≤ x, y ≤ 1000, 1 ≤ r ≤ 1000).

Гарантируется, что кружочки банана не пересекаются, не касаются и не накладываются друг на друга.

Претест 10 — большой тест с n = k = 1000.

Выходные данные

Выведите единственное целое число — наибольшее количество кусочков банана, которое может получиться у Маши после k прямолинейных разрезов.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

A. Вырезание и вставка

математика реализация *1700

Мы начинаем со строки \(s\), состоящей только из цифр \(1\), \(2\) или \(3\). Будем обозначать длину строки \(s\) как \(|s|\). Для всех \(i\) от \(1\) до \(|s|\) \(i\)-й символ строки \(s\) обозначим как \(s_i\).

Где-то в строке стоит курсор. Позиция курсора \(\ell\) обозначается целым числом из множества \(\{0, \ldots, |s|\}\), и имеет следующее значение:

  • если \(\ell = 0\), тогда курсор расположен перед первым символом строки \(s\).
  • если \(\ell = |s|\), тогда курсор расположен после последнего символа строки \(s\).
  • если \(0 < \ell < |s|\), тогда курсор расположен между символами \(s_\ell\) и \(s_{\ell+1}\).

Обозначим за \(s_\text{left}\) строку, находящуюся левее курсора и за \(s_\text{right}\) строку находящуюся правее курсора.

Также есть строка \(c\), которая называется буфером, которая изначально пуста. Всего существует три типа действий:

  • Передвижение. Передвинуть курсор на один символ вправо. Это увеличивает \(\ell\) на единицу.
  • Вырезание. Присвоить \(c \leftarrow s_\text{right}\), затем присвоить \(s \leftarrow s_\text{left}\).
  • Вставка. Добавить значение \(c\) в конец строки \(s\). Заметьте, что это никак не меняет \(c\).

Изначально курсор находится в позиции \(\ell = 0\). Затем, исполняется следующая процедура:

  1. Применить передвижение один раз.
  2. Применить вырезание один раз.
  3. Несколько применить вставку, количество раз равно \(s_\ell\).
  4. Если \(\ell = x\), остановиться. Иначе, вернуться к шагу 1.

Вам дана изначальная строка \(s\) и целое число \(x\). Какой будет длина строки \(s\) когда процедура остановится? Так как это число может быть очень большим, выведите его остаток при делении на \(10^9 + 7\).

Гарантируется, что \(\ell \le |s|\) в любой момент времени.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\)), количество наборов входных данных. В следующих строках находятся их описания.

В первой строке каждого набора входных данных записано единственное целое число \(x\) (\(1 \le x \le 10^6\)). Во второй строке находится изначальная строка \(s\) (\(1 \le |s| \le 500\)). Гарантируется, что \(s\) состоит только из символов «1», «2», «3».

Гарантируется, что сумма \(x\) по всем тестовым случаям не превосходит \(10^6\). Гарантируется, что во всех тестовых случаях во время процедуры \(\ell \le |s|\) в любой момент времени.

Выходные данные

Для каждого тестового случая, выведите остаток при делении длины строки после процедуры на \(10^9 + 7\).

Примечание

Давайте проиллюстрируем, что происходит в первом тестовом случае. Изначально у нас \(s = \) 231. Изначально, \(\ell = 0\) и \(c = \varepsilon\) (пустая строка). Вот как изменяются эти значения в ходе процедуры:

  • Шаг 1, передвижение: мы получим \(\ell = 1\).
  • Шаг 2, вырезание: мы получим \(s = \) 2 и \(c = \) 31.
  • Шаг 3, вставка \(s_\ell = \) 2 раза: мы получим \(s = \) 23131.
  • Шаг 4: \(\ell = 1 \not= x = 5\), поэтому мы переходим к 1.

  • Шаг 1, передвижение: мы получим \(\ell = 2\).
  • Шаг 2, вырезание: мы получим \(s = \) 23 и \(c = \) 131.
  • Шаг 3, вставка \(s_\ell = \) 3 раза: мы получим \(s = \) 23131131131.
  • Шаг 4: \(\ell = 2 \not= x = 5\), поэтому мы переходим к 1.

  • Шаг 1, передвижение: мы получим\(\ell = 3\).
  • Шаг 2, вырезание: мы получим \(s = \) 231 и \(c = \) 31131131.
  • Шаг 3, вставка \(s_\ell = \) 1 раз: мы получим \(s = \) 23131131131.
  • Шаг 4: \(\ell = 3 \not= x = 5\), поэтому мы переходим к 1.

  • Шаг 1, передвижение: мы получим \(\ell = 4\).
  • Шаг 2, вырезание: мы получим \(s = \) 2313 и \(c = \) 1131131.
  • Шаг 3, вставка \(s_\ell = \) 3 раза: мы получим \(s = \) 2313113113111311311131131.
  • Шаг 4: \(\ell = 4 \not= x = 5\), поэтому мы переходим к 1.

  • Шаг 1, передвижение: мы получим \(\ell = 5\).
  • Шаг 2, вырезание: мы получим \(s = \) 23131 и \(c = \) 13113111311311131131.
  • Шаг 3, вставка \(s_\ell = \) 1 раз: мы получим \(s = \) 2313113113111311311131131.
  • Шаг 4: \(\ell = 5 = x\), поэтому мы останавливаемся.

В конце процедуры, \(s\) имеет длину \(25\).

B. Beingawesomeism

математика реализация *1800

Вы всемогущее существо и создали прямоугольный мир. Ваш мир настолько удобный, что может быть представлен в виде таблицы размером \(r \times c\). Каждая клетка этой таблицы обозначает некоторую страну. Каждая страна принадлежит некоторой религии. Всего существует две религии в этом мире. Одна из религий называется Beingawesomeism, люди этой религии делают добрые поступки, чтобы быть хорошими. Другая религия называется Pushingittoofarism, люди этой религии совершают убийства, чтобы быть плохими.

На самом деле вы не абсолютно всемогущи. У вас есть только одна сила, которую вы можете применить бесконечное число раз! Ваша сила позволяет вам посылать миссионерские группы. Когда миссионерская группа из определенной страны, назовем ее \(a\), приходит в другую страну \(b\), она меняет религию страны \(b\) на религию страны \(a\).

Силу можно использовать следующим образом:

  • Вы выбираете горизонтальную полоску \(1 \times x\) или вертикальную полоску \(x \times 1\) внутри таблицы. Вы можете выбирать любое значение \(x\);
  • Вы выбираете направление \(d\). Если вы выбрали горизонтальную полоску, вы можете выбрать направления СЕВЕР или ЮГ. Если вы выбрали вертикальную полоску, вы можете выбрать направления ВОСТОК или ЗАПАД;
  • Вы выбираете количество шагов \(s\);
  • Вы командуете каждой стране находящейся внутри выбранной полоски послать миссионерскую группу, которая пройдет \(s\) шагов в направлении \(d\). На каждом шаге, она посетит и возможно поменяет религию (способом описанным ранее) у всех \(s\) стран на своем пути;
  • параметры \(x\), \(d\), \(s\) можно выбирать такими, чтобы никакая миссионерская группа не вышла за пределы таблицы.

Следующая картинка показывает один возможный способ использования силы. Здесь символ A обозначает страну с религией Beingawesomeism и символ P обозначает страну с религией Pushingittoofarism. Здесь мы выбрали горизонтальную полоску \(1 \times 4\), направление СЕВЕР и количество шагов \(s = 2\).

Вы существо, которое верит в свободную волю каждого человека. Однако, вы хотите немедленно приостановить убийства. Таким образом вы решили использовать силу и попробовать сделать Beingawesomeism религией всех стран.

Какое минимальное количество применений силы требуется, чтобы сделать религией каждой страны Beingawesomeism?

Если это сделать невозможно, вы должны признать свой провал и сообщить об этом.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 2\cdot 10^4\)), количество тестовых случаев. В следующих строках находится описание тестовых случаев.

Первая строка каждого тестового случая содержит два целых числа \(r\) и \(c\), обозначающие размеры таблицы (\(1 \le r, c \le 60\)). Следующие \(r\) строк содержат по \(c\) символов, описывающих религии стран. \(j\)-й символ в \(i\)-й строке описывает религию страны в строке \(i\) и столбце \(j\). При этом:

  • символ «A» означает, что религия Beingawesomeism;
  • символ «P» означает, что религия Pushingittoofarism.

Гарантируется, что все символы таблицы это «A» или «P». Гарантируется, что сумма \(r \cdot c\) по всем тестовым случаям не превосходит \(3 \cdot 10^6\).

Выходные данные

Для каждого тестового случая, выведите единственную строку, содержащую минимальное возможное количество использований силы нужное, чтобы сделать Beingawesomeism религией во всех странах. Если сделать Beingawesomeism религией во всех странах невозможно, выведите строку «MORTAL» (без кавычек).

Примечание

В первом тестовом случае можно добиться требуемого за два применения силы.

Первое использование:

Второе использование:

Во втором тестовом случае можно добиться требуемого за одно применение силы.

В третьем тестовом случае невозможно сделать религией всех стран Beingawesomeism, поэтому ответ «MORTAL».

E. Потери Кирхгофа

математика *2900

Ваш друг Кирхгоф был шокирован текущим состоянием в дизайне электрических схем.

«Боже мой! Что не так с этой областью? Все эти цепи неэффективны! Есть столько возможностей для улучшения. Эти цепи имеют слишком большое полное сопротивление. Почему они сделаны таким образом? Это просто вызывает массовую потерю резисторов! Вся их область могла бы сэкономить так много денег, если бы они просто максимизировали потенциал своих цепей. Почему они не могут просто попробовать альтернативные идеи? Это абсолютно отвратительно» сказал он.

Он очень недоволен ситуацией, но даже после стольких жалоб он все еще не имеет возможности напрямую что-то изменить.

Частота его протестов по поводу электротехники вам надоела, поэтому вы решили взять на себя ответственность и помочь ему самостоятельно. Вы планируете создать программу, которая будет оптимизировать схемы, не меняя при этом схему и сопротивление.

Цепь имеет два конца и соотносится с некоторым параметром \(R\) для этой цепи, который называется сопротивлением.

Цепи, которые мы будем рассматривать будут получены из резисторов. Несколько цепей, среди которых могут быть резисторы, можно соединить вместе последовательно или параллельно, образуя более сложную цепь. Приведенная картинка изображает последовательное и параллельное соединения.

По правилам вашего друга Киргхофа сопротивление может быть легко вычислено при соединении цепей в более сложную цепь следующим способом:

  • Когда соединяется \(k\) цепей последовательно с сопротивлениями \(R_1, R_2, \ldots, R_k\), тогда сопротивление \(R\) получившейся цепи будет суммой сопротивлений составляющих ее цепей \(\)R = R_1 + R_2 + \ldots + R_k.\(\)

  • Когда соединяется \(k\) цепей параллельно с сопротивлениями \(R_1, R_2, \ldots, R_k\), тогда сопротивление \(R\) получившейся цепи будет получаться из следующего соотношения на \(R\) \(\)\frac{1}{R} = \frac{1}{R_1} + \frac{1}{R_2} + \ldots + \frac{1}{R_k},\(\) если все \(R_i > 0\); если хотя бы одно из \(R_i = 0\), тогда сопротивление получившейся цепи получается равным \(R = 0\).

Цепи будут представлены как строки. Резисторы представляются символом звездочки «*». Для более сложных формул, обозначим строки \(s_1, s_2, \ldots, s_k\), которые представляют \(k \ge 2\) цепей. Тогда

  • строка «(\(s_1\) S \(s_2\) S \(\ldots\) S \(s_k\))» представляет их последовательное соединение;
  • строка «(\(s_1\) P \(s_2\) P \(\ldots\) P \(s_k\))» представляет их параллельное соединение.

Например, строка «(* P (* S *) P *)» представляет такую цепь:

Дана цепь. Ваша задача сопоставить сопротивления всем резисторам, так чтобы были выполнены следующие требования:

  • Каждому резистору сопоставлено неотрицательное целое сопротивление;
  • Сопротивление всей цепи равно \(r\);
  • Сумма сопротивлений всех резисторов минимально возможная.

Если в схеме есть \(n\) резисторов, то вам нужно найти список \(r_1, r_2, \ldots, r_n\) (\(0 \le r_i\), \(r_i\) целое число), где \(r_i\) это сопротивление сопоставленное \(i\)-у резистору в строке (слева направо), представляющей данную цепь. Если сделать сопоставление, в котором все условия выполнены невозможно, то сообщите об этом.

Если это сделать возможно, гарантируется, что минимальная сумма сопротивлений всех резисторов не превосходит \(10^{18}\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 32000\)), количество тестовых случаев. В следующих строках находится описание тестовых случаев.

Для каждого тестового случая в единственной строке находится целое число \(r\) (\(1 \le r \le 10^6\)), пробел а затем строка, которая представляет некоторую цепь. Гарантируется, что эта строка корректна по определениям из условия задачи и действительно представляет некоторую цепь. Количество резисторов (символов равных «*») не меньше, чем \(1\) и не больше, чем \(80000\).

Гарантируется что суммарное количество резисторов по всем тестовым случаям не превосходит \(320000\).

Выходные данные

Для каждого тестового случая выведите ответ:

  • Если возможно получить сопротивление данной цепи, равное \(r\), выведите «REVOLTING» (без кавычек) и затем \(n\) неотрицательных целых чисел \(r_1, r_2, \ldots, r_n\) — сопротивления сопоставленные резисторам. Здесь \(n\) обозначает количество резисторов в цепи.

    Если существует несколько возможных сопоставлений с минимальной суммой сопротивлений резисторов, вы можете найти любое из них;

  • Если это невозможно выведите единственную строку: «LOSS» (без кавычек).
Примечание

Эта картинка иллюстрирует третий тестовый случай:

Здесь сумма сопротивлений всех резисторов равна \(2 + 1 + 1 = 4\) и можно показать, что она минимально возможная. Обратите внимание, что существуют другие возможные способы достичь эту минимальную сумму.

F. Межгалактическая головоломка

Комбинаторика Конструктив математика *3400

Вы межгалактический хирург, и у вас есть инопланетный пациент. Для целей этой задачи мы будем моделировать тело этого пациента, используя прямоугольную сетку размером \(2 \times (2k + 1)\). Инопланетянин имеет \(4k + 1\) различных органов, пронумерованных целыми числами от \(1\) до \(4k + 1\).

У здоровых инопланетян органы устроены особым образом. Например, вот как будут расположены органы здорового инопланетянина, если смотреть сверху, для \(k = 4\):

Здесь E обозначает пустое место.

В общем случае у здорового инопланетянина первая строка содержит органы от \(1\) до \(2k + 1\) (в порядке слева направо) и вторая строка содержит органы от \(2k + 2\) до \(4k + 1\) (в порядке слева направо) и пустое место после этого, в конце второй строки.

Органы вашего пациента целы, и находятся внутри его тела, но они каким-то образом перемешались! Ваша задача, как межгалактического хирурга, состоит в том, чтобы вернуть все органы свои места. Все органы пришельца должны находиться в его теле в течение всей процедуры. Это означает, что в любой момент времени во время процедуры есть ровно одна ячейка (в сетке), которая пуста. Кроме того, вы можете перемещать органы только одним из следующих способов:

  • Вы можете поменять пустую позицию E с любым органом непосредственно слева или справа от нее (если они существуют). Вы делаете это, перемещая рассматриваемый орган в пустое место;
  • Вы можете поменять пустую позицию E с любым органом непосредственно сверху или снизу от нее (если они существуют). Это можно сделать только если пустая позиция в самой левой колонке, самой правой колонке или центральной колонке. Аналогично вы перемещаете рассматриваемый орган в пустое место.

Вашей задачей является получить последовательность шагов которые вы должны сделать при операции, чтобы вернуть все \(4k + 1\) органов пациента на правильные места. Если это сделать невозможно, вы должны сообщить об этом.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 4\)), количество тестовых случаев. В следующих строках находится описание тестовых случаев.

Каждый тестовый случай содержит три строки. Первая строка содержит единственное целое число \(k\) (\(1 \le k \le 15\)), которое задает размер сетки. Затем следует две строки. Каждая из них содержит \(2k + 1\) целое число или символ E. Они описывают первую и вторую строку органов, соответственно. Гарантируется, что все \(4k + 1\) органов присутствуют и также был ровно один символ E.

Выходные данные

Для каждого тестового случая выведите сначала строку, содержащую:

  • SURGERY COMPLETE если возможно вернуть все органы на изначальные места по правилам;
  • SURGERY FAILED если это невозможно.

Если было невозможно, то это была единственная строка вывода для этого тестового случая. Если это возможно, выведите строку, описывающую последовательность ходов, чтобы вернуть все органы на изначальные места.

Строкой ходов (возможно пустой) является строка из символов u, d, l или r, обозначающие действия замены пустой позиции с органом непосредственно сверху, снизу, слева или справа, соответсвенно. Выведите последовательность ходов в следующей строке в этом формате.

Для удобства, вы можете использовать сокращения для уменьшения размера вывода. Вы можете использовать большие латинские буквы как сокращения последовательности команд. Например, вы можете использовать T для представления строки lddrr. Эти сокращения могут использоваться внутри других сокращений! Например, вы можете использовать E для того, чтобы обозначить TruT, и так далее.

Вы можете использовать любое количество больших латинских букв (включая ноль) как сокращения. Единственные требования это:

  • Суммарная длина выведенных строк для одного тестового случая не превосходит \(10^4\);
  • Не должно быть циклов на сокращениях, которые достижимы из главной последовательности;
  • Итоговая последовательность конечна после раскрытия всех замен. Заметьте, что итоговая последовательность (после раскрытия) может быть длиннее чем \(10^4\), единственное ограничение это конечность.

Например, если T = lddrr, E = TruT и R = rrr, тогда TurTlER раскроется в:

  • TurTlER
  • lddrrurTlER
  • lddrrurlddrrlER
  • lddrrurlddrrlTruTR
  • lddrrurlddrrllddrrruTR
  • lddrrurlddrrllddrrrulddrrR
  • lddrrurlddrrllddrrrulddrrrrr

Для того, чтобы использовать сокращение выведите их по одному в строке как большой латинский символ, затем пробел, затем строка, которую сокращает этот символ. Вы можете выводить сокращения в любом порядке. После этого вы должны вывести строку содержащую слово DONE.

Замечание: вам нужно вывести DONE даже если вы не собираетесь использовать сокращения.

Ваша последовательность не обязана получиться кратчайшей. Любая подходящая последовательность перемещений (удовлетворяющая всем ограничениям) будет принята.

Примечание

Так три сокращения выглядят в первом тестовом случае:

  • R = SrS
  • S = rr
  • I = lldll

Тогда последовательность команд IR раскроется в:

  • IR
  • lldllR
  • lldllSrS
  • lldllrrrS
  • lldllrrrrr

A. Абонент временно недоступен

математика реализация *900

Поликарп живет на координатной оси \(Ox\) и путешествует из точки \(x=a\) в \(x=b\). Он двигается равномерно прямолинейно со скоростью одна единица расстояния в минуту.

На оси \(Ox\) в точке \(x=c\) находится базовая станция оператора сотовой связи. Известно, что радиус её покрытия составляет \(r\). Таким образом, если абонент находится на расстоянии меньшем или равном \(r\) от точки \(x=c\), то он находится в зоне покрытия сети, иначе — нет. Базовая станция может находится как на пути следования Поликарпа, так и вне его.

Выведите время в минутах, в течение которого Поликарп не будет находится в зоне покрытия сети, при прямолинейном равномерном движении из \(x=a\) в \(x=b\). Его скорость движения — одна единица расстояния в минуту.

Входные данные

В первой строке записано положительное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее записаны \(t\) наборов входных данных.

Описание каждого набора входных данных составляет одну строку, которая содержит четыре целых числа \(a\), \(b\), \(c\) и \(r\) (\(-10^8 \le a,b,c \le 10^8\), \(0 \le r \le 10^8\)) — координаты начальной и конечной точки пути, базовой станции и её радиус покрытия, соответственно.

Любые из чисел \(a\), \(b\) и \(c\) могут совпадать (как любая пара, так и даже все три числа). Базовая станция может находится как на пути следования Поликарпа, так и вне его.

Выходные данные

Выведите \(t\) чисел — ответы на заданные наборы входных данных в порядке их записи в тесте. Каждый ответ является целым числом — количество минут, в течение которых Поликарп будет недоступен по сотовому телефону во время своего движения.

Примечание

Следующая картинка иллюстрирует первый набор входных данных примера.

Поликарп идёт из \(1\) в \(10\). Желтая область показывает зону покрытия вышки радиуса покрытия \(1\), которая расположена в точке \(7\). Зеленая область показывает ту часть пути, когда Поликарп находится вне зоны покрытия.

A. Минуты до Нового года

математика *800

Новый год уже на подходе и вы настолько взволнованы, что хотите узнать, сколько минут до него осталось. Вы знаете, что сейчас часы показывают время «\(h\) часов, \(m\) минут», где \(0 \le hh < 24\) и \(0 \le mm < 60\).

Ваша задача — найти количество минут до Нового года! Вы знаете, что Новый год наступит, когда часы покажут \(0\) часов и \(0\) минут.

Вам необходимо ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1439\)) — количество наборов входных данных.

Следующие \(t\) строк содержат наборы входных данных: \(i\)-я строка содержит время в виде двух целых чисел \(h\) и \(m\) (\(0 \le h < 24\), \(0 \le m < 60\)). Гарантируется, что это время не равно полуночи, то есть одновременно не могут выполняться два условия \(h=0\) и \(m=0\). Гарантируется, что \(h\) и \(m\) заданы без лидирующих нулей.

Выходные данные

Выведите ответ на каждый набор входных данных — количество минут до Нового года.

Примечание

Ответ на первый набор входных данных:

B. Разделение конфет

математика *900

У Деда Мороза есть \(n\) конфет и он хочет подарить их \(k\) детям. Он хочет разделить как можно больше конфет среди всех \(k\) детей. Санта не может разделять одну конфету на части, но он может не использовать некоторые конфеты вообще.

Пусть ребенок, который получил минимальное количество конфет, получил ровно \(a\) конфет, а ребенок, который получил максимальное количество конфет, получил \(b\) конфет. Тогда Дед Мороз будет доволен, если оба следующих условия выполняются одновременно:

  • \(b - a \le 1\) (это значит, что \(b = a\) или \(b = a + 1\));
  • количество детей, кто имеет \(a+1\) конфету (заметьте, что \(a+1\) не обязательно равно \(b\)) не превосходит \(\lfloor\frac{k}{2}\rfloor\) (меньше либо равно \(\lfloor\frac{k}{2}\rfloor\)).

Запись \(\lfloor\frac{k}{2}\rfloor\) означает \(k\) делённое на \(2\) и округлённое вниз до ближайшего целого числа. Например, если \(k=5\), то \(\lfloor\frac{k}{2}\rfloor=\lfloor\frac{5}{2}\rfloor=2\).

Ваша задача — найти максимальное количество конфет, которые Дед Мороз сможет дать детям таким образом, чтобы он был доволен.

Вам необходимо ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных.

Следующие \(t\) строк описывают наборы входных данных. \(i\)-й набор входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 10^9\)) — количество конфет и количество детей.

Выходные данные

Выведите ответ на каждый набор входных данных — максимальное количество конфет, которые Дед Мороз сможет дать детям таким образом, чтобы он был доволен.

Примечание

В первом наборе входных данных Дед Мороз может дать \(3\) и \(2\) конфеты детям. Здесь \(a=2, b=3,a+1=3\).

Во втором наборе входных данных Дед Мороз может дать \(5, 5, 4\) и \(4\) конфеты. Здесь \(a=4,b=5,a+1=5\). Ответ не может быть больше, потому что тогда количество детей с \(5\) конфетами будет равно \(3\).

В третьем наборе входных данных Дед Мороз может распределить конфеты следующим образом: \([1, 2, 2, 1, 1, 2, 1]\). Здесь \(a=1,b=2,a+1=2\). Он не может распределить две оставшиеся конфеты таким образом, чтобы он остался доволен.

В четвертом наборе входных данных Дед Мороз может распределить конфеты следующим образом: \([3, 3]\). Здесь \(a=3, b=3, a+1=4\). Дед Мороз распределил все \(6\) конфет.

C. Друзья и подарки

Конструктив математика Структуры данных *1500

\(n\) друзей хотят подарить друг другу подарки на Новый год. Каждый друг должен подарить ровно один подарок и получить ровно один подарок. Друг не может подарить подарок самому себе.

Для каждого друга известно значение \(f_i\): оно или равно \(f_i = 0\), если \(i\)-й друг не знает, кому он хочет подарить подарок, или равно \(1 \le f_i \le n\), если \(i\)-й друг хочет подарить подарок другу \(f_i\).

Вы хотите заполнить неизвестные значения (\(f_i = 0\)) таким образом, чтобы каждый друг подарил ровно один подарок и получил ровно один подарок, а также не было друга, который дарит подарок сам себе. Гарантируется, что изначальная информация не противоречива.

Если существует несколько возможных ответов, выведите любой.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество друзей.

Вторая строка входных данных содержит \(n\) целых чисел \(f_1, f_2, \dots, f_n\) (\(0 \le f_i \le n\), \(f_i \ne i\), все \(f_i \ne 0\) различны), где \(f_i\) или равно \(f_i = 0\), если \(i\)-й друг не знает, кому он хочет подарить подарок, или равно \(1 \le f_i \le n\), если \(i\)-й друг хочет подарить подарок другу \(f_i\). Также гарантируется, что есть хотя бы два значения \(f_i = 0\).

Выходные данные

Выведите \(n\) целых чисел \(nf_1, nf_2, \dots, nf_n\), где \(nf_i\) должно быть равно \(f_i\), если \(f_i \ne 0\), или номеру друга, которому \(i\)-й друг хочет подарить подарок. Все значения \(nf_i\) должны быть различны, \(nf_i\) не может быть равно \(i\). Каждый друг должен подарить ровно один подарок и получить ровно один подарок, а также не должно быть друга, который дарит подарок сам себе.

Если существует несколько возможных ответов, выведите любой.

C. Новый год и перестановка

Комбинаторика математика *1600

Напомним, что перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Последовательность \(a\) является подотрезком \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца. Обозначим подотрезок как \([l, r]\), где \(l, r\) — целые числа и \(1 \le l \le r \le n\). Это обозначает подотрезок, у которого убрали \(l-1\) элементов слева и \(n-r\) справа.

Для перестановки \(p_1, p_2, \ldots, p_n\) назовём рамочным подотрезком такой подотрезок индексов \([l,r]\), в котором \(\max\{p_l, p_{l+1}, \dots, p_r\} - \min\{p_l, p_{l+1}, \dots, p_r\} = r - l\). Например, у перестановки \((6, 7, 1, 8, 5, 3, 2, 4)\) некоторые из рамочных подотрезков: \([1, 2], [5, 8], [6, 7], [3, 3], [8, 8]\). В частности, подотрезок \([i,i]\) всегда является рамочным подотрезком для любого \(i\) от \(1\) до \(n\) включительно.

Для перестановки \(p\) определим счастье перестановки как количество таких пар \((l, r)\), что \(1 \le l \le r \le n\) и \([l, r]\) является рамочным подотрезком. Например, перестановка \([3, 1, 2]\) имеет счастье \(5\): Все подотрезки индексов кроме \([1, 2]\) являются рамочными.

Даны два целых числа \(n\) и \(m\). Джонгвон хочет найти суммарное счастье всех перестановок длины \(n\) по модулю простого числа \(m\). Обратите внимание, что всего существует \(n!\) (факториал \(n\)) различных перестановок длины \(n\).

Входные данные

Входные данные содержат два целых числа \(n\) и \(m\) (\(1 \le n \le 250\,000\), \(10^8 \le m \le 10^9\), \(m\) — простое).

Выходные данные

Выведите \(r\) (\(0 \le r < m\)) — суммарное счастье всех перестановок длины \(n\) по модулю простого числа \(m\).

Примечание

Пусть \(n=3\), тогда рассмотрим все перестановки длиной \(3\):

  • \([1, 2, 3]\), все подотрезки являются рамочными подотрезками. Счастье равно \(6\).
  • \([1, 3, 2]\), все подотрезки, кроме \([1, 2]\), являются рамочными подотрезками. Счастье равно \(5\).
  • \([2, 1, 3]\), все подотрезки, кроме \([2, 3]\), являются рамочными подотрезками. Счастье равно \(5\).
  • \([2, 3, 1]\), все подотрезки, кроме \([2, 3]\), являются рамочными подотрезками. Счастье равно \(5\).
  • \([3, 1, 2]\), все подотрезки, кроме \([1, 2]\), являются рамочными подотрезками. Счастье равно \(5\).
  • \([3, 2, 1]\), все подотрезки являются рамочными подотрезками. Счастье равно \(6\).

Поэтому суммарное счастье равно \(6+5+5+5+5+6 = 32\).

E. Новый год и строительство замком

геометрия Комбинаторика математика сортировки *2500

Любимая видеоигра Кивона теперь проводит новогоднее мероприятие, чтобы мотивировать пользователей! Игра о строительстве и защите замка, поэтому Кивон задумался над следующей загадкой.

В двумерной плоскости у вас есть набор \(s = \{(x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\}\), состоящий из \(n\) различных точек. В множестве \(s\) нет трех точек на одной прямой. Мы можем защитить точку \(p \in s\), построив замок. Замок — это простой четырехугольник (многоугольник с \(4\) вершинами), который строго покрывает точку \(p\) (то есть точка \(p\) строго внутри четырёхугольника).

Кивона интересует количество подмножеств \(s\) из \(4\)-х точек, которые можно использовать для построения замка, защищающего точку \(p\). Обратите внимание, что если одно подмножество может быть соединено более чем одним способом, чтобы покрыть точку, то оно считается только один раз.

Пусть \(f(p)\) будет количеством подмножеств из \(4\)-х точек, которые могут покрыть точку \(p\). Пожалуйста, посчитайте сумму \(f(p)\) по всем точкам \(p \in s\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(5 \le n \le 2\,500\)).

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)), которые обозначают координаты точки.

Гарантируется, что все точки различны и что нет трех коллинеарных точек.

Выходные данные

Выведите сумму \(f(p)\) по всем точкам \(p \in s\).

F. Новый год и социальная сеть

графы Деревья математика Паросочетания Структуры данных *3200

Новая социальная сеть (НСС) от Donghyun содержит \(n\) пользователей с номерами \(1, 2, \ldots, n\). Их сеть представляет собой дерево, поэтому между пользователем существует \(n-1\) прямых соединений. Каждый пользователь может связаться с другим пользователем, используя некоторую последовательность прямых соединений. Мы будем обозначать эту первичную сеть как \(T_1\).

Чтобы предотвратить возможную поломку сервера, Donghyun создал резервную сеть \(T_2\), которая соединяет тех же \(n\) пользователей как дерево. Если система выходит из строя, ровно одно ребро \(e \in T_1\) становится непригодным для использования. В этом случае Donghyun защитит ребро \(e\), выбрав другое ребро \(f \in T_2\), и добавит его в существующую сеть. Это новое ребро должно сделать сеть опять связной.

Donghyun хочет выбрать заменяющее ребро \(f \in T_2\) для максимально возможного количества ребер \(e \in T_1\). Однако, поскольку резервная сеть \(T_2\) является хрупкой, \(f \in T_2\) может быть выбрано в качестве замещающего ребра для не более одного ребра в \(T_1\). С этим ограничением Donghyun хочет защитить как можно больше ребер в \(T_1\).

Формально, пусть \(E(T)\) — множество ребер дерева \(T\). Рассмотрим двудольный граф с двумя долями \(E(T_1)\) и \(E(T_2)\). Для \(e \in E(T_1), f \in E(T_2)\), существует ребро, соединяющее \(\{e, f\}\) тогда и только тогда, когда граф \(T_1 - \{e\} + \{f\}\) — дерево. Вы должны найти максимальное паросочетание в этом двудольном графе.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 250\,000\)) — размер обоих деревьев.

В следующих \(n-1\) строках записано по два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)). Эти два числа обозначают ребро из \(T_1\).

В следующих \(n-1\) строках записано по два целых числа \(c_i\) и \(d_i\) (\(1 \le c_i, d_i \le n\)). Эти два числа обозначают ребро из \(T_2\).

Гарантируется, что оба этих множества ребер — это деревья на \(n\) вершинах.

Выходные данные

В первой строке выведите целое число \(m\) (\(0 \leq m < n\)), размер максимального по размеру паросочетания.

В следующих \(m\) строках выведите по четыре целых числа \(a_i, b_i, c_i, d_i\). Эти четыре целых числа описывают, что ребро \((a_i, b_i)\) из \(T_1\) объединено в пару с ребром \((c_i, d_i)\) из \(T_2\).

Все выведенные ребра должны принадлежать соответствующим деревьям, и все выведенные ребра одного дерева должны быть различными. Если убирают ребро \((a_i, b_i)\) из \(T_1\) и добавляют ребро \((c_i, d_i)\) из \(T_2\), то сеть должна оставаться связной. Порядок выведенных пар и порядок вершин внутри ребер не имеет значения.

Если есть несколько возможных решений, вы можете вывести любое.

A. Мезо играет в Зому

математика *800

Сегодня Мезо решил сыграть в игру. Зома, главный герой в этой игре, изначально находится в позиции \(x = 0\). Мезо посылает \(n\) команд Зоме. Возможны два типа команд:

  • 'L' (Влево) устанавливает позицию \(x: =x - 1\);
  • 'R' (Вправо) устанавливает позицию \(x: =x + 1\).

К сожалению, контроллер Мезо иногда не срабатывает. Некоторые команды отправляются успешно, а некоторые нет. Если команда не отправлена, то позиция \(x\) не меняется, и Мезо просто переходит к следующей команде.

Например, если Мезо отправляет команды «LRLR», тогда возможны следующие исходы (подчеркнутые команды отправлены успешно):

  • «LRLR» — Зома перемещается влево, вправо, опять влево и наконец вправо, заканчивая в позиции \(0\);
  • «LRLR» — ни одна команда не отправлена, поэтому Зома никуда не двигается и заканчивает снова в позиции \(0\);
  • «LRLR» — Зома перемещается влево, затем опять влево и закнчивает в позиции \(-2\).

Мезо не знает заранее, какие команды будут отправлены успешно. Поэтому он хочет узнать, сколько существует различных позиций таких, что Зома может закончить в них.

Входные данные

В первой строке записано одно целое число \(n\) \((1 \le n \le 10^5)\) — количество команд, посылаемых Мезо.

Во второй строке записана строка \(s\) из \(n\) команд, каждая либо 'L' (Влево), либо 'R' (Вправо).

Выходные данные

Выведите одно число — количество различных позиций таких, что Зома может закончить в них.

Примечание

В примере Зома может закончить в любой позиции от \(-2\) до \(2\).

C. Фади и НОК

математика Перебор теория чисел *1400

Сегодня Осама вручил Фади целое число \(X\), а Фади стало интересно, какое минимальное значение может принимать \(max(a, b)\) таких, что \(LCM(a, b)\) равен \(X\). \(a\) и \(b\) должны быть положительными целыми числами.

\(LCM(a, b)\) — это наименьшее положительное целое число, которое делится и на \(a\), и на \(b\). Например, \(LCM(6, 8) = 24\), \(LCM(4, 12) = 12\), \(LCM(2, 3) = 6\).

Разумеется, Фади сразу нашел ответ. Сможете ли вы найти любую такую пару прямо как Фади?

Входные данные

В первой и единственной строке записано одно целое число \(X\) (\(1 \le X \le 10^{12}\)).

Выходные данные

Выведите два целых положительных числа, \(a\) и \(b\), такие, что значение \(max(a, b)\) минимально возможное, а \(LCM(a, b)\) равен \(X\). Если существует несколько возможных пар, то выведите любую из них.

C1. Дурдом (простая версия)

интерактив Конструктив математика Перебор *2400

Эта задача отличается от сложной версии только ограничением на суммарную длину ответов

Это интерактивная задача.

Веня приехал на экскурсию в дурдом, в котором санитары играют с пациентами в следующую игру: санитары загадывают строку \(s\) длины \(n\), состоящую только из строчных букв английского алфавита. Пациент может делать запросы двух типов:

  • ? l r — запросить все подстроки \(s[l..r]\). При этом в ответе все подстроки будут перемешаны, а в каждой из подстрок будут перемешаны буквы.
  • ! s — сделать предположение о загаданной строке. Этот запрос нужно сделать ровно один раз, после него игра завершается. Если строка угадана, то пациент побеждает, а иначе проигрывает.

Пациенту разрешено сделать не более \(3\) запросов первого типа. Чтобы игра была не так утомительна для санитаров, существует следующее ограничение: суммарно на запросы первого типа должно быть возвращено не более \((n+1)^2\) подстрок.

Помогите пациенту выиграть и выбраться из дурдома!

После запроса второго типа ваша программа должна немедленно завершиться. В случае, если ваша программа неверно угадает строку или превысит заданные ограничения на количество запросов или количество возвращенных подстрок, она получит вердикт Неправильный ответ.

Обратите внимание, что в каждом тесте строка фиксирована и не меняется в ходе игры. Иными словами, интерактор не адаптивен.

Входные данные

Первая и единственная строка содержит число \(n\) (\(1 \le n \le 100\)) — длину загадываемой строки.

Протокол взаимодействия

Вы начинаете своё взаимодействие, считав \(n\).

Для того, чтобы задать вопрос о подстроке с \(l\) по \(r\) включительно (\(1 \le l \le r \le n\)) выведите в отдельной строке

? l r

В ответ вы получите все подстроки строки \(s[l..r]\) в случайном порядке, каждую ровно один раз. В каждой из подстрок будут случайным образом перемешаны буквы.

В случае, если вы сделаете некорректный запрос, зададите более \(3\) запросов данного типа, или в результате заданных запросов Вам будет возвращено суммарно более \((n+1)^2\) подстрок, то ваше решение получит вердикт Неправильный ответ.

Для того, чтобы сделать предположение о загаданной строке \(s\) выведите в отдельной строке

! s

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы получили строку - (дефис) в качестве ответа на какой-либо запрос, то вам надо завершить программу штатным образом с кодом возврата 0 (например, сделав exit(0)). Это означает, что интерактор зафиксировал ошибку в протоколе или поведении программы. Если вы не завершите в этом случае программу штатным образом с кодом возврата 0, то можете получить любой неуспешный вердикт.

Формат взломов

Для взломов используйте следующий формат:

В первой строке должно быть единственное число \(n\) (\(1 \le n \le 100\)) — длина загадываемой строки.

Во второй строке выведите строку \(s\) — сама загадываемая строка.

C2. Дурдом (сложная версия)

интерактив Конструктив математика Перебор хэши *2800

Эта задача отличается от простой версии только ограничением на суммарную длину ответов

Это интерактивная задача.

Веня приехал на экскурсию в дурдом, в котором санитары играют с пациентами в следующую игру: санитары загадывают строку \(s\) длины \(n\), состоящую только из строчных букв английского алфавита. Пациент может делать запросы двух типов:

  • ? l r — запросить все подстроки \(s[l..r]\). При этом в ответе все подстроки будут перемешаны, а в каждой из подстрок будут перемешаны буквы.
  • ! s — сделать предположение о загаданной строке. Этот запрос нужно сделать ровно один раз, после него игра завершается. Если строка угадана, то пациент побеждает, а иначе проигрывает.

Пациенту разрешено сделать не более \(3\) запросов первого типа. Чтобы игра была не так утомительна для санитаров, существует следующее ограничение: суммарно на запросы первого типа должно быть возвращено не более \(\left\lceil 0.777(n+1)^2 \right\rceil\) подстрок (\(\lceil x \rceil\) — округление вверх числа \(x\)).

Помогите пациенту выиграть и выбраться из дурдома!

После запроса второго типа ваша программа должна немедленно завершиться. В случае, если ваша программа неверно угадает строку или превысит заданные ограничения на количество запросов или количество возвращенных подстрок, она получит вердикт Неправильный ответ.

Обратите внимание, что в каждом тесте строка фиксирована и не меняется в ходе игры. Иными словами, интерактор не адаптивен.

Входные данные

Первая и единственная строка содержит число \(n\) (\(1 \le n \le 100\)) — длину загадываемой строки.

Протокол взаимодействия

Вы начинаете своё взаимодействие, считав \(n\).

Для того, чтобы задать вопрос о подстроке с \(l\) по \(r\) включительно (\(1 \le l \le r \le n\)) выведите в отдельной строке

? l r

В ответ вы получите все подстроки строки \(s[l..r]\) в случайном порядке, каждую ровно один раз. В каждой из подстрок будут случайным образом перемешаны буквы.

В случае, если вы сделаете некорректный запрос, зададите более \(3\) запросов данного типа, или в результате заданных запросов Вам будет возвращено суммарно более \(\left\lceil 0.777(n+1)^2 \right\rceil\) подстрок, то ваше решение получит вердикт Неправильный ответ.

Для того, чтобы сделать предположение о загаданной строке \(s\) выведите в отдельной строке

! s

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы получили строку - (дефис) в качестве ответа на какой-либо запрос, то вам надо завершить программу штатным образом с кодом возврата 0 (например, сделав exit(0)). Это означает, что интерактор зафиксировал ошибку в протоколе или поведении программы. Если вы не завершите в этом случае программу штатным образом с кодом возврата 0, то можете получить любой неуспешный вердикт.

Формат взломов.

Для взломов используйте следующий формат:

В первой строке должно быть единственное число \(n\) (\(1 \le n \le 100\)) — длина загадываемой строки.

Во второй строке выведите строку \(s\) – сама загадываемая строка.

D. ЛЧК

математика матрицы Структуры данных Теория вероятностей *3100

В Чилляндии построили бесконечно длинный Линейный Чилляндский Коллайдер (ЛЧК). К ЛЧК подсоединены \(n\) труб c координатами \(x_i\). В момент времени 0 из каждой трубки ЛЧК вылетает протон направо с вероятностью \(p_i\) и с вероятностью \((1 - p_i)\) — влево. Протон \(i\) разогнан до скорости \(v_i\). Длительность эксперимента определяется как время до первого столкновения двух протонов. В случае, если столкновений не произойдет, длительность эксперимента полагается равной нулю.

Найдите математическое ожидание длительности эксперимента.

Иллюстрация к первому примеру
Входные данные

Первая строка входных данных содержит одно целое число \(n\) — количество труб (\(1 \le n \le 10^5\)). В следующих \(n\) строках содержится по три целых числа \(x_i\), \(v_i\), \(p_i\) — координата \(i\)-й трубы, скорость \(i\)-го протона, и вероятность вылета \(i\)-го протона вправо в процентах (\(-10^9 \le x_i \le 10^9, 1 \le v \le 10^6, 0 \le p_i \le 100\)). Гарантируется, что все \(x_i\) различны и отсортированы в порядке возрастания.

Выходные данные

Можно показать, что ответ всегда можно представить в виде дроби \(P/Q\), где \(P\) — целое число, а \(Q\) — натуральное число, не кратное \(998\,244\,353\). В таком случае выведите \(P \cdot Q^{-1}\) по модулю \(998\,244\,353\).

F. Гарри Гончар

бпф дп Конструктив математика Перебор реализация *3100

Как известно, чтобы победить лорда Волан-де-Морта, Гарри необходимо сперва уничтожить все крестражи. Последний крестраж лорда Сами-Знаете-кого представляет собой массив \(a\) состоящий из \(n\) целых чисел, который Гарри необходимо уничтожить. Массив считается уничтоженным, если все его элементы равны 0. Чтобы его уничтожить, Гарри может производить два типа операций:

  1. выбрать индекс \(i\) (\(1 \le i \le n\)), целое число \(x\) и вычесть из \(a_i\) число \(x\).
  2. выбрать индексы \(i\) и \(j\) (\(1 \le i, j \le n; i \ne j\)), целое число \(x\) и вычесть из \(a_i\) число \(x\), а из \(a_j\) — число \(x + 1\).

Обратите внимание, что \(x\) может быть произвольным, в том числе и отрицательным.

У Гарри осталось совсем немного времени. Помогите ему и узнайте, какое минимальное число операций с массивом ему придётся совершить, чтобы уничтожить массив и покончить с лордом Волан-де-Мортом!

Входные данные

Первая строка входных данных содержит одно целое число \(n\) — количество элементов в массиве \(a\) (\(1 \le n \le 20\)).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — элементы массива (\(-10^{15} \le a_i \le 10^{15}\)).

Выходные данные

Выведите одно число — минимальное количество действий, за которое Гарри сможет уничтожить массив \(a\).

Примечание

В первом примере можно три раза применить операцию первого типа к массиву.

Во втором примере можно два раза применить операцию второго типа: сначала выбрать \(i = 2, j = 1, x = 4\) и получить массив \((0, -1, -2)\), затем выбрать \(i = 3, j = 2, x = -2\) чтобы уничтожить массив.

В третьем примере ничего делать не надо, так как массив уже состоит из нулей.

A. Дедлайн

Бинарный поиск математика Перебор Тернарный поиск *1100

Адилбеку назначили особый проект. Для Адилбека это означает, что у него есть \(n\) дней, чтобы запустить особую программу и представить полученные результаты. Но есть одна проблема: программе нужно работать \(d\) дней, чтобы посчитать результаты.

К счастью, Адилбек может оптимизировать программу. Если он потратит \(x\) (\(x\) — целое неотрицательное) дней на оптимизацию, то программа станет работать за \(\left\lceil \frac{d}{x + 1} \right\rceil\) дней (\(\left\lceil a \right\rceil\) — это округление вверх: \(\left\lceil 2.4 \right\rceil = 3\), \(\left\lceil 2 \right\rceil = 2\)). Программу не получится оптимизировать, пока она работает, а потому общее количество потраченных Адилбеком дней будет равняться \(x + \left\lceil \frac{d}{x + 1} \right\rceil\).

Успеет ли Адилбек получить результаты за не более, чем \(n\) дней?

Входные данные

В первой строке задано единственное целое число \(T\) (\(1 \le T \le 50\)) — количество наборов входных данных.

В следующих \(T\) строках заданы сами наборы – по одному в строке. Каждая строка содержит два целых числа \(n\) и \(d\) (\(1 \le n \le 10^9\), \(1 \le d \le 10^9\)) — количество дней перед дедлайном и количество дней, за которое отрабатывает программа.

Выходные данные

Выведите \(T\) ответов — по одному на набор входных данных. Для каждого набора выведите YES (регистр не важен), если Адилбек сможет уложиться в \(n\) дней или NO (регистр не важен) в противном случае.

Примечание

В первом наборе, Адилбек решает совсем не оптимизировать программу, так как \(d \le n\).

Во втором наборе, Адилбек может потратить \(1\) день на оптимизацию и программа станет отрабатывать за \(\left\lceil \frac{5}{2} \right\rceil = 3\) дней. Суммарно, он потратит \(4\) дня и уложится в сроки.

В третьем наборе, невозможно уложиться в сроки. Например, если Адилбек потратит \(2\) дня на оптимизацию, то программа все равно будет работать еще \(\left\lceil \frac{11}{2+1} \right\rceil = 4\) дня.

B. Очередная мемная задача

математика *1100

Вам заданы два числа \(A\) и \(B\), посчитайте количество пар \((a, b)\), таких, что \(1 \le a \le A\), \(1 \le b \le B\), и равенство \(a \cdot b + a + b = conc(a, b)\) верно; \(conc(a, b)\) — это операция конкатенации \(a\) и \(b\) (например, \(conc(12, 23) = 1223\), \(conc(100, 11) = 10011\)). Ни \(a\), ни \(b\) не должны содержать лидирующих нулей.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных содержит два числа \(A\) и \(B\) \((1 \le A, B \le 10^9)\).

Выходные данные

На каждый набор входных данных выведите одно число — количество пар \((a, b)\), таких, что \(1 \le a \le A\), \(1 \le b \le B\), и равенство \(a \cdot b + a + b = conc(a, b)\) верно.

Примечание

В пером наборе входных данных есть только одна подходящая пара: \(a = 1\), \(b = 9\) (\(1 + 9 + 1 \cdot 9 = 19\)).

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 (достаточно удалить одну последнюю цифру).

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\) долларов.

A. Коллекционирование монет

математика *800

У Поликарпа есть три сестры: Алиса, Барбара и Серена. Они коллекционируют монеты. Сейчас у Алисы есть \(a\) монет, у Барбары — \(b\) монет и у Серены — \(c\) монет. Недавно Поликарп вернулся из кругосветного путешествия, во время которого приобрел \(n\) монет.

Он хочет распределить все эти \(n\) монет между сестрами так, чтобы после этого количество монет у Алисы было равным количеству монет у Барбары, а также было равным количеству монет у Серены. Другими словами, если Поликарп отдаст \(A\) монет Алисе, \(B\) монет Барбаре и \(C\) монет Серене (\(A+B+C=n\)), то \(a + A = b + B = c + C\). Ваша задача — определить, возможно ли распределить все \(n\) монеты между сестрами способом, описанным выше.

Заметьте, что A, B или C (количество монет, которые Поликарп дает Алисе, Барбаре и Серене соответственно) могут быть равны 0.

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Следующие \(t\) строк описывают наборы входных данных. Каждый набор входных данных начинается с новой строки и состоит из четырех разделенных между собой пробелами целых чисел \(a, b, c\) и \(n\) (\(1 \le a, b, c, n \le 10^8\)) — количество монет у Алисы, количество монет у Барбары, количество монет у Серены и количество монет у Поликарпа.

Выходные данные

Для каждого набора входных данных выведите «YES», если Поликарп может распределить все \(n\) монеты между своими сестрами и «NO» в противном случае.

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\).

B. Бесконечные префиксы

математика Строки *1700

Вам задана строка \(s\) длины \(n\), состоящая только из 0 и 1. Построим бесконечную строку \(t\) как конкатенацию бесконечного числа строк \(s\), или \(t = ssss \dots\) Например, если \(s =\) 10010, то \(t =\) 100101001010010...

Посчитайте количество префиксов \(t\) с балансом равным \(x\). Баланс строки \(q\) равен \(cnt_{0, q} - cnt_{1, q}\), где \(cnt_{0, q}\) — это количество вхождений 0 в \(q\), а \(cnt_{1, q}\) — количество вхождений 1 в \(q\). Количество таких префиксов может быть бесконечно: в таком случае, вы должны определить это.

Префикс — строка, состоящая из нескольких первых букв заданной строки, без изменения их порядка. Пустой префикс тоже является префиксом. Например, у строки «abcd» пять префиксов: пустая строка, «a», «ab», «abc» и «abcd».

Входные данные

В первой строке задано единственное целое число \(T\) (\(1 \le T \le 100\)) — количество наборов входных данных.

В следующих \(2T\) строках заданы описания наборов входных данных — по две строки на набор. В первой строке задано два целых числа \(n\) и \(x\) (\(1 \le n \le 10^5\), \(-10^9 \le x \le 10^9\)) — длина строки \(s\) и желаемый баланс, соответственно.

Во второй строке задана бинарная строка \(s\) (\(|s| = n\), \(s_i \in \{\text{0}, \text{1}\}\)).

Гарантируется, что общая сумма \(n\) не превосходит \(10^5\).

Выходные данные

Выведите \(T\) чисел — по одному на набор входных данных. Для каждого набора выведите количество префиксов или \(-1\), если таких префиксов бесконечное количество.

Примечание

В первом наборе есть 3 хороших префикса строки \(t\): длины \(28\), \(30\) и \(32\).

D. Одинаковые GCD

математика теория чисел *1800

Даны два целых числа \(a\) и \(m\). Посчитайте количество таких целых чисел \(x\), что \(0 \le x < m\) и \(\gcd(a, m) = \gcd(a + x, m)\).

\(\gcd(a, b)\) в данной задаче обозначает наибольший общий делитель \(a\) и \(b\).

Входные данные

В первой строке задано одно целое число \(T\) (\(1 \le T \le 50\)) — количество наборов входных данных.

Следующие \(T\) строк содержат наборы входных данных, по одному в каждой строке. Каждая строка содержит два целых числа \(a\) и \(m\) (\(1 \le a < m \le 10^{10}\)).

Выходные данные

Выведите \(T\) целых чисел — по одному на каждый набор входных данных. Для каждого набора выведите количество подходящих чисел \(x\).

Примечание

В первом наборе входных данных примера возможные значения \(x\) — это \([0, 1, 3, 4, 6, 7]\).

Во втором наборе входных данных единственное возможное значение \(x\) равно \(0\).

A. Массив с нечетной суммой

математика *800

Задан массив \(a\), состоящий из \(n\) целых чисел.

За один ход вы можете выбрать два индекса \(1 \le i, j \le n\) таких, что \(i \ne j\) и присвоить \(a_i := a_j\). Вы можете выполнить такие ходы любое (возможно, нулевое) количество раз. Вы можете выбирать разные индексы в разных операциях. Операция := это операция присвоения (то есть вы выбираете \(i\), \(j\) и заменяете \(a_i\) на \(a_j\)).

Ваша задача — определить, возможно ли получить массив с нечетной (неделящейся на \(2\)) суммой элементов.

Вы должны ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Следующие \(2t\) строк описывают наборы входных данных. Первая строка набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — количество элементов в \(a\). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2000\)), где \(a_i\) — это \(i\)-й элемент \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\) (\(\sum n \le 2000\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него — «YES» (без кавычек) если возможно получить массив с нечетной суммой элементов, и «NO» в противном случае.

B. Покупка еды

математика *900

Мишка хочет купить немного еды в магазине неподалеку. Изначально у него есть \(s\) бурлей на карте.

Мишка может применить следующую операцию некоторое (возможно, нулевое) количество раз: выбрать некоторое целое положительное число \(1 \le x \le s\),купить еду стоимостью ровно \(x\) бурлей и получить \(\lfloor\frac{x}{10}\rfloor\) бурлей в качестве кэшбека (другими словами, Мишка потратит \(x\) бурлей и получит \(\lfloor\frac{x}{10}\rfloor\) обратно). Выражение \(\lfloor\frac{a}{b}\rfloor\) означает, что число \(a\) поделено на \(b\) с округлением вниз.

Гарантируется, что вы всегда можете купить еду, которая стоит \(x\) для любого возможного значения \(x\).

Ваша задача — назвать максимальное количество бурлей, которое Мишка может потратить, если будет совершать покупки оптимально.

Например, если у Мишки есть \(s=19\) бурлей, то максимальное количество бурлей, которое он может потратить, равно \(21\). Сначала он может потратить \(x=10\) бурлей, получить \(1\) бурль в качестве кэшбека. Теперь у него есть \(s=10\) бурлей, таким образом, он может потратить \(x=10\) бурлей, получить \(1\) бурль в качестве кэшбека и потратить его тоже.

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Следующие \(t\) строк описывают наборы входных данных. Каждый набор задан на отдельной строке и состоит из одного целого числа \(s\) (\(1 \le s \le 10^9\)) — количества бурлей, которое изначально есть у Мишки.

Выходные данные

Для каждого набора входных данных выведите ответ на него — максимальное количество бурлей, которое Мишка может потратить, если будет совершать покупки оптимально.

G. M-числа

*особая задача дп математика

Для заданного положительного целого \(m\) положительное число называется \(m\)-числом, если произведение его цифр равно \(m\). Например, начало ряда \(24\)-чисел выглядит следующим образом: \(38\), \(46\), \(64\), \(83\), \(138\), \(146\), \(164\), \(183\), \(226\) ...

Вам задано положительно целое \(m\) и \(k\). Выведите \(k\)-е среди \(m\)-чисел, если все \(m\)-числа отсортировать по возрастанию.

Входные данные

В единственной строке входных данных записаны два целых числа \(m\) и \(k\) (\(2 \le m \le 10^9\); \(1 \le k \le 10^9\)).

Выходные данные

Выведите искомое число — \(k\)-е среди всех \(m\)-чисел, если \(m\)-числа отсортировать по возрастанию. Если ответа не существует, то выведите -1.

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]\) также является верным ответом.

D. Вокруг света

битмаски графы графы Деревья дп Комбинаторика математика поиск в глубину и подобное *3000

Ги-Мануэль и Тома планируют \(144\) кругосветных путешествия.

Вам дан простой взвешенный неориентированный связный граф из \(n\) вершин и \(m\) рёбер со следующим ограничением: не существует простого цикла (т. е. цикла, проходящего через каждую вершину не больше раза) длины больше \(3\), проходящего через вершину \(1\). Стоимостью пути (необязательно простого) в этом графе является XOR весов всех рёбер, входящих в этот путь, причём каждое ребро считается столько, сколько раз через него проходит путь.

Однако, путешествия стоимостью \(0\) их не устраивают.

Вы можете выбрать любое подмножество рёбер, инцидентных вершине \(1\), и удалить их. Сколько существует таких множеств, что при их удалении в полученном графе нет нетривиального цикла (необязательно простого) стоимостью \(0\), проходящего через вершину \(1\)? Цикл называется нетривиальным, если существует ребро, через которое он проходит нечётное количество раз. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 10^5\)) — количество вершин и рёбер в графе. \(i\)-я из следующих \(m\) строк содержит три целых числа \(a_i\), \(b_i\) и \(w_i\) (\(1 \le a_i, b_i \le n, a_i \neq b_i, 0 \le w_i < 32\)) — концы \(i\)-го ребра и его вес. Гарантируется, что в графе нет мультирёбер, граф является связным, и не существует простого цикла длины больше \(3\), проходящего через вершину \(1\).

Выходные данные

В единственной строке выведите ответ по модулю \(10^9+7\).

Примечание

На рисунках представлены графы из примеров. В первом примере в графе нет нетривиальных циклов со стоимостью \(0\), так что мы можем как удалить единственное ребро, инцидентное вершине \(1\), так и не удалять. Во втором примере если мы не удаляем ребро \(1-2\), то в графе будет цикл \(1-2-4-5-2-1\) со стоимостью \(0\); аналогично, если мы не удаляем ребро \(1-3\), то в графе будет цикл \(1-3-2-4-5-2-3-1\) со стоимостью \(0\). Единственный вариант — удалить оба ребра. В третьем примере подходят все подмножества, кроме тех двух, при которых остаются оба ребра \(1-3\) и \(1-4\).

E. Слишком средне...

интерактив математика *3400

Это интерактивная задача.

Мы загадали перестановку \(p_1, p_2, \dots, p_n\) чисел от \(1\) до \(n\), где \(n\) четное. Вы можете угадать ее с помощью следующих запросов:

\(?\) \(k\) \(a_1\) \(a_2\) \(\dots\) \(a_k\).

В ответ, вы узнаете, правда ли, что среднее арифметическое элементов с индексами \(a_1, a_2, \dots, a_k\) является целым числом. Другими словами, вы получите \(1\) если \(\frac{p_{a_1} + p_{a_2} + \dots + p_{a_k}}{k}\) является целым, и \(0\) в противном случае.

Вы должны угадать перестановку. Вы можете задать не более \(18n\) запросов.

Заметим, что перестановки \([p_1, p_2, \dots, p_k]\) и \([n + 1 - p_1, n + 1 - p_2, \dots, n + 1 - p_k]\) неразличимы. Поэтому, гарантируется, что \(p_1 \le \frac{n}{2}\).

Отметим, что \(p\) зафиксирована и не зависит от ваших запросов. Другими словами, интерактор не адаптивен.

Также вы не должны минимизировать количество запросов.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 800\), \(n\) четное).

Протокол взаимодействия

Вы начинаете взаимодействие, считав \(n\).

Чтобы задать вопрос об элементах на позициях \(a_1, a_2, \dots, a_k\), в отдельной строке выведите

\(?\) \(k\) \(a_1\) \(a_2\) ... \(a_k\)

Числа в запросе должны удовлетворять условию \(1 \le a_i \le n\), и все \(a_i\) должны быть различными. Не забудьте сделать операцию 'flush', чтобы получить ответ.

В ответ, вы получите \(1\) если \(\frac{p_{a_1} + p_{a_2} + \dots + p_{a_k}}{k}\) является целым, и \(0\) в противном случае.

В случае, если ваш запрос не соответствует требованиям, или вы задали более \(18n\) запросов, программа выведет \(-1\) и прекратит взаимодействие. Вы получите вердикт Неправильный ответ. Вам нужно завершить работу вашей программы, чтобы не получить другие вердикты.

Когда вы определили перестановку, выведите

\(!\) \(p_1\) \(p_2\) ... \(p_n\)

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат:

Первая строка должна содержать единственное целое число \(n\) (\(2 \le n \le 800\), \(n\) четное).

В следующей строке выведите \(n\) целых чисел \(p_1, p_2, \dots, p_n\) — перестановку чисел от \(1\) до \(n\). \(p_1 \le \frac{n}{2}\) должно выполняться.

A. Числа

математика реализация *1000

Маленький Петя очень любит числа. Недавно он определил, что 123 в системе счисления по основанию 16 состоит из двух цифр: старшая равна 7, а младшая — 11. Следовательно, сумма цифр 123 по основанию 16 равна 18.

Сейчас ему интересно, чему равно среднее арифметическое значение суммы цифр числа A, записанного во всех системах исчисления от 2 до A - 1, включительно.

Все подсчеты следует производить в десятичной системе. Результат нужно вывести в виде несократимой дроби, записанной в десятичной системе исчисления.

Входные данные

На вход дается единственное число A (3 ≤ A ≤ 1000).

Выходные данные

Вывести искомое среднее арифметическое значение в виде несократимой дроби в формате «X/Y», где X — числитель, а Y — знаменатель.

Примечание

В первом примере число 5, записанное в системах исчисления по основаниям от 2 до 4 имеет вид: 101, 12, 11. Суммы цифр равны 2, 3 и 2, соответственно.

A. Ещё раз

математика реализация *800

У Ги-Мануэля и Тома есть массив \(a\) из \(n\) целых чисел [\(a_1, a_2, \dots, a_n\)]. За один шаг они могут прибавить \(1\) к любому элементу массива. Формально, за один шаг они могут выбрать индекс \(i\) (\(1 \le i \le n\)) и присвоить \(a_i := a_i + 1\).

Если сумма или произведение всех элементов массива равны нулю, Ги-Мануэль и Тома не прочь сделать эту операцию ещё раз.

Какое минимальное количество шагов необходимо им сделать, чтобы и сумма и произведение всех элементов массива стали отличными от нуля? Формально, найдите минимальное количество шагов, требуемое, чтобы сделать \(a_1 + a_2 +\) \(\dots\) \(+ a_n \ne 0\) и \(a_1 \cdot a_2 \cdot\) \(\dots\) \(\cdot a_n \ne 0\).

Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 100\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-100 \le a_i \le 100\)) — элементы массива.

Выходные данные

Для каждого наборов входных данных, выведите наименьшее количество шагов требуемое, чтобы сделать сумму и произведение всех элементов массива отличными от нуля.

Примечание

В первом наборе входных данных примера сумма элементов массива равна \(0\). После того, как мы добавим \(1\) к первому элементу, массив будет таким: \([3,-1,-1]\), сумма станет равна \(1\), а произведение станет равно \(3\).

Во втором наборе входных данных примера и сумма и произведение чисел равны \(0\). Если мы добавим \(1\) к второму и третьему элементам, массив будет таким: \([-1,1,1,1]\), сумма станет равна \(2\), а произведение \(-1\).

В третьем наборе входных данных примера и сумма и произведение уже не равны нулю, и мы не должны ничего делать.

В четвёртом наборе входных данных примера, дважды добавив \(1\) к первому элементу, получим массив \([2,-2,1]\), его сумма равна \(1\), а произведение равно \(-4\).

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» и она была подробно разобрана в качестве примера в тексте условия задачи.

B. Национальный проект

математика *1400

Вашей компании выдали проект по укладке нового асфальта на трассе длиной \(n\). Вы знаете, что каждый день вы можете либо заменить асфальт на одной единице трассы, либо не заменять.

Перерывы в укладке обусловлены климатом. Климат в вашем регионе периодический: \(g\) дней погода хорошая, и если вы уложите асфальт в эти дни, то покрытие получится высокого качества; далее идут \(b\) дней плохой погоды, и если вы уложите асфальт в эти дни, то покрытие получится низкого качества; далее снова идут \(g\) хороших дней, \(b\) плохих и так далее.

Вы можете быть уверены, что работы по ремонту трассы начнутся в начале хорошего сезона, то есть дни \(1, 2, \dots, g\) — хорошие.

Вас не сильно волнует качество трассы, а потому вы просто хотите, чтобы хотя бы половина трассы имела покрытие высокого качества. Например: если \(n = 5\), то хотя бы \(3\) единицы трассы должны быть высокого качества; если \(n = 4\), то хотя бы \(2\) единицы должны быть высокого качества.

Какое минимальное количество дней необходимо, чтобы отремонтировать всю трассу?

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных.

В следующих \(T\) строках заданы сами наборы — по одному в строке. В каждой строке задано три целых числа \(n\), \(g\) и \(b\) (\(1 \le n, g, b \le 10^9\)) — длина трассы и количество хороших и плохих дней соответственно.

Выходные данные

Выведите \(T\) целых чисел — по одному на набор. Для каждого набора выведите минимальное количество дней, необходимое для ремонта всей трассы, как минимум половина которой должна быть высокого качества.

Примечание

В первом наборе входных данных вы можете укладывать асфальт каждый день, так как \(1, 3, 5\) — хорошие дни.

Во втором наборе вы также можете укладывать асфальт каждый день, так как дни \(1\)-\(8\) — хорошие.

A. Два кролика

математика *800

Устав от участия в раундах на Codeforces, Гильдонг решил отдохнуть в парке. Он присел на лавку, и заметил двух кроликов, прыгающих поблизости.

Он заметил, что два кролика прыгали навстречу друг другу. Позиции двух кроликов можно задать целочисленными координатами на горизонтальной прямой. Более высокий кролик изначально находится в точке с координатой \(x\), а более низкий — в точке с координатой \(y\) (\(x \lt y\)). Каждую секунду, каждый кролик прыгает на другую позицию. Более высокий кролик прыгает в положительном направлении на \(a\), а более низкий прыгает в отрицательном направлении на \(b\).

Например, если \(x=0\), \(y=10\), \(a=2\), и \(b=3\). После \(1\)-й секунды, кролики будут в точках \(2\) и \(7\). После \(2\)-й секунды, оба кролика будет в точке \(4\).

Гильдонг задумался: Будут ли когда-то два кролика в одной точке в один момент времени? Если будут, то через какое время это произойдет? Помогите ему найти такую секунду, после которой оба кролика будут в одной точке.

Входные данные

Каждый тест состоит из одного или более наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 1000\)).

Каждый набор входных данных состоит из ровно одной строки. Строка состоит из четырех целых чисел \(x\), \(y\), \(a\), \(b\) (\(0 \le x \lt y \le 10^9\), \(1 \le a,b \le 10^9\)) — текущая позиция более высокого кролика, текущая позиция более низкого кролика, расстояние прыжка более высокого прыжка, расстояние прыжка более низкого кролика, соответственно.

Выходные данные

Для каждого набора входных данных, выведите одно целое число — количество секунд, через которое два кролика окажутся в одной точке.

Если два кролика никогда не окажутся в одной точке одновременно, выведите \(-1\).

Примечание

Первый набор входных данных примера разобран в условии.

Во втором наборе входных данных примера кролики будут в точках \(3\) и \(7\) на секунде \(1\). На секунде \(2\), они будут в точках \(6\) и \(4\), и можно заметить, что они никогда не будут в одной точке, потому что расстояние между ними будет только увеличиваться.

C. Невозможное вычисление

Комбинаторика математика Перебор теория чисел *1600

Чтобы стать королем Codeforces, Курони должен решить следующую задачу.

Ему даны \(n\) чисел \(a_1, a_2, \dots, a_n\). Помогите Курони посчитать \(\prod_{1\le i<j\le n} |a_i - a_j|\). Так как ответ может быть очень большим, посчитайте его по модулю \(m\).

Если вы не знакомы с короткой формой записи, \(\prod_{1\le i<j\le n} |a_i - a_j|\) равно \(|a_1 - a_2|\cdot|a_1 - a_3|\cdot\) \(\dots\) \(\cdot|a_1 - a_n|\cdot|a_2 - a_3|\cdot|a_2 - a_4|\cdot\) \(\dots\) \(\cdot|a_2 - a_n| \cdot\) \(\dots\) \(\cdot |a_{n-1} - a_n|\). Другими словами, это произведение \(|a_i - a_j|\) по всем \(1\le i < j \le n\).

Входные данные

Первая строка содержит два целых числа \(n\), \(m\) (\(2\le n \le 2\cdot 10^5\), \(1\le m \le 1000\)) — количество чисел и модуль.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)).

Выходные данные

Выведите единственное число — \(\prod_{1\le i<j\le n} |a_i - a_j| \bmod m\).

Примечание

В первом примере, \(|8 - 5| = 3 \equiv 3 \bmod 10\).

Во втором примере, \(|1 - 4|\cdot|1 - 5|\cdot|4 - 5| = 3\cdot 4 \cdot 1 = 12 \equiv 0 \bmod 12\).

В третьем примере, \(|1 - 4|\cdot|1 - 9|\cdot|4 - 9| = 3 \cdot 8 \cdot 5 = 120 \equiv 1 \bmod 7\).

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)\)

F. Курони и наказание

математика Теория вероятностей теория чисел *2500

Курони очень зол на других авторов за использование его в качестве темы! В качестве наказания он заставил их решить следующую задачу:

У вас есть массив \(a\), состоящий из \(n\) целых положительных чисел. Операция состоит из выбора элемента и добавления к нему \(1\) или вычитания из него \(1\), чтобы элемент остался положительным. Назовем массив хорошим, если наибольший общий делитель всех его элементов не равен \(1\). Найдите минимальное количество операций, необходимых, чтобы сделать массив хорошим.

Не в силах сравниться с интеллектом Курони, авторы не смогли решить задачу. Помоги им сбежать от наказания Курони!

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\))  — количество чисел в массиве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\). (\(1 \le a_i \le 10^{12}\))  — элементы массива.

Выходные данные

Выведите одно целое число  — минимальное количество операций, необходимых, чтобы сделать массив хорошим.

Примечание

В первом примере первый массив уже хороший, так как наибольший общий делитель всех элементов равен \(2\).

Во втором примере мы можем применить следующие операции:

  • Добавьте \(1\) ко второму элементу, сделав его равным \(9\).
  • Вычтите \(1\) из третьего элемента, сделав его равным \(6\).
  • Добавьте \(1\) к пятому элементу, сделав его равным \(2\).
  • Добавьте \(1\) к пятому элементу снова, сделав его равным \(3\).

Наибольший общий делитель всех элементов будет равен \(3\), поэтому массив будет хорошим. Можно показать, что никакая последовательность из трех или менее операций не может сделать массив хорошим.

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)\).

C. Корова и сообщение

дп математика Перебор Строки *1500

Корова Бесси только что перехватила сообщение, которое Фермер Джон отправил Бургер Куин! Бесси уверена, что в нем скрыто секретное сообщение.

Сообщение представляет из себя строку \(s\), состоящую из строчных букв латинского алфавита. Бесси считает, что строка \(t\) скрыта в строке \(s\), если \(t\) является подпоследовательностью \(s\), индексы которой формируют арифметическую прогрессию. Например, строка aab скрыта в строке aaabb, потому что она получена в индексах \(1\), \(3\) и \(5\), которые формируют арифметическую прогрессию с шагом \(2\). Бесси считает, что любая скрытая строка, которая имеет наибольшее количество вхождений и является скрытым сообщением. Два вхождения подпоследовательности \(S\) различны, если различаются их множества индексов. Помогите Бесси узнать количество вхождений скрытого сообщения!

Например, в строке aaabb, a скрыта \(3\) раза, b скрыта \(2\) раза, ab скрыта \(6\) раз, aa скрыта \(3\) раза, bb скрыта \(1\) раз, aab скрыта \(2\) раза, aaa скрыта \(1\) раз, abb скрыта \(1\) раз, aaab скрыта \(1\) раз, aabb скрыта \(1\) раз и aaabb скрыта \(1\) раз. Количество вхождений скрытого сообщения равно \(6\).

Входные данные

В первой строке задана строка \(s\), состоящая из строчных букв латинского алфавита (\(1 \le |s| \le 10^5\)) — текст, который перехватила Бесси.

Выходные данные

Выведите единственное число  — количество вхождений секретного сообщения.

Примечание

В первом примере скрыты следующие строки (с соответствующими множествами индексов):

  • a встречается как \((1)\), \((2)\), \((3)\);
  • b встречается как \((4)\), \((5)\);
  • ab встречается как \((1,4)\), \((1,5)\), \((2,4)\), \((2,5)\), \((3,4)\), \((3,5)\);
  • aa встречается как \((1,2)\), \((1,3)\), \((2,3)\);
  • bb встречается как \((4,5)\);
  • aab встречается как \((1,3,5)\), \((2,3,4)\);
  • aaa встречается как at \((1,2,3)\)
  • abb встречается как \((3,4,5)\)
  • aaab встречается как \((1,2,3,4)\);
  • aabb встречается как \((2,3,4,5)\);
  • aaabb встречается как \((1,2,3,4,5)\);
Заметим, что все множества индексов являются арифметическими прогрессиями.

Во втором примере, ни одна скрытая строка не встречается более одного раза.

В третьем примере, скрытым сообщением является одна буква l.

E. Корова и угощения

Бинарный поиск дп жадные алгоритмы Комбинаторика математика реализация *2500

После удачного года по количеству удоя, Фермер Джон решил наградить своих коров их любимым угощением: вкусной травой!

На поле располагается ряд из \(n\) единиц травы, каждая единица соответствующего уровня сладости \(s_i\). У Фермера Джона \(m\) коров, каждая обладает своим любимым уровнем сладости \(f_i\) и уровнем голода \(h_i\). Фермер Джон хочет выбрать непересекающиеся подмножества коров, чтобы разместить их с левой и правой стороны ряда травы. Нет никаких ограничений на количество коров с каждой стороны. Поведение коров описывается следующим образом:

  • Коровы с левой и правой сторон начинают кормиться по очереди в порядке, выбранном Фермером Джоном.
  • Кормежка коровы выглядит следующим образом: корова начинает двигаться к противоположному концу ряда, не меняя своего направления, и поедает траву своего любимого уровня сладости, пока не съест \(h_i\) единиц.
  • В тот момент, как корова съест \(h_i\) травы, она ложится спать прямо там, мешая проходу других коров с обоих сторон.
  • Если же корова встречает на пути другую спящую корову или достигает конца ряда травы, она расстраивается. Фермер Джон ни при каких условиях не хочет расстраивать своих коров.

Заметим, что трава не отрастает обратно. Также, чтобы не расстраивать корову, Фермер Джон может просто не выбрать каких-то коров.

Удивительно, но Фермер Джон решил, что спящие коровы — наиболее удовлетворенные. Если Фермер Джон будет выбирать порядок оптимально, то какое наибольшее количество спящих коров он сможет получить, и сколько способов существует выбрать два подмножества так, чтобы получить данное максимальное количество спящих коров (по модулю \(10^9+7\))? Порядок, в котором Фермер Джон посылает коров кормиться не важен пока ни одна корова не расстроена.

Входные данные

В первой строке задано два целых числа \(n\) и \(m\) (\(1 \le n \le 5000\), \(1 \le m \le 5000\))  — количество единиц травы в ряду и количество коров.

Во второй строке задано \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) (\(1 \le s_i \le n\))  — уровни сладости травы.

В \(i\)-й из следующих \(m\) строк задано два целых числа \(f_i\) и \(h_i\) (\(1 \le f_i, h_i \le n\))  — любимый уровень сладости и уровень голода \(i\)-й коровы. Никакие две коровы не имеют одинаковый любимый уровень сладости и уровень голода одновременно.

Выходные данные

Выведите два числа  — максимальное количество спящих коров и количество способов его получить по модулю \(10^9+7\).

Примечание

В первом примере, Фермер Джон может выстроить коров следующим образом, чтобы получить в итоге \(2\) спящих коров:

  • Корова \(1\) стоит с левой стороны и корова \(2\) стоит справа.
  • Корова \(2\) стоит с левой стороны и корова \(1\) стоит справа.

Во втором примере, Фермер Джон может выстроить коров следующим образом, чтобы получить в итоге \(1\) спящую корову:

  • Корова \(1\) стоит слева.
  • Корова \(2\) стоит слева.
  • Корова \(1\) стоит справа.
  • Корова \(2\) стоит справа.

В третьем примере, Фермер Джон может выстроить коров следующим образом, чтобы получить в итоге \(2\) спящих коров:

  • Коровы \(1\) и \(2\) стоят слева.
  • Коровы \(1\) и \(2\) стоят справа.
  • Корова \(1\) стоит слева и корова \(2\) стоит справа.
  • Корова \(1\) стоит справа и корова \(2\) стоит слева.

В четвертом примере, Фермер Джон не может получить ни одной спящей коровы, а потому не будет ни одной коровы стоящей с какой-либо стороны.

B. Противоположности притягиваются

математика реализация *1200

Всем известно, что противоположности притягиваются. Брачное агентство «Паросочетание» работает по этому признаку. Каждого зарегистрированного клиента сотрудники «Паросочетания» классифицировали по его интересам, i-ому клиенту было назначено число ti ( - 10 ≤ ti ≤ 10). Конечно, одно и то же число может быть назначено более чем одному клиенту.

В качестве рекламы «Паросочетание» хочет опубликовать количество пар противоположных клиентов, то есть таких, у которых значение параметра t противоположно. Клиент может входить в пару произвольное количество раз. Помогите агентству и напишите программу, которая по заданной последовательности t1, t2, ..., tn найдет искомое количество. Например, если t = (1,  - 1, 1,  - 1), то любые два элемента ti и tj образуют пару, если i и j имеют разную четность. Следовательно, в этом случае искомое количество равно 4.

Конечно, клиент не может образовывать пару с самим собой.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 105) — количество зарегистрированных клиентов «Паросочетания». Вторая строка содержит последовательность целых чисел t1, t2, ..., tn ( - 10 ≤ ti ≤ 10), ti — параметр i-го клиента, присвоенный по результатам анализа его интересов.

Выходные данные

Выведите количество пар клиентов с противоположными t. Числом, противоположным для x является число  - x (0 противоположен сам себе). Пары, отличающиеся только порядком клиентов, считаются одинаковыми.

Учтите, что ответ на задачу может быть довольно большим, поэтому необходимо использовать 64-битный целый тип для вычислений. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере пары противоположных клиентов: (1,2), (1,5) и (3,4).

Во втором примере любая пара клиентов — противоположна.

C. Весь мир театр

Комбинаторика математика *1400

В театральном кружке занимается n юношей и m девушек. Для постановки спектакля «Теория большого взрыва» им надо выбрать группу ровно из t актеров, которая содержит не менее 4 юношей и не менее одной девушки. Сколькими способами возможен выбор группы? Конечно, варианты отличающиеся только составом труппы считаются различными.

Производите все вычисления в 64-битном типе: long long для С/С++, int64 для Delphi и long для Java.

Входные данные

Единственная строка входных данных содержит три целых числа n, m, t (4 ≤ n ≤ 30, 1 ≤ m ≤ 30, 5 ≤ t ≤ n + m).

Выходные данные

Выведите искомое количество способов.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

F. Плохая криптография

математика теория чисел *3400

В современной криптографии многое завязано на алгоритмическую сложность решения нескольких задач. Одной из таких задач является задача дискретного логарифма. Она формулируется так:

Пусть зафиксированно некоторое конечное поле и выбраны два его элемента \(a\) и \(b\). Необходимо найти такое \(x\), что \(a^x = b\), либо определить, что его нет.

Наиболее вероятно, что современное человечество не умеет решать задачу дискретного логарифма для достаточно большого размера поля. Например, для поля остатков по простому модулю считаются безопасными модули размером в 1024 или 2048 бит. Однако, вычисления с такими большими числами, могут создавать существенную нагрузку на сервера, осуществляющие криптографические операции. По этому часто, вместо поля остатков по простому модулю используются более сложные поля, для которых не известно быстрых алгоритмов использующих стрктуру поля, и можно использовать более маленькие поля, а соотвественно соптимизировать операции.

Разработчик Николай не доверяет общепризнанным методам, поэтому хочет придумать свой. Недавно, он прочитал про очень странное поле — нимберы, и считает, что оно отлично подойдет для этой цели.

Поле нимберов определено на множестве целых чисел от 0 до \(2^{2^k} - 1\) для некоторого положительного целого числа \(k\). В качестве суммы используется операция побитового исключающего или (\(\oplus\)). Операцию умножения (\(\odot\)) можно определить, например, из следующих свойств:

  • \(0 \odot a = a \odot 0 = 0\)
  • \(1 \odot a = a \odot 1 = a\)
  • \(a \odot b = b \odot a\)
  • \(a \odot (b \odot c)= (a \odot b) \odot c\)
  • \(a \odot (b \oplus c) = (a \odot b) \oplus (a \odot c)\)
  • Если \(a = 2^{2^n}\) для целого \(n > 0\), и \(b < a\), то \(a \odot b = a \cdot b\).
  • Если \(a = 2^{2^n}\) для целого \(n > 0\), то \(a \odot a = \frac{3}{2}\cdot a\).

Например:

  • \( 4 \odot 4 = 6\)
  • \( 8 \odot 8 = 4 \odot 2 \odot 4 \odot 2 = 4 \odot 4 \odot 2 \odot 2 = 6 \odot 3 = (4 \oplus 2) \odot 3 = (4 \odot 3) \oplus (2 \odot (2 \oplus 1)) = (4 \odot 3) \oplus (2 \odot 2) \oplus (2 \odot 1) = 12 \oplus 3 \oplus 2 = 13.\)
  • \(32 \odot 64 = (16 \odot 2) \odot (16 \odot 4) = (16 \odot 16) \odot (2 \odot 4) = 24 \odot 8 = (16 \oplus 8) \odot 8 = (16 \odot 8) \oplus (8 \odot 8) = 128 \oplus 13 = 141\)
  • \(5 \odot 6 = (4 \oplus 1) \odot (4 \oplus 2) = (4\odot 4) \oplus (4 \odot 2) \oplus (4 \odot 1) \oplus (1 \odot 2) = 6 \oplus 8 \oplus 4 \oplus 2 = 8\)

Формально, этот алгоритм можно описать следующим псевдокодом

multiply(a, b) {
ans = 0
for p1 in bits(a) // номера единичных битов числа a
for p2 in bits(b) // номера единичных битов числа b
ans = ans xor multiply_powers_of_2(1 << p1, 1 << p2)
return ans;
}
multiply_powers_of_2(a, b) {
if (a == 1 or b == 1) return a * b
n = maximal value, such 2^{2^{n}} <= max(a, b)
power = 2^{2^{n}};
if (a >= power and b >= power) {
return multiply(power * 3 / 2, multiply_powers_of_2(a / power, b / power))
} else if (a >= power) {
return multiply_powers_of_2(a / power, b) * power
} else {
return multiply_powers_of_2(a, b / power) * power
}
}

Можно показать, что эти операции действительно удовлетворяют всем свойствам поля. Кроме того, их можно разумно определить в терминах теории игр, но это не очень важно для задачи. C помощью правильного кеширования и группировки опреаций, возможно вычислять произвденеие достаточно быстро, что важно для ускорения работы криптоалгоритма. Более формальные определения, а так же дополнительные свойства можно уточнить в статье википедии по ссылке. Авторы задачи надеятся, что перечисленных в условии свойств должно хватать для решения.

Возведение в степень для такого умножения определяется аналогично обычному \(a^{\odot k} = \underbrace{a \odot a \odot \cdots \odot a}_{k~\texttt{раз}}\).

Вам необходимо провески анализ предложенной схемы на криптостойскость. А именно научиться для пар чисел \(a\) и \(b\) находить такое \(x\), что \(a^{\odot x} = b\), либо определять что такого не существует.

Входные данные

В первой строке одно целое число \(t\) (\(1 \le t \le 100\)) — количество пар чисел для которых нужно найти дискретный логарифм. В каждой из следующих \(t\) строк находится пара чисел \(a\) \(b\) (\(1 \le a, b < 2^{64}\)).

Выходные данные

Для каждой пары выведите одно целое число \(x\) (\(0 \le x < 2^{64}\)), такое что \(a^{\odot x} = b\), либо число -1, если таких степенй не существует. Можно показать, что если существует хоть какое-то такое число \(x\), то существует и лежащее в указанных границах. Если ответов в указанных границах несколько, можно вывести любой из них.

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\).

D. Три целых числа

математика Перебор *2000

Вам даны три целых числа \(a \le b \le c\).

За один ход вы можете прибавить \(+1\) или \(-1\) к любому из этих целых чисел (то есть увеличить или уменьшить любое число на единицу). Вы можете применить такую операцию любое (возможно, нулевое) число раз, кроме того, вы можете применить такую операцию несколько раз к одному и тому же числу. Обратите внимание, что с помощью таких операций вам запрещено получать неположительные числа.

Вы хотите применить минимальное число таких операций, чтобы получить три целых числа \(A \le B \le C\) таких, что \(B\) делится на \(A\) и \(C\) делится на \(B\).

Вам требуется ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Следующие \(t\) строк описывают наборы входных данных. Каждый набор задан на отдельной строке в виде трех разделенных пробелом целых чисел \(a, b\) и \(c\) (\(1 \le a \le b \le c \le 10^4\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него. Первой строкой выведите \(res\) — минимальное количество операций, которое нужно применить, чтобы получить три целых числа \(A \le B \le C\) таких, что \(B\) делится на \(A\) и \(C\) делится на \(B\). Второй строкой выведите любую подходящую тройку \(A, B\) и \(C\).

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\).

D. Посчитайте массивы

Комбинаторика математика *1700

Посчитайте количество массивов, удовлетворяющих следующим условиям:

  • каждый массив состоит из \(n\) элементов;
  • каждый элемент — целое число от \(1\) до \(m\);
  • в каждом массиве есть ровно одна пара одинаковых элементов;
  • в каждом массиве \(a\) существует такой индекс \(i\), что массив строго возрастает до \(i\)-го элемента и строго убывает после него (формально, \(a_j < a_{j + 1}\), если \(j < i\), и \(a_j > a_{j + 1}\), если \(j \ge i\)).
Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le m \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — количество массивов, удовлетворяющих всем вышеописанным условиям, взятое по модулю \(998244353\).

Примечание

Массивы из первого примера:

  • \([1, 2, 1]\);
  • \([1, 3, 1]\);
  • \([1, 4, 1]\);
  • \([2, 3, 2]\);
  • \([2, 4, 2]\);
  • \([3, 4, 3]\).

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. Николая обозначим за А. Тогда наиболее благоприятные для Николая результаты олимпиады могли выглядеть так:

Однако результаты олимпиады могли выглядеть и так:

В первом случае Николай занял бы первое место, во втором — третье.

C. Простые простые

Конструктив математика Тернарный поиск *1800

Это последний класс Профессора R в его карьере преподавателя. Каждый раз, когда Профессор R вел класс, он давал своим ученикам особенную задачу. Как его любимый ученик, вложите всю душу в решение этой задачи в последний раз.

Вам даны два многочлена \(f(x) = a_0 + a_1x + \dots + a_{n-1}x^{n-1}\) и \(g(x) = b_0 + b_1x + \dots + b_{m-1}x^{m-1}\), с целыми положительными коэффициентами. Гарантируется, что общий НОД всех коэффициентов равен \(1\) для обоих многочленов. Другими словами, \(gcd(a_0, a_1, \dots, a_{n-1}) = gcd(b_0, b_1, \dots, b_{m-1}) = 1\). Пусть \(h(x) = f(x)\cdot g(x)\). Пусть \(h(x) = c_0 + c_1x + \dots + c_{n+m-2}x^{n+m-2}\).

Вам также дано простое число \(p\). Профессор R просит вас найти любое такое \(t\), что \(c_t\) не делится на \(p\). Он гарантирует вам, что при данных ограничениях такое \(t\) всегда существует. Если существует несколько таких \(t\), выведите любое из них.

Так как ввод может быть достаточно большим, рекомендуем использовать быстрые способы ввода.

Входные данные

Первая строка содержит три целых числа, \(n\), \(m\) и \(p\) (\(1 \leq n, m \leq 10^6, 2 \leq p \leq 10^9\)),  — \(n\) и \(m\) это количества членов в \(f(x)\) и \(g(x)\) соответственно (на один большие чем степени соответствующих многочленов), а \(p\)  — данное простое число.

Гарантируется, что \(p\) простое.

Вторая строка содержит \(n\) целых чисел \(a_0, a_1, \dots, a_{n-1}\) (\(1 \leq a_{i} \leq 10^{9}\)) — \(a_i\) равен коэффициенту при \(x^{i}\) в \(f(x)\).

Третья строка содержит \(m\) целых чисел \(b_0, b_1, \dots, b_{m-1}\) (\(1 \leq b_{i} \leq 10^{9}\))  — \(b_i\) равен коэффициенту при \(x^{i}\) в \(g(x)\).

Выходные данные

Выведите одно число \(t\) (\(0\le t \le n+m-2\))  — подходящая степень \(x\) в \(h(x)\), коэффициент при которой не делится на данное простое \(p\). Если несколько степеней \(x\) удовлетворяют условию, выведите любую.

Примечание

В первом примере, \(f(x)\) равен \(2x^2 + x + 1\) и \(g(x)\) равен \(x + 2\), их произведение \(h(x)\) равно \(2x^3 + 5x^2 + 3x + 2\), поэтому ответ может быть 1 или 2, так как и 3 и 5 не делятся на 2.

Во втором примере, \(f(x)\) равен \(x + 2\) и \(g(x)\) равен \(x + 3\), их произведение \(h(x)\) равно \(x^2 + 5x + 6\), поэтому ответом может быть любая из этих степеней, так как ни один коэффициент не делится на данное простое число.

B. Подарок

Бинарный поиск битмаски Конструктив математика сортировки Структуры данных *2100

На восьмое марта Катерине подарили массив чисел. Со временем ей стало скучно просто смотреть на него, и она решила посчитать некоторые его бесполезные характеристики. Со всеми, что она придумывала, ей это удавалось. Придумав очередную — xor попарных сумм чисел в массиве, она поняла, что не может придумать, как посчитать её для большого массива, и попросила вас помочь. А вы сможете? Более формально, вам нужно посчитать

\(\) (a_1 + a_2) \oplus (a_1 + a_3) \oplus \ldots \oplus (a_1 + a_n) \\ \oplus (a_2 + a_3) \oplus \ldots \oplus (a_2 + a_n) \\ \ldots \\ \oplus (a_{n-1} + a_n) \\ \(\)

Запись \(x \oplus y\) обозначает битовый XOR чисел (т.е. \(x\) ^ \(y\) для многих современных языков программирования). Об этой операции вы можете прочитать по ссылке в Wikipedia: https://tiny.cc/34xykz.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \leq n \leq 400\,000\)) — количество чисел в массиве.

Вторая строка содержит целые числа \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^7\)).

Выходные данные

Выведите одно число — xor попарных сумм чисел в данном массиве.

Примечание

В первом примере есть всего одна сумма: \(1 + 2 = 3\).

Во втором примере есть три суммы: \(1 + 2 = 3\), \(1 + 3 = 4\), \(2 + 3 = 5\). В двоичной системе счисления это \(011_2 \oplus 100_2 \oplus 101_2 = 010_2\), то есть 2.

\(\oplus\) означает операцию побитового xor. Чтобы определить \(x \oplus y\) рассмотрим двоичную запись чисел \(x\) и \(y\). Скажем, что \(i\)-й бит результата равен 1, если ровно один из \(i\)-х битов \(x\) и \(y\) равен 1. В противном случае \(i\)-й бит результата равен 0. Например, \(0101_2 \, \oplus \, 0011_2 = 0110_2\).

C. Лапша быстрого приготовления

графы математика теория чисел хэши *2300

Ву проголодался после интенсивной тренировки и отправился в ближайший магазин, чтобы приобрести его любимую лапшу быстрого приготовления. После того, как Ву расплатился, кассир задал ему интересную задачу.

Дан двудольный граф, в вершинах правой доли которого записаны положительные целые числа. Для подмножества вершин \(S\) левой доли определим \(N(S)\) как множество вершин правой доли, смежной хотя бы с одной из вершин \(S\), а \(f(S)\) — как сумму чисел, записанных в вершинах \(N(S)\). Требуется найти наибольший общий делитель чисел \(f(S)\) для всех возможных непустых подмножеств \(S\) (полагайте, что НОД пустого множества равен \(0\)).

Ву слишком устал во время тренировки, чтобы справиться с такой задачей. Помогите ему!

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 500\,000\)) — количество тестовых случаев, для которых требуется решить задачу. Затем следует описание тестовых случаев.

В первой строке каждого описания записаны два целых числа \(n\) и \(m\) (\(1~\leq~n,~m~\leq~500\,000\)) — количество вершин в каждой из долей графа и количество рёбер, соответственно.

Во второй строке записано \(n\) целых чисел \(c_i\) (\(1 \leq c_i \leq 10^{12}\)), \(i\)-е из которых задаёт число, записанное в \(i\)-й вершине правой доли графа.

В следующих \(m\) строках записаны пары целых чисел \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\)), обозначающие ребро между \(u_i\)-й вершиной левой доли графа и \(v_i\)-й вершиной правой доли графа. Гарантируется, что в графе нет кратных рёбер.

Тестовые случаи разделены пустой строкой. Сумма значений \(n\) по всем тестовым случаям не превосходит \(500\,000\), сумма значений \(m\) по всем тестовым случаям также не превосходит \(500\,000\).

Выходные данные

Для каждого тестового случая выведите единственное число — искомый наибольший общий делитель.

Примечание

Наибольшим общим делителем множества чисел называется наибольшее целое число \(g\) такое, что все элементы множества без остатка делятся на \(g\).

В первом примере все вершины левой доли соединены ребром со всеми вершинами правой доли, поэтому значение \(f(S)\) для любого непустого подмножества будет равно \(2\), соответственно наибольший общий делитель этих значений будет также равен \(2\).

Во втором примере подмножество \(\{1\}\) вершин левой доли соединено ребром с вершинами \(\{1, 2\}\) правой доли, сумма значений в которых равна \(2\), а подмножество \(\{1, 2\}\) вершин левой доли соединено рёбрами с вершинами \(\{1, 2, 3\}\) правой доли, сумма значений в которых равна \(3\). Таким образом, \(f(\{1\}) = 2\), \(f(\{1, 2\}) = 3\), что значит, что наибольший общий делитель всех чисел \(f(S)\) равен \(1\).

B. Максимумы

математика реализация *900

У Алисии есть массив неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\). Для всех \(1 \leq i \leq n\), она нашла число \(x_i = max(0, a_1, \ldots, a_{i-1})\). Обратите внимание, что для \(i=1\), \(x_i = 0\).

Например, если у Алисии был массив \(a = \{0, 1, 2, 0, 3\}\), то \(x = \{0, 0, 1, 2, 2\}\).

Затем она вычислила значения массива \(b_1, b_2, \ldots, b_n\): \(b_i = a_i - x_i\).

Например, если у Алисии был массив \(a = \{0, 1, 2, 0, 3\}\), то \(b = \{0-0, 1-0, 2-1, 0-2, 3-2\} = \{0, 1, 1, -2, 1\}\).

Алисия дала вам массив \(b_1, b_2, \ldots, b_n\) и попросила восстановить массив \(a_1, a_2, \ldots, a_n\). Можете ли вы помочь ей с этой задачей?

Входные данные

В первой строке записано одно целое число \(n\) (\(3 \leq n \leq 200\,000\)) — количество элементов в массиве Алисии.

Во второй строке записаны \(n\) целых чисел, \(b_1, b_2, \ldots, b_n\) (\(-10^9 \leq b_i \leq 10^9\)).

Гарантируется, что для заданного массива \(b\) существует решение \(a_1, a_2, \ldots, a_n\), для всех элементов которого верно: \(0 \leq a_i \leq 10^9\).

Выходные данные

Выведите \(n\) целых чисел, \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)), таких, что если вы посчитаете \(x\) согласно условию, \(b_1\) будет равно \(a_1 - x_1\), \(b_2\) будет равно \(a_2 - x_2\), ..., и \(b_n\) будет равно \(a_n - x_n\).

Гарантируется, что на всех данных тестах есть хотя бы одно решение. Можно показать, что в таком случае решение единственно.

Примечание

Первый тест разобран в условии задачи.

Во втором тесте, если у Алисии был массив \(a = \{1000, 1000000000, 0\}\), то \(x = \{0, 1000, 1000000000\}\) и \(b = \{1000-0, 1000000000-1000, 0-1000000000\} = \{1000, 999999000, -1000000000\}\).

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\), что меньше чем максимальное возможное, поэтому мы его не считаем.

F2. Мудрецы (усложненная версия)

битмаски дп математика *3200

Это усложненная версия задачи. Две версии отличаются ограничением на число мудрецов и ограничением по времени. Вы можете взламывать по этой задаче только если обе версии решены.

\(n\) мудрецов живут в красивом городе. Некоторые из них знают друг друга.

Для всех возможных \(n!\) перестановок \(p_1, p_2, \ldots, p_n\) мудрецов, построим бинарную строку длины \(n-1\): для всех \(1 \leq i < n\) положим \(s_i=1\) если мудрецы \(p_i\) и \(p_{i+1}\) знают друг друга, и \(s_i=0\) иначе.

Для всех \(2^{n-1}\) возможных бинарных строк, найдите число перестановок, при которых получается такая бинарная строка.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \leq n \leq 18)\) — количество мудрецов в городе.

Следующие \(n\) строк содержат бинарные строки, по \(n\) символов в каждой, \(j\)-й символ в \(i\)-й строке равен «1» если мудрец \(i\) знает мудреца \(j\), и равен «0» иначе.

Гарантируется, что если \(i\)-й мудрец знает \(j\)-го мудреца, то \(j\)-й мудрец знает \(i\)-го мудреца, и никакой мудрец не знает сам себя.

Выходные данные

Выведите \(2^{n-1}\) целых чисел, разделенных пробелами. Для каждого \(0 \leq x < 2^{n-1}\):

  • Рассмотрим такую строку \(s\) длины \(n-1\), что \(s_i = \lfloor \frac{x}{2^{i-1}} \rfloor \bmod 2\) для \(1 \leq i \leq n - 1\).
  • \((x+1)\)-е число должно быть необходимому ответу для \(s\).
Примечание

В первом тесте все мудрецы знакомы, соответственно для всех перестановок получается строка \(11\).

Во втором тесте

  • Если \(p = \{1, 2, 3, 4\}\), строка будет равна \(101\), потому что мудрецы \(1\) и \(2\) знакомы, \(2\) и \(3\) не знакомы, \(3\) и \(4\) знакомы;
  • Если \(p = \{4, 1, 2, 3\}\), строка будет равна \(110\), потому что мудрецы \(1\) и \(4\) не знакомы, \(1\) и \(2\) не знакомы, \(2\) и \(3\) не знакомы;
  • Если \(p = \{1, 3, 2, 4\}\), строка будет равна \(000\), потому что мудрецы \(1\) и \(3\) не знакомы, \(3\) и \(2\) не знакомы, \(2\) и \(4\) не знакомы.

A. Сумма нечетных чисел

математика *1100

Вам задано два целых числа \(n\) и \(k\). Ваша задача — определить, можно ли представить \(n\) в виде суммы \(k\) различных положительных нечетных (не делящихся на \(2\)) целых чисел.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов тестовых данных.

Следующие \(t\) строк описывают наборы тестовых данных. Единственная строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 10^7\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — «YES» (без кавычек), если \(n\) можно представить в виде суммы \(k\) различных положительных нечетных (не делящихся на \(2\)) целых чисел, и «NO» в противном случае.

Примечание

В первом наборе тестовых данных вы можете представить \(3\) как \(3\).

Во втором наборе тестовых данных единственным способом представить \(4\) является \(1+3\).

В третьем наборе тестовых данных вы не можете представить \(10\) в виде суммы трех различных положительных нечетных целых чисел.

В четвертом наборе тестовых данных вы можете представить \(10\) как, например, \(3+7\).

В пятом наборе тестовых данных вы можете представить \(16\) как \(1+3+5+7\).

В шестом наборе тестовых данных вы не можете представить \(16\) в виде суммы пяти различных положительных нечетных целых чисел.

D. Бесконечный путь

графы математика Перебор поиск в глубину и подобное теория чисел *2200

Вам задана цветная перестановка \(p_1, p_2, \dots, p_n\), то есть \(i\)-й элемент перестановки имеет цвет \(c_i\).

Назовем бесконечным путем последовательность \(i, p[i], p[p[i]], p[p[p[i]]] \dots\), в которой все элементы одного цвета (\(c[i] = c[p[i]] = c[p[p[i]]] = \dots\)).

Мы также можем определить умножение перестановок \(a\) и \(b\), как перестановку \(c = a \times b\), в которой \(c[i] = b[a[i]]\). Более того, можно определить степень \(k\) перестановки \(p\), как \(p^k=\underbrace{p \times p \times \dots \times p}_{k \text{ times}}\).

Найдите такое минимальное \(k > 0\), что \(p^k\) содержит хотя бы один бесконечный путь (т.е. существует позиция \(i\) в \(p^k\), такая, что последовательность, начинающаяся с \(i\) является бесконечным путем).

Можно доказать, что ответ всегда существует.

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных.

Следующие \(3T\) строк содержат сами наборы — по одному на три строки. В первой строке задано единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер перестановки.

Во второй строке задано \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), \(p_i \neq p_j\) при \(i \neq j\)) — перестановка \(p\).

В третьей строке задано \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le n\)) — цвета соответствующих элементов перестановки.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(T\) целых чисел — по одному на набор входных данных. Для каждого набора выведите минимальное \(k > 0\) такое, что \(p^k\) содержит хотя бы один бесконечный путь.

Примечание

В первом наборе, \(p^1 = p = [1, 3, 4, 2]\) и последовательность, стартующая с \(1\): \(1, p[1] = 1, \dots\) — бесконечный путь.

Во втором наборе, \(p^5 = [1, 2, 3, 4, 5]\) и, очевидно, она содержит несколько бесконечных путей.

В третьем наборе, \(p^2 = [3, 6, 1, 8, 7, 2, 5, 4]\) и последовательность, стартующая с \(4\): \(4, p^2[4]=8, p^2[8]=4, \dots\) — бесконечный путь, так как \(c_4 = c_8 = 4\).

E. Посчитайте блоки

дп Комбинаторика математика *1800

Вы выписали все целые числа от \(0\) до \(10^n - 1\), добавляя к ним ведущие нули так, чтобы их длины были равны \(n\). Например, если \(n = 3\), то вы выпишете следующие числа: 000, 001, ..., 998, 999.

Назовем блоком в числе \(x\) последовательный отрезок одинаковых цифр, который не может быть расширен ни влево, ни вправо.

Например, в числе \(00027734000\) есть три блока длины \(1\), один блок длины \(2\) и два блока длины \(3\).

Для всех чисел \(i\) от \(1\) до \(n\) посчитайте суммарное количество блоков длины \(i\) среди выписанных вами чисел.

Так как эти числа могут быть слишком большими, выведите их по модулю \(998244353\).

Входные данные

В единственной строке содержится число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Выходные данные

В единственной строке выведите \(n\) чисел. \(i\)-е число равно количеству блоков длины \(i\) среди выписанных вами чисел.

Так как эти числа могут быть слишком большими, выведите их по модулю \(998244353\).

A. Задача о делимости

математика *800

Вам даны два целых положительных числа \(a\) и \(b\). За один ход вы можете увеличить \(a\) на \(1\) (заменить \(a\) на \(a+1\)). Ваша задача — найти минимальное количество ходов, которое необходимо сделать, чтобы получить значение \(a\), которое делится на \(b\) без остатка. Возможно, вам придётся сделать \(0\) ходов, так как \(a\) уже делится на \(b\).

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных. Единственная строка каждого набора содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите ответ — минимальное количество ходов, которое нужно сделать, чтобы получить значение \(a\), которое без остатка делилось бы на \(b\).

B. K-я красивая строка

Бинарный поиск Комбинаторика математика Перебор реализация *1300

Для заданного целого числа \(n\) (\(n > 2\)) выпишем все строки длины \(n\), которые содержат в себе \(n-2\) буквы 'a' и две буквы 'b', в лексикографическом (алфавитном) порядке.

Напомним, что строка \(s\) длины \(n\) лексикографически меньше строки \(t\) длины \(n\), если существует такое \(i\) (\(1 \le i \le n\)), что \(s_i < t_i\), а для всех \(j\) (\(1 \le j < i\)) \(s_j = t_j\). Лексикографическое сравнение строк реализовано при помощи оператора < в современных языках программирования.

Например, если \(n=5\), то получатся следующие строки (их порядок важен):

  1. aaabb
  2. aabab
  3. aabba
  4. abaab
  5. ababa
  6. abbaa
  7. baaab
  8. baaba
  9. babaa
  10. bbaaa

Легко показать, что такой список строк будет содержать ровно \(\frac{n \cdot (n-1)}{2}\) строк.

Вам задано \(n\) (\(n > 2\)) и \(k\) (\(1 \le k \le \frac{n \cdot (n-1)}{2}\)). Выведите \(k\)-ю строку из списка.

Входные данные

Входные данные содержат один или несколько наборов тестовых данных.

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных в тесте. Затем следуют \(t\) наборов тестовых данных.

Каждый набор тестовых данных содержится на отдельной строке, содержащей два целых числа \(n\) и \(k\) (\(3 \le n \le 10^5, 1 \le k \le \min(2\cdot10^9, \frac{n \cdot (n-1)}{2})\).

Сумма значений \(n\) по всем наборам тестовых данных не превосходит \(10^5\).

Выходные данные

Для каждого набора тестовых данных выведите \(k\)-ю строку из списка всех описанных выше строк длины \(n\). Строки в списке отсортированы лексикографически (в алфавитном порядке).

D. Карусель, карусель — это радость для нас

графы дп жадные алгоритмы Конструктив математика *1800

Круглая карусель состоит из \(n\) фигур различных животных. Фигуры пронумерованы от \(1\) до \(n\) по ходу движения карусели. Таким образом, после \(n\)-й фигуры идёт фигура с номером \(1\). Каждая фигура имеет вид — это животного этой фигуры (лошадка, тигр и др.). Вид животного \(i\)-й фигуры равен \(t_i\).

Пример изображения карусели для \(n=9\) и \(t=[5, 5, 1, 15, 1, 5, 5, 1, 1]\).

Вы хотите покрасить каждую фигуру в один из цветов. Вам кажется скучным, если в каруселе разные фигуры (с разными видами животных) идут подряд и покрашены в одинаковые цвета.

Ваша задача — покрасить фигуры так, чтобы количество различных использованных цветов было минимальным и не существовало двух фигур разного вида, которые идут подряд и покрашены в один цвет одновременно. Если Вы используете ровно \(k\) различных цветов, то цвета фигур должны быть пронумерованы целыми числами от \(1\) до \(k\).

Входные данные

Входные данные состоят из одного или более набора входных данных.

В первой строке записано целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(q\) наборов входных данных, по две строки на каждый набор.

Первая строка набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество фигур на карусели. Фигуры пронумерованы от \(1\) до \(n\) по ходу вращения карусели. Считайте, что после фигуры \(n\) идёт фигура \(1\).

Вторая строка набора входных данных содержит \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(1 \le t_i \le 2 \cdot 10^5\)), где \(t_i\) равно виду животного \(i\)-й фигуры.

Сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(q\) ответов — на для каждого набора входных данных выведите две строки.

В первую строку выведите одно целое число \(k\) — минимально возможное количество различных цветов фигур.

Во вторую строку выведите \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le k\)), где \(c_i\) обозначает номер цвета \(i\)-й фигуры. Если существует несколько возможных ответов, вы можете вывести любой из них.

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\) операций, все цвета должны встречаться хотя бы один раз и все клетки должны быть покрашены.

Если есть несколько возможных решений, вы можете вывести любое.

B. Dreamoon любит последовательности

битмаски Комбинаторика математика *1700

Dreamoon очень любит последовательности. Поэтому он придумал задачу про последовательность, которую нельзя найти на OEIS:

Вам дано два целых числа \(d, m\), вам нужно найти количество массивов \(a\), удовлетворяющих следующим ограничениям:

  • Длина \(a\) равна \(n\), \(n \ge 1\)
  • \(1 \le a_1 < a_2 < \dots < a_n \le d\)
  • Рассмотрим следующий массив \(b\) длины \(n\): \(b_1 = a_1\), \(\forall i > 1, b_i = b_{i - 1} \oplus a_i\), где \(\oplus\) это побитовое исключащее или (xor). После построения массива \(b\), должно выполняться ограничение \(b_1 < b_2 < \dots < b_{n - 1} < b_n\).

Так как количество возможных массивов может быть слишком большим, вам нужно найти его по модулю \(m\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 100\)) обозначающее количество наборов входных данных в задаче.

Каждая из следующих \(t\) строк содержит два целых числа \(d, m\) (\(1 \leq d, m \leq 10^9\)).

Обратите внимание, что \(m\) необязательно простое!

Выходные данные

Для каждого набора входных данных, выведите количество массивов \(a\), удовлетворяющих всем ограничениям, по модулю \(m\).

B. Dreamoon любит перестановки

математика реализация *1400

Последовательность из \(m\) целых чисел называется перестановкой, если она содержит все целые числа от \(1\) до \(m\) ровно один раз. Число \(m\) называется длиной перестановки.

У Dreamoon есть две перестановки \(p_1\) и \(p_2\) имеющих ненулевые длины \(l_1\) и \(l_2\).

Затем, Dreamoon конкатенирует эти две перестановки в последовательность \(a\) длины \(l_1 + l_2\). Первые \(l_1\) элементов \(a\) это перестановка \(p_1\) а следующие \(l_2\) элементов \(a\) это перестановка \(p_2\).

Вам дана последовательность \(a\), вам нужно найти восстановить перестановки \(p_1\) и \(p_2\). Если есть несколько возможных способов, вам нужно найти все. (Обратите внимание, что также возможно, что способов не будет.)

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10\,000\)): количество наборов входных данных.

Каждый набор входных данных описывается двумя строками.

В первой строке записано целое число \(n\) (\(2 \leq n \leq 200\,000\)): длина \(a\).

Во второй строке записано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n-1\)).

Сумма по всем \(n\) не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных, в первой строке требуется вывести число \(k\): количество способов разбить \(a\) на перестановки \(p_1\) и \(p_2\).

Каждая из следующих \(k\) строк должна содержать два целых числа \(l_1\) и \(l_2\) (\(1 \leq l_1, l_2 \leq n, l_1 + l_2 = n\)), обозначающих, что \(a\) можно разбить на две перестановки длин \(l_1\) и \(l_2\) (\(p_1\) это первые \(l_1\) элементов \(a\), а \(p_2\) это последние \(l_2\) элементов \(a\)). Вы можете выводить решения в любом порядке.

Примечание

В первом примере, есть два возможных способа разбить \(a\) на перестановки: \(\{1\} + \{4, 3, 2, 1\}\) and \(\{1,4,3,2\} + \{1\}\).

Во втором примере, есть только один способ разбить \(a\) на перестановки: \(\{2,4,1,3\} + \{2,1\}\).

В третьем примере, нет ни одного искомого разбиения.

B. Лимерики

*особая задача математика теория чисел

There was once young lass called Mary,  
Whose jokes were occasionally scary.
On this April's Fool
Fixed limerick rules
Allowed her to trip the unwary.

Can she fill all the lines
To work at all times?
On juggling the words
Right around two-thirds
She nearly ran out of rhymes.
Входные данные

Входные данные содержат одно целое число \(a\) (\(4 \le a \le 998\)). Не все числа в этом интервале являются валидными входными данными для этой задачи; гарантируется, что входные данные будут валидны.

Выходные данные

Выведите одно число.

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\). Таким образом, допустимо раскрасить все три элемента в один цвет. Обратите внимание, что для данного набора входных данных существуют и другие раскраски, которые удовлетворяют требованиям Алисы.

Во втором наборе входных данных в каждый цвет покрашен только один элемент, так что раскраска точно походит под все требования Алисы.

D. Прогулка по матрице

битмаски Конструктив математика *1700

Боб играет в игру под названием «Прогулка по матрице»

В этой игре игроку дается \(n \times m\) матрица \(A=(a_{i,j})\), то есть элемент в \(i\)-й строке в \(j\)-м столбце — \(a_{i,j}\). В начале игры игрок стоит на позиции \((1,1)\) со счетом \(a_{1,1}\).

Чтобы достичь финиша, позиции \((n,m)\), игрок может ходить вправо или вниз, то есть из \((x,y)\) в \((x,y+1)\) или \((x+1,y)\), до тех пор, пока не выходит за пределы матрицы.

Каждый шаг, однако, изменяет счет игрока на побитовое И текущего счета и значения клетки, в которую он переходит.

Конечно же, Боб сразу решил вычислить максимальный счет, который он может набрать, с помощью недавно изученной им техники динамического программирования. Вот его алгоритм для данной задачи.

Однако, он тут же понял, что его алгоритм неправильно находит максимальный счет для некоторой матрицы \(A\). Поэтому теперь он хочет для каждого неотрицательного целого числа \(k\) найти такую \(n \times m\) матрицу \(A=(a_{i,j})\), что

  • \(1 \le n,m \le 500\) (Боб ненавидит большие матрицы);
  • \(0 \le a_{i,j} \le 3 \cdot 10^5\) для всех \(1 \le i\le n,1 \le j\le m\) (Боб ненавидит большие числа);
  • разница между максимальным счетом, который он может набрать, и выводом алгоритма составляет ровно \(k\).

Можно показать, что для любого целого \(k\) такого, что \(0 \le k \le 10^5\), существует матрица, удовлетворяющая данным условиям.

Помогите Бобу с этой задачей!

Входные данные

В единственной строке записано одно целое число \(k\) (\(0 \le k \le 10^5\)).

Выходные данные

В первой строке выведите два целых числа \(n\), \(m\) (\(1 \le n,m \le 500\)), обозначающие размеры матрицы.

Затем выведите \(n\) строк по \(m\) целых чисел в каждой строке, \(a_{i,j}\) в \((i+1)\)-й строке, \(j\)-м столбце.

Примечание

В первом примере максимальный счет, который может набрать Боб, равен \(300000\), и вывод его алгоритма тоже \(300000\).

Во втором примере максимальный счет, который Боб может набрать, равен \(7\&3\&3\&3\&7\&3=3\), когда вывод его алгоритма — это \(2\).

E. Все высоты равны

Комбинаторика Конструктив математика матрицы *2100

Алиса недавно подсела на игру, которая называется Сиртет.

В игре Сиртет игроку дается поле \(n \times m\). В начале игры \(a_{i,j}\) кубиков поставлены друг на друга в клетке \((i,j)\). Две клетки называются соседними, если у них есть общая сторона. Игрок может делать следующие ходы:

  • поставить по одному кубику на две соседние клетки;
  • поставить два кубика в одну клетку.

Упомянутые кубики все одинаковой высоты.

Пример игры изображен на картинке. Состояния справа достигаются с помощью выполнения данных ходов из состояния слева, и после хода добавляются серые кубики.

Цель игрока — сделать высоты всех клеток одинаковыми (то есть в каждой клетке должно быть одинаковое количество кубиков) при помощи данных ходов.

Алиса обнаружила, что на некоторых начальных полях невозможно достичь цели, какие бы ходы игрок не делал. Поэтому ей стало интересно, сколько существует таких начальных полей, что

  • \(L \le a_{i,j} \le R\) для всех \(1 \le i \le n\), \(1 \le j \le m\);
  • игрок может достичь цели, используя данные ходы.

Пожалуйста, помогите Алисе с этим. Обратите внимание, что ответ может быть довольно большой, поэтому выведите его по модулю \(998,244,353\).

Входные данные

В единственной строке записаны четыре целых числа \(n\), \(m\), \(L\) и \(R\) (\(1\le n,m,L,R \le 10^9\), \(L \le R\), \(n \cdot m \ge 2\)).

Выходные данные

Выведите одно целое число, обозначающее ответ по модулю \(998,244,353\).

Примечание

В первом примере единственное поле, которое удовлетворяет условиям — это \(a_{1,1}=a_{2,1}=a_{1,2}=a_{2,2}=1\). Поэтому ответ \(1\).

Во втором примере начальные поля, которые удовлетворяют условиям, — это \(a_{1,1}=a_{1,2}=1\) и \(a_{1,1}=a_{1,2}=2\). Поэтому ответ \(2\).

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\}\).

A. Статистика по уровню

математика реализация *1200

Поликарп недавно создал новый уровень в этой новой клевой игре Berlio Maker 85 и загрузил его в сеть. Теперь игроки со всего мира могут попробовать его уровень.

У каждого уровня в этой игре есть статистика — две величины: количество попыток и количество успешных прохождений. Так если игрок играет уровень, то количество попыток увеличивается на \(1\). Если же он еще и успешно его завершает, то количество успешных прохождений тоже увеличивается на \(1\). Обратите внимание, что обе величины обновляются одновременно (то есть если игрок успешно завершает уровень, то количество попыток обновится одновременно с количеством успешных прохождений).

Поликарпу не терпится узнать, насколько же сложный уровень у него получился, поэтому он постоянно смотрит статистику.

Более точно, он взглянул на статистику \(n\) раз и выписал \(n\) пар целых чисел — \((p_1, c_1), (p_2, c_2), \dots, (p_n, c_n)\), где \(p_i\) — это количество попыток (от слова plays) в \(i\)-й момент времени, а \(c_i\) — это количество успешных прохождений (от слова clears) в тот же момент времени. Статистика дана в хронологическом порядке (то есть порядок данных пар точно совпадает с тем, как Поликарп их выписывал).

Между двумя последовательными моментами времени, когда Поликарп смотрел статистику, много (но возможно и ноль) игроков могли попробовать уровень.

Наконец, Поликарпу интересно, не ошибся ли он нигде в своих записях. Если существует такая последовательность попыток игроков (и успешных прохождений, соответственно), что статистика была ровно такая, как Поликарп выписал, то он считает свои записи правильными.

Помогите ему определить правильность его записей.

Для вашего удобства вам потребуется ответить на несколько независимых наборов входных данных.

Входные данные

В первой строке записано одно целое число \(T\) \((1 \le T \le 500)\) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 100\)) — количество моментов времени, когда Поликарп смотрел статистику.

В каждой из следующих \(n\) строк записаны по два целых числа \(p_i\) и \(c_i\) (\(0 \le p_i, c_i \le 1000\)) — количество попыток и количество успешных прохождений уровня в \(i\)-й момент времени.

Обратите внимание, что статистика задана в хронологическом порядке.

Выходные данные

Для каждого набора входных данных выведите одну строку.

Если существует такая последовательность попыток игроков (и успешных прохождений, соответственно), что статистика была ровно такая, как Поликарп выписал, то выведите «YES».

Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом наборе входных данных в третий момент времени количество успешных прохождений увеличилось, а количество попыток нет, чего не могло произойти.

Второй набор входных данных — это неплохой пример Super Expert уровня.

В третьем наборе входных данных количество попыток уменьшилось, что невозможно.

Четвертый набор входных данных — это скорее всего авто уровень с одним прыжком через шипы.

В пятом наборе входных данных количество успешных попыток уменьшилось, что также невозможно.

Никто не хотел играть шестой набор входных данных; мама Поликарпа попробовала, чтобы он не расстраивался, однако, не смогла пройти уровень.

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\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество пуль, которые нужно выстрелить, чтобы убить всех монстров.

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\)).

A. Конфеты и две сестры

математика *800

В задаче речь пойдет о двух сёстрах — Алисе и Бетти. У вас есть \(n\) конфет. Вам хочется распределить все эти \(n\) конфет между сёстрами так, что:

  • Алиса получит \(a\) (\(a > 0\)) конфет;
  • Бетти получит \(b\) (\(b > 0\)) конфет;
  • каждая сестра получит некоторое целое количество конфет;
  • Алиса получит больше конфет, чем Бетти (то есть \(a > b\));
  • все конфеты будут отданы одной из двух сестёр (то есть \(a+b=n\)).

Ваша задача — посчитать количество способов распределить \(n\) конфет между девочками так, как описано выше. Учтите, что конфеты неразличимы между собой.

Формально, найдите количество способов представить \(n\) как сумму \(n=a+b\), где \(a\) и \(b\) — положительные целые числа и \(a>b\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^9\)) — количество конфет, которое у вас есть.

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — количество способов распределить ровно \(n\) конфет между девочками так, как описано в условии задачи. Если не существует способа, удовлетворяющего всем условиям, выведите \(0\).

Примечание

Для первого набора тестовых данных возможные \(3\) способа распределения конфет — это:

  • \(a=6\), \(b=1\);
  • \(a=5\), \(b=2\);
  • \(a=4\), \(b=3\).

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\).

E1. Chiori и выбор кукол (простая версия)

битмаски Комбинаторика математика Перебор *2700

Это простая версия этой задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(m\). Вы можете делать взломы, только если обе версии задачи сданы.

Chiori очень любит куклы и сейчас она собирается украсить свою спальню!

 

Так как Chiori коллекционирует куклы, всего у нее \(n\) кукол, \(i\)-я из этих кукол имеет неотрицательное целое число \(a_i\) (\(a_i < 2^m\), \(m\) дано). Chiori хочет выбрать некоторых кукол (возможно ноль) для украшения. Таким образом, всего существует \(2^n\) способов.

Обозначим за \(x\) побитовую xor сумму значений у кукол, выбранных Chiori (в случае, если Chiori не выбрала ни одной куклы, \(x = 0\)). Значением способа выбора кукол назовем количество битов равных \(1\) в двоичном представлении \(x\). Более формально, это число также равно количеству индексов \(0 \leq i < m\), таких что \(\left\lfloor \frac{x}{2^i} \right\rfloor\) нечетно.

Посчитайте для Chiori количество способов выбрать куклы со значением \(i\) для всех целых \(i\) от \(0\) до \(m\). Поскольку эти числа могут быть очень большими, вы должны посчитать их по модулю \(998\,244\,353\).

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 35\))  — количество кукол и максимальное возможное значение выбора нескольких кукол.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^m\))  — числа у кукол.

Выходные данные

Выведите \(m+1\) целое число \(p_0, p_1, \ldots, p_m\)  — \(p_i\) равно количеству способов выбрать несколько кукол, так чтобы полученное значение выбора кукол оказалось равным \(i\) по модулю \(998\,244\,353\).

E2. Chiori и выбор кукол (сложная версия)

битмаски Комбинаторика математика Перебор *3500

Это сложная версия этой задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(m\). Вы можете делать взломы, только если обе версии задачи сданы.

Chiori очень любит куклы и сейчас она собирается украсить свою спальню!

 

Так как Chiori коллекционирует куклы, всего у нее \(n\) кукол, \(i\)-я из этих кукол имеет неотрицательное целое число \(a_i\) (\(a_i < 2^m\), \(m\) дано). Chiori хочет выбрать некоторых кукол (возможно ноль) для украшения. Таким образом, всего существует \(2^n\) способов.

Обозначим за \(x\) побитовую xor сумму значений у кукол, выбранных Chiori (в случае, если Chiori не выбрала ни одной куклы, \(x = 0\)). Значением способа выбора кукол назовем количество битов равных \(1\) в двоичном представлении \(x\). Более формально, это число также равно количеству индексов \(0 \leq i < m\), таких что \(\left\lfloor \frac{x}{2^i} \right\rfloor\) нечетно.

Посчитайте для Chiori количество способов выбрать куклы со значением \(i\) для всех целых \(i\) от \(0\) до \(m\). Поскольку эти числа могут быть очень большими, вы должны посчитать их по модулю \(998\,244\,353\).

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 53\))  — количество кукол и максимальное возможное значение выбора нескольких кукол.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^m\))  — числа у кукол.

Выходные данные

Выведите \(m+1\) целое число \(p_0, p_1, \ldots, p_m\)  — \(p_i\) равно количеству способов выбрать несколько кукол, так чтобы полученное значение выбора кукол оказалось равным \(i\) по модулю \(998\,244\,353\).

A. Ichihime и треугольник

Конструктив математика *800

Ichihime нынешняя жрица храма души Маджонга. Она утверждает, что она человек, несмотря на свои кошачьи ушки.

Сейчас в храме проводится соревнование по математике. Обычно Ichihime не проявляет интереса к подобным вещам, но в этот раз призом является ее любимое печенье, поэтому она решила принять участие. Сейчас она решает следующую задачу.

 

Вам даны четыре положительных целых числа \(a\), \(b\), \(c\), \(d\), такие что \(a \leq b \leq c \leq d\).

Вам нужно найти три целых числа \(x\), \(y\), \(z\), удовлетворяющие следующим условиям:

  • \(a \leq x \leq b\).
  • \(b \leq y \leq c\).
  • \(c \leq z \leq d\).
  • Существует треугольник положительной площади, длины сторон которого равны \(x\), \(y\) и \(z\).

Ichihime хочет получить печенье, но эта задачка очень трудная для нее. Можете ли вы помочь ей?

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 1000\))  — количество тестовых случаев.

Следующие \(t\) строк содержат описания тестовых случаев. Каждая строка описания тестового случая содержит четыре положительных целых числа \(a\), \(b\), \(c\), \(d\) (\(1 \leq a \leq b \leq c \leq d \leq 10^9\)).

Выходные данные

Для каждого тестового случая выведите три целых числа \(x\), \(y\), \(z\) — три числа, которые вы нашли, удовлетворяющие описанным требованиям.

Гарантируется, что ответ всегда существует. Если существует несколько возможных ответов, выведите любой.

Примечание

Одно из возможных решений для первого тестового случая:

Одно из возможных решений для второго тестового случая:

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

Рассмотрим бесконечную последовательность \(s\) натуральных чисел, построенную повторением следующих шагов:

  1. Найдите лексикографически наименьшую тройку натуральных чисел \((a, b, c)\) такую, ​​что Здесь тройка целых чисел \((a_1, b_1, c_1)\) считается лексикографически меньше тройки \((a_2, b_2, c_2)\), если последовательность \([a_1, b_1, c_1]\) лексикографически меньше последовательности \([a_2, b_2, c_2]\)
  2. Добавьте \(a\), \(b\), \(c\) в конец \(s\) в этом порядке.
  3. Вернитесь к первому шагу.

У вас есть целое число \(n\). Найдите \(n\)-й элемент \(s\).

Вы должны ответить на \(t\) независимых тестовых случаев.

Последовательность \(a\) лексикографически меньше последовательности \(b\), если в первой позиции, где \(a\) и \(b\) различны, в последовательности \(a\) элемент меньше, чем соответствующий элемент в \(b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\))  — количество тестовых случаев.

Каждая из следующих \(t\) строк содержит одно целое число \(n\) (\(1\le n \le 10^{16}\))  — позицию элемента, который вы хотите узнать.

Выходные данные

В каждой из строк \(t\) выведите ответ на соответствующий тестовый случай.

Примечание

Первые несколько элементов \(s\) это \(1, 2, 3, 4, 8, 12, 5, 10, 15, \dots \)

D. Вложенные резинки

Деревья дп Конструктив математика поиск в глубину и подобное *2700

У вас есть дерево из \(n\) вершин. Вы собираетесь преобразовать это дерево в \(n\) резинок на бесконечной плоскости. Должно выполняться следующее;

  • Для каждой пары вершин \(a\) и \(b\), резинки \(a\) и \(b\) должны пересекаться тогда и только тогда, когда между \(a\) и \(b\) в дереве существует ребро.
  • Форма резинки должна быть простой петлей. Другими словами, резинка  — это замкнутая кривая без самопересечений.

Теперь давайте дадим следующие определения:

  • Резинка \(a\) включает резинку \(b\), если и только если резинка \(b\) находится полностью внутри резинки \(a\), и они не пересекаются.
  • Последовательность резинок \(a_{1}, a_{2}, \ldots, a_{k}\) (\(k \ge 2\)) называется вложенной, если и только если для всех \(i\) (\(2 \le i \le k\)), \(a_{i-1}\) включает в себя \(a_{i}\).
Это пример преобразования. Обратите внимание, что резинки \(5\) и \(6\) являются вложенными.

Можно доказать, что при заданных ограничениях существует преобразование и последовательность вложенных резинок.

Какую максимальную длину последовательности вложенных резинок можно получить из данного дерева? Найдите и выведите ее.

Входные данные

Первая строка содержит целое число \(n\) (\(3 \le n \le 10^{5}\))  — количество вершин в данном дереве.

\(i\)-я из следующих \(n-1\) строк содержит два целых числа \(a_{i}\) и \(b_{i}\) (\(1 \le a_{i} \lt b_{i} \le n\))  — это означает, что существует ребро между \(a_{i}\) и \(b_{i}\). Гарантируется, что данный граф образует дерево из \(n\) вершин.

Выходные данные

Выведите ответ.

Примечание

В первом примере можно получить вложенную последовательность из \(4\) резинок (\(1\), \(2\), \(5\) и \(6\)) с помощью следующего преобразования, приведенного ниже. Конечно, существуют и другие преобразования для создания вложенной последовательности длины \(4\). Однако вы не можете сделать последовательность из \(5\) или более вложенных резинок для данного дерева.

Одно из возможных преобразований для второго примера приведено ниже.

A. Заполнение ромбами

дп математика Перебор реализация *900

У вас есть целое число \(n\). Сколькими способами можно полностью покрыть поясоподобную область, состоящую из \(4n-2\) треугольников, ромбами?

Ромб состоит из двух треугольников. Вы можете перемещать, вращать или переворачивать ромб, но вы не можете масштабировать его.

\(2\) покрытия называются различными, если некоторые \(2\) треугольника покрыты одним и тем же ромбом в одном из них, и различными в другом.

Пожалуйста, посмотрите на иллюстрации ниже для лучшего понимания.

Слева изображен ромб, которым вы будете заполнять область, а справа  — область, которую вы хотите заполнить.

Выше приведены области, для \(n = 1, 2, 3, 4\).

Вы должны ответить на \(t\) независимых тестовых случаев.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^{4}\))  — количество тестовых случаев.

Каждая из следующих \(t\) строк содержит одно целое число \(n\) (\(1 \le n \le 10^{9}\)).

Выходные данные

Для каждого теста выведите количество способов полностью покрыть поясоподобную область, состоящую из \(4n-2\) треугольников, ромбами. Можно показать, что при данных ограничениях это количество не превышает \(10^{18}\).

Примечание

В первом тестовом примере, есть следующие \(2\) способа заполнить область:

Во втором тестовом примере, существует единственный способ заполнить область:

B. Пары чисел

математика Перебор поиск в глубину и подобное теория чисел *1900

Допустим, мы имеем пару чисел (a, b). Мы можем получить новую пару чисел вида (a + b, b) или (a, a + b) из данной. Назовем такое действие шагом.

Пусть начальная пара чисел — (1,1). Ваша задача — найти число k, наименьшее количество шагов, необходимых чтобы получить из (1,1) пару, в которой хотя бы одно число равно n.

Входные данные

Входные данные содержат единственное целое число n (1 ≤ n ≤ 106).

Выходные данные

Выведите единственное число k.

Примечание

Из пары (1,1) можно за три хода получить пару, содержащую 5: (1,1)  →  (1,2)  →  (3,2)  →  (5,2).

A. Настя и рис

математика *900

Только что Настя совершила огромную ошибку и рассыпала целую упаковку риса на пол. Скоро придёт мама. Если она это увидит, то Настю накажут и поставят в угол.

Всего Настя просыпала \(n\) зёрен. Настя прочла, что каждое зерно весит некоторое целое число грамм от \(a - b\) до \(a + b\) грамм включительно (числа \(a\) и \(b\) известны), а вся упаковка из \(n\) зёрен весит от \(c - d\) до \(c + d\) грамм, включительно (числа \(c\) и \(d\) известны). Вес упаковки  — это сумма весов всех \(n\) зёрен в ней.

Помогите понять Насте, может ли прочитанная информация быть верной. Иными словами, проверьте, может ли у каждого зерна быть такая масса, что \(i\)-е зерно весит некоторое целое число грамм \(x_i\) \((a - b \leq x_i \leq a + b)\), а в сумме они весят от \(c - d\) до \(c + d\), включительно (то есть \(c - d \leq \sum\limits_{i=1}^{n}{x_i} \leq c + d\)).

Входные данные

Входные данные содержат несколько наборов входных данных. В первой строке задано единственное число \(t\) \((1 \leq t \leq 1000)\) — количество наборов входных данных.

Следующие \(t\) строк содержат описания наборов входных данных, каждая строка содержит по \(5\) целых чисел: \(n\) \((1 \leq n \leq 1000)\)  — количество зерен, которое насчитала Настя и \(a, b, c, d\) \((0 \leq b < a \leq 1000, 0 \leq d < c \leq 1000)\)  — числа, определяющие возможный вес одного зерна риса (от \(a - b\) до \(a + b\)) и возможный суммарный вес упаковки (от \(c - d\) до \(c + d\)).

Выходные данные

Для каждого набора входных данных выведите «Yes», если информация о весах не противоречива, и «No», если \(n\) зёрен массами от \(a - b\) до \(a + b\) не могут составить упаковку суммарной массой от \(c - d\) до \(c + d\).

Вы можете выводить буквы в любом регистре (верхнем или нижнем).

Примечание

В первом тесте можно предположить, что каждое зерно весит по \(17\) грамм, а пачка \(119\) грамм, тогда действительно Настя могла собрать всю пачку.

Во третьем тесте можно предположить, что каждое зерно весит по \(16\) грамм, а пачка \(128\) грамм, тогда действительно Настя могла собрать всю пачку.

Во пятом тесте можно предположить, что \(3\) зерна риса весят \(2\), \(2\) и \(3\) грамма, а пачка \(7\) грамм, тогда действительно Настя могла собрать всю пачку.

Во втором и в четвёртом тестах можно доказать, что нельзя определить корректные веса всех зёрен риса и вес пачки так, чтобы вес пачки оказался равен суммарному весу всех собранных зерен.

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\) долларов.

Во втором наборе входных данных оба числа равны нулю изначально, а значит вам не нужно ничего тратить.

C. Очередная задача на подсчет

математика теория чисел *1600

Вам даны два числа \(a\) и \(b\), а также \(q\) запросов. \(i\)-й запрос состоит из двух чисел \(l_i\) и \(r_i\), и ответ на него — количество таких целых чисел \(x\), что \(l_i \le x \le r_i\) и \(((x \bmod a) \bmod b) \ne ((x \bmod b) \bmod a)\). Вычислите ответ на каждый запрос.

Напоминаем, что \(y \bmod z\) — остаток от деления \(y\) на \(z\). Например, \(5 \bmod 3 = 2\), \(7 \bmod 8 = 7\), \(9 \bmod 4 = 1\), \(9 \bmod 9 = 0\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следуют сами наборы.

Первая строка каждого набора содержит три целых числа \(a\), \(b\) и \(q\) (\(1 \le a, b \le 200\); \(1 \le q \le 500\)).

Затем следуют \(q\) строк, каждая из которых содержит два числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 10^{18}\)) для очередного запроса.

Выходные данные

Для каждого набора тестовых данных выведите \(q\) целых чисел — ответы на запросы в том порядке, в котором они задаются.

E. Расстановка ладей

бпф Комбинаторика математика *2300

Посчитайте количество способов расставить \(n\) ладей на доске \(n \times n\) так, что выполняются оба следующих условия:

  • все пустые клетки атакованы;
  • ровно \(k\) пар ладей атакуют друг друга.

Пустая клетка считается атакованной, если хотя бы одна ладья находится в той же строке или в том же столбце. Две ладьи атакуют друг друга, если они находятся в одной и той же строке или в одном и том же столбце, и между ними нет других ладей. Например, на следующей картинке можно найти только две пары ладей, атакующих друг друга:

Один из способов расставить ладьи при \(n = 3\) и \(k = 2\)

Два способа считаются различными, если существует хотя бы одна клетка, которая свободна в одном из способов и занята ладьей в другом способе.

Ответ может быть очень большим, поэтому выведите его по модулю \(998244353\).

Входные данные

Единственная строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 200000\); \(0 \le k \le \frac{n(n - 1)}{2}\)).

Выходные данные

Выведите одно число — количество способов расставить ладьи, взятое по модулю \(998244353\).

A. Конфеты

математика Перебор *900

Недавно Вова нашел \(n\) фантиков от конфет. Он помнит, что он покупал \(x\) конфет в первый день, \(2x\) конфет во второй день, \(4x\) конфет в третий день, \(\dots\), \(2^{k-1} x\) конфет в \(k\)-й день. Но есть проблема: Вова не помнит ни \(x\), ни \(k\), но он уверен, что \(x\) и \(k\) — положительные целые числа и \(k > 1\).

Вова будет удовлетворен, если вы назовете ему любое положительное целое число \(x\) такое, что существует целое число \(k>1\), при котором \(x + 2x + 4x + \dots + 2^{k-1} x = n\). Гарантируется, что существует как минимум одно решение. Обратите внимание: \(k > 1\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(3 \le n \le 10^9\)) — количество конфетных фантиков, которые нашел Вова. Гарантируется, что существуют некоторые положительные целые числа \(x\) и \(k>1\) такие, что \(x + 2x + 4x + \dots + 2^{k-1} x = n\).

Выходные данные

Выведите одно целое число — любое положительное целое значение \(x\) такое, что существует целое число \(k>1\), при котором \(x + 2x + 4x + \dots + 2^{k-1} x = n\).

Примечание

В первом наборе тестовых данных примера одним из возможных ответов является \(x=1, k=2\). Тогда \(1 \cdot 1 + 2 \cdot 1\) равняется \(n=3\).

Во втором наборе тестовых данных примера одним из возможных ответов является \(x=2, k=2\). Тогда \(1 \cdot 2 + 2 \cdot 2\) равняется \(n=6\).

В третьем наборе тестовых данных примера одним из возможных ответов является \(x=1, k=3\). Тогда \(1 \cdot 1 + 2 \cdot 1 + 4 \cdot 1\) равняется \(n=7\).

В четвертом наборе тестовых данных примера одним из возможных ответов является \(x=7, k=2\). Тогда \(1 \cdot 7 + 2 \cdot 7\) равняется \(n=21\).

В пятом наборе тестовых данных примера одним из возможных ответов является \(x=4, k=3\). Тогда \(1 \cdot 4 + 2 \cdot 4 + 4 \cdot 4\) равняется \(n=28\).

B. Сбалансированный массив

Конструктив математика *800

Вам задано положительное целое число \(n\), гарантируется, что \(n\) четное (то есть делится на \(2\)).

Вы хотите построить такой массив \(a\) длины \(n\), что:

  • Первые \(\frac{n}{2}\) элементов \(a\) четные (делятся на \(2\));
  • вторые \(\frac{n}{2}\) элементов \(a\) нечетные (не делятся на \(2\));
  • все элементы в \(a\) различны и положительны;
  • сумма элементов первой половины равна сумме элементов второй половины (\(\sum\limits_{i=1}^{\frac{n}{2}} a_i = \sum\limits_{i=\frac{n}{2} + 1}^{n} a_i\)).

Если есть несколько ответов, вы можете вывести любой. Не гарантируется, что ответ существует.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину массива. Гарантируется, что \(n\) четное (то есть делится на \(2\)).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — «NO» (без кавычек), если не существует подходящего ответа для заданного набора, или «YES» первой строкой и любой подходящий массив \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), удовлетворяющий условиям из условия задачи, второй строкой.

A. Отель Гильберта

математика сортировки теория чисел *1600

Отель Гильберта это очень необычный отель, потому что количество комнат в нем бесконечно! Для каждого целого числа существует ровно одна комната с таким номером, включая ноль и отрицательные числа. Не менее странно то, что сейчас отель полностью заполнен, что означает, что в каждой комнате находится ровно один гость. Менеджер отеля, сам Давид Гильберт, решил переместить гостей, потому что у него есть предположение, что за счет этого образуются свободные места.

Для любого целого числа \(k\) и положительного целого числа \(n\) обозначим за \(k\bmod n\) остаток при делении числа \(k\) на число \(n\). Более формально, \(r=k\bmod n\) это наименьшее неотрицательное целое число такое, что \(k-r\) делится на \(n\). Всегда выполнено, что \(0\le k\bmod n\le n-1\). Например, \(100\bmod 12=4\) и \((-1337)\bmod 3=1\).

Процесс перемещения гостей выглядит следующим образом: есть массив, состоящий из \(n\) целых чисел \(a_0,a_1,\ldots,a_{n-1}\). Тогда для всех целых чисел \(k\) гость из комнаты с номером \(k\) перемещается в комнату с номером \(k+a_{k\bmod n}\).

Определите, верно ли, что после этого процесса перемещения в каждой комнате по-прежнему находится ровно один гость. Это означает, что нет пустых комнат и комнат, в которых больше одного гостя.

Входные данные

Каждый тест состоит из нескольких тестовых случаев. Первая строка содержит единственное целое число \(t\) (\(1\le t\le 10^4\)) — количество тестовых случаев. Следующие \(2t\) строк содержат описания тестовых случаев.

В первой строке описания каждого тестового случая находится единственное целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — длина массива.

Во второй строке описания каждого тестового случая находятся \(n\) целых чисел \(a_0,a_1,\ldots,a_{n-1}\) (\(-10^9\le a_i\le 10^9\)).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите единственную строку, содержащую «YES», если в каждой комнате после перемещения находится ровно один гость, и «NO» иначе. Вы можете выводить каждый символ в любом регистре.

Примечание

В первом тестовом случае номер комнаты каждого гостя увеличился на \(14\), поэтому по-прежнему в каждой комнате находится ровно один гость.

Во втором тестовом случае гости в комнатах с четными номерами перемещаются в комнату с номером, на \(1\) большим исходного; гости в комнатах с нечетными номерами перемещаются в комнату с номером, на \(1\) меньшим исходного. Можно показать, что по-прежнему в каждой комнате находится ровно один гость.

В третьем тестовом случае каждый четвертый гость перемещается в комнату с номером, на \(1\) большим исходного, а остальные гости перемещаются в комнату с номером, на \(5\) большим. Можно показать, что по-прежнему в каждой комнате находится ровно один гость.

В четвертом тестовом случае гости, исходно находящиеся в комнатах \(0\) и \(1\), перемещаются в комнату с номером \(3\).

В пятом тестовом случае гости, находящиеся в комнатах \(1\) и \(2\), перемещаются в комнату с номером \(2\).

C. Задача про кванторы

графы дп математика поиск в глубину и подобное *2600

Логические кванторы — это очень хороший инструмент для создания некоторых утверждений о множестве. В этой задаче мы будем рассматривать множество вещественных чисел. Множество вещественных чисел содержит ноль и отрицательные числа. Есть два вида кванторов: всеобщности (\(\forall\)) и существования (\(\exists\)). Вы можете прочитать больше про них здесь.

Квантор всеобщности используется, чтобы сказать, что утверждение выполнено для всех вещественных чисел. Например:

  • \(\forall x,x<100\) читается как: для всех вещественных чисел \(x\) число \(x\) меньше, чем \(100\). Это утверждение ложно.
  • \(\forall x,x>x-1\) читается как: для всех вещественных чисел \(x\) число \(x\) больше, чем \(x-1\). Это утверждение верно.

Квантор существования используется, чтобы сказать, что существует некоторое вещественное число, для которого утверждение выполнено. Например:

  • \(\exists x,x<100\) читается как: существует вещественное число \(x\) такое, что \(x\) меньше, чем \(100\). Это утверждение верно.
  • \(\exists x,x>x-1\) читается как: существует вещественное число \(x\) такое, что \(x\) больше, чем \(x-1\). Это утверждение верно.

Кроме того, эти кванторы могут быть вложенными. Например:

  • \(\forall x,\exists y,x<y\) читается так: для всех вещественных чисел \(x\) существует вещественное число \(y\) такое, что \(x\) меньше, чем \(y\). Это утверждение верно для всех \(x\), потому что существует \(y=x+1\).
  • \(\exists y,\forall x,x<y\) читается так: существует вещественное число \(y\) такое, что для всех вещественных чисел \(x\) число \(x\) меньше, чем \(y\). Это утверждение ложно, потому что оно утверждает, что существует максимальное вещественное число: число \(y\) больше, чем любое \(x\).

Обратите внимание, что порядок переменных и кванторов важен для значения и верности утверждения.

Всего есть \(n\) переменных \(x_1,x_2,\ldots,x_n\), и вам дана формула вида \(\) f(x_1,\dots,x_n):=(x_{j_1}<x_{k_1})\land (x_{j_2}<x_{k_2})\land \cdots\land (x_{j_m}<x_{k_m}), \(\)

где \(\land\) обозначает логическое И. Это означает, что \(f(x_1,\ldots, x_n)\) истинно, если каждое неравенство \(x_{j_i}<x_{k_i}\) выполнено. Иначе, если хотя бы одно неравенство не выполнено, то \(f(x_1,\ldots,x_n)\) ложно.

Ваша задача — выбрать значения каждого из кванторов \(Q_1,\ldots,Q_n\) либо квантором всеобщности (\(\forall\)), либо квантором существования (\(\exists\)) так, что утверждение \(\) Q_1 x_1, Q_2 x_2, \ldots, Q_n x_n, f(x_1,\ldots, x_n) \(\)

будет верно и количество кванторов всеобщности максимально возможное, или определить, что утверждение ложно для всех возможных выборов кванторов.

Обратите внимание, что порядок переменных, в котором они идут в утверждении фиксирован. Например, если \(f(x_1,x_2):=(x_1<x_2)\), то вам не разрешено сделать переменную \(x_2\) идущей первой, и получить утверждение \(\forall x_2,\exists x_1, x_1<x_2\). Если вы выберете \(Q_1=\exists\) и \(Q_2=\forall\) получившееся утверждение будет однозначно равно \(\exists x_1,\forall x_2,x_1<x_2\).

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(2\le n\le 2\cdot 10^5\); \(1\le m\le 2\cdot 10^5\)) — количество переменных и неравенств в формуле, соответственно.

Следующие \(m\) строк описывают формулу. \(i\)-я из этих строк содержит два целых числа \(j_i\), \(k_i\) (\(1\le j_i,k_i\le n\), \(j_i\ne k_i\)).

Выходные данные

Если ни одной расстановки кванторов такой, что утверждение будет верно, не существует, выведите единственное целое число \(-1\).

Иначе на первой строке выведите максимальное возможное количество кванторов всеобщности.

На следующей строке выведите строку длины \(n\), в которой \(i\)-й символ это «A», если \(Q_i\) должен быть квантором всеобщности (\(\forall\)), или «E», если \(Q_i\) должен быть квантором существования (\(\exists\)). Все символы должны быть в верхнем регистре. Если существует несколько возможных решений, в которых количество кванторов всеобщности максимально возможное, выведите любое.

Примечание

В первом тесте утверждение \(\forall x_1, \exists x_2, x_1<x_2\) верно. Ответы «EA» и «AA» дают ложные утверждения. Ответ «EE» дает верное утверждение, но количество кванторов всеобщности будет меньше, чем в нашем ответе.

Для второго теста можно показать, что ни одной расстановки кванторов такой, что утверждение будет верно, не существует.

В третьем тесте утверждение \(\forall x_1, \forall x_2, \exists x_3, (x_1<x_3)\land (x_2<x_3)\) верно: мы можем выбрать \(x_3=\max\{x_1,x_2\}+1\).

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\).

A. Сборка пазла

математика *800

Вам дается специальный пазл, состоящий из \(n\cdot m\) одинаковых деталей. Каждая деталь имеет три выступа и одну выемку, как показано на рисунке.

Пазл считается собранным, если следующие условия выполнены:

  1. Детали расположены в виде прямоугольника с \(n\) строками и \(m\) столбцами.
  2. Любые две детали, которые имеют общую сторону в прямоугольнике, идеально соединяются с помощью выступа одной детали и выемки другой.

Определите, можно ли собрать пазл, вращая и перемещая детали как угодно.

Входные данные

Каждый тест содержит несколько тестовых случаев. В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\)) — количество тестовых случаев. В следующих \(t\) строках следует описание тестовых случаев.

Единственная строка описания каждого тестового случая содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 10^5\)).

Выходные данные

Для каждого тестового случая выведите единственную строку, содержащую «YES», если возможно собрать пазл и «NO», иначе. Вы можете выводить каждый символ в любом регистре.

Примечание

В первом тестовом случае один из возможных примеров решения пазла:

Для второго тестового случая можно показать, что пазл собрать невозможно.

В третьем тестовом случае один из возможных примеров решения пазла:

B. Карточные пирамиды

Бинарный поиск дп математика Перебор *1100

Карточная пирамида высоты \(1\) может быть построена с помощью двух карт, приставленных друг к другу. Для \(h>1\) карточная пирамида высоты \(h\) может быть построена расположением карточной пирамиды высоты \(h-1\) на базе. База состоит из \(h\) пирамидок высоты \(1\), поставленных в ряд, и \(h-1\) карты, лежащей сверху на них. Например, карточные пирамиды с высотами \(1\), \(2\) и \(3\) выглядят следующим образом:

Изначально у вас есть \(n\) карт и вы строите как можно более высокую пирамиду из этих карт. Если остались лишние карты, вы снова строите как можно более высокую пирамиду из оставшихся карт. Вы продолжаете этот процесс до тих пор, пока не станет невозможно построить какую-нибудь пирамиду. Сколько карточных пирамид вы построите?

Входные данные

Каждый тест состоит из нескольких тестовых случаев. Первая строка содержит единственное целое число \(t\) (\(1\le t\le 1000\)) — количество тестовых случаев. Следующие \(t\) строк содержат описания тестовых случаев.

Единственная строка описания каждого тестового случая содержит единственное целое число \(n\) (\(1\le n\le 10^9\)) — количество карт.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(10^9\).

Выходные данные

Для каждого тестового случая выведите единственное целое число — количество карточных пирамид, которое вы построите в конце процесса.

Примечание

В первом тестовом случае вы построите карточную пирамиду высоты \(1\) из \(2\)-x карт. Останется \(1\) карта, которой недостаточно, чтобы построить какую-нибудь пирамиду.

Во втором тестовом случае вы построите две пирамиды, каждая высоты \(2\), и в конце процесса не останется карт.

В третьем тестовом случае вы построите одну пирамиду высоты \(3\), и ни одной карты не останется.

В четвертом тестовом случае вы сначала построите одну пирамиду высоты \(3\), и \(9\) карт останется. Затем вы построите пирамиду высоты \(2\), и \(2\) карты останется. Наконец, вы построите последнюю пирамиду высоты \(1\), и не останется ни одной карты.

В пятом тестовом случае одной карты недостаточно, чтобы построить какую-нибудь пирамиду.

A. Цветовая революция

*особая задача математика *1000

Хм, как долго на Codeforces не было цветовых революций? Уже 5 лет?! Самое время для новой цветовой революции!

Общая идея в следующем: в дивизионе \(1\) должно быть \(n_1\) участников. В дивизионе \(2\) должно быть \(n_2\) участников, ровно в \(k\) раз больше, чем в дивизионе \(1\) (\(n_2 = k \cdot n_1\)). В дивизионе \(3\) должно быть \(n_3 = k \cdot n_2\) участников. И, наконец, в дивизионе \(4\) должно быть \(n_4 = k \cdot n_3\) участников.

Всего на Codeforces \(n\) участников, поэтому сумма \(n_1 + n_2 + n_3 + n_4\) должна быть строго равна \(n\).

Вы знаете значения \(n\) и \(k\). Также вы точно знаете, что \(n\) и \(k\) выбраны таким образом, что существуют значения \(n_1, n_2, n_3\) и \(n_4\), удовлетворяющие всем условиям.

Чему должно быть равно количество участников в каждом дивизионе — \(n_1, n_2, n_3\) и \(n_4\) — после революции?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждая из следующих \(t\) строк содержит \(n\) и \(k\) (\(4 \le n \le 10^9\); \(1 \le k \le 500\)) — количество участников на Codeforces и множитель, на который отличаются размеры соседних дивизионов, для соответствующего набора входных данных. В каждом наборе входных данных \(n\) и \(k\) выбраны таким образом, что ответ существует.

Выходные данные

Для каждого набора входных данных выведите четыре целых числа \(n_1, n_2, n_3\) и \(n_4\), такие, что \(n_2 = k \cdot n_1\), \(n_3 = k \cdot n_2\), \(n_4 = k \cdot n_3\) и \(n_1 + n_2 + n_3 + n_4 = 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\) изменений.

G. Две IP-камеры

*особая задача математика теория чисел *2300

У вас есть две IP-камеры одинаковой модели. Каждая камера может снимать фото с определенным периодом, начиная с какого-то заданного момента. Вы можете сами выбрать, в какой момент будет снято первое фото, но период должен быть равен одному из \(k\) значений \(p_1, p_2, \dots, p_k\), установленных производителем.

Есть \(n\) интересующих вас моментов времени \(x_1, x_2, \dots, x_n\). Вы хотите настроить камеры таким образом, что в каждый из этих моментов хотя бы одна из камер фотографирует обстановку. Чтобы настроить камеру, вы должны выбрать момент, когда она снимет первое фото, и интервал между двумя фотографиями (который должен быть равен одному из значений \(p_1, p_2, \dots, p_k\)). Камеры могут снимать фото и в моменты, которые вас не интересуют.

Входные данные

В первой строке заданы два целых числа \(k\) и \(n\) (\(1 \le k \le 10^5\); \(2 \le n \le 10^5\)) — количество возможных настроек для периода и количество интересующих вас моментов, соответственно.

Во второй строке заданы \(k\) целых чисел \(p_1, p_2, \dots, p_k\) (\(1 \le p_1 < p_2 < \dots < p_k \le 10^6\)) — возможные настройки для периодов, заданные в возрастающем порядке.

В третьей строке заданы \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_1 < x_2 < \dots < x_n \le 10^6\)) — интересующие вас моменты времени, заданные в возрастающем порядке.

Выходные данные

Выведите YES (без учета регистра) в первой строке, если существует способ настроить камеры.

Во второй строке выведите два целых числа \(s_1\) и \(cp_1\) (\(1 \le s_1 \le 10^6\); \(1 \le cp_1 \le 10^6\); \(cp_1 \in \{p_1, \dots, p_k\}\)) — момент, когда первая камера делает первый снимок, и период первой камеры. Период должен быть равен одному из заданных производителем возможных значений периода.

В третьей строке выведите два целых числа \(s_2\) и \(cp_2\) (\(1 \le s_2 \le 10^6\); \(1 \le cp_2 \le 10^6\); \(cp_2 \in \{p_1, \dots, p_k\}\)) — момент, когда вторая камера делает первый снимок, и период второй камеры. Период должен быть равен одному из заданных производителем возможных значений периода.

Если не существует способа настроить камеры, выведите NO (без учета регистра). Если существует несколько способов, вы можете вывести любой из них.

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\).

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\).

В четвертом примере, Феникс может положить все красные ягоды в корзины, оставив синюю ягоду нетронутой.

A. Орак и LCM

математика Структуры данных теория чисел *1600

Для мультимножества натуральных чисел \(s=\{s_1,s_2,\dots,s_k\}\), определим наименьшее общее кратное («LCM» по-английски) и наибольший общий делитель («GCD» по-английски) \(s\) следующим образом:

  • \(\gcd(s)\) это максимальное натуральное число \(x\), такое что все числа из \(s\) делятся на \(x\).
  • \(\textrm{lcm}(s)\) это минимальное натуральное число \(x\), которое делится на все числа из \(s\).

Например, \(\gcd(\{8,12\})=4,\gcd(\{12,18,6\})=6\) и \(\textrm{lcm}(\{4,6\})=12\). Обратите внимание, что для любого натурального числа \(x\), \(\gcd(\{x\})=\textrm{lcm}(\{x\})=x\).

У Орака есть последовательность \(a\) длины \(n\). Он придумал мультимножество \(t=\{\textrm{lcm}(\{a_i,a_j\})\ |\ i<j\}\) и попросил вас найти \(\gcd(t)\) для него. Иначе говоря, вам нужно найти НОД НОКов всех пар элементов в данной последовательности.

Входные данные

В первой строке записано одно целое число \(n\ (2\le n\le 100\,000)\).

Во второй строке записаны \(n\) целых чисел, \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 200\,000\)).

Выходные данные

Выведите одно целое число: \(\gcd(\{\textrm{lcm}(\{a_i,a_j\})\ |\ i<j\})\).

Примечание

В первом примере \(t=\{\textrm{lcm}(\{1,1\})\}=\{1\}\), и \(\gcd(t)=1\).

Во втором примере \(t=\{120,40,80,120,240,80\}\). Нетрудно видеть, что \(\gcd(t)=40\).

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]\).

D. Слайм и бисквиты

математика Теория вероятностей *3200

Слайм и его \(n\) друзей на вечеринке. Слайм придумал игру для своих друзей.

В начале игры у \(i\)-го игрока есть \(a_i\) бисквитов. Каждую секунду Слайм выберет один бисквит равновероятно среди \(a_1 + a_2 + \ldots + a_n\) бисквитов, и владелец этого бисквита передает его случайному игроку, равновероятно среди \(n-1\) игроков кроме себя. Игра закончится, когда у одного игрока будут все бисквиты.

Как хозяин вечеринки, Слайм хочет узнать математическое ожидание времени, когда игра закончится, чтобы успеть провести следующее мероприятие.

Так как ответ может быть представлен в виде рациональной дроби \(\frac{p}{q}\) для взаимно простых \(p\) и \(q\), выведите его в форме \((p \cdot q^{-1})\mod 998\,244\,353\). Можно доказать, что \(q\mod 998\,244\,353 \neq 0\).

Входные данные

В первой строке записано одно целое число \(n\ (2\le n\le 100\,000)\): количество игроков.

Во второй строке записаны \(n\) неотрицательных целых чисел \(a_1,a_2,\dots,a_n\ (1\le a_1+a_2+\dots+a_n\le 300\,000)\), где \(a_i\) обозначает количество бисквитов у \(i\)-го человека в начале игры.

Выходные данные

Выведите одно число: математическое ожидание времени, когда игра закончится, по модулю \(998\,244\,353\).

Примечание

В первом примере, вероятность, что игрок \(1\) передаст игроку \(2\) бисквит равна \(\frac{1}{2}\), а вероятность что игрок \(2\) передаст игроку \(1\) бисквит равна \(\frac{1}{2}\). В любом случае игра продлится ровно \(1\) секунду, так как все бисквиты будут у одного игрока спустя \(1\) секунду, поэтому ответ равен \(1\).

F1. Слайм и последовательности (упрощенная версия)

бпф дп математика *3100

Обратите внимание что единственные различия между версиями это \(n\) и ограничения по времени. Вы можете взламывать, только если обе версии решены.

Слайм интересуется последовательностями. Он определил хорошие последовательности \(p\) длины \(n\) из натуральных чисел следующим образом:

  • Для каждого \(k>1\), которое встречается в \(p\), должна существовать хотя бы одна пара индексов \(i,j\), такая что \(1 \leq i < j \leq n\), \(p_i = k - 1\) и \(p_j = k\).

Для данного целого числа \(n\) множество хороших последовательностей длины \(n\) это \(s_n\). Для фиксированного целого числа \(k\) и последовательности \(p\), обозначим за \(f_p(k)\) количество раз, которое \(k\) встречается в \(p\). Для каждого \(k\) от \(1\) до \(n\), Слайм хочет знать следующее значение:

\(\)\left(\sum_{p\in s_n} f_p(k)\right)\ \textrm{mod}\ 998\,244\,353\(\)

Входные данные

В первой строке записано одно целое число \(n\ (1\le n\le 5000)\).

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из них должно быть равно \(\left(\sum_{p\in s_n} f_p(i)\right)\ \textrm{mod}\ 998\,244\,353\).

Примечание

В первом примере \(s=\{[1,1],[1,2]\}\).

Во втором примере \(s=\{[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,2],[1,2,3]\}\).

В третьем примере \(s=\{[1]\}\).

F2. Слайм и последовательности (усложненная версия)

бпф дп математика *3500

Обратите внимание что единственные различия между версиями это \(n\) и ограничения по времени. Вы можете взламывать, только если обе версии решены.

Слайм интересуется последовательностями. Он определил хорошие последовательности \(p\) длины \(n\) из натуральных чисел следующим образом:

  • Для каждого \(k>1\), которое встречается в \(p\), должна существовать хотя бы одна пара индексов \(i,j\), такая что \(1 \leq i < j \leq n\), \(p_i = k - 1\) и \(p_j = k\).

Для данного целого числа \(n\) множество хороших последовательностей длины \(n\) это \(s_n\). Для фиксированного целого числа \(k\) и последовательности \(p\), обозначим за \(f_p(k)\) количество раз, которое \(k\) встречается в \(p\). Для каждого \(k\) от \(1\) до \(n\), Слайм хочет знать следующее значение:

\(\)\left(\sum_{p\in s_n} f_p(k)\right)\ \textrm{mod}\ 998\,244\,353\(\)

Входные данные

В первой строке записано одно целое число \(n\ (1\le n\le 100\,000)\).

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из них должно быть равно \(\left(\sum_{p\in s_n} f_p(i)\right)\ \textrm{mod}\ 998\,244\,353\).

Примечание

В первом примере \(s=\{[1,1],[1,2]\}\).

Во втором примере \(s=\{[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,2],[1,2,3]\}\).

В третьем примере \(s=\{[1]\}\).

B. Прямоугольник и квадрат

геометрия математика Перебор *1600

Маленький Петя очень любит прямоугольники, а особенно квадраты. Недавно мама подарила ему 8 попарно не совпадающих точек на плоскости. Он решил разбить их на два множества по 4 точки так, чтобы точки из первого множества лежали в вершинах некоего квадрата, а из второго — в вершинах прямоугольника. Каждая из заданных 8 точек должна принадлежать ровно одному множеству. Допускается, чтобы прямоугольник из второго множества также был квадратом. Если разбиений несколько, Петю удовлетворит любое. Помогите ему найти одно такое разбиение. Обратите внимание, что и прямоугольник, и квадрат из разбиения должны иметь ненулевую площадь. Стороны фигур не обязательно должны быть параллельны осям координат.

Входные данные

Задано 8 пар целых чисел, по одной паре в каждой строке — координаты точек, которые есть у Пети. Все координаты по модулю не превышают 104. Гарантируется, что никакие две точки не совпадают.

Выходные данные

В первой строке выведите «YES» (без кавычек), если искомое разбиение существует. Во второй строке выведите 4 числа через пробел — номера точек из исходного множества, которые лежат в вершинах квадрата. Точки нумеруются начиная с 1. Номера можно выводить в любом порядке. В третьей строке выведите номера точек, лежащих в вершинах прямоугольника в аналогичном формате. Все выведенные числа должны быть попарно различны.

Если искомого разбиения не существует, первая строка должна содержать слово «NO» (без кавычек), после которого ничего выводить не нужно.

Примечание

Обратите внимание на третий пример: стороны фигур не обязательно должны быть параллельны осям координат.

A. Орак и делители

математика *900

Орак изучает теорию чисел, и его очень заинтересовали свойства делимости.

Для двух натуральных чисел \(a\) и \(b\), \(a\) является делителем \(b\) если и только если существует такое натуральное число \(c\), что \(a\cdot c=b\).

Для \(n \ge 2\), обозначим за \(f(n)\) минимальный делитель \(n\), отличный от \(1\).

Например, \(f(7)=7,f(10)=2,f(35)=5\).

Для выбранного числа \(n\) Орак решил прибавить \(f(n)\) к \(n\).

Например, если у него было число \(n=5\), новое значение \(n\) будет равно \(10\). А если у него было число \(n=6\), \(n\) станет равным \(8\).

Ораку так это понравилось, что он решил проделать подобные операции по несколько раз.

Для двух положительных чисел \(n\) и \(k\), Орак попросил вас прибавить \(f(n)\) к \(n\) ровно \(k\) раз (обратите внимание, что \(n\) изменяется после каждой операции, соотвественно \(f(n)\) тоже может измениться) и сказать ему итоговое значение \(n\).

Например, если Орак скажет вам, что \(n=5\) и \(k=2\), сначала вы должны прибавить \(f(5)=5\) к \(n=5\), и новое значение \(n\) станет равным \(n=10\), после этого вы должны прибавить \(f(10)=2\) к \(10\), и новое (и итоговое!) значение \(n\) будет равно \(12\).

Орак может задавать вам эти вопросы несколько раз.

Входные данные

В первой строке записано одно целое число \(t\ (1\le t\le 100)\): количество запросов Орака.

В каждой из следующий \(t\) строк записаны два целых числа \(n,k\ (2\le n\le 10^6, 1\le k\le 10^9)\), описывающие очередной запрос.

Гарантируется, что сумма всех \(n\) не превосходит \(10^6\).

Выходные данные

Выведите \(t\) строк, в \(i\)-й из которых должно быть записано итоговое значение \(n\) для \(i\)-го запроса Орака.

Примечание

В первом запросе \(n=5\) и \(k=1\). Делители \(5\) это \(1\) и \(5\), и минимальный делитель, отличный от \(1\) это \(5\). Соответственно, единственная операция это прибавление \(f(5)=5\) к \(5\), поэтому результат равен \(10\).

Во втором запросе \(n=8\) и \(k=2\). Делители \(8\) это \(1,2,4,8\), и минимальный из них кроме \(1\) равен \(2\), затем, после одной операции \(8\) превратится в \(8+(f(8)=2)=10\). Делители \(10\) это \(1,2,5,10\), минимальный делитель, отличный от \(1\) это \(2\), поэтому ответ равен \(10+(f(10)=2)=12\).

В третьем запросе \(n\) изменялось следующим образом: \(3 \to 6 \to 8 \to 10 \to 12\).

B. Орак и модели

дп математика теория чисел *1400

В магазине есть \(n\) моделей, пронумерованных от \(1\) до \(n\), размеры которых равны \(s_1, s_2, \ldots, s_n\).

Орак купит некоторые из этих моделей и упорядочит их по возрастанию номеров (индексов, а не размеров).

Орак считает, что полученная расстановка красивая, если для любых двух соседних моделей с номерами \(i_j\) и \(i_{j+1}\) (обратите внимание, что \(i_j < i_{j+1}\), так как Орак упорядочил их правильно), \(i_{j+1}\) делится на \(i_j\) и \(s_{i_j} < s_{i_{j+1}}\).

Например, для \(6\) моделей с размерами \(\{3, 6, 7, 7, 7, 7\}\), он может купить модели с индексами \(1\), \(2\), и \(6\), и полученная расстановка будет красивой. Обратите внимание, что расстановка из одной модели также считается красивой.

Орак хочет знать, какое наибольше число моделей он может купить, и он может задавать вам эти вопросы по несколько раз.

Входные данные

В первой строке записано одно целое число \(t\ (1 \le t\le 100)\): количество запросов.

Каждый запрос состоит из двух строк, в первой из которых записано одно целое число \(n\ (1\le n\le 100\,000)\): количество моделей в магазине, а во второй записаны \(n\) целых чисел \(s_1,\dots,s_n\ (1\le s_i\le 10^9)\): размеры моделей.

Гарантируется, что сумма величин \(n\) не превосходит \(100\,000\).

Выходные данные

Выведите \(t\) строк, в \(i\)-й из которых должно быть записано максимальное число моделей, которое Орак может купить для \(i\)-го запроса.

Примечание

Для первого запроса, например, Орак может купить модели с индексами \(2\) и \(4\), расстановка которых будет красивой так как \(4\) делится на \(2\) и \(6\) больше, чем \(3\). Рассмотрев остальные варианты, можно легко убедиться, что нет красивой расстановки с более, чем тремя моделями.

Во втором запросе Орак может купить модели с индексами \(1\), \(3\), и \(6\). Рассмотрев остальные варианты, можно легко убедиться, что нет красивой расстановки с более, чем тремя моделями.

В третьем примере не существует красивой расстановки с более, чем одной моделью.

B. Сумма слагаемых одинаковой четности

Конструктив математика *1200

Заданы два целых положительных числа \(n\) (\(1 \le n \le 10^9\)) и \(k\) (\(1 \le k \le 100\)). Представьте число \(n\) в виде суммы \(k\) положительных целых чисел одинаковой четности (с одинаковыми остатками от деления на \(2\)).

Иными словами, найдите такие \(a_1, a_2, \ldots, a_k\), что все \(a_i>0\), \(n = a_1 + a_2 + \ldots + a_k\) и либо все \(a_i\) одновременно четные, либо все \(a_i\) одновременно нечетные. Если такого представления не существует, то сообщите об этом.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее записаны \(t\) наборов входных данных по одному в строке.

Каждый набор представляет собой два целых положительных числа \(n\) (\(1 \le n \le 10^9\)) и \(k\) (\(1 \le k \le 100\)).

Выходные данные

Для каждого набора входных данных выведите:

  • YES и искомые \(a_i\), если ответ существует (если ответов несколько, то выведите любой из них);
  • NO, если ответа не существует.

Буквы в словах YES и NO можно выводить в любом регистре.

C. K-е неделящееся на n

Бинарный поиск математика *1200

Заданы два целых положительных числа: \(n\) и \(k\). Выведите \(k\)-е положительное целое число, которое не делится на \(n\).

Например, если \(n=3\), а \(k=7\), то все числа, которые не делятся на \(3\), имеют вид: \(1, 2, 4, 5, 7, 8, 10, 11, 13 \dots\). \(7\)-е число среди них равно \(10\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее записаны \(t\) наборов входных данных по одному в строке.

Каждый набор представляет собой два целых положительных числа \(n\) (\(2 \le n \le 10^9\)) и \(k\) (\(1 \le k \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите \(k\)-е целое положительное число, которое не делится на \(n\).

F. Восстановление 01-строки

Конструктив математика поиск в глубину и подобное *1500

Для некоторой 01-строки \(s\) (то есть такой, что каждый символ \(s_i\) — это либо '0', либо '1') выписали все пары подряд идущих символов (все подстроки длины \(2\)). Для каждой пары (подстроки длины \(2\)) посчитали количество символов '1' (единиц) в ней.

Вам заданы три числа:

  • \(n_0\) — количество пар подряд идущих символов (подстрок), в которых \(0\) единиц;
  • \(n_1\) — количество пар подряд идущих символов (подстрок), в которых \(1\) единица;
  • \(n_2\) — количество пар подряд идущих символов (подстрок), в которых \(2\) единицы.

Например, для строки \(s=\)«1110011110» были бы выписаны следующие подстроки: «11», «11», «10», «00», «01», «11», «11», «11», «10». Таким образом, \(n_0=1\), \(n_1=3\), \(n_2=5\).

Ваша задача — по заданным \(n_0, n_1, n_2\) восстановить любую подходящую 01-строку (бинарную строку) \(s\). Гарантируется, что хотя бы одно из чисел \(n_0, n_1, n_2\) отлично от \(0\). Также гарантируется, что решение существует.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее во входных данных записаны сами наборы.

Каждый набор состоит из одной строки, которая содержит три целых числа \(n_0, n_1, n_2\) (\(0 \le n_0, n_1, n_2 \le 100\); \(n_0 + n_1 + n_2 > 0\)). Гарантируется, что ответ для заданных \(n_0, n_1, n_2\) существует.

Выходные данные

Выведите \(t\) строк. Каждая из строк должна содержать ответ в виде 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\).

C. Ходы на доске

математика *1000

Вам задана доска размера \(n \times n\), где \(n\) нечетно (не кратно \(2\)). Изначально в каждой клетке доски расположена одна фигура.

За один ход вы можете выбрать ровно одну фигуру, расположенную в какой-либо клетке и передвинуть ее в одну из клеток, имеющую общую сторону или угол с текущей клеткой, то есть из клетки \((i, j)\) вы можете передвинуть фигуру в клетку:

  • \((i - 1, j - 1)\);
  • \((i - 1, j)\);
  • \((i - 1, j + 1)\);
  • \((i, j - 1)\);
  • \((i, j + 1)\);
  • \((i + 1, j - 1)\);
  • \((i + 1, j)\);
  • \((i + 1, j + 1)\);

Конечно же, вы не можете двигать фигуры в клетки за пределами доски. Допустимо, что после хода в одной клетке будет находиться несколько фигур.

Ваша задача — найти минимальное количество ходов, необходимое, чтобы собрать все фигуры в одной клетке (т.е. в \(n^2-1\) клетках должно быть расположено \(0\) фигур и в одной клетке должны быть расположены \(n^2\) фигур).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n < 5 \cdot 10^5\)) — размер доски. Гарантируется, что \(n\) нечетно (не делится на \(2\)).

Также гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(5 \cdot 10^5\) (\(\sum n \le 5 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ — минимальное количество ходов, необходимое, чтобы собрать все фигуры в одной клетке.

A. Будильник

математика *900

Поликарп провел целый день за подготовкой задач для вас. Теперь ему нужно поспать хотя бы \(a\) минут, чтобы отдохнуть.

Поликарп может проснуться только от звука будильника. Он только заснул, а его первый будильник прозвонит ровно через \(b\) минут.

Каждый раз когда Поликарп просыпается, он решает, заводить ли будильник еще раз или нет. Если он проспал меньше \(a\) минут суммарно, то он заводит будильник так, чтобы тот прозвонил ровно через \(c\) минут, и тратит \(d\) минут, чтобы снова заснуть. Иначе же он встает с кровати, начиная новый день.

Если будильник звонит, пока Поликарп все еще засыпает, то он снова его заводит на \(c\) минут и опять тратит \(d\) минут, чтобы заснуть.

Вам же всего лишь предстоит выяснить, когда Поликарп встанет с кровати или сообщить, что это не случится никогда.

Пожалуйста, прочитайте пояснение, чтобы получше понять пример.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны четыре целых числа \(a, b, c, d\) (\(1 \le a, b, c, d \le 10^9\)) — время, которое необходимо Поликарпу, чтобы выспаться, время до первого звонка будильника, время до каждого последующего звонка будильника и время, необходимое Поликарпу, чтобы заснуть.

Выходные данные

На каждый набор входных данных выведите одно целое число. Если Поликарп никогда не встанет с кровати, то выведите -1. Иначе выведите время, которое Поликарп потратит до того, как встать с кровати.

Примечание

В первом наборе входных данных Поликарп просыпается через \(3\) минуты. Он отдохнул только \(3\) минуты из необходимых \(10\). Поэтому он снова заводит будильник, чтобы тот прозвенел через \(6\) минут, и тратит \(4\) минуты, чтобы уснуть. То есть он отдыхает в течение еще \(2\) минут, что суммируется в \(3+2=5\) минут сна. Он повторяет эту процедуру еще три раза, и получается \(11\) минут сна. Наконец, он встает с кровати. Он потратил \(3\) минуты до первого будильника, в потом заново завел будильник четыре раза. Ответ равен \(3+4 \cdot 6 = 27\).

Второй набор входных данных похож на первый, но Поликарпу надо \(11\) минут, чтобы выспаться, вместо \(10\). Однако, это ничего не меняет, потому что Поликарп получает \(11\) минут сна при таких настройках будильника так и так.

В третьем наборе входных данных Поликарп просыпается достаточно отдохнувшим уже после первого будильника. Поэтому ответ равен \(b=9\).

В четвертом наборе входных данных Поликарп просыпается через \(5\) минут. К сожалению, дальше он не может отдохнуть ни минуты, заводя будильник все снова и снова бесконечно :(

C1. Просто вписываем многоугольник

Бинарный поиск геометрия математика Тернарный поиск *1400

Условие этой задачи почти полностью совпадает с условием задачи C2. Единственное отличие в следующем: в задаче C1 \(n\) всегда четно, а в задаче C2 \(n\) всегда нечетно.

Вам задан правильный многоугольник из \(2 \cdot n\) вершин (то есть он выпуклый и имеет равные стороны и углы) и все его стороны имеют длину \(1\). Назовем этот многоугольник \(2n\)-угольником.

Ваша задача — найти квадрат минимального размера, такой что в него можно вписать \(2n\)-угольник. \(2n\)-угольник можно вписать в квадрат, если \(2n\)-угольник можно разместить таким образом, что каждая точка, лежащая внутри или на границе \(2n\)-угольника также будет лежать внутри или на границе квадрата.

Вы можете вращать \(2n\)-угольник и/или квадрат.

Входные данные

В первой строке задано целое число \(T\) (\(1 \le T \le 200\)) — количество наборов входных данных.

В следующих \(T\) строках заданы описания наборов — по одной строке на набор. В каждой строке задано единственное четное целое число \(n\) (\(2 \le n \le 200\)). Не забывайте, что вам нужно вписать \(2n\)-угольник, а не \(n\)-угольник.

Выходные данные

Выведите \(T\) действительных чисел — по одному на набор входных данных. Для каждого набора, выведите минимальную длину стороны квадрата, в который можно вписать \(2n\)-угольник. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-6}\).

C2. Не так просто вписываем многоугольник

Бинарный поиск геометрия математика Перебор *2000

Условие этой задачи почти полностью совпадает с условием задачи C1. Единственное отличие в следующем: в задаче C1 \(n\) всегда четно, а в задаче C2 \(n\) всегда нечетно.

Вам задан правильный многоугольник из \(2 \cdot n\) вершин (то есть он выпуклый и имеет равные стороны и углы) и все его стороны имеют длину \(1\). Назовем этот многоугольник \(2n\)-угольником.

Ваша задача — найти квадрат минимального размера, такой что в него можно вписать \(2n\)-угольник. \(2n\)-угольник можно вписать в квадрат, если \(2n\)-угольник можно разместить таким образом, что каждая точка, лежащая внутри или на границе \(2n\)-угольника также будет лежать внутри или на границе квадрата.

Вы можете вращать \(2n\)-угольник и/или квадрат.

Входные данные

В первой строке задано целое число \(T\) (\(1 \le T \le 200\)) — количество наборов входных данных.

В следующих \(T\) строках заданы описания наборов — по одной строке на набор. В каждой строке задано единственное нечетное целое число \(n\) (\(3 \le n \le 199\)). Не забывайте, что вам нужно вписать \(2n\)-угольник, а не \(n\)-угольник.

Выходные данные

Выведите \(T\) действительных чисел — по одному на набор входных данных. Для каждого набора, выведите минимальную длину стороны квадрата, в который можно вписать \(2n\)-угольник. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-6}\).

A. Последовательность с цифрами

математика Перебор реализация *1200

Определим рекуррентную последовательность следующим образом: \(\)a_{n+1} = a_{n} + minDigit(a_{n}) \cdot maxDigit(a_{n}).\(\)

Здесь \(minDigit(x)\) и \(maxDigit(x)\) — минимальная и максимальная цифры в десятичной записи числа \(x\) без ведущих нулей соответственно. Для примеров обратитесь к примечаниям.

Ваша задача — по заданным \(a_{1}\) и \(K\) вычислить \(a_{K}\).

Входные данные

В первой строке записано единственное число \(t\) (\(1 \le t \le 1000\)) — количество независимых наборов входных данных.

Каждый набор входных данных состоит из двух целых чисел \(a_{1}\) и \(K\) (\(1 \le a_{1} \le 10^{18}\), \(1 \le K \le 10^{16}\)), записанных через пробел на отдельной строке.

Выходные данные

Для каждого набора входных данных выведите одно число \(a_{K}\) на отдельной строке.

Примечание

\(a_{1} = 487\)

\(a_{2} = a_{1} + minDigit(a_{1}) \cdot maxDigit(a_{1}) = 487 + \min (4, 8, 7) \cdot \max (4, 8, 7) = 487 + 4 \cdot 8 = 519\)

\(a_{3} = a_{2} + minDigit(a_{2}) \cdot maxDigit(a_{2}) = 519 + \min (5, 1, 9) \cdot \max (5, 1, 9) = 519 + 1 \cdot 9 = 528\)

\(a_{4} = a_{3} + minDigit(a_{3}) \cdot maxDigit(a_{3}) = 528 + \min (5, 2, 8) \cdot \max (5, 2, 8) = 528 + 2 \cdot 8 = 544\)

\(a_{5} = a_{4} + minDigit(a_{4}) \cdot maxDigit(a_{4}) = 544 + \min (5, 4, 4) \cdot \max (5, 4, 4) = 544 + 4 \cdot 5 = 564\)

\(a_{6} = a_{5} + minDigit(a_{5}) \cdot maxDigit(a_{5}) = 564 + \min (5, 6, 4) \cdot \max (5, 6, 4) = 564 + 4 \cdot 6 = 588\)

\(a_{7} = a_{6} + minDigit(a_{6}) \cdot maxDigit(a_{6}) = 588 + \min (5, 8, 8) \cdot \max (5, 8, 8) = 588 + 5 \cdot 8 = 628\)

C. Сосчитайте треугольники

Бинарный поиск математика реализация *1800

Как и у любого неизвестного математика, у Юрия есть любимые числа: \(A\), \(B\), \(C\) и \(D\), причем \(A \leq B \leq C \leq D\). Также Юрий очень любит треугольники, поэтому в один день он задумался: сколько существует невырожденных треугольников с целочисленными длинами сторон \(x\), \(y\) и \(z\) таких, что \(A \leq x \leq B \leq y \leq C \leq z \leq D\)?

Сейчас Юрий очень занят подготовкой задач для очередной олимпиады, поэтому он просит вас помочь посчитать количество интересующих его треугольников.

Треугольник называется невырожденным тогда и только тогда, когда его вершины не лежат на одной прямой.

Входные данные

В единственной строке через пробел записаны четыре целых числа \(A\), \(B\), \(C\) и \(D\) (\(1 \leq A \leq B \leq C \leq D \leq 5 \cdot 10^5\)) — любимые числа Юрия.

Выходные данные

Выведите одно число — количество невырожденных треугольников с целочисленными длинами сторон \(x\), \(y\) и \(z\), для которых выполнено неравенство: \(A \leq x \leq B \leq y \leq C \leq z \leq D\).

Примечание

В первом примере можно составить треугольники со следующими длинами сторон: \((1, 3, 3)\), \((2, 2, 3)\), \((2, 3, 3)\) и \((2, 3, 4)\).

Во втором примере можно составить треугольники: \((1, 2, 2)\), \((2, 2, 2)\) и \((2, 2, 3)\).

В третьем примере можно составить лишь один равносторонний треугольник. Длины всех сторон будут равны \(5 \cdot 10^5\).

D. Игра с массивом

Конструктив математика *1400

Петя и Вася, как всегда, заняты тем, что соревнуются между собой в новой интересной игре.

Сначала Петя должен придумать массив длины \(N\), состоящий из целых положительных чисел, сумма которых равна \(S\), а также целое число \(K\) такое, что \(0 \leq K \leq S\). Чтобы выиграть, Вася должен найти такой непустой подотрезок в массиве Пети, что сумма его элементов равна \(K\) или \(S - K\). В противном случае Васе придётся признать своё поражение.

Зная \(N\) и \(S\), определите, может ли Петя одержать победу при условии, что Вася будет играть наилучшим для себя способом. Если Петя может выиграть, подскажите, как ему следует сыграть.

Входные данные

В единственной строке содержатся два целых числа \(N\) и \(S\) (\(1 \leq N \leq S \leq 10^{6}\)) — необходимая длина массива и сумма его элементов.

Выходные данные

Если Петя может победить, то в первой строке следует вывести «YES» (без кавычек), во второй строке нужно вывести необходимый массив, состоящий из \(N\) натуральных чисел, сумма которых равна \(S\), а в третьей строке вывести одно целое число \(K\). Если подходящих ответов несколько, то можно вывести любой из них.

В противном случае в единственной строке выведите «NO» (без кавычек).

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

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\)-го набора входных данных примера:

C. Обновление Celex

математика *1600

В связи с карантином, у Cайкромофта появилось больше свободного времени для реализации новых функций в «Celex-2021». Разработчики сделали новую функцию GAZ-GIZ, которая от левого верхнего угла бесконечно заполняет бесконечную вправо и вниз таблицу следующим образом:

Клетка с координатами \((x, y)\) находится на пересечение \(x\)-й строки и \(y\)-го столбца. Левая верхняя клетка \((1,1)\) содержит число \(1\).

Разработчики функции SUM тоже не спят. От скуки они сговорились с разработчиками функции RAND, поэтому они добавили возможность посчитать сумму на произвольном пути от одной клетки до другой, передвигаясь вниз или вправо. Формально, из клетки \((x,y)\) за один шаг можно переместиться в клетку \((x+1, y)\) или \((x, y+1)\).

После очередного обновления Dinwows, Левиан решил изучать «Celex-2021» (ведь он хочет стать бухгалтером!). После заполнения таблицы функцией GAZ-GIZ он попросил вас посчитать количество возможных различных сумм на пути от заданной клетки \((x_1, y_1)\) до другой заданной клетки \((x_2, y_2\)), если за один ход вы можете ходить только на одну ячейку вниз или вправо.

Формально, рассмотрим все пути из клетки \((x_1, y_1)\) в клетку \((x_2, y_2)\) такие, что каждая следующая клетка в пути располагается либо справа, либо снизу от предыдущей. Посчитайте количество различных сумм значений элементов для всех таких путей.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 57179\)) — количество наборов входных данных.

Каждая из следующих \(t\) строк содержит четыре целых положительных числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(1 \le x_1 \le x_2 \le 10^9\), \(1 \le y_1 \le y_2 \le 10^9\)) — координаты стартовой и конечной клеток.

Выходные данные

На каждый набор входных данных в отдельной строке выведите ответ — количество возможных различных сумм на пути от одной клетки до другой.

Примечание

В первом наборе входных данных есть две возможных суммы: \(1+2+5=8\) и \(1+3+5=9\).

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\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество очков, которое игрок может получить за победу в игре.

Примечание

Тесты из примера разобраны в условии.

C. Смешиваем воду

Бинарный поиск математика *1700

Есть два бесконечных источника воды:

  • горячая вода температуры \(h\);
  • холодная вода температуры \(c\) (\(c < h\)).

Вы совершаете следующую чередующуюся последовательность действий:

  1. набрать одну кружку горячей воды и вылить ее в бесконечно глубокую бочку;
  2. набрать одну кружку холодной воды и вылить ее в бесконечно глубокую бочку;
  3. набрать одну кружку горячей воды \(\dots\)
  4. и так далее \(\dots\)

Обратите внимание, что вы всегда начинаете с кружки горячей воды.

Бочка изначально пустая. Необходимо налить хотя бы одну кружку в бочку. Температура воды в бочке равна средней температуре вылитых кружек.

Вы хотите получить воду температуры как можно ближе к \(t\). То есть если температура воды в бочке равна \(t_b\), то абсолютная разность \(t_b\) и \(t\) (\(|t_b - t|\)) должна быть минимально возможна.

Сколько кружек необходимо налить в бочку, чтобы температура стала как можно ближе к \(t\)? Если существует несколько ответов с минимальной абсолютной разностью, то выведите наименьший из них.

Входные данные

В первой строке записано одно целое число \(T\) (\(1 \le T \le 3 \cdot 10^4\)) — количество наборов входных данных.

В каждой из следующих \(T\) строк записаны по три целых числа \(h\), \(c\) и \(t\) (\(1 \le c < h \le 10^6\); \(c \le t \le h\)) — температура горячей воды, температура холодной воды и желаемая температура в бочке.

Выходные данные

На каждый набор входных данных выведите одно положительное целое число — минимальной количество кружек, которое необходимо вылить в бочку, чтобы получить температуру, как можно более близкую к \(t\).

Примечание

В первом наборе входных данных температура после \(2\) налитых кружек: \(1\) горячей и \(1\) холодной — равна \(20\). И это самое близкое возможное значение.

Во втором наборе температура после \(7\) налитых кружек: \(4\) горячих и \(3\) холодных — примерно \(29.857\). Если наливать больше воды, то температура не станет ближе к \(t\).

В третьем наборе температура после \(1\) налитой кружки: \(1\) горячей — равна \(18\). Это совпадает с \(t\).

E. Модульная стабильность

Комбинаторика математика теория чисел *2000

Обозначим за \(x \bmod y\) остаток от целочисленного деления \(x\) на \(y\) (оператор \(\%\) в C++ или Java, mod в Pascal).

Назовем массив целых чисел \([a_1, a_2, \dots, a_k]\) стабильным, если для каждой перестановки \(p\) целых чисел от \(1\) до \(k\), и для каждого неотрицательного целого числа \(x\) выполняется следующее условие:

\( (((x \bmod a_1) \bmod a_2) \dots \bmod a_{k - 1}) \bmod a_k = (((x \bmod a_{p_1}) \bmod a_{p_2}) \dots \bmod a_{p_{k - 1}}) \bmod a_{p_k} \)

Другими словами, для каждого неотрицательного целого \(x\) значение \((((x \bmod a_1) \bmod a_2) \dots \bmod a_{k - 1}) \bmod a_k\) не зависит от порядка элементов в массиве \(a\).

Для двух заданных целых чисел \(n\) и \(k\) посчитайте количество стабильных массивов \([a_1, a_2, \dots, a_k]\), в которых \(1 \le a_1 < a_2 < \dots < a_k \le n\).

Входные данные

В единственной строке заданы два целых числа \(n\) и \(k\) (\(1 \le n, k \le 5 \cdot 10^5\)).

Выходные данные

Выведите количество стабильных массивов \([a_1, a_2, \dots, a_k]\), в которых \(1 \le a_1 < a_2 < \dots < a_k \le n\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

F. Шоу взрывов на радиоуправлении

Бинарный поиск геометрия математика Перебор Структуры данных *2900

Знаете, в наше время довольно сложно организовать шоу с большим количеством участников и зрителей в одном месте. Тем не менее, вы не отказываетесь от своей мечты провести шоу со взрывами машин! Вы решили заменить настоящие машины радиоуправляемыми, назвать мероприятия «Шоу взрывов на радиоуправлении» и транслировать все онлайн.

Для подготовки вы нашли арену — бесконечную 2D-сетку. Вы также закупили \(n\) радиоуправляемых машинок и расставили их по арене. К сожалению, эти машинки могут ехать только вперед, без возможности поворотов налево, направо или разворотов. Более того, вы направили машинки туда, куда хотите, чтобы они поехали.

Формально, для каждой машинки \(i\) (\(1 \le i \le n\)) вы зафиксировали ее начальную позицию (\(x_i, y_i\)) и вектор направление (\(dx_i, dy_i\)). Более того, у каждой машинки есть константная скорость \(s_i\) единиц в секунду. То есть после запуска машинка \(i\) двигается из (\(x_i, y_i\)) в направлении (\(dx_i, dy_i\)) с константной скоростью \(s_i\).

Цель вашего шоу — столкнуть две машинки как можно скорее! Вы обратили внимание, что если запускать все машинки в самом начале шоу, то довольно часто столкновений не происходит вообще. Поэтому вы решили запустить \(i\)-ю машинку в некоторый момент \(t_i\). Вы еще не выбрали \(t_i\), это еще надо решить. Обратите внимание, что \(t_i\) не обязательно должно быть целым, и допустимо, чтобы \(t_i\) совпадало с \(t_j\) для любых \(i, j\).

Шоу начинается в момент времени \(0\). Шоу заканчивается, когда какие-нибудь две машинки \(i\) и \(j\) (\(i \ne j\)) сталкиваются (то есть оказываются в одной точке в одно и то же время). Длительность шоу равна времени между началом и концом.

Какое самое быстрое столкновение вы можете организовать, выбрав все \(t_i\)? Если возможно организовать столкновение, тогда выведите минимальную возможную длительность шоу. Иначе сообщите, что это невозможно.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 25000\)) — количество машинок.

В каждой из следующих \(n\) строк записаны по пять целых чисел \(x_i\), \(y_i\), \(dx_i\), \(dy_i\), \(s_i\) (\(-10^3 \le x_i, y_i \le 10^3\); \(1 \le |dx_i| \le 10^3\); \(1 \le |dy_i| \le 10^3\); \(1 \le s_i \le 10^3\)) — начальная позиция \(i\)-й машинки, ее вектор направления и ее скорость, соответственно.

Гарантируется, что все машинки начинают в различных позициях (то есть \((x_i, y_i) \neq (x_j, y_j)\) для \(i \neq j\)).

Выходные данные

Выведите наименьшую возможную длительность шоу, если возможно организовать столкновение, выбрав все \(t_i\). Иначе, выведите «No show :(».

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Картинка для первого примера:

Самое раннее возможное столкновение произойдет с машинками \(2\) и \(4\). Запустим машинку \(2\) в \(0\), машинку \(4\) примерно в \(0.096762\) и машинки \(1\) и \(3\) когда угодно. Тогда машинки \(2\) и \(4\) столкнутся примерно в \(0.585902\). Тогда вот как поле будет выглядеть в момент столкновения:

Вот картинка для второго примера:

B. Тернарная логика

математика реализация *1100

Маленький Петя очень любит компьютеры. Недавно мама подарила ему новый «Ternatron IV». В отличие от остальных современных компьютеров, «Ternatron IV» использует не бинарную, а тернарную логику. Петю сразу же заинтересовало то, как же на нем реализована операция xor (и есть ли вообще что-то похожее).

Оказалось, что она есть (правда, называется эта операция tor) и устроена следующим образом. Пусть мы хотим посчитать значение выражения a tor b. Оба числа a и b записываются в троичной системе счисления одно под другим (b под a). Если количество разрядов в них различно, то к более короткому числу дописываются ведущие нули, пока длины не уравняются. Затем происходит сложение цифр в каждом разряде, результат каждого сложения берется по модулю 3. Заметим, что перенос разрядов при таком сложении не производится. Например: 1410 tor 5010 = 01123 tor 12123 = 10213 = 3410.

Петя записал на бумажке числа a и c. Помогите ему найти такое число b, что a tor b = c. Если таких чисел несколько, выведите наименьшее.

Входные данные

В первой строке записаны два целых числа a и c (0 ≤ a, c ≤ 109). Оба числа записаны в десятичной системе счисления.

Выходные данные

Выведите одно целое число b, такое что a tor b = c. Если возможных чисел b несколько, выведите наименьшее из них. Число следует выводить в десятичной системе счисления.

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\).

Примечание

Ниже изображены ответы для первых двух наборов тестовых данных:

D. Покупка лопат

математика теория чисел *1300

Поликарп хочет купить ровно \(n\) лопат. В магазине продаются упаковки с лопатами. Всего в магазине \(k\) различных видов упаковок — упаковка \(i\)-го вида состоит из \(i\) лопат (\(1 \le i \le k\)). В магазине есть бесконечное количество упаковок каждого вида.

Поликарп хочет выбрать один вид упаковки и после этого купить несколько (одну или более) упаковок этого вида. Какое наименьшее количество упаковок придется купить Поликарпу, чтобы суммарно купить ровно \(n\) лопат?

Например, если \(n=8\) и \(k=7\), то Поликарп купит \(2\) упаковки из \(4\) лопат.

Помогите Поликарпу найти минимальное количество упаковок, которое необходимо купить при условии, что он:

  • суммарно купит ровно \(n\) лопат;
  • размеры всех купленных им упаковок одинаковы и являются целым числом от \(1\) до \(k\) включительно.
Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных в тесте. Далее записаны \(t\) наборов тестовых данных по одному в строке.

Каждый набор представляет собой два целых положительных числа \(n\) (\(1 \le n \le 10^9\)) и \(k\) (\(1 \le k \le 10^9\)) — количество лопат и количество видов упаковок.

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ является целым положительным числом — минимальным количеством упаковок.

Примечание

Ответ на первый набор тестовых данных разобран в условии.

Во втором наборе существует только один способ купить \(8\) лопат — \(8\) упаковок по одной лопате.

В третьем наборе нужно купить \(1\) упаковку из \(6\) лопат.

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\), описывающих очередную строку матрицы. Числа нужно выводить без пробелов.

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\) разрушены. Снова, не разрушенные базы помечены оранжевым.

F. Джонни и новая игрушка

математика реализация Структуры данных *3300

У Джонни новая игрушка. Как вы можете догадаться, она немного необычная. Игрушка является перестановкой \(P\) чисел от \(1\) до \(n\), записанных в строку друг за другом.

Для каждого \(i\) от \(1\) до \(n - 1\), между \(P_i\) и \(P_{i + 1}\) написан вес \(W_i\), и эти веса также образуют перестановку чисел от \(1\) до \(n - 1\). Дополнительно есть веса \(W_0 = W_n = 0\).

Инструкция гласит, что отрезок \([L, R]\) является хорошим, если \(W_{L - 1} < W_i\) и \(W_R < W_i\) для всех \(i\) из \(\{L, L + 1, \ldots, R - 1\}\). Для такого отрезка она также определяет \(W_M\) как минимум из множества \(\{W_L, W_{L + 1}, \ldots, W_{R - 1}\}\).

Теперь начинается веселье. За один ход, игрок может выбрать один из хороших подотрезков, разрезать на \([L, M]\) и \([M + 1, R]\) и поменять местами эти части. Более точно, до операции выбранный подотрезок игрушки выглядел следующим образом: \(\)W_{L - 1}, P_L, W_L, \ldots, W_{M - 1}, P_M, W_M, P_{M + 1}, W_{M + 1}, \ldots, W_{R - 1}, P_R, W_R\(\) А после, он стал выглядеть так: \(\)W_{L - 1}, P_{M + 1}, W_{M + 1}, \ldots, W_{R - 1}, P_R, W_M, P_L, W_L, \ldots, W_{M - 1}, P_M, W_R\(\)

Такая операция может быть выполнена несколько раз (возможно, ноль), и целью является получить минимальное возможное количество инверсий в \(P\).

Младшая сестра Джонни, Меган, считает, что правила слишком запутанные, поэтому она хочет проверить своего брата, выбирая некоторые пары индексов \(X\) и \(Y\), и меняя местами \(P_X\) и \(P_Y\) (\(X\) может быть равно \(Y\)). После каждого действия сестры, Джонни интересуется, какого минимального количества инверсий можно достичь, начиная с текущего \(P\) и делая корректные действия?

Вы можете считать, что входные данные были сгенерированы случайно. \(P\) и \(W\) были выбраны случайно и равновероятно среди всех перестановок, а запросы Меган были выбраны случайно и равновероятно среди всех пар индексов.

Входные данные

Первая строка содержит одно целое число \(n\) \((2 \leq n \leq 2 \cdot 10^5)\), обозначающее длину игрушки.

Вторая строка содержит \(n\) различных целых чисел \(P_1, P_2, \ldots, P_n\) \((1 \leq P_i \leq n)\), обозначающих исходную перестановку \(P\). Третья строка содержит \(n - 1\) различных целых чисел \(W_1, W_2, \ldots, W_{n - 1}\) \((1 \leq W_i \leq n - 1)\), обозначающих веса.

Четвертая строка содержит одно целое число \(q\) \((1 \leq q \leq 5 \cdot 10^4)\) — количество действий Меган. Следующие \(q\) строк содержат по два целых числа \(X\) и \(Y\) \((1 \leq X, Y \leq n)\) — индексы элементов \(P\), меняющихся местами. Запросы не независимы, после каждого из них перестановка меняется.

Выходные данные

Выведите \(q\) строк. Строка номер \(i\) должна содержать одно целое число — минимальное количество инверсий в перестановке, которое может быть получено, если начинать с \(P\) после первых \(i\) запросов и выполнять операции, описанные в инструкции.

Примечание

Рассмотрим первый пример. После первого запроса, \(P\) отсортирована, поэтому мы уже получили перестановку без инверсий.

После второго запроса, \(P\) равна [\(1\), \(3\), \(2\)], в ней есть одна инверсия, и можно доказать, что получить \(0\) инверсий невозможно.

В конце, \(P\) равна [\(2\), \(3\), \(1\)]. Мы можем выбрать всю перестановку в качестве хорошего подотрезка, после чего \(P\) станет равным [\(1\), \(2\), \(3\)], в котором \(0\) инверсий.

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\).

A. Выбор нечетных

математика Перебор реализация *1200

У Shubham есть массив \(a\) размера \(n\), и он хочет выбрать из него ровно \(x\) элементов так, чтобы их сумма была нечетной. Эти элементы не обязаны быть последовательными. Элементы массива не обязательно различны.

Скажите ему, может ли он сделать это.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) \((1\le t \le 100)\) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) \((1 \le x \le n \le 1000)\) — длину массива и количество элементов, которые нужно выбрать соответственно.

Следующая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 1000)\) — элементы массива.

Выходные данные

Для каждого набора входных данных выведите «Yes» или «No» в зависимости от того, можно ли выбрать ровно \(x\) элементов, чтобы их сумма была нечетной.

Вы можете выводить буквы в любом регистре.

Примечание

В \(1\)-м наборе входных данных: мы должны выбрать элемент \(999\), и сумма будет нечетной.

В \(2\)-м наборе входных данных: мы должны выбрать элемент \(1000\), поэтому сумма не будет нечетной.

В \(3\)-м наборе входных данных: мы можем выбрать элемент \(51\).

В \(4\)-м наборе входных данных: мы должны выбрать оба элемента \(50\) и \(51\) — так что общая сумма нечетна.

В \(5\)-м наборе входных данных: мы должны выбрать все элементы — но общая сумма не является нечетной.

D. Найдите максимумы

Бинарный поиск интерактив математика реализация *2100

Это интерактивная задача.

Ayush устал запоминать пароль от своего замка и разработал новую схему для установки своего пароля. У замка есть \(k\) позиций, где каждая позиция может содержать целые числа от \(1\) до \(n\). Пароль \(P\) представляет собой последовательность из \(k\) целых чисел, каждое из которых находится в диапазоне \([1, n]\), \(i\)-й элемент которой входит в \(i\)-ю позицию замка.

Чтобы установить пароль для своего замка, Ayush придумывает массив \(A\) из \(n\) целых чисел в диапазоне \([1, n]\) (не обязательно различных). Затем он выбирает \(k\) непустых попарно непересекающихся подмножеств индексов \(S_1, S_2, ..., S_k\) \((S_i \underset{i \neq j} \cap S_j = \emptyset)\) и устанавливает свой пароль как \(P_i = \max\limits_{j \notin S_i} A[j]\). Другими словами, \(i\)-я позиция пароля равна максимуму по всем элементам \(A\), индексы которых не принадлежат \(S_i\).

Вам даны подмножества индексов, выбранных Ayush. Вам нужно угадать пароль. Чтобы сделать запрос, вы можете выбрать непустое подмножество индексов массива и узнать максимум по всем элементам массива с индексами в этом подмножестве. Вы можете задать не более 12 запросов.

Входные данные

В первой строке содержится одно целое число \(t\) \((1 \leq t \leq 10)\) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(k\) \((2 \leq n \leq 1000, 1 \leq k \leq n)\) — размер массива и количество подмножеств соответственно. Далее следуют \(k\) строк. \(i\)-я строка содержит целое число \(c\) \((1 \leq c \lt n)\) — размер подмножества \(S_i\), за которым следуют \(c\) попарно различных целых чисел в диапазоне \([1, n]\) — индексы, принадлежащие подмножеству \(S_i\).

Гарантируется, что пересечение любых двух подмножеств пусто.

Протокол взаимодействия

Чтобы задать запрос, выведите одну строку:

  • В начале выведите "? c" (без кавычек), где \(c\) \((1 \leq c \leq n)\) обозначает размер подмножества запрашиваемых индексов, после чего выведите через пробел \(c\) различных целых чисел в диапазоне \([1, n]\)  — индексы, о которых вы хотите задать запрос.

Для каждого запроса вы получите целое число \(x\) — максимальное значение в массиве среди элементов с запрошенными индексами. Если подмножество запрашиваемых индексов недопустимо или вы превысили количество запросов (например, один из индексов больше, чем \(n\)), то вы получите \(x = -1\). В этом случае вы должны немедленно прекратить программу.

Когда вы угадали пароль, выведите одну строку "!" (Без кавычек), за которой через пробел следуют \(k\) целых чисел  — позиции пароля.

Угадывание пароля не учитывается при подсчете количества запросов.

После этого вы должны прочитать строку. Если вы угадаете пароль правильно, вы получите строку "Correct". В этом случае вам следует продолжить решение оставшихся наборов входных данных. Если предполагаемый пароль неверен, вы получите строку "Incorrect". В этом случае вы должны немедленно прекратить программу.

Интерактор не адаптивный. Массив \(A\) не изменяется с запросами.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Чтобы взломать решение, используйте следующий формат взломов:

В первой строке должно содержаться одно целое число \(t\) \((1 \leq t \leq 10)\) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать два целых числа: \(n\) и \(k\) \((2 \leq n \leq 1000, 1 \leq k \leq n)\) — размер массива и количество подмножеств соответственно. Следующая строка должна состоять из \(n\) целых чисел в диапазоне \([1, n]\) — массива \(A\). Далее должны следовать \(k\) строк. \(i\)-я строка должна содержать целое число \(c\) \((1 \leq c \lt n)\) — размер подмножества \(S_i\), за которым должны следовать \(c\) различных целых чисел в диапазоне \([1, n]\) — индексы, принадлежащие подмножеству \(S_i\).

Пересечение любых двух подмножеств должно быть пустым.

Примечание

Массив \(A\) в примере равен \([1, 2, 3, 4]\). Длина пароля составляет \(2\). Первый элемент пароля  — это максимум из \(A[2]\), \(A[4]\) (поскольку первое подмножество содержит индексы \(1\) и \(3\), мы берем максимум по остальным индексам). Второй элемент пароля  — это максимум из \(A[1]\), \(A[3]\) (поскольку второе подмножество содержит индексы \(2\), \(4\)).

Не забудьте считать строку "Correct" / "Incorrect" после угадывания пароля.

G. Надежный пароль

битмаски интерактив Комбинаторика Конструктив математика *2800

Это интерактивная задача.

Ayush придумал еще один способ задать пароль для своего замка. В замке есть \(n\) слотов, в каждом слоте может находится любое неотрицательное целое число. Пароль \(P\) это последовательность из \(n\) целых чисел, \(i\)-й из которых соответствует \(i\)-му слоту замка.

Чтобы задать пароль, Ayush придумал последовательность \(A\) из \(n\) целых чисел из отрезка \([0, 2^{63}-1]\). Затем, он определил \(i\)-й элемент \(P\) как побитовое ИЛИ всех чисел в массиве кроме \(A_i\).

Вам нужно отгадать пароль. Чтобы задать запрос, вы можете выбрать непустое подмножество индексов массива и спросить побитовое ИЛИ всех элементов массива с индексами в этом подмножестве. Вы можете задать не более 13 запросов.

Входные данные

В первой строке записано одно целое число \(n\) \((2 \le n \le 1000)\) — количество слотов в замке.

Протокол взаимодействия

Чтобы задать вопрос, в отдельной строке:

  • Сначала выведите «? c» (без кавычек), где \(c\) \((1 \leq c \leq n)\) обозначает размер подмножества запроса, после чего выведите \(c\) различных целых чисел из отрезка \([1, n]\), разделенных пробелами.

В ответ на каждый запрос, вы получите число \(x\) — побитовое ИЛИ чисел с выбранными индексами. Если вы спросили некорректное множество индексом или вы превысили количество запросов, тогда вы получите \(x = -1\). В таком случае вы должны немедленно завершить выполнение программы.

Если вы угадали пароль, в отдельной строке выведите «!» (без кавычек), после чего выведите \(n\) целых чисел, разделенных пробелами  — последовательность-пароль.

Отгадывание пароля не считается в числе загаданных запросов.

Интерактор не адаптивный. Массив \(A\) не меняется с запросами.

После вывода запроса, не забывайте выводить конец строки и сбрасывать поток вывода. Иначе, вы получите верикт Превышен лимит бездействия. Чтобы сделать это, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • читайте документацию для остальных языков.

Взломы

Чтобы взломать решение, используйте следующий формат:

В первой строке, выведите одно целое число \(n\) \((2 \le n \le 1000)\) — количество слотов в замке. Во второй строке выведите \(n\) целых чисел из отрезка \([0, 2^{63} - 1]\), разделенных пробелами  — массив \(A\).

Примечание

Массив \(A\) в примере это \(\{{1, 2, 4\}}\). Первый элемент пароля это побитовое ИЛИ элементов \(A_2\) и \(A_3\), второй элемент это побитовое ИЛИ элементов \(A_1\) и \(A_3\), а третий элемент это побитовое ИЛИ элементов \(A_1\) и \(A_2\). Таким образом, пароль равен \(\{{6, 5, 3\}}\).

A. Лопаты и мечи

Бинарный поиск жадные алгоритмы математика *1100

Поликарп играет в известную компьютерную игру (мы не хотим упоминать ее название). В этой игре он может создавать инструменты двух видов — лопаты и мечи. На создание лопаты Поликарп тратит две палки и один алмаз; на создание меча Поликарп тратит два алмаза и одну палку.

Каждый инструмент может быть продан за один изумруд. Как много изумрудов может заработать Поликарп, если у него есть \(a\) палок и \(b\) алмазов?

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два числа \(a\) и \(b\) (\(0 \le a, b \le 10^9\)) — количество палок и алмазов соответственно.

Выходные данные

На каждый набор входных данных выведите число — максимальное количество изумрудов, которое может заработать Поликарп.

Примечание

В первом наборе входных данных Поликарп может заработать два изумруда следующим образом: создать один меч и одну лопату.

Во втором наборе входных данных у Поликарпа нет алмазов, а значит, он не сможет ничего создать.

B. Перемешивание

математика *1300

Вам задан массив, состоящий из \(n\) чисел \(a_1\), \(a_2\), ..., \(a_n\). Изначально \(a_x = 1\), а остальные элементы равны \(0\).

Вы выполняете \(m\) операций. Во время \(i\)-й операции вы выбираете два индекса \(c\) и \(d\) таких, что \(l_i \le c, d \le r_i\), и меняете местами \(a_c\) и \(a_d\).

Посчитайте количество индексов \(k\) таких, что существуют возможность выбрать операции так, что в конце \(a_k = 1\).

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следует описание каждого из \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(x\) и \(m\) (\(1 \le n \le 10^9\); \(1 \le m \le 100\); \(1 \le x \le n\)).

Каждая из следующих \(m\) строк содержит описание операций; а именно — в \(i\)-й строке содержится два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

Выходные данные

На каждый набор входных данных выведите одно число — количество индексов \(k\) таких, что существуют возможность выбрать операции так, что в конце \(a_k = 1\).

Примечание

В первом наборе входных данных условие \(a_k = 1\) выполняется для любого \(k\). Для этого, можно выполнить следующие операции:

  1. поменять местами \(a_k\) и \(a_4\);
  2. поменять местами \(a_2\) и \(a_2\);
  3. поменять местами \(a_5\) и \(a_5\).

Во втором наборе входных данных подходят только индексы \(k = 1\) и \(k = 2\). Для выполнения \(a_1 = 1\), нужно поменять местами \(a_1\) и \(a_1\) во второй операции. Для выполнения \(a_2 = 1\), нужно поменять местами \(a_1\) и \(a_2\) во второй операции.

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}\)

D. Два делителя

Конструктив математика теория чисел *2000

Вам заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\).

Для каждого \(a_i\) найдите два его делителя \(d_1 > 1\) и \(d_2 > 1\) такие, что \(\gcd(d_1 + d_2, a_i) = 1\) (где \(\gcd(a, b)\) — наибольший общий делитель \(a\) и \(b\)) или скажите, что такой пары нет.

Входные данные

В первой строке задано единственное целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — размер массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(2 \le a_i \le 10^7\)) — массив \(a\).

Выходные данные

Ради ускорения вывода, выведите ответы в две строки по \(n\) чисел в каждой.

В первой и второй строках \(i\)-ми по счету числами выведите соответствующие делители \(d_1 > 1\) и \(d_2 > 1\) такие, что \(\gcd(d_1 + d_2, a_i) = 1\) или \(-1\) и \(-1\), если такой пары делителей нет. Если существует несколько подходящих ответов, выведите любой из них.

Примечание

Рассмотрим \(a_7 = 8\). У него есть \(3\) делителя больших, чем \(1\): \(2\), \(4\), \(8\). Не сложно заметить, что сумма любой пары делителей делится на \(2\), также как и \(a_7\).

Существуют и другие подходящие пары делителей \(d_1\) и \(d_2\) для \(a_{10}=24\), например, \((3, 4)\) или \((8, 3)\). Вы можете вывести любую из них.

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\), так как можно выбрать первый и шестой столики.

В третьем наборе тестовых данных нельзя занять никакой свободный столик, не нарушив правила ресторана.

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\).

F. Лампочки по кругу

игры интерактив математика реализация *2600

Это интерактивная задача.

Джон и его воображаемый друг играют в игру. По кругу расположено \(n\) лампочек. Лампочки пронумерованы от \(1\) до \(n\) по часовой стрелке, то есть, лампочки \(i\) и \(i + 1\) являются соседними для любого \(i = 1, \ldots, n - 1\), а также соседними являются лампочки \(n\) и \(1\). Исходно все лампочки выключены.

Джон и его друг ходят по очереди, начиная с Джона. Джон в качестве своего действия может завершить игру либо сделать ход. Чтобы сделать ход, Джон выбирает положительное число \(k\) и может включить любые \(k\) лампочек на свой выбор. Его друг в ответ может выбрать любые \(k\) подряд идущих лампочек и выключить их (выбранные лампочки, которые уже были выключены, остаются выключенными), где \(k\) равно числу, которое выбрал Джон на последнем ходу. Например, если \(n = 5\) и Джон только что включил три лампочки, то его друг может выключить лампочки \(1, 2, 3\), или \(2, 3, 4\), или \(3, 4, 5\), или \(4, 5, 1\), или \(5, 1, 2\).

После этого Джон снова может завершить игру или сходить, и так далее. Однако, Джон не может сделать более \(10^4\) ходов.

Джон хочет максимизировать количество включенных лампочек, а его друг хочет минимизировать это количество. Ваша задача — предъявить стратегию за Джона, которая достигает оптимального результата. Ваша программа будет играть за Джона против программы жюри, которая играет за его друга.

Пусть в игре \(n\) лампочек. Обозначим \(R(n)\) количество включенных лампочек в конце игры, если оба игрока действуют оптимально. Ваша программа должна сделать не более \(10^4\) ходов и завершить игру не менее чем с \(R(n)\) включенными лампочками. Детали реализации приведены в секции «Протокол взаимодействия».

По техническим причинам взломы по этой задаче невозможны.

Протокол взаимодействия

Исходно ваша программа получит на вход одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество лампочек в игре. После этого программа жюри будет ожидать ваших действий.

Чтобы сделать ход, выведите в одной строке целое число \(k\) (\(1 \leq k \leq n\)), а зачем \(k\) различных целых чисед \(l_1, \ldots, l_k\) (\(1 \leq l_i \leq n\)) — номера лампочек, которые вы хотите включить. Индексы можно выводить в любом порядке. Можно пытаться включать лампочки, которые уже включены (в таком случае их состояние не изменится).

Если ваш ход по какой-либо причине некорректен, или вы совершили более \(10^4\) ходов, программа жюри выведет одно число \(-1\). В противном случае, программа жюри выведет одно целое число \(x\) (\(1 \leq x \leq n)\). Это означает, что в ответ были выключены \(k\) лампочек, начиная с лампочки номер \(x\) в порядке по часовой стрелке.

Чтобы вместо следующего хода завершить игру, выведите в отдельной строке одно число \(0\). Тест будет пройден, если в этот момент включено не менее \(R(n)\) лампочек (значение \(R(n)\) и полученный вердикт не будут сообщены вашей программе). Это действие не включается в количество сделанных ходов (то есть, разрешается завершить игру после ровно \(10^4\) ходов).

Чтобы получить правильный вердикт, ваша программа должна завершиться сразу, как только выведет \(0\) либо получит ответ \(-1\).

Не забудьте сбросить буфер вывода после каждого действия.

Примечание

Если \(n = 3\), любой ход Джона может быть отменен обратно, поэтому \(R(3) = 0\) и завершить игру сразу является верной стратегией.

\(R(4) = 1\), и одна из стратегий, которая достигает этого результата, приведена во втором примере.

Пустые строки в примерах взаимодействия приведены для наглядности, в решении их выводить не нужно.

A. ПокупатеЛи

геометрия математика *800

Ли собирается украсить свой дом к вечеринке с помощью нескольких правильных многоугольников...

Ли считает правильный (выпуклый) \(n\)-угольник красивым тогда и только тогда, когда он может повернуть многоугольник таким образом, чтобы хотя бы одна из его сторон стала параллельна оси \(OX\) и хотя бы одна из его сторон стала параллельна оси \(OY\) одновременно.

Напомним, что правильный \(n\)-угольник — это выпуклый многоугольник из \(n\) вершин такой, что все его стороны и углы равны.

Ли пришел в магазин: в магазине продаются \(t\) правильных многоугольников. Для каждого из них выведите YES, если многоугольник красивый, или NO в противном случае.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество многоугольников в магазине.

В каждой из следующих \(t\) строк задано по одному целому числу \(n_i\) (\(3 \le n_i \le 10^9\)): то есть \(i\)-й многоугольник является правильным \(n_i\)-угольником.

Выходные данные

Для каждого многоугольника в магазине, выведите YES, если он красивый, или NO в противном случае (регистр букв не важен).

Примечание

В примере, в магазине продаются \(4\) многоугольника. Несложно определить, что равносторонний треугольник (правильный \(3\)-угольник) не является красивым, квадрат (правильный \(4\)-угольник) является красивым, и правильный \(12\)-угольник (изображен ниже) также является красивым.

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.

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)\).

B. Сжатие массива и НОД

Конструктив математика теория чисел *1100

У Ashish есть массив \(a\), состоящий из \(2n\) положительных целых чисел. Он хочет сжать массив \(a\) в массив \(b\) размера \(n-1\). Чтобы это сделать, он сначала выбирает ровно \(2\) (любые два) элемента массива \(a\) и удаляет их из массива. После этого он выполняет следующую операцию, пока массив \(a\) не пустой:

  • удалить любые два элемента из массива \(a\) и добавить их сумму в массив \(b\).

Получившийся массив \(b\) должен удовлетворять одному условию. Наибольший общий делитель (\(\mathrm{gcd}\)) всех элементов массива должен быть больше \(1\).

Напомним, что наибольший общий делитель (\(\mathrm{gcd}\)) массива положительных целых чисел равен наибольшему целому числу, которое является делителем всех элементов массива.

Можно доказать, что всегда можно таким образом сжать массив \(a\) в массив \(b\) размера \(n-1\), так что \(gcd(b_1, b_2..., b_{n-1}) > 1\).

Помогите Ashish найти способ это сделать.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10\))  — количество наборов входных данных. Описание наборов входных данных следует.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(2 \leq n \leq 1000\)).

Во второй строке описания каждого набора входных данных находится \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\) (\(1 \leq a_i \leq 1000\))  — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных, выведите \(n-1\) строку  — выполненные операции, чтобы сжать массив \(a\) в массив \(b\). Изначальное удаление двух элементов не является операцией и про это действие не нужно ничего выводить.

В \(i\)-й из этих строк должно находиться два целых числа, индексы (нумерация с \(1\)) двух элементов массива \(a\), которые используются в \(i\)-й операции. Все \(2n-2\) выведенных индекса должны быть различными целыми числами от \(1\) до \(2n\).

Вам не нужно выводить индексы двух изначально удаленных элементов из массива \(a\).

Если есть несколько возможных ответов, вы можете найти любой.

Примечание

В первом наборе входных данных \(b = \{3+6, 4+5\} = \{9, 9\}\) и \(\mathrm{gcd}(9, 9) = 9\).

Во втором наборе входных данных \(b = \{9+10\} = \{19\}\) и \(\mathrm{gcd}(19) = 19\).

В третьем наборе входных данных \(b = \{1+2, 3+3, 4+5, 90+3\} = \{3, 6, 9, 93\}\) и \(\mathrm{gcd}(3, 6, 9, 93) = 3\).

C. Игра с числом

игры математика теория чисел *1400

Ashishgup и FastestFinger играют в игру.

Они начинают с целого числа \(n\) и начинают делать ходы по очереди. На каждом ходу игрок может сделать любой из следующих двух ходов:

  • Разделить \(n\) на один из его нечетных делителей, который больше чем \(1\).
  • Вычесть \(1\) из \(n\), если \(n\) больше чем \(1\).

Обратите внимание, что множество делителей числа включает само число.

Если игрок не может сделать ход он проигрывает игру.

Ashishgup ходит первым. Определите победителя игры, если оба игрока играют оптимально.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\))  — количество наборов входных данных. Описание наборов входных данных следует.

В единственной строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \leq n \leq 10^9\)).

Выходные данные

Для каждого набора входных данных, выведите «Ashishgup», если он побеждает в игре и «FastestFinger» иначе (без кавычек).

Примечание

В первом наборе входных данных \(n = 1\) и Ashishgup не может сделать ход. Он проигрывает.

Во втором наборе входных данных \(n = 2\) и Ashishgup вычитает \(1\) на первом ходу. Теперь \(n = 1\) и FastestFinger не может сделать ход, поэтому он проигрывает.

В третьем наборе входных данных \(n = 3\) и Ashishgup делит на \(3\) на первом ходу. Теперь \(n = 1\) и FastestFinger не может сделать ход, поэтому он проигрывает.

В последнем наборе входных данных \(n = 12\) и Ashishgup делит на \(3\) на первом ходу. Теперь \(n = 4\), FastestFinger может только вычесть \(1\) и Ashishgup получает число \(3\). Наконец, он побеждает после деления этого числа на \(3\).

A. Волшебные палочки

математика *800

У пингвина Rocher есть \(n\) палочек — у него ровно одна палочка длины \(i\) для всех \(1 \le i \le n\).

Он может соединять некоторые палочки. Если он соединяет две палочки, которые имеют длины \(a\) и \(b\), он получает одну палочку длины \(a + b\). Две палочки, которые были использованы в этой операции, пропадают из его множества. Новая соединенная палочка появляется в его множестве и может быть использована в следующих соединениях.

Он хочет создать максимальное количество палочек, имеющих одинаковую длину. Не обязательно при этом, чтобы в итоге все палочки имели одинаковую длину — некоторые палочки могут иметь другие длины. Какое максимальное количество палочек одинаковой длины он может получить в итоге?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Следующие \(t\) строк содержат описания наборов входных данных.

Для каждого набора входных данных в единственной строке находится единственное целое число \(n\) (\(1 \le n \le 10^{9}\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число  — ответ на задачу.

Примечание

В третьем наборе входных данных он может соединить две палочки длины \(1\) и \(2\) и он получит одну палочку длины \(3\). Так он получит две палочки одинаковой длины \(3\).

В четвертом наборе входных данных он может соединить две палочки длины \(1\) и \(3\) и он получит одну палочку длины \(4\). После этого у него будет три палочки, имеющие длины \(\{2, 4, 4\}\). Две палочки имеют одинаковую длину и она палочка будет иметь другую длину.

B. Магический календарь

математика *1200

Профессиональный едок Алиса ставит в расписание в своем магическом календаре тренировки для подготовки к очередному контесту по поеданию. Календарь необычен тем, что неделя не обязательно может состоять из \(7\) дней!

Более точно, она может выбрать целое число \(k\), которое удовлетворяет \(1 \leq k \leq r\) и выставить, что неделя состоит из \(k\) дней.

Алиса собирается закрасить некоторые \(n\) последовательных дней в календаре. В этом календаре недели соответсвуют строкам и идут подряд слева направо. Для последнего дня недели первая клетка следующей (снизу) строки соотвествует следующему дню.

Она хочет, чтобы все закрашенные клетки были связны по сторонам. Это означает, что для любых двух закрашенных клеток, должна существовать как минимум одна последовательность закрашенных клеток, начинающаяся в одной из этих клеток и заканчивающаяся в другой, что любые две соседние клетки в этой последовательности имеют общую сторону.

Алиса рассматривает форму закрашенных клеток. Две формы являются одинаковыми, если можно совместить их только с помощью параллельных переносов, паралельных сторонам календаря (то есть перемещая вверх-вниз и вправо-влево).

Например, на картинке неделя состоит из \(4\) дней и Алиса закрашивает \(5\) последовательных дней. [1] и [2] имеют различную форму, но [1] и [3] имеют одинаковую форму.

Алисе интересно узнать какое количество различных форм существует если она установит из скольки дней состоит неделя и выберет последовательные \(n\) дней и закрасит их в календаре, начиная в какой-то день недели. Как уже было сказано до этого, она рассматривает только формы, где все закрашенные клетки связны по сторонам.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Следующие \(t\) строк содержат описания набов входных данных.

Для каждого набора входных данных в единственной строке находится два целых числа \(n\), \(r\) (\(1 \le n \le 10^9, 1 \le r \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число  — ответ на задачу.

Обратите внимание, что ответ на некоторые наборы входных данных не влезает в \(32\)-битный целочисленный тип, поэтому вы должны использовать как минимум \(64\)-битный целочисленный тип вашего языка программирования.

Примечание

В первом наборе входных данных Алиса может выбрать \(1,2,3\) или \(4\) дня, как количество дней, которое будет в неделе.

Всего есть \(6\) возможных раскрасок, которые изображены на рисунке, но среди них есть только \(4\) различные формы. Поэтому, ответ равен \(4\). Обратите внимание, что последний пример на картинке это некорректная раскраска, потому что не все клетки связны по сторонам.

В последнем наборе входных данных будьте аккуратны с возможным переполнением, описанном в формате выходных данных.

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\)-битного целочисленного типа.

E1. Астеризм (простая версия)

Бинарный поиск Комбинаторика математика Перебор сортировки теория чисел *1900

Это простая версия задачи. Различие между версиями заключается в ограничениях на \(n\) и \(a_i\). Вы можете делать взломы, только если обе версии этой задачи сданы.

Сначала Aoi придумал следующую идею для задачи по программированию:

Yuzu девочка, которая коллекционирует конфеты. Изначально, у нее есть \(x\) конфет. Также есть \(n\) врагов, пронумерованных целыми числами от \(1\) до \(n\). Враг \(i\) имеет \(a_i\) конфет.

Yuzu хочет получить перестановку \(P\). Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), расположенных в некотором порядке. Например, \(\{2,3,1,5,4\}\) это перестановка, а \(\{1,2,2\}\) это не перестановка (число \(2\) встречается в массиве дважды) и \(\{1,3,4\}\) тоже не является перестановкой (потому что \(n=3\), но в массиве есть число \(4\)).

После этого, она проведет \(n\) дуэлей с врагами по следующим правилам:

  • Если Yuzu сейчас имеет не меньше конфет, чем враг \(P_i\), она побеждает в дуэли и получает \(1\) конфету. Иначе, она проигрывает дуэль и ничего не получает.
  • Конфета, которую получает Yuzu в случае победы, будет использоваться в следующих дуэлях.

Yuzu хочет победить во всех дуэлях. Сколько существует возможных перестановок \(P\), для которых это произойдет?

Эта задача была простой и неинтересной для Akari, друга Aoi. И Akari придумал следующую задачу, на основе описанной идеи:

Давайте определим \(f(x)\) как количество возможных перестановок для целого числа \(x\).

Вам дано число \(n\), массив \(a\) и простое число \(p \le n\). Назовем целое положительное число \(x\) хорошим, если значение \(f(x)\) не делится на \(p\). Найдите все хорошие числа \(x\).

Решите задачу, предложенную Akari.

Входные данные

В первой строке находится два целых числа \(n\), \(p\) \((2 \le p \le n \le 2000)\). Гарантируется, что число \(p\) является простым (оно имеет ровно два делителя \(1\) и \(p\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le 2000)\).

Выходные данные

В первой строке выведите количество хороших чисел \(x\).

Во второй строке выведите все хорошие числа \(x\) в возрастающем порядке.

Гарантируется, что количество хороших чисел \(x\) не превосходит \(10^5\).

Примечание

В первом тесте \(p=2\).

  • Если \(x \le 2\) тогда нет ни одной перестановки, подходящей для Yuzu. Поэтому \(f(x)=0\) для \(x \le 2\). Заметим, что \(0\) делится на \(2\), поэтому ни одно число \(x \leq 2\) не хорошее.
  • Если \(x = 3\), то \(\{1,2,3\}\) единственная подходящая для Yuzu перестановка. Тогда, \(f(3)=1\), а значит число \(3\) хорошее.
  • Если \(x = 4\), то \(\{1,2,3\} , \{1,3,2\} , \{2,1,3\} , \{2,3,1\}\) это все перестановки, подходящие для Yuzu. Тогда, \(f(4)=4\), значит число \(4\) не хорошее.
  • Если \(x \ge 5\) , все \(6\) перестановок подходят Yuzu. Тогда, \(f(x)=6\) для всех \(x \ge 5\). Значит ни одно число \(x \ge 5\) не хорошее.

Значит единственное хорошее число это \(3\).

В третьем тесте для всех целых положительных \(x\) значение \(f(x)\) делится на \(p = 3\).

E2. Астеризм (сложная версия)

Бинарный поиск дп Комбинаторика математика сортировки теория чисел *2300

Это сложная версия задачи. Различие между версиями заключается в ограничениях на \(n\) и \(a_i\). Вы можете делать взломы, только если обе версии этой задачи сданы.

Сначала Aoi придумал следующую идею для задачи по программированию:

Yuzu девочка, которая коллекционирует конфеты. Изначально, у нее есть \(x\) конфет. Также есть \(n\) врагов, пронумерованных целыми числами от \(1\) до \(n\). Враг \(i\) имеет \(a_i\) конфет.

Yuzu хочет получить перестановку \(P\). Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), расположенных в некотором порядке. Например, \(\{2,3,1,5,4\}\) это перестановка, а \(\{1,2,2\}\) это не перестановка (число \(2\) встречается в массиве дважды) и \(\{1,3,4\}\) тоже не является перестановкой (потому что \(n=3\), но в массиве есть число \(4\)).

После этого, она проведет \(n\) дуэлей с врагами по следующим правилам:

  • Если Yuzu сейчас имеет не меньше конфет, чем враг \(P_i\), она побеждает в дуэли и получает \(1\) конфету. Иначе, она проигрывает дуэль и ничего не получает.
  • Конфета, которую получает Yuzu в случае победы, будет использоваться в следующих дуэлях.

Yuzu хочет победить во всех дуэлях. Сколько существует возможных перестановок \(P\), для которых это произойдет?

Эта задача была простой и неинтересной для Akari, друга Aoi. И Akari придумал следующую задачу, на основе описанной идеи:

Давайте определим \(f(x)\) как количество возможных перестановок для целого числа \(x\).

Вам дано число \(n\), массив \(a\) и простое число \(p \le n\). Назовем целое положительное число \(x\) хорошим, если значение \(f(x)\) не делится на \(p\). Найдите все хорошие числа \(x\).

Решите задачу, предложенную Akari.

Входные данные

В первой строке находится два целых числа \(n\), \(p\) \((2 \le p \le n \le 10^5)\). Гарантируется, что число \(p\) является простым (оно имеет ровно два делителя \(1\) и \(p\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le 10^9)\).

Выходные данные

В первой строке выведите количество хороших чисел \(x\).

Во второй строке выведите все хорошие числа \(x\) в возрастающем порядке.

Гарантируется, что количество хороших чисел \(x\) не превосходит \(10^5\).

Примечание

В первом тесте \(p=2\).

  • Если \(x \le 2\) тогда нет ни одной перестановки, подходящей для Yuzu. Поэтому \(f(x)=0\) для \(x \le 2\). Заметим, что \(0\) делится на \(2\), поэтому ни одно число \(x \leq 2\) не хорошее.
  • Если \(x = 3\), то \(\{1,2,3\}\) единственная подходящая для Yuzu перестановка. Тогда, \(f(3)=1\), а значит число \(3\) хорошее.
  • Если \(x = 4\), то \(\{1,2,3\} , \{1,3,2\} , \{2,1,3\} , \{2,3,1\}\) это все перестановки, подходящие для Yuzu. Тогда, \(f(4)=4\), значит число \(4\) не хорошее.
  • Если \(x \ge 5\) , все \(6\) перестановок подходят Yuzu. Тогда, \(f(x)=6\) для всех \(x \ge 5\). Значит ни одно число \(x \ge 5\) не хорошее.

Значит единственное хорошее число это \(3\).

В третьем тесте для всех целых положительных \(x\) значение \(f(x)\) делится на \(p = 3\).

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\).

C. Омкар и бейсбол

Конструктив математика *1500

Патрик любит играть в бейсбол, но иногда он тратит так много часов на пробежки, что его разум начинает затуманиваться! Патрик уверен, что его набранные очки за \(n\) игр соответствуют тождественной перестановке (т.е. в первой игре он набирает \(1\), во второй игре он набирает \(2\) и так далее). Однако, когда он посмотрел на свои записи, он увидел, что все значения перепутаны!

Определим специальный обмен следующим образом: выберите любой подмассив очков и переставьте местами его элементы так, чтобы ни один элемент не оказался в той же позиции, где он был до обмена. Например, выполнение специального обмена на \([1,2,3]\) может дать \([3,1,2]\), но не может дать \([3,2,1]\), так как \(2\) находится в той же позиции.

Вам дана перестановка из \(n\) целых чисел. Пожалуйста, помогите Патрику найти минимальное количество специальных обменов, необходимых для того, чтобы сделать ее отсортированной! Можно доказать, что при данных ограничениях это число не превышает \(10^{18}\).

Массив \(a\) является подмассивом массива \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль или все) элементов из начала и несколько (возможно, ноль или все) элементов с конца.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\))  — длину данной перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1},a_{2},...,a_{n}\) (\(1 \leq a_{i} \leq n\))  — начальную перестановку.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное количество специальных обменов, необходимых для сортировки перестановки.

Примечание

Первая перестановка она уже отсортирована, поэтому обмены не нужны.

Можно показать, что для сортировки второй перестановки нужно как минимум \(2\) обмена.

\([3, 2, 4, 5, 1, 6, 7]\)

Сделаем специальный обмен для диапазона (\(1, 5\))

\([4, 1, 2, 3, 5, 6, 7]\)

Сделаем специальный обмен для диапазона (\(1, 4\))

\([1, 2, 3, 4, 5, 6, 7]\)

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\) долларов во втором магазине.

C. Плюсы и минусы

математика *1300

Вам задана строка \(s\) состоящая только из символов + и -. Вы выполняете некоторый процесс с этой строкой. Этот процесс можно описать следующим псевдокодом:

res = 0
for init = 0 to inf
cur = init
ok = true
for i = 1 to |s|
res = res + 1
if s[i] == '+'
cur = cur + 1
else
cur = cur - 1
if cur < 0
ok = false
break
if ok
break

Обратите внимание, что \(inf\) обозначает бесконечность, а символы строки пронумерованы от \(1\) до \(|s|\).

Вам нужно определить значение переменной \(res\) после выполнения процесса.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\) (\(1 \le |s| \le 10^6\)), состоящую только из символов + и -.

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

На каждый набор входных данных выведите ответ — значение переменной \(res\) после завершения процесса.

A. Необходимый остаток

математика *800

Вам даны три целых числа \(x, y\) и \(n\). Ваша задача — найти максимальное целое число \(k\), такое что \(0 \le k \le n\) и \(k \bmod x = y\), где \(\bmod\) — операция взятия остатка от деления. Во многих языков программирования для нахождения остатка используется оператор процент %.

Другими словами, по заданным \(x, y\) и \(n\) вам нужно найти максимальное возможное целое число от \(0\) до \(n\), имеющее остаток \(y\) при делении на \(x\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных. Гарантируется, что для каждого набора тестовых данных искомое \(k\) существует.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора входных данных содержит три целых числа \(x, y\) и \(n\) (\(2 \le x \le 10^9;~ 0 \le y < x;~ y \le n \le 10^9\)).

Можно показать, что при заданных выше ограничениях искомое \(k\) всегда существует.

Выходные данные

Для каждого набора тестовых данных выведите ответ — максимальное неотрицательное целое число \(k\), что \(0 \le k \le n\) и \(k \bmod x = y\). Гарантируется, что ответ всегда существует.

Примечание

В первом наборе входных данных примера ответ равен \(12339 = 7 \cdot 1762 + 5\) (следовательно, \(12339 \bmod 7 = 5\)). Очевидно, что не существует большего целого числа, не превосходящего \(12345\) и имеющего остаток \(5\) при делении на \(7\).

B. Умножай на 2, дели на 6

математика *900

Вам дано целое число \(n\). За один ход вы можете или умножить \(n\) на 2, или разделить \(n\) на \(6\) (если оно делится на \(6\) без остатка).

Ваша задача — найти минимальное количество ходов, необходимое, чтобы получить \(1\) из \(n\) или определить, что это невозможно.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — минимальное количество ходов, необходимое, чтобы получить \(1\) из \(n\), если это возможно, или -1, если невозможно получить \(1\) из \(n\).

Примечание

Рассмотрим шестой набор тестовых данных примера. Ответ может быть получен следующей последовательностью ходов из заданного числа \(15116544\):

  1. Разделим на \(6\) и получим \(2519424\);
  2. разделим на \(6\) и получим \(419904\);
  3. разделим на \(6\) и получим \(69984\);
  4. разделим на \(6\) и получим \(11664\);
  5. умножим на \(2\) и получим \(23328\);
  6. разделим на \(6\) и получим \(3888\);
  7. разделим на \(6\) и получим \(648\);
  8. разделим на \(6\) и получим \(108\);
  9. умножим на \(2\) и получим \(216\);
  10. разделим на \(6\) и получим \(36\);
  11. разделим на \(6\) и получим \(6\);
  12. разделим на \(6\) и получим \(1\).

D. Массив с нулевым остатком

математика сортировки *1400

Вам задан массив \(a\), состоящий из \(n\) положительных целых чисел.

Изначально у вас есть целое число \(x = 0\). За один ход вы можете совершить одну из следующих двух операций:

  1. Выбрать ровно один индекс \(i\) от \(1\) до \(n\) и увеличить \(a_i\) на \(x\) (\(a_i := a_i + x\)), затем увеличить \(x\) на \(1\) (\(x := x + 1\)).
  2. Просто увеличить \(x\) на \(1\) (\(x := x + 1\)).

Первая операция может быть применена не более одного раза для каждого \(i\) от \(1\) до \(n\).

Ваша задача — найти минимальное количество ходов, необходимое, чтобы получить такой массив, что каждый его элемент без остатка делится на \(k\) (значение \(k\) задано).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5; 1 \le k \le 10^9\)) — длину массива \(a\) и заданный делитель. Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, 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\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — минимальное количество ходов, необходимое, чтобы получить такой массив, что каждый его элемент без остатка делится на \(k\).

Примечание

Рассмотрим первый набор тестовых данных примера:

  1. \(x=0\), \(a = [1, 2, 1, 3]\). Надо просто увеличить \(x\);
  2. \(x=1\), \(a = [1, 2, 1, 3]\). Надо добавить \(x\) ко второму элементу и увеличить \(x\);
  3. \(x=2\), \(a = [1, 3, 1, 3]\). Надо добавить \(x\) к третьему элементу и увеличить \(x\);
  4. \(x=3\), \(a = [1, 3, 3, 3]\). Надо добавить \(x\) к четвертому элементу и увеличить \(x\);
  5. \(x=4\), \(a = [1, 3, 3, 6]\). Надо просто увеличить \(x\);
  6. \(x=5\), \(a = [1, 3, 3, 6]\). Надо добавить \(x\) к первому элементу и увеличить \(x\);
  7. \(x=6\), \(a = [6, 3, 3, 6]\). Мы получили необходимый массив.

Заметьте, что вы не можете добавить \(x\) к одному и тому же элементу больше, чем один раз.

A. Изменение знаков

Конструктив математика *1100

Вам даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\), где \(n\) нечетно. Вы можете поменять знаки некоторых (возможно, всех или ни одного) из них. Вы хотите поменять знаки таким образом, чтобы выполнялись следующие условия:

  • Не менее \(\frac{n - 1}{2}\) среди разностей соседних \(a_{i + 1} - a_i\) для \(i = 1, 2, \dots, n - 1\) больше либо равны \(0\).
  • Не менее \(\frac{n - 1}{2}\) среди разностей соседних \(a_{i + 1} - a_i\) для \(i = 1, 2, \dots, n - 1\) меньше либо равны \(0\).

Найдите любой подходящий способ поменять знаки. Можно показать, что при данных ограничениях всегда существует хотя бы один выбор знаков, который удовлетворяет требуемому условию. Если существует несколько решений, выведите любое из них.

Входные данные

Ввод состоит из нескольких наборов входных данных. В первой строке записано целое число \(t\) (\(1 \le t \le 500\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \le n \le 99\), \(n\) нечетно)  — количество целых чисел, данных вам.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\))   — сами числа.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\), соответствующих целым числам после изменения знаков. \(b_i\) должно быть равно либо \(a_i\), либо \(-a_i\), а также среди разностей соседних \(b_{i + 1} - b_i\) для \(i = 1, \dots, n - 1\), по крайней мере \(\frac{n - 1}{2}\) должна быть неотрицательными, и хотя бы \(\frac{n - 1}{2}\) должна быть неположительными.

Можно показать, что при данных ограничениях всегда существует хотя бы один выбор знаков, который удовлетворяет требуемому условию. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных разница \((-4) - (-2) = -2\) неположительна, а разница \(3 - (-4) = 7\) неотрицательна.

Во втором наборе входных данных нам не нужно менять знаки. Все \(4\) разности равны \(0\), и являются как неположительными, так и неотрицательными.

В третьем наборе входных данных \(7 - (-4)\) и \(4 - (-6)\) неотрицательны, а \((-4) - (-2)\) и \((-6) - 7\) неположительны.

F. Игра с числами

игры интерактив Конструктив математика *2600

Это интерактивная задача.

Антон и Харрис играют в игру, чтобы решить, кто из них является королем проблемсеттинга.

Есть три кучи камней, изначально содержащих \(a\), \(b\), \(c\) камней соответственно, где \(a\), \(b\) и \(c\) являются попарно различными целыми положительными числами. На каждом ходу игры происходит следующая последовательность событий:

  • Первый игрок выбирает положительное целое число \(y\) и передает его второму игроку.
  • Второй игрок добавляет \(y\) камней к одной из куч, с условием, что он не может выбрать одну и ту же кучу в два последовательных хода.

Второй игрок проигрывает, если в какой-то момент две кучи содержат одинаковое количество камней. Первый игрок проигрывает, если прошло \(1000\) ходов без проигрыша второго игрока.

Чувствуя себя уверенно в своем мастерстве, Антон решил позволить Харрису выбрать, хочет он ходить первым или вторым. Помогите Харрису победить Антона и стать королем проблемсеттинга!

Входные данные

Первая строка содержит три различных положительных целых числа \(a\), \(b\), and \(c\) (\(1 \le a, b, c \le 10^9\))  — начальные количества камней в кучах \(1\), \(2\) и \(3\) соответственно.

Протокол взаимодействия

Взаимодействие начинается с чтения целых чисел \(a\), \(b\) и \(c\).

После прочтения выведите одну строку, содержащую "First" или "Second", обозначающую, кем вы хотите играть (за первого или за второго, соответственно).

На каждом ходу первый игрок (вы или интерактор) должен вывести положительное целое число \(y\) (\(1 \le y \le 10^{12}\)).

Затем второй игрок должен вывести \(1\), \(2\) или \(3\), указав, к какой куче должны быть добавлены \(y\) камней. Начиная со второго хода, куча, которую выбирает второй игрок, должна отличаться от кучи, выбранной на предыдущем ходу.

Если вы играете за Second и продержались \(1000\) ходов без проигрыша, или если вы играете за First, и интерактор определил, что он не может сделать ход без проигрыша, интерактор выведет \(0\) и закончит взаимодействие. Это означает, что ваша программа прошла данный тест, и вы должны немедленно завершить программу.

Если вы играете как First и не побеждаете за \(1000\) ходов, или если вы играете как Second и выводите ход, в котором два кучи имеют одинаковое количество камней, или вы выводите невозможный ход как любой из игроков, интерактор выведет \(-1\) и завершит взаимодействие. Вы получите вердикт Wrong Answer. Завершите программу немедленно, чтобы избежать других вердиктов.

После вывода запроса не забудьте вывести перевод строки, и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

В этой задачи взломы отключены.

Примечание

В примере в кучах изначально \(5\), \(2\) и \(6\) камней соответственно. Харрис решает пойти первым и предоставляет Антону число \(2\). Антон добавляет \(2\) камня в третью кучу, что дает \(5\), \(2\) и \(8\).

На следующем ходу Харрис выбирает число \(3\). Обратите внимание, что Антон не может добавить камни в третью кучу, так как он выбрал третью кучу в предыдущем ходу. Антон понимает, что у него не осталось действительных ходов, и неохотно признает Харриса королем.

I. Кубическая решетка

геометрия математика матрицы теория чисел *3500

Кубическая решетка \(L\) в \(3\)-мерном евклидовом пространстве  — это множество точек, определенных следующим образом: \(\)L=\{u \cdot \vec r_1 + v \cdot \vec r_2 + w \cdot \vec r_3\}_{u, v, w \in \mathbb Z}\(\) Где \(\vec r_1, \vec r_2, \vec r_3 \in \mathbb{Z}^3\) это некоторые целочисленные векторы такие, что

  • \(\vec r_1\), \(\vec r_2\) и \(\vec r_3\) попарно ортогональны: \(\)\vec r_1 \cdot \vec r_2 = \vec r_1 \cdot \vec r_3 = \vec r_2 \cdot \vec r_3 = 0\(\) Здесь \(\vec a \cdot \vec b\) обозначает скалярное произведение \(\vec a\) и \(\vec b\).
  • \(\vec r_1\), \(\vec r_2\) и \(\vec r_3\) имеют одинаковую длину: \(\)|\vec r_1| = |\vec r_2| = |\vec r_3| = r\(\)
Вам дан набор \(A=\{\vec a_1, \vec a_2, \dots, \vec a_n\}\) целочисленных точек, \(i\)-я точка имеет координаты \(a_i=(x_i;y_i;z_i)\). Пусть \(g_i=\gcd(x_i,y_i,z_i)\). Гарантируется, что \(\gcd(g_1,g_2,\dots,g_n)=1\).

Вы должны найти кубическую решетку \(L\) такую, чтобы \(A \subset L\) и \(r\) было максимально возможным.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^4\)) — количество точек в \(A\).

\(i\)-я из следующих \(n\) строк содержит целые числа \(x_i\), \(y_i\), \(z_i\) (\(0 < x_i^2 + y_i^2 + z_i^2 \leq 10^{16}\)) — координаты \(i\)-й точки.

Гарантируется, что \(\gcd(g_1,g_2,\dots,g_n)=1\), где \(g_i=\gcd(x_i,y_i,z_i)\).

Выходные данные

В первой строке выведите единственное целое число \(r^2\), квадрат максимально возможного \(r\).

В следующих \(3\) строках выведите координаты векторов \(\vec r_1\), \(\vec r_2\) и \(\vec r_3\) соответственно.

Если есть несколько возможных ответов, выведите любой.

B. Сомнительная криптография

Бинарный поиск математика Перебор теория чисел *1500

Паша любит обмениваться со своим другом положительными целыми числами. Паша заботится о своей безопасности, поэтому он шифрует каждое загаданное натуральное число \(n\) следующим образом. Он заранее выбрал какие-то три целых числа \(a\), \(b\) и \(c\), что \(l \leq a,b,c \leq r\). После этого он вычисляет число \(m = n \cdot a + b - c\) и пересылает его своему другу.

В руки злоумышленника попали три значения: \(l\), \(r\) и \(m\). Может ли злоумышленник «восстановить» параметры \(a\), \(b\) и \(c\)? Какие это могут быть значения?

Иными словами, найдите любую такую тройку чисел \(a\), \(b\) и \(c\), что:

  • \(a\), \(b\) и \(c\) — целые числа,
  • \(l \leq a, b, c \leq r\),
  • существует такое целое положительное \(n\), что \(n \cdot a + b - c = m\).
Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \leq t \leq 20\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Единственная строка набора входных данных содержит три целых числа \(l\), \(r\) и \(m\) (\(1 \leq l \leq r \leq 500\,000\), \(1 \leq m \leq 10^{10}\)). Эти числа таковы, что ответ на задачу существуют.

Выходные данные

Для каждого набора входных данных в единственной строке выведите три целых числа \(a\), \(b\) и \(c\) такие, что \(l \leq a, b, c \leq r\) и существует такое натуральное число \(n\), что \(n \cdot a + b - c = m\). Гарантируется, что такие числа существуют. Если подходящих решений несколько, выведите любое из них.

Примечание

В первом примере было загадано число \(n = 3\), тогда \(n \cdot 4 + 6 - 5 = 13 = m\). Так же возможны такие ответы: \(a = 4\), \(b = 5\), \(c = 4\) (при этом \(n = 3\)); \(a = 5\), \(b = 4\), \(c = 6\) (при этом \(n = 3\)); \(a = 6\), \(b = 6\), \(c = 5\) (при этом \(n = 2\)); \(a = 6\), \(b = 5\), \(c = 4\) (при этом \(n = 2\)).

Во втором примере было загадано число \(n = 1\), тогда \(n \cdot 2 + 2 - 3 = 1 = m\). Число \(n = 0\) не могло быть загадано, так как число \(n\) обязательно должно быть натуральным.

E. Перевернутые родословные

Деревья дп Конструктив математика разделяй и властвуй *2800

Учёный Иван Иванович изучает перевёрнутые родословные. Перевёрнутая родословная представляет собой набор людей, про каждого из которых известны либо оба его родителя, либо не известен ни один родитель. Кроме того, известно, что у всех людей из родословной есть ровно один ребёнок, кроме одного человека, у которого детей вовсе нет. Поэтому, если пронумеровать людей целыми числами от \(1\) до \(n\), то можно обозначить за \(s_i\) номер ребёнка человека с номером \(i\) и сказать, что \(s_i = 0\) в случае, если у человека с номером \(i\) детей нет.

Назовём человека \(a\) предком человека \(b\), если либо \(a = b\), либо если у \(a\) есть ребёнок, который является предком человека \(b\). Это значит, что человек \(a\) является предком для \(a\), \(s_a\), \(s_{s_a}\) и так далее.

Будем считать, что произошёл перекос родословной с участием некоторого человека, если известны оба его родителя и количество известных предков одного из его родителей хотя бы вдвое больше, чем количество известных предков второго родителя.

Иван Иванович посчитал количество перекосов родословной и получил число \(k\), но, конечно же, он делал это вручную и мог ошибиться. Помогите проверить Ивану Ивановичу его вычисления: скажите, существует ли родословная из \(n\) людей с \(k\) перекосами, и если существует, то приведите пример подобной родословной.

Входные данные

В единственной строке задано два целых числа \(n\) и \(k\) (\(1 \leq n \leq 100\,000\), \(0 \leq k \leq n\)) — количество людей в родословной и количество перекосов в ней.

Выходные данные

В первой строке выведите «YES» (без кавычек), если существует родословная с \(n\) людьми и \(k\) перекосами, и «NO» (без кавычек) в противном случае.

Если требуемая родословная существует, то во второй строке выведите \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) (\(0 \leq s_i \leq n\)), задающих номера детей людей в родословной. Если искомых родословных несколько, выведите любую.

Примечание

В первом примере подойдет единственная родословная, которую можно составить из трёх человек (человек и два его родителя).

Во втором примере подойдет следующая родословная:

В человеке номер один происходит перекос, так как у одного его родителя один предок, а у второго — три.

D. Берсерк и Огненный Шар

жадные алгоритмы Конструктив математика реализация *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\).

E. Оригами

геометрия математика сортировки *3300

После того, как вы получили 13 вердиктов time-limit-exceeded по ужасной геометрической задаче, вы решили сделать расслабляющий перерыв и позаниматься оригами.

Есть лист бумаги в форме простого многоугольника с \(n\) вершинами. Многоугольник может быть невыпуклым, но мы все знаем, что настоящий лист бумаги для оригами имеет свойство, что любая горизонтальная прямая пересекает границу многоугольника не больше, чем в двух точках.

Если вы согнете лист бумаги вдоль вертикальной прямой \(x=f\), какой будет площать полученной фигуры? Когда вы сгибаете лист, часть бумаги слева от прямой симметрично отражается с правой стороны.

Ваша задача ответить на \(q\) независимых запросов для значений \(f_1,\ldots,f_q\).

Входные данные

В первой строке находится два целых числа \(n\), \(q\) (\(3\le n\le 10^5, 1\le q\le 10^5\))  — количество вершин многоугольника и количество запросов, соответственно.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(|x_i|, |y_i|\le 10^5\))  — координаты \(i\)-й вершины многоугольника. Многоугольник состоит из отрезков, соединяющих пары соседних точек во входных данных и отрезка, соединяющего \((x_1,y_1)\) и \((x_n,y_n)\). Гарантируется, что многоугольник невырожденный, что любая горизонтальная прямая пересекает границу многоугольника в не более, чем двух точках. Также гарантируется, что ни одно ребро многоугольника не строго вертикальное. Соседние отрезки многоугольника могут быть параллельными.

Каждая из следующих \(q\) строк содержит единственное целое число \(f_i\) (\(\min\limits_{j=1}^n(x_j)< f_i< \max\limits_{j=1}^n(x_j)\))  — \(x\)-координата \(i\)-го запроса сгиба. Гарантируется, что все \(f_i\) различны.

Выходные данные

Для каждого запроса выведите площадь \(A_i\) бумаги, которая будет, если согнуть лист бумаги вдоль прямой \(x=f_i\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-4}\).

Формально, пусть ваш ответ будет \(a\), а ответ жюри будет \(b\). Ваш ответ будет принят тогда и только тогда, когда \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-4}\).

Примечание

В первом тесте, если сделать сгиб в \(f=-5\):

Во втором тесте, если сделать сгиб в \(f=1\):

В третьем тесте, если сделать сгиб в \(f=-1\):

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\), поэтому Коа выигрывает.

A. Три попарных максимума

математика *800

Вам даны три положительных (то есть строго больших, чем 0) целых числа \(x\), \(y\) и \(z\).

Ваша задача — найти такие положительные целые числа \(a\), \(b\) и \(c\), что \(x = \max(a, b)\), \(y = \max(a, c)\) и \(z = \max(b, c)\), или определить, что невозможно найти такие значения \(a\), \(b\) и \(c\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных. Вы можете выводить требуемые \(a\), \(b\) и \(c\) в любом (произвольном) порядке.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит три целых числа \(x\), \(y\), and \(z\) (\(1 \le x, y, z \le 10^9\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него:

  • «NO» единственной строкой, если решения не существует;
  • или «YES» первой строкой и любую подходящую тройку положительных целых чисел \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 10^9\)) второй строкой. Вы можете выводить \(a\), \(b\) и \(c\) в любом порядке.

B. Смесь

*особая задача геометрия математика сортировки Структуры данных *2900

Серж, шеф-повар знаменитого ресторана «Соль, Перец & Чеснок» пытается получить свою первую звезду Мишлен. Его уведомили, что сегодня вечером его ресторан посетит секретный эксперт.

Несмотря на то, что имя эксперта не разглашено, Серж знает его вкусовые предпочтения, а также, какое блюдо он закажет. Кроме прочего, он знает, что эксперту нравится исключительно точная пропорция соли, перца и чеснока в его блюде.

Серж хранит у себя несколько бутылок со смесями соли, перца и чесночного порошка на особой полке на кухне. Он знает точное количество каждого ингредиента в каждой бутылке в килограммах. Серж может использовать любое количество бутылок смесей (или ровно одну из них напрямую), чтобы получить смесь нужных пропорций для своего блюда.

К счастью, количество смеси, которой нужно добавить к блюду, настолько мало, что количества смеси в каждой бутылке всегда будет достаточно. Однако, числа, описывающие пропорции, могут быть весьма большими.

Серж хочет узнать, возможно ли получить любимую смесь эксперта из доступных бутылок, и если да — чему равняется наименьшее количество бутылок, нужных для этого.

Более того, множество бутылок на полке может меняться со временем, так как Серж получает новые бутылки и одалживает свои другим поварам. Поэтому он хотел бы узнать ответ на свой вопрос после каждого такого изменения.

Например, допустим, что любимая смесь эксперта является \(1:1:1\) и на полке находятся три бутылки со смесями:

\(\) \begin{array}{cccc} \hline \text{Mixture} & \text{Соль} & \text{Перец } & \text{Чесночный порошок} \\ \hline 1 & 10 & 20 & 30 \\ 2 & 300 & 200 & 100 \\ 3 & 12 & 15 & 27 \\ \hline \end{array} \(\) Количество ингредиента в бутылке, кг

Чтобы получить нужную смесь, достаточно использовать одинаковое количество смесей из бутылок 1 и 2. Если бутылка 2 отсутствует, то больше нет возможности получить нужную смесь.

Напишите программу, которая поможет Сержу решить эту задачу!

Входные данные

Первая строка ввода содержит три неотрицательных целых числа \(S_f\), \(P_f\) и \(G_f\) (\(0 \leq S_f, P_f, G_f\); \(0 < S_f+P_f+G_f \leq 10^6\)), которые описывают количество соли, перца и чесночного порошка в любимой смеси эксперта. Для любого вещественного \(\alpha>0\), \((\alpha{S_f}, \alpha{P_f}, \alpha{G_f})\) тоже является любимой смесью эксперта.

Во второй строке дано целое положительное число \(N\) (количество изменений на полке, \(N \leq 100\,000\)). Изначально полка пуста.

Каждая из следующих \(N\) строк описывает одно изменение на полке:

  • Если добавляется новая бутылка, строка содержит заглавную букву \(A\), за которой следуют три неотрицательных целых числа \(S_i\), \(P_i\) и \(G_i\) (\(0 \leq S_i, P_i, G_i\); \(0 < S_i+P_i+G_i \leq 10^6\)) описывающих количество соли, перца и чесночного порошка в новой бутылке. Добавленные бутылки нумеруются последовательными целыми числами, начиная с \(1\), то есть, \(i\)-я бутылка соответствует \(i\)-й добавленной бутылке во вводе.
  • Если конкретная бутылка убирается с полки, строка содержит заглавную букву \(R\), за которой следует целое число, номер этой бутылки, \(r_i\). Все значения \(r_i\) среди убираний различны, и \(r_i\) никогда не превышает общее количество в данный момент добавленных бутылок.
Выходные данные

Выведите \(N\) строк. В \(j\)-й строке (\(1 \leq j \leq N\)) выведите число \(x_j\), наименьшее количество бутылок, которое нужно использовать для приготовления любимой смеси эксперта с нужной пропорцией соли, перца и чесночного порошка, при условии, что на полке доступны только бутылки после первых \(j\) изменений. Если же такую смесь нельзя приготовить, просто выведите \(0\).

Система оценки

Подзадачи:

  1. (13 баллов) \(N \leq 50\), \(0 < S_i+P_i+G_i \leq 10^2\)
  2. (17 баллов) \(N \leq 500\), \(0 < S_i+P_i+G_i \leq 10^3\)
  3. (30 баллов) \(N \leq 5000\), \(0 < S_i+P_i+G_i \leq 10^4\)
  4. (40 баллов) Без дополнительных ограничений.
Примечание

Обратите внимание, что в данном примере бутылки \(1\) и \(3\) содержат одинаковое количество соли, перца и чесночного порошка.

A. Граф

*особая задача Бинарный поиск дп математика поиск в глубину и подобное Тернарный поиск *2100

Дан неориентированный граф, в котором каждое ребро покрашено либо в чёрный цвет, либо в красный цвет.

Ваша задача присвоить каждой вершине по вещественному числу таким образом, что:

  • сумма чисел на обеих концах каждого чёрного ребра равна \(1\);
  • сумма чисел на обеих концах каждого красного ребра равна \(2\);
  • сумма модулей всех присвоенных чисел наименьшая возможная.

Если это не возможно, выведите, что не существует такого комплекта чисел.

Входные данные

Первая строка содержит два целых числа \(N\) (\(1 \leq N \leq 100\,000\)) и \(M\) (\(0 \leq M \leq 200\,000\)): количество вершин и рёбер, соответственно. Вершины пронумерованы последовательными числами \(1, 2, \ldots, N\).

Следующие \(M\) строк содержат описание рёбер. Каждая строка содержит три целых числа \(a\), \(b\) и \(c\), которые обозначают, что между вершинами \(a\) и \(b\) (\(1 \leq a, b \leq N\)) есть ребро цвета \(c\) (\(1\) обозначает чёрное, \(2\) обозначает красное).

Выходные данные

Если решение существует, выведите в первой строке слово «YES» и во второй строке выведите \(N\) чисел. Для каждого \(i\) (\(1 \le i \le N\)), \(i\)-е из этих чисел должно равняться числу, присвоенному вершине с номером \(i\).

Вывод должен соответствовать следующим ограничениям точности:

  • сумма чисел на концах каждого ребра должна отличаться от нужной суммы для этого ребра меньше, чем на \(10^{-6}\);
  • сумма модулей всех присвоенных чисел отличается от наименьшего возможного меньше, чем на \(10^{-6}\).

Если существует несколько решений, выведите любое из них.

Если решения не существует, выведите одно слово «NO».

Система оценки

Подзадачи:

  1. (5 баллов) \(N \leq 5\), \(M \leq 14\)
  2. (12 баллов) \(N \leq 100\)
  3. (17 баллов) \(N \leq 1000\)
  4. (24 баллов) \(N \leq 10\,000\)
  5. (42 баллов) Без дополнительных ограничений.
Примечание

Примите во внимание, что во втором примере решение не уникальное.

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\).

Второй набор первого теста:

У всех жителей страны уже испортилось настроение в столице. Это единственный возможный вариант развития событий.

Первый набор второго теста:

Второй набор второго теста:

Можно показать, что требуемые значения индексов счастья недостижимы в обоих наборах второго теста.

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\) (если существует несколько возможных решений, выведите любое из них).

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\), а потому, не нужно делать ни одного шага.

E. Неоднозначность календаря

математика теория чисел *2200

Берляндский год состоит из \(m\) месяцев, в каждом месяце по \(d\) дней. Месяца пронумерованы от \(1\) до \(m\). Берляндская неделя состоит из \(w\) дней. Первый день года также является и первым днем недели. Обратите внимание, что последняя неделя года может быть короче \(w\) дней.

Пара \((x, y)\) такая, что \(x < y\), неоднозначна, если день \(x\) месяца \(y\) выпадает на тот же день недели, что и день \(y\) месяца \(x\).

Посчитайте количество неоднозначных пар.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк записаны по три целых числа \(m\), \(d\) and \(w\) (\(1 \le m, d, w \le 10^9\)) — количество месяцев в году, количество дней в месяце и количество дней в неделе.

Выходные данные

Выведите \(t\) целых чисел — на каждый набор входных данных выведите количество пар \((x, y)\) таких, что \(x < y\), и день \(x\) месяца \(y\) выпадает на тот же день недели, что и день \(y\) месяца \(x\).

Примечание

Пары для первого набора входных данных:

B. Ремонт

математика реализация *1600

После покупки собственной квартиры Боря решил поклеить в каждой комнате обои. В Бориной квартире n комнат, каждая из которых имеет форму прямоугольного параллелепипеда. Про каждую комнату известны длина, ширина и высота стен в метрах (разные комнаты могут иметь разные размеры, в том числе и высоту).

Боря выбрал m типов обоев, которыми он хочет обклеить стены комнат (но не обязательно использовать все типы). Каждый тип обоев продается в рулонах фиксированной длины и ширины (длина, естественно, в размотанном состоянии). Кроме того, для каждого типа известна стоимость одного рулона этого типа.

На обоях каждого типа изображены полоски, идущие вдоль длины рулона. При поклейке полоски обязательно должны располагаться строго вертикально (поэтому рулон нельзя поворачивать, даже если длина меньше ширины). При этом рулоны можно резать произвольным образом, но стыки наклеенных кусков также должны быть вертикальными. Кроме того, в каждой комнате должны использоваться обои только одного типа, и куски одного и того же рулона нельзя клеить в разных комнатах, то есть для каждой комнаты рулоны закупаются отдельно. При этом некоторые рулоны могут быть использованы не полностью.

После покупки квартиры у Бори туго со средствами, поэтому он хочет потратить на обои минимальную сумму. Помогите ему.

Входные данные

В первой строке находится натуральное число n (1 ≤ n ≤ 500) — количество комнат в Бориной квартире.

В каждой из следующих n строк находится по три натуральных числа, разделенных пробелами — длина, ширина и высота стен в метрах очередной комнаты соответственно.

В следующей строке находится натуральное число m (1 ≤ m ≤ 500) — количество доступных типов обоев.

В каждой из следующих m строк находится по три натуральных числа, разделенных пробелами — длина и ширина в метрах, а также стоимость одного рулона очередного типа обоев соответственно.

Все числа во входных данных не превосходят 500. Гарантируется, что каждую комнату можно обклеить, используя данные типы обоев.

Выходные данные

Выведите одно число — минимальную суммарную стоимость рулонов.

Примечание

Комментарий к примеру:

Суммарная длина стен (периметр) комнаты — 20 м.

Из одного рулона первого типа можно сделать три вертикальные полоски шириной 1 м., значит, нужно 7 рулонов этого типа, цена — 700.

Из рулона второго типа получается пять полосок ширины 2 м., нужно 2 рулона, цена — 640.

Одним рулоном третьего типа получится сразу заклеить 19 м. из 20, но пользоваться другими типами уже нельзя и придется докупать второй, цена — 1000.

A. Орные подмассивы

Конструктив математика *800

Перестановка длины \(n\)  — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\)  — это перестановка, но \([1,2,2]\)  — это не перестановка (\(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве встречается \(4\)).

Для положительного целого числа \(n\) назовем перестановку \(p\) длины \(n\) хорошей, если следующее условие выполняется для каждой пары \(i\) и \(j\) (\(1 \le i \le j \le n\)) —

  • \((p_i \text{ OR } p_{i+1} \text{ OR } \ldots \text{ OR } p_{j-1} \text{ OR } p_{j}) \ge j-i+1\), где \(\text{OR}\) обозначает операцию побитового ИЛИ

Другими словами, перестановка \(p\) является хорошей, если для каждого ее подмассива \(p\), \(\text{OR}\) всех элементов в нем не меньше, чем количество элементов в этом подмассиве.

Для данного положительного целого числа \(n\), выведите любую хорошую перестановку длины \(n\). Мы можем показать, что для данных ограничений такая перестановка всегда существует.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)).

Выходные данные

Для каждого теста выведите любую хорошую перестановку длины \(n\) в отдельной строке.

Примечание

Для \(n = 3\), \([3,1,2]\)  — хорошая перестановка. Некоторые из подмассивов перечислены ниже.

  • \(3\text{ OR }1 = 3 \geq 2\) \((i = 1,j = 2)\)
  • \(3\text{ OR }1\text{ OR }2 = 3 \geq 3\) \((i = 1,j = 3)\)
  • \(1\text{ OR }2 = 3 \geq 2\) \((i = 2,j = 3)\)
  • \(1 \geq 1\) \((i = 2,j = 2)\)

Точно так же вы можете проверить, что \([4,3,5,2,7,1,6]\) тоже хорошая.

C. Циклические перестановки

графы дп Комбинаторика математика *1500

Перестановка длины \(n\)  — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\)  — это перестановка, но \([1,2,2]\)  — это не перестановка (\(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве встречается \(4\)).

Рассмотрим перестановку \(p\) длины \(n\). Построим граф на \(n\) вершинах, используя перестановку следующим образом:

  • Для каждого \(1 \leq i \leq n\) найдите наибольшее значение \(j\), для которого \(1 \leq j < i\) и \(p_j > p_i\), и добавьте неориентированное ребро между вершинами \(i\) и \(j\).
  • Для каждого \(1 \leq i \leq n\) найдите наименьшее значение \(j\), для которого \(i < j \leq n\) и \(p_j > p_i\), и добавьте неориентированное ребро между вершинами \(i\) и \(j\)

В тех случаях, когда таких \(j\) не существует, мы не добавляем ребер. Также обратите внимание, что мы проводим ребра между соответствующими индексами, а не значениями в этих индексах.

Например, рассмотрим случай \(n = 4\) и \(p = [3,1,4,2]\); здесь ребрами графа являются \((1,3),(2,1),(2,3),(4,3)\).

Перестановка \(p\) является циклической, если граф, построенный с использованием \(p\), имеет хотя бы один простой цикл.

Для данного \(n\), найдите число циклических перестановок длины \(n\). Поскольку число может быть очень большим, выведите его по модулю \(10^9+7\).

Пожалуйста, обратитесь к разделу Примечания для формального определения простого цикла.

Входные данные

Первая и единственная строка содержит одно целое число \(n\) (\(3 \le n \le 10^6\)).

Выходные данные

Выведите единственное целое число \(0 \leq x < 10^9+7\), количество циклических перестановок длины \(n\) по модулю \(10^9+7\).

Примечание

Для \(n = 4\) существует \(16\) циклических перестановок. \([4,2,1,3]\)  — одна из таких перестановок, она содержит цикл длины четыре: \(4 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 4\).

Вершины \(v_1\), \(v_2\), \(\ldots\), \(v_k\) образуют простой цикл, если выполняются следующие условия:

  • \(k \geq 3\).
  • \(v_i \neq v_j\) для любой пары индексов \(i\) и \(j\). (\(1 \leq i < j \leq k\))
  • Между \(v_i\) и \(v_{i+1}\) есть ребро для всех \(i\) (\(1 \leq i < k\)), как и между \(v_1\) и \(v_k\)

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\), которые удовлетворяли бы вышеперечисленным требованиям.

B. Омкар и Часы Бесконечности

математика реализация *800

Когда Рэй застрял дома, ему стало очень скучно. Чтобы скоротать время, он просит лорда Омкара использовать силу, сгибающую время: Часы Бесконечности! Однако, Лорд Омкар будет слушать только смертных, которые могут решить следующую задачу:

Вам дан массив \(a\) из \(n\) целых чисел. Вам также дается целое \(k\). Лорд Омкар хочет, чтобы вы сделали с этим массивом \(k\) операций.

Определим одну операцию следующим образом:

  1. Пусть \(d\) равно максимальному значению вашего массива.
  2. Для каждого \(i\) от \(1\) до \(n\) замените \(a_{i}\) на \(d-a_{i}\).

Цель  — предсказать содержимое массива после \(k\) операций. Пожалуйста, помогите Рэю определить, как будет выглядеть окончательный массив!

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5, 1 \leq k \leq 10^{18}\)) — длину вашего массива и количество операций, которые необходимо выполнить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1},a_{2},...,a_{n}\) \((-10^9 \leq a_{i} \leq 10^9)\) — начальное содержимое массива.

Гарантируется, что сумма \(n\) по наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого случая выведите финальную версию массива \(a\) после описанных выше \(k\) операций.

Примечание

В первом наборе входных данных массив изменяется следующим образом:

  • Изначально массив равен \([-199, 192]\). \(d = 192\).

  • После операции массив становится равным \([d-(-199), d-192] = [391, 0]\).

E. Омкар и утка

битмаски интерактив Конструктив математика *2100

Это интерактивная задача

Омкар только что наткнулся на утку! Утка ходит по сетке с \(n\) строками и \(n\) столбцами (\(2 \leq n \leq 25\)), так что сетка содержит в общей сложности \(n^2\) ячеек. Обозначим как \((x, y)\) ячейку в \(x\)-й строке сверху и \(y\)-м столбце слева. Прямо сейчас утка находится в ячейке \((1, 1)\) (ячейка в левом верхнем углу) и хочет дойти до ячейки \((n, n)\) (ячейка в правом нижнем углу), перемещаясь каждую секунду либо вниз на \(1\) ячейку, либо вправо на \(1\) ячейку.

Так как Омкар считает, что утки это весело, он хочет поиграть с вами в игру, основанную на движении утки. Сначала для каждой ячейки \((x, y)\) в сетке вы скажете Омкару целое неотрицательное \(a_{x,y}\), не превышающее \(10^{16}\), а затем Омкар положит \(a_{x,y}\) неинтересных задач в ячейку \((x, y)\). После этого утка начнет свое путешествие с \((1, 1)\) до \((n, n)\). Для каждой ячейки \((x, y)\), которую утка посещает во время своего путешествия (включая ячейки \((1, 1)\) и \((n, n)\)), утка съест \(a_{x,y}\) неинтересных задач в этой ячейке. После того как утка завершит свое путешествие, Омкар измерит ее массу, чтобы определить общее количество \(k\) неинтересных задач, которые утка съела во время своего путешествия, а затем скажет вам \(k\).

Ваша задача, зная \(k\), состоит в том, чтобы точно воспроизвести утиный путь, т.е. точно сказать Омкару, какие клетки утка посетила во время своего путешествия. Чтобы быть уверенным в вашем мастерстве в этой игре, Омкар заставит утку выполнить \(q\) различных путешествий (\(1 \leq q \leq 10^3\)). Обратите внимание, что все путешествия независимы: в начале каждого путешествия ячейка \((x, y)\) все так же будет содержать \(a_{x,y}\) неинтересных задач.

Протокол взаимодействия

Взаимодействие начнется со строки, содержащей одно целое \(n\) (\(2 \leq n \leq 25\)) — количество строк и столбцов в сетке. Считайте его.

Затем ваша программа должна вывести \(n\) строк. \(x\)-я строка должна содержать \(n\) целых чисел \(a_{x,1}, a_{x,2}, \dotsc, a_{x,n}\), удовлетворяющих \(0 \leq a_{x,y} \leq 10^{16}\), где \(a_{x,y}\)  — это количество неинтересных задач, которые Омкар должен поместить в ячейку \((x, y)\).

После этого вы получите одно целое \(q\), количество путешествий, которые совершит утка. Затем последуют \(q\) запросов; каждый запрос будет состоять из одной строки, содержащей целое число \(k\)  — количество неинтересных задач, которые утка съела в этой поездке. После каждого запроса, когда вы определили, что утка посетила ячейки \((x_1, y_1), (x_2, y_2), \dotsc, (x_{2n - 1}, y_{2n - 1})\) в таком порядке (всегда должно выполняться \((x_1, y_1) = (1, 1)\) и \((x_{2n - 1}, y_{2n - 1}) = (n, n)\)), нужно вывести \(2n - 1\) строк, в \(j\)-й из которых должно быть два целых числа \(x_j, y_j\).

Обратите внимание, что если сумма на вашем пути равна \(k\), но ваш путь отличается от загаданного, то ваше решение все еще неверное!

После вывода очередной строки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взлома сначала выведите строку, содержащую \(n\), а затем другую строку, содержащую \(q\). Должно выполняться \(2 \leq n \leq 25\) и \(1 \leq q \leq 1000\). Затем выведите \(q\) путешествий, сделанных уткой в том же формате, как описано выше: для каждого путешествия, если утка посещала ячейки \((x_1, y_1), (x_2, y_2), \dotsc, (x_{2n - 1}, y_{2n - 1})\) в таком порядке, нужно вывести \(2n - 1\) строк, в \(j\)-й строке должны быть два целых числа \(x_j, y_j\). Должно выполняться \((x_1, y_1) = (1, 1)\) и \((x_{2n - 1}, y_{2n - 1}) = (n, n)\). Кроме того, для каждого \(j\) такого, что \(2 \leq j \leq 2n - 1\), должно быть верно, что \(1 \leq x_j, y_j \leq n\) и либо \((x_j, y_j) = (x_{j - 1} + 1, y_{j - 1})\) либо \((x_j, y_j) = (x_{j - 1}, y_{j - 1} + 1)\).

Примечание

Ниже проиллюстрированы три путешествия утки.

\(1 + 2 + 3 + 2 + 10 + 3 + 2 = 23\)

\(1 + 4 + 9 + 0 + 7 + 3 + 2 = 26\)

\(1 + 2 + 3 + 6 + 10 + 3 + 2 = 27\)

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\).

G. Омкар и пироги

битмаски дп кратчайшие пути математика поиск в глубину и подобное *2900

У Омкара есть поднос для пирогов с \(k\) местами (\(2 \leq k \leq 20\)). Каждое место на подносе содержит либо шоколадный пирог, либо тыквенный пирог. Омкару не нравится, как пироги расположены в настоящее время, и у него есть другое идеальное расположение, которое он предпочел бы этому.

Чтобы помочь Омкару, \(n\) эльфов построились в очередь на замену пирогов на подносе. \(j\)-й слева эльф способен поменять пироги на позициях \(a_j\) и \(b_j\) местами.

Чтобы максимально приблизиться к своему идеальному расположению, Omkar может выбрать последовательный подотрезок эльфов и затем пропустить свой поднос через этот подотрезок, начиная слева. Однако, поскольку эльфы приложили столько усилий, чтобы собраться в строку, они просят, чтобы выбранный Омкаром подотрезок содержал как минимум \(m\) (\(1 \leq m \leq n\)) эльфов.

Формально, Omkar может выбрать два целых числа \(l\) и \(r\), удовлетворяющих \(1 \leq l \leq r \leq n\) и \(r - l + 1 \geq m\), после чего сначала будут поменяны пироги в позициях \(a_l\) и \(b_l\), затем пироги в позициях \(a_{l + 1}\) и \(b_{l + 1}\) и т.д. пока, наконец, не будут поменяны местами пироги \(a_r\) и \(b_r\).

Помогите Омкару выбрать подотрезок эльфов таким образом, чтобы количество позиций в итоговой расстановке Омкара, содержащих тот же тип пирога, что и в его идеальной расстановке, было максимально возможным. Обратите внимание, что поскольку Омкар обладает большим воображением, может случиться так, что количество пирогов каждого типа в его первоначальном расположении и в его идеальном расположении не совпадают.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq m \leq n \leq 10^6\) и \(2 \leq k \leq 20\)) — число эльфов, минимальную длину подотрезка и число мест в подносе Омкара соответственно.

Вторая и третья строки содержат по строке длиной \(k\), состоящей из \(0\) и \(1\), которые представляют собой начальное расположение пирогов и идеальное расположение пирогов; \(j\)-й символ в каждой строке равен \(0\), если \(j\)-е место в расположении содержит шоколадный пирог, и равен \(1\), если \(j\)-е место в расположении содержит тыквенный пирог. Не гарантируется, что две строки имеют одинаковое количество \(0\) или одинаковое количество \(1\).

Ниже следуют \(n\) строк. \(j\)-я из этих строк содержит два целых числа \(a_j\) и \(b_j\), (\(1 \leq a_j, b_j \leq k\), \(a_j \neq b_j\)), которые указывают на то, что \(j\)-й эльф слева может поменять местами пироги в подносе на позициях \(a_j\) и \(b_j\).

Выходные данные

Выводите две строки.

Первая строка должна содержать одно целое \(s\) (\(0 \leq s \leq k\)), равное количеству позиций, которые содержат один и тот же тип пирога в окончательном расположении Омкара и в идеальном расположении Омкара; \(s\) должно быть максимально возможным.

Вторая строка должна содержать два целых числа \(l\) и \(r\), удовлетворяющих \(1 \leq l \leq r \leq n\) и \(r - l + 1 \geq m\), обозначающих, что Омкар должен пропустить свой поднос через подотрезок \(l, l + 1, \dots, r\), чтобы добиться конечного расположения в котором есть \(s\) позиций, в которых тот же тип пирога, что и в идеальном расположении.

Если ответов несколько, то можно вывести любой из них.

Примечание

В первом примере, изменения будут проходить вот так:

  • Поменяйте \(1\) и \(3\): 11000 становится 01100
  • Поменяйте \(3\) и \(5\): 01100 становится 01001
  • Поменяйте \(4\) и \(2\): 01001 становится 00011
Окончательная расстановка такая же, как и у идеального пирога 00011, поэтому есть \(5\) позиций с тем же типом пирога, что и в оптимальной.

Во втором примере, изменения будут идти вот так:

  • Поменяйте \(1\) и \(3\): 11000 становится 01100
  • Поменяйте \(1\) и \(5\): 01100 становится 01100
  • Поменяйте \(4\) и \(2\): 01100 становится 00110
  • Поменяйте \(1\) и \(5\): 00110 становится 00110
Окончательная расстановка имеет \(3\) позиции с тем же типом пирога, что и идеальная расстановка 00011, это позиции \(1\), \(2\) и \(4\). В этом случае подотрезок эльфов \((l, r) = (2, 3)\) более оптимален, но этот подотрезок имеет только длину \(2\) и поэтому не удовлетворяет ограничению, заключающемуся в том, что подотрезок должен иметь длину не менее \(m = 3\).

H. ZS тасует карты

дп Комбинаторика математика Теория вероятностей *3000

У zscoder есть колода из \(n+m\) карт, изготовленная по индивидуальному заказу, которая состоит из \(n\) карт пронумерованных от \(1\) до \(n\) и \(m\) джокеров. Так как zscoder одинок, он хочет поиграть с сам с собой, используя эти карты.

Изначально колода перетасовывается в случайном порядке и кладется на стол. У zscoder есть изначально пустое множество \(S\).

Каждую секунду zscoder вытягивает верхнюю карту из колоды.

  • Если на карте написано число \(x\), zscoder снимает карту и добавляет \(x\) в множество \(S\).
  • Если извлеченная карта является джокером, zscoder помещает все карты обратно в колоду и перетасовывает (равномерно случайным образом) все \(n+m\) карт, получая новую колоду (следовательно, новая колода также содержит все карты от \(1\) до \(n\) и \(m\) джокеров). Затем, если \(S\) в настоящее время содержит все элементы от \(1\) до \(n\), игра заканчивается. Перетасовка колоды не занимает времени.

Какое матожидание количества секунд до окончания игры? Можно показать, что ответ можно записать в виде \(\frac{P}{Q}\), где \(P, Q\)  — взаимно простые целые числа, где \(Q \neq 0 \bmod 998244353\). Выведите значение \((P \cdot Q^{-1})\) по модулю \(998244353\).

Входные данные

Единственная строка содержит два целых числа, \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^{6}\)).

Выходные данные

Выведите единственное целое число, значение \((P \cdot Q^{-1})\) по модулю \(998244353\).

Примечание

Для первого примера можно доказать, что ожидаемое время до окончания игры составляет \(5\) секунд.

Для второго примера можно доказать, что ожидаемое время до окончания игры составляет \(\frac{28}{3}\)секунды.

I. Кевин и сетка

бпф графы математика *3300

Когда Кевин был в доме БигМена, внезапно ловушка послала его в сетку из \(n\) строк и \(m\) столбцов.

Ловушка Бигмена задается двумя массивами: массивом \(a_1,a_2,\ldots,a_n\) и массивом \(b_1,b_2,\ldots,b_m\).

В \(i\)-м ряду находится нагреватель, который нагревает строку на \(a_i\) градусов, а в \(j\)-м столбце  — нагреватель, который нагревает столбец на \(b_j\) градусов, так что температура ячейки \((i,j)\) равна \(a_i+b_j\).

К счастью, у Кевина есть костюм с одним параметром \(x\) и двумя режимами:

  • теплостойкость. В этом режиме костюм может выдержать все температуры больше или равные \(x\), но замерзает, как только достигает ячейки с температурой ниже \(x\).
  • холодостойкость. В этом режиме костюм может выдержать все температуры ниже \(x\), но замерзает, как только достигает ячейки с температурой не ниже \(x\).

Как только Кевин приземляется на ячейку, костюм автоматически переходит в режим холодостойкости, если ячейка имеет температуру ниже \(x\), или в режим теплостойкости в противном случае, и не может измениться после этого.

Мы говорим, что две ячейки соседние, если они имеют общую сторону.

Назовем путем последовательность \(c_1,c_2,\ldots,c_k\) ячеек такую, что \(c_i\) и \(c_{i+1}\) соседние для всех \(1 \leq i \leq k-1\).

Скажем, что две ячейки соединены, если между ними есть путь, состоящий только из ячеек, на которые Кевин может наступать.

Связанная компонента  — это максимальный набор попарно связанных ячеек.

Назовем связанную компоненту хорошей, если Кевин может выбраться из сетки, начав в ней, то есть если она содержит хотя бы одну ячейку с границы сетки, и плохой в противном случае.

Чтобы оценить ситуацию, Кевин дает оценку \(1\) каждой хорошей компоненте и \(2\) каждой плохой компоненте.

Итоговой оценкой будет разница между общей оценкой компонент с температурами больше или равными \(x\) и общей оценкой компонентов с температурами меньше \(x\).

Кевин может использовать \(q\) возможных значений \(x\), и для каждого из них Кевин хочет знать итоговую оценку.

Помогите Кевину победить Бигмена!

Входные данные

Первая строка содержит три целых числа \(n\),\(m\),\(q\) (\(1 \leq n,m,q \leq 10^5\))  — количество строк, столбцов и количество возможных значений для \(x\) соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^5\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \leq b_i \leq 10^5\)).

Каждая из следующих \(q\) строк содержит одно целое число \(x\) (\(1 \leq x \leq 2 \cdot 10^5\)).

Выходные данные

Выведите \(q\) строк, в \(i\)-й строке выведите ответ на \(i\)-е возможное значение \(x\) из входных данных.

Примечание

В первом примере, оценка для компонентов с температурой менее \(5\) составляет \(1+2\), а оценка для компонентов с температурой хотя бы \(5\) составляет \(2\). Таким образом, итоговая оценка составляет \(2-3=-1\).

A. Радуга, Флаттершай и шахматная раскраска

жадные алгоритмы математика *800

Одним вечером Радуга и Флаттершай придумали игру. Так как пони дружат, то и в игре они решили не соревноваться, а вместе двигаться к общей цели.

Игра начинается на квадратном плоском поле, у которого изначально выложены внешние границы. У Радуги и Флаттершай есть квадратные плоские фишки размера \(1\times1\), у Радуги бесконечное число голубых фишек, у Флаттершай бесконечное число желтых фишек.

Фишки выкладываются по следующему правилу: каждая новая выкладываемая фишка должна соприкасаться стороной с уже построенной фигурой (внешняя граница игрового поля считается построенной изначально). На очередном ходу одна пони может выложить любое количество фишек своего цвета в соответствие с правилами игры.

Радуга и Флаттершай догадались, что таким образом можно выкладывать различные узоры на игровом поле. Они решили начать с чего-то простого, поэтому решили выложить фишки так, чтобы они образовали шахматную раскраску. Радуга славится своей скоростью, поэтому ей стало интересно, за какое минимальное количество ходов они с Флаттершай смогут получить шахматную раскраску, закрыв все поле фишками. Помогите ей найти это количество!

Так как пони могут играть много раз на разных досках, Радуга просит найти минимальное количество ходов для нескольких игровых полей.

Напоминаем, что шахматная раскраска поля в два цвета — та, в которой любая клетка соседствует по стороне только с клетками другого цвета.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 100\)) — количество игровых полей. Каждая из следующих \(T\) строк содержит одно целое число \(n\) (\(1 \le n \le 10^9\)) — сторона поля.

Выходные данные

Для каждого игрового поля выведите минимальное количество ходов, чтобы выложить на нем шахматную раскраску из фишек.

Примечание

Для поля \(3\times3\) пони могут сделать два следующих хода:

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 нравится раскрашивать шары

математика Перебор *1000

Boboniu дал вам

  • \(r\) красных шаров,
  • \(g\) зеленых шаров,
  • \(b\) синих шаров,
  • \(w\) белых шаров.

Он разрешил вам применять следующую операцию сколько угодно раз:

  • Взять один красный шар, один зеленый шар и один синий шар и заменить цвет каждого из них на белый.

Вам нужно ответить, возможно ли расположить в ряд все шары, чтобы получить палиндром, после применения описанной операции несколько (возможно ноль) раз.

Входные данные

В первой строке записано одно целое число \(T\) (\(1\le T\le 100\)), описывающее количество наборов входных данных.

Для каждого из \(T\) наборов входных данных, в первой строке записаны четыре целых числа \(r\), \(g\), \(b\) и \(w\) (\(0\le r,g,b,w\le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите «Yes», если возможно расположить в ряд все шары, чтобы получить палиндром, после применения описанной операции несколько (возможно ноль) раз. Иначе, выведите «No».

Примечание

В первом примере вы не можете применить ни одной операции, и соответственно расположить все шары в палиндром тоже нельзя.

Во втором примере после применения одной операции количества шаров поменяются с \((8,1,9,3)\) на \((7,0,8,6)\), а далее один из возможных палиндромов может быть таким: «rrrwwwbbbbrbbbbwwwrrr».

Палиндром это слово, фраза, или последовательность которая читается одинаково. Например, «rggbwbggr», «b», «gg» — палиндромы, а «rgbb», «gbbgr» — нет.

B. Степенная последовательность

математика Перебор сортировки теория чисел *1500

Назовем последовательность положительных чисел \(a_0, a_1, ..., a_{n-1}\) степенной последовательностью, если найдется такое положительное целое число \(c\), что для всех \(0 \le i \le n-1\), \(a_i = c^i\).

Вам дана последовательность из \(n\) положительных чисел \(a_0, a_1, ..., a_{n-1}\), вам разрешается:

  • Переупорядочить последовательность (иначе говоря, выбрать перестановку \(p\) из \(\{0,1,...,n - 1\}\) и заменить \(a_i\) на \(a_{p_i}\)), и затем
  • Выполнить следующую операцию любое количество раз: выбрать индекс \(i\) и заменить \(a_i\) на \(a_i - 1\) или \(a_i + 1\) (иначе говоря, уменьшить или увеличить \(a_i\) на \(1\)) за стоимость \(1\).

Найдите минимальную стоимость, необходимую для превращения \(a_0, a_1, ..., a_{n-1}\) в степенную последовательность.

Входные данные

В первой строке записано одно целое число \(n\) (\(3 \le n \le 10^5\)).

Во второй строке записаны \(n\) целых чисел \(a_0, a_1, ..., a_{n-1}\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Выведите минимальную стоимость, необходимую для превращения \(a_0, a_1, ..., a_{n-1}\) в степенную последовательность.

Примечание

В первом примере сначала можно переупорядочить \(\{1, 3, 2\}\) в \(\{1, 2, 3\}\), затем увеличить \(a_2\) до \(4\) за стоимость \(1\), чтобы получить степенную последовательность \(\{1, 2, 4\}\).

A. Плохой треугольник

геометрия математика *800

Вам задан массив \(a_1, a_2, \dots , a_n\), отсортированный в порядке неубывания (\(a_i \le a_{i + 1})\).

Найдите три индекса \(i\), \(j\), \(k\), таких что \(1 \le i < j < k \le n\) и невозможно создать невырожденный треугольник (треугольник с ненулевой площадью) со сторонами \(a_i\), \(a_j\) и \(a_k\) (например, возможно создать невырожденный треугольник со сторонами \(3\), \(4\) и \(5\), но невозможно со сторонами \(3\), \(4\) и \(7\)). Или определите, что не существует таких три индекса.

Входные данные

Первая строка содержит одно число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(3 \le n \le 5 \cdot 10^4\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le 10^9\); \(a_{i - 1} \le a_i\)) — массив \(a\).

Гарантируется, что сумма всех \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ в отдельной строке.

Если существует тройка индексов \(i\), \(j\), \(k\) (\(i < j < k\)), такая что невозможно создать невырожденный треугольник (треугольник с ненулевой площадью) со сторонами \(a_i\), \(a_j\) и \(a_k\), выведите эти три индекса в порядке возрастания. Если существует несколько ответов, выведите любой из них.

Иначе выведите -1.

Примечание

В первом наборе входных данных невозможно составить невырожденный треугольник со стронами \(6\), \(11\) и \(18\). Обратите внимание, что это не единственный правильный ответ.

Во втором наборе входных данных вы всегда можете составить невырожденный треугольник.

C. Хорошие подотрезки

дп математика Структуры данных *1600

Вам задан массив \(a_1, a_2, \dots , a_n\), состоящий из чисел от \(0\) до \(9\). Подотрезок этого массива \(a_l, a_{l+1}, a_{l+2}, \dots , a_{r-1}, a_r\) хороший, если сумма чисел на этом подотрезке равна длине этого подотрезка (\(\sum\limits_{i=l}^{r} a_i = r - l + 1\)).

Например, если \(a = [1, 2, 0]\), то есть \(3\) хороших подотрезка: \(a_{1 \dots 1} = [1], a_{2 \dots 3} = [2, 0]\) и \(a_{1 \dots 3} = [1, 2, 0]\).

Посчитайте количество хороших подотрезков массива \(a\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) десятичных цифр, где \(i\)-я цифра равна значению \(a_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ — количество хороших подотрезков массива \(a\).

Примечание

Первый набор входных данных рассмотрен в условии.

Во втором наборе входных данных есть \(6\) хороших подотрезков: \(a_{1 \dots 1}\), \(a_{2 \dots 2}\), \(a_{1 \dots 2}\), \(a_{4 \dots 4}\), \(a_{5 \dots 5}\) и \(a_{4 \dots 5}\).

В третьем наборе входных данных есть только один хороший подотрезок: \(a_{2 \dots 6}\).

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\), и гарантируется, что он знал это заклинание до этого.

Гарантируется, что после каждого изменения все силы заклинаний различны (Поликарп не может знать одновременно два заклинания одинаковой силы).

Выходные данные

После каждого изменения выведите максимально количество урона, которое можно нанести при помощи имеющихся заклинаний.

G. Соревнования по бегу

битмаски бпф математика теория чисел *2600

Скоро начинаются соревнования по бегу. Стадион, на котором планируется их проводить, может быть представлен несколькими отрезками на координатной плоскости:

  • два горизонтальных отрезка: один соединяет точки \((0, 0)\) и \((x, 0)\), другой соединяет точки \((0, y)\) и \((x, y)\);
  • \(n + 1\) вертикальный отрезок, пронумерованные от \(0\) до \(n\). \(i\)-й отрезок соединяет точки \((a_i, 0)\) и \((a_i, y)\); \(0 = a_0 < a_1 < a_2 < \dots < a_{n - 1} < a_n = x\).

Например, на данной картинке изображен стадион с \(x = 10\), \(y = 5\), \(n = 3\) и \(a = [0, 3, 5, 10]\):

Назовем кругом такой маршрут, который проходит по отрезкам, начинается и заканчивается в одно точке и никогда не пересекается сам с собой (единственные две совпадающие точки круга — это стартовая и финишная). Длина круга — это суммарное расстояние, пройденное по нему. Например, красный путь на картинке, обозначающей стадион — это круг длиной \(24\).

Соревнование пройдет в \(q\) этапов. На \(i\)-м этапе длина круга равна \(l_i\), поэтому организаторам предстоит найти круг для каждого этапа такой, что его длина является делителем \(l_i\). Организаторы не хотят выбирать слишком маленькие круги, поэтому на каждом этапе требуется найти максимальный (по длине) подходящий круг.

Помогите организаторам вычислить максимально возможные длины кругов для всех этапов. Другими словами, для каждого \(l_i\) найдите максимальное целое число \(L\) такое, что \(l_i \bmod L = 0\), и существует круг с длиной ровно \(L\).

Если невозможно выбрать такой круг, то выведите \(-1\).

Входные данные

В первой строке записаны три целых числа \(n\), \(x\) и \(y\) (\(1 \le n, x, y \le 2 \cdot 10^5\), \(n \le x\)).

Во второй строке записано \(n + 1\) целое число \(a_0\), \(a_1\), ..., \(a_n\) (\(0 = a_0 < a_1 < a_2 < \dots < a_{n - 1} < a_n = x\)).

В третьей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество этапов.

В четвертой строке записаны \(q\) четных целых чисел \(l_1\), \(l_2\), ..., \(l_q\) (\(4 \le l_i \le 10^6\)) — длины этапов.

Выходные данные

Выведите \(q\) целых чисел. \(i\)-е число должно быть равно максимально возможной длине круга для \(i\)-го этапа, или \(-1\), если невозможно выбрать круг для данного этапа.

C. Четыре отрезка

геометрия Конструктив математика Перебор реализация *1700

Несколько месяцев спустя Лёня всё-таки получил творение брата Вани по почте. И теперь Лёня решил сам похвастаться чем-нибудь перед братом. Немного подумав он понял, что у него нет готовых творений и решил написать программу распознавания прямоугольников. По его замыслу программа по четырём заданным отрезкам определяет образуют ли эти отрезки прямоугольник положительной площади со сторонами параллельными осям координат. Так как Лёня плохо учится в школе и сам не может написать такую программу, он попросил вас помочь ему в этом.

Входные данные

Входные данные состоят из четырёх строк. Каждая строка состоит из четырёх целых чисел x1, y1, x2, y2 ( - 109 ≤ x1, y1, x2, y2 ≤ 109) координаты начала и конца отрезка. Заданные отрезки могут вырождаться в точки.

Выходные данные

Выведите слово «YES» если данные четыре отрезка образуют искомый прямоугольник и «NO» в противном случае.

A. Новогодний стол

геометрия математика *1700

Геральд накрывает новогодний стол. Стол имеет форму круга радиуса R. Геральд пригласил много гостей и обеспокоен вопросом, поместятся ли на столе тарелки для всех них. Считайте, что все тарелки круглые и имеют одинаковые радиусы, равные r. Каждая тарелка должна целиком помещаться на столе и касаться края стола. Разумеется, тарелки не должны пересекаться, однако могут касаться. Помогите Геральду определить, поместятся ли на столе n тарелок для гостей.

Входные данные

В первой строке заданы три целых числа n, R и r (1 ≤ n ≤ 100, 1 ≤ R, r ≤ 1000) — количество тарелок, радиус стола и радиус тарелок.

Выходные данные

Выведите «YES» (без кавычек), если на столе можно разместить n тарелок по описанным правилам, и «NO», если нельзя.

Обратите внимание, что каждая тарелка должна касаться края стола.

Примечание

Возможное расположение тарелок для первого примера:

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\).

D. Зигзаги

Комбинаторика математика Перебор Структуры данных *1900

Вам задан массив \(a_1, a_2 \dots a_n\). Посчитайте количество таких четверок \((i, j, k, l)\), что:

  • \(1 \le i < j < k < l \le n\);
  • \(a_i = a_k\) и \(a_j = a_l\);
Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано единственное целое число \(n\) (\(4 \le n \le 3000\)) — размер массива \(a\).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — сам массив \(a\).

Гарантируется, что сумма \(n\) в одном тесте не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных, выведите количество описанных четверок.

Примечание

В первом наборе входных данных, каждая четверка индексов \(i < j < k < l\) подходит, а потому ответ — это количество четверок.

Во втором наборе, есть только \(2\) подходящих четверки:

  • \((1, 2, 4, 6)\): \(a_1 = a_4\) и \(a_2 = a_6\);
  • \((1, 3, 4, 6)\): \(a_1 = a_4\) и \(a_3 = a_6\).

G. Наемники

битмаски дп Комбинаторика математика Перебор снм *2600

Поликарп играет в (очередную) стратегическую компьютерную игру. В этой игре он управляет армией наемников.

Поликарп хочет собрать свою армию для выполнения задания. Для найма доступны \(n\) наемников, и армия Поликарпа должна состоять из некоторого подмножества множества доступных наемников.

\(i\)-го наемника можно выбрать только в том случае, если итоговое количество выбранных наемников не менее \(l_i\) (иначе этот наемник считает задание слишком опасным) и не более \(r_i\) (он не хочет делить добычу со слишком большим количеством других наемников). Кроме того, \(m\) пар наемников ненавидят друг друга, и из каждой такой пары можно взять на задание не более одного наемника.

Сколько непустых подмножеств наемников Поликарп должен рассмотреть? Другими словами, посчитайте количество подмножеств наемников, которые не содержат пар наемников, ненавидящих друг друга, и размер которых принадлежит отрезку \([l_i, r_i]\) для каждого наемника из подмножества.

Ответ может быть очень большим, поэтому посчитайте его по модулю \(998244353\).

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 3 \cdot 10^5\), \(0 \le m \le \min(20, \dfrac{n(n-1)}{2})\)) — количество наемников и количество пар наемников, ненавидящих друг друга, соответственно.

Далее следуют \(n\) строк, в \(i\)-й из которых заданы два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

Далее следуют \(m\) строк, в \(i\)-й из которых заданы два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i < b_i \le n\)), обозначающих, что наемники \(a_i\) и \(b_i\) ненавидят друг друга. Все заданные пары различны.

Выходные данные

Выведите одно целое число — количество подмножеств, удовлетворяющих условию задачи, взятое по модулю \(998244353\).

A. Дистанция и ось

Конструктив математика *900

Вам задана точка \(A\) с координатой \(x = n\) на оси \(OX\). Вам хотелось бы найти такую целочисленную точку \(B\) (также на оси \(OX\)), что модуль разности между расстоянием от \(O\) до \(B\) и расстоянием от \(A\) до \(B\) равен \(k\).

Описание первого набора входных данных.

Так как иногда невозможно найти такую точку \(B\), вы можете за один шаг увеличить или уменьшить координату \(A\) на \(1\). Какое минимальное количество шагов необходимо сделать, чтобы такая точка \(B\) существовала?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 6000\)) — количество наборов входных данных.

В единственной строке каждого набора заданы два целых числа \(n\) и \(k\) (\(0 \le n, k \le 10^6\)) — первоначальная позиция точки \(A\) и желаемый модуль разности.

Выходные данные

Для каждого набора входных данных, выведите минимальное количество шагов, необходимых для существования точки \(B\).

Примечание

В первом наборе входных данных (изображение выше), если мы выберем координату \(B\) как \(2\), то модуль разности будет равен \(|(2 - 0) - (4 - 2)| = 0\) и нам не нужно передвигать \(A\). Поэтому ответ равен \(0\).

Во втором наборе входных данных, мы можем увеличить координату \(A\) на \(3\) и выбрать координату \(B\) как \(0\) или \(8\). Модуль разности в таком случае будет равен \(|8 - 0| = 8\), то есть ответ равен \(3\).

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\}\)

C. Просто массив

Конструктив математика сортировки теория чисел *1300

Вам задан массив \(a_1, a_2, \dots, a_n\), в котором все \(a_i\) — целые и больше \(0\).

За одну операцию вы можете выбрать две различные позиции \(i\) и \(j\) (\(1 \le i, j \le n\)). Если \(gcd(a_i, a_j)\) равен минимуму всего массива \(a\), то вы можете поменять местами \(a_i\) и \(a_j\). \(gcd(x, y)\) означает наибольших общий делитель (НОД) чисел \(x\) и \(y\).

Вам нужно сделать массив \(a\) неубывающим, используя заданную операцию произвольное количество раз (возможно, ни разу). Определите, возможно ли это.

Массив \(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\)) — сам массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора, выведите «YES», если возможно сделать массив \(a\) неубывающим, используя описанную выше операцию, или «NO» в противном случае.

Примечание

В первом и третьем наборах, массив уже неубывающий.

Во втором наборе, мы можем сначала свапнуть \(a_1\) и \(a_3\), а потом \(a_1\) и \(a_5\), и получим неубывающий массив.

В четвертом наборе, невозможно сделать массив неубывающим, используя заданную операцию.

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\).

A. Fancy Fence

*особая задача математика реализация снм сортировки Структуры данных *1800

Everybody knows that Balázs has the fanciest fence in the whole town. It's built up from \(N\) fancy sections. The sections are rectangles standing closely next to each other on the ground. The \(i\)th section has integer height \(h_i\) and integer width \(w_i\). We are looking for fancy rectangles on this fancy fence. A rectangle is fancy if:

  • its sides are either horizontal or vertical and have integer lengths
  • the distance between the rectangle and the ground is integer
  • the distance between the rectangle and the left side of the first section is integer
  • it's lying completely on sections
What is the number of fancy rectangles? This number can be very big, so we are interested in it modulo \(10^9+7\).
Input

The first line contains \(N\) (\(1\leq N \leq 10^{5}\)) – the number of sections. The second line contains \(N\) space-separated integers, the \(i\)th number is \(h_i\) (\(1 \leq h_i \leq 10^{9}\)). The third line contains \(N\) space-separated integers, the \(i\)th number is \(w_i\) (\(1 \leq w_i \leq 10^{9}\)).

Output

You should print a single integer, the number of fancy rectangles modulo \(10^9+7\). So the output range is \(0,1,2,\ldots, 10^9+6\).

Scoring
\( \begin{array}{|c|c|c|} \hline \text{Subtask} & \text{Points} & \text{Constraints} \\ \hline 1 & 0 & \text{sample}\\ \hline 2 & 12 & N \leq 50 \: \text{and} \: h_i \leq 50 \: \text{and} \: w_i = 1 \: \text{for all} \: i \\ \hline 3 & 13 & h_i = 1 \: \text{or} \: h_i = 2 \: \text{for all} \: i \\ \hline 4 & 15 & \text{all} \: h_i \: \text{are equal} \\ \hline 5 & 15 & h_i \leq h_{i+1} \: \text{for all} \: i \leq N-1 \\ \hline 6 & 18 & N \leq 1000\\ \hline 7 & 27 & \text{no additional constraints}\\ \hline \end{array} \)
Note

The fence looks like this:

There are 5 fancy rectangles of shape:

There are 3 fancy rectangles of shape:

There is 1 fancy rectangle of shape:

There are 2 fancy rectangles of shape:

There is 1 fancy rectangle of shape:

C. Chess Rush

*особая задача дп Комбинаторика математика реализация *3200

The mythic world of Chess Land is a rectangular grid of squares with \(R\) rows and \(C\) columns, \(R\) being greater than or equal to \(C\). Its rows and columns are numbered from \(1\) to \(R\) and \(1\) to \(C\), respectively.

The inhabitants of Chess Land are usually mentioned as pieces in everyday language, and there are \(5\) specific types of them roaming the land: pawns, rooks, bishops, queens and kings. Contrary to popular belief, chivalry is long dead in Chess Land, so there are no knights to be found.

Each piece is unique in the way it moves around from square to square: in one step,

  • a pawn can move one row forward (i.e. from row \(r\) to \(r+1\)), without changing columns;
  • a rook can move any number of columns left/right without changing rows OR move any number of rows forward/backward without changing columns;
  • a bishop can move to any square of the two diagonals intersecting at its currently occupied square;
  • a queen can move to any square where a rook or a bishop could move to from her position;
  • and a king can move to any of the \(8\) adjacent squares.
In the following figure, we marked by X the squares each piece can move to in a single step (here, the rows are numbered from bottom to top, and the columns from left to right).

Recently, Chess Land has become a dangerous place: pieces that are passing through the land can get captured unexpectedly by unknown forces and simply disappear. As a consequence, they would like to reach their destinations as fast (i.e. in as few moves) as possible, and they are also interested in the number of different ways it is possible for them to reach it, using the minimal number of steps – because more paths being available could mean lower chances of getting captured. Two paths are considered different if they differ in at least one visited square.

For this problem, let us assume that pieces are entering Chess Land in a given column of row \(1\), and exit the land in a given column of row \(R\). Your task is to answer \(Q\) questions: given the type of a piece, the column it enters row \(1\) and the column it must reach in row \(R\) in order to exit, compute the minimal number of moves it has to make in Chess Land, and the number of different ways it is able to do so.

Input

The first line contains three space-separated integers \(R\), \(C\), and \(Q\) \((1 \leq Q \leq 1000\), \(2 \leq C \leq 1000\) and \(C \leq R \leq 10^9)\) – the number of rows and columns of Chess Land, and the number of questions, respectively. Then \(Q\) lines follow.

Each line consists of

  • a character \(T\), corresponding to the type of the piece in question ('P' for pawn, 'R' for rook, 'B' for bishop, 'Q' for queen and 'K' for king);
  • two integers \(c_1\) and \(c_R\), \(1\leq c_1,c_R\leq C\), denoting that the piece starts from the \(c_1\)-th column of row \(1\), and has to reach the \(c_R\)-th column of row \(R\).
Output

You have to print \(Q\) lines, the \(i\)-th one containing two space separated integers, the answer to the \(i\)-th question: the first one is the minimal number of steps needed, the second is the number of different paths available using this number of steps. Since the answer can be quite large, you have to compute it modulo \(10^9+7\).

If it is impossible to reach the target square, output the line "0 0".

Scoring
\( \begin{array}{|c|c|l|} \hline \text{Subtask} & \text{Points} & \text{Constraints} \\ \hline 1 & 0 & \text{samples}\\ \hline 2 & 8 & T\in\{\text{'P','R','Q'}\}\text{, i.e. all pieces are pawns, rooks or queens} \\ \hline 3 & 15 & T=\text{'B' and } \: C,R\leq 100 \\ \hline 4 & 22 & T=\text{'B'} \\ \hline 5 & 5 & T=\text{'K' and }\:C,R\leq 100\:\text{and}\:Q\leq 50 \\ \hline 6 & 8 & T=\text{'K' and }\:C,R\leq 100\\ \hline 7 & 15 & T=\text{'K' and }\:C\leq 100\\ \hline 8 & 20 & T=\text{'K'}\\ \hline 9 & 7 & \text{no additional constraints}\\ \hline \end{array} \)
Note

You can download the above example and an additional (bigger) sample input here: https://gofile.io/d/GDzwfC

D. Игра Пар

интерактив Конструктив математика поиск в глубину и подобное теория чисел *2800

Это интерактивная задача.

Дано целое число \(n\). Два игрока, First и Second играют в следующую игру:

  1. First берет \(2n\) целых чисел \(1, 2, \dots, 2n\), и разбивает их на \(n\) попарно непересекающихся пар по своему усмотрению.
  2. Затем, Second выбирает ровно одно число из каждой пары (тоже по своему усмотрению).

Чтобы определить победителя игры, мы вычисляем сумму чисел, выбранных Second. Если сумма всех этих чисел кратна \(2n\), то выигрывает Second. Иначе выигрывает First.

Вам дано \(n\). Выберите каким игроком вы будете играть и выиграйте игру.

Протокол взаимодействия

Начните взаимодействие с чтения целого числа \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

После прочтения выведите единственную строку, содержащую либо First, либо Second, обозначающую, за кого вы хотите играть. Взаимодействие затем варьируется в зависимости от того, за кого вы решили играть.

Если вы выбрали First, выведите единственную строку, содержащую \(2n\) целых чисел \(p_1, p_2, \dots, p_{2n}\), обозначающих, что число \(i\) принадлежит к \(p_i\)-й паре для \(1\le i \le 2n\). Таким образом, должно выполняться \(1 \le p_i \le n\), а каждое число от \(1\) до \(n\) включительно должно встречаться ровно дважды.

Если вы выбрали игру Second, то интерактор выведет \(2n\) целых чисел \(p_1, p_2, \dots, p_{2n}\), что означает, что число \(i\) принадлежит к \(p_i\)-й паре. В ответ в единственной строке выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Они должны содержать ровно по одному числу из каждой пары.

Независимо от того, какого игрока вы выбрали, интерактор прекратит работу, выведя единственное целое число: \(0\), если ваш ответ на тестовый случай правильный (то есть вы играете за First и он не может выбрать подходящие числа из ваших пар, или если вы играете за Second и сумма выбранных вами чисел кратна \(2n\)), или \(-1\), если он неправильный. Ваша программа должна завершиться сразу после прочтения этого числа.

Если в какой-то момент вы сделаете некорректное взаимодействие, то интерактор выведет \(-1\) и завершит взаимодействие. Вы получите вердикт Неверный ответ. Убедитесь в том, что вы немедленно прекращаете работу, чтобы избежать получения других вердиктов.

После вывода очередной строки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взлома используйте следующий формат:

Первая строка содержит целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка содержит \(2n\) целых чисел \(p_1, p_2, \dots, p_{2n}\), обозначающих, что число \(i\) принадлежит к паре \(p_i\)-th, если взламываемое решение решает играть как Second. Если взламываемое решение выбирает играть как First, то эти пары не имеют значения, но \(p_1, p_2, \dots, p_{2n}\) все равно должны формировать разбиение \(1, 2, \dots, 2n\) на \(n\) непересекающихся пар.

Примечание

В первом примере \(n = 2\), и вы решили играть как Second. Интерактор выбирает пары \((1, 2)\) и \((3, 4)\), а вы отвечаете числами \(1\) и \(3\). Это правильный выбор, так как он содержит ровно одно число из каждой пары, а сумма \(1 + 3 = 4\) делится на \(4\).

Во втором примере снова \(n = 2\), и вы играете как Первый. Вы выбираете пары \((2, 4)\) и \((1, 3)\). Интерактор не может выбрать число из каждой пары так, чтобы их сумма делилась на \(4\), поэтому ответ верен.

Обратите внимание, что примеры предназначены только для иллюстрации протокола взаимодействия и необязательно соответствуют поведению реального интерактора.

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\}\) является возможным выбором разделения.

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)\) является возможным выбором.

E. Удаление чисел

интерактив математика теория чисел *2600

Это интерактивная задача.

Загадано неизвестное целое число \(x\) (\(1\le x\le n\)). Вы хотите найти \(x\).

Сначала у вас есть множество целых чисел \(\{1, 2, \ldots, n\}\). Вы можете сделать следующие операции не более \(10000\) раз:

  • A \(a\): узнать, сколько есть чисел, делящихся на \(a\) в текущем множестве.
  • B \(a\): узнать, сколько есть чисел, делящихся на \(a\) в текущем множестве и затем удалить все числа, делящиеся на \(a\) из множества. При этом число \(x\) не будет удаляться никогда (даже если оно делится на \(a\)). В этой операции \(a\) должно быть больше \(1\).
  • C \(a\): вы делаете эту операцию, если вы знаете, что \(x=a\). Эта операция может быть выполнена только один раз.

Обратите внимание, что в операции типа B должно выполняться, что \(a>1\).

Напишите программу, которая найдет значение числа \(x\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\le n\le 10^5\)). Остальные части входных данных будут получены в процессе взаимодействия.

Протокол взаимодействия

Каждый раз, ваша программа должна вывести строку, содержащую один символ A, B или C и целое число \(a\) (\(1\le a\le n\) для операций A и C, \(2\le a\le n\) для операций B). Эта строка описывает операцию, которую вы выполняете.

Если ваша операция имеет тип C, ваша программа должна завершиться немедленно.

Иначе ваша программа должна считать единственное целое число, являющееся ответом на вашу операцию.

После вывода каждой строки не забывайте сбрасывать буфер потока вывода. Для этого используйте:

  • fflush(stdout) в C/C++;
  • System.out.flush() в Java;
  • sys.stdout.flush() в Python;
  • flush(output) в Pascal;
  • Обратитесь к документации для других языков.

Гарантируется, что число \(x\) зафиксировано и не будет меняться в процессе взаимодействия.

Взломы:

Чтобы сделать взлом, используйте следующий формат входных данных:

В единственной строке находятся два целых числа \(n\), \(x\) (\(1 \leq x \leq n \leq 10^5\)).

Примечание

Обратите внимание, что для того, чтобы сделать тест из примера более понятным, мы добавили пустые строки. Вам не нужно выводить никаких пустых строк в процессе взаимодействия.

В первом тесте \(n=10\) и \(x=4\).

Изначальное множество — это \(\{1,2,3,4,5,6,7,8,9,10\}\).

В первой операции вы спрашиваете, сколько чисел делятся на \(4\) и удаляете их. Ответ \(2\), потому что есть два числа, делящиеся на \(4\): \(\{4,8\}\). Число \(8\) будет удалено, но \(4\) нет, потому что число \(x\) никогда не удаляется. Теперь множество — это \(\{1,2,3,4,5,6,7,9,10\}\).

Во второй операции вы спрашиваете, сколько чисел являются делятся на \(2\). Ответ равен \(4\), потому что четыре числа делятся на \(2\): \(\{2,4,6,10\}\).

В третьей операции вы спрашиваете, сколько чисел делятся на \(8\). Ответ равен \(0\), потому что ни одно из чисел в текущем множестве не делится на \(8\).

В четвертой операции вы сообщаете, что вы знаете, что \(x=4\). Это является правильным ответом.

A. Ахахахахахахахаха

Конструктив математика *1100

У Александры есть массив \(a\) четной длины, состоящий из чисел \(0\) и \(1\). Элементы массива пронумерованы от \(1\) до \(n\). Она хочет удалить из него не более \(\frac{n}{2}\) элементов (где \(n\) — его длина) таким образом, чтобы знакопеременная сумма массива была равна \(0\) (т.е. \(a_1 - a_2 + a_3 - a_4 + \dotsc = 0\)). Иными словами, Александра хочет, чтобы сумма всех элементов на нечетных позициях была равна сумме всех элементов на четных позициях. Элементы, которые вы удаляете, не обязаны быть последовательными.

К примеру, если у нее был массив \(a = [1, 0, 1, 0, 0, 0]\), и она удалила \(2\)-й и \(4\)-й элементы, то \(a\) станет равным \([1, 1, 0, 0]\) и его знакопеременная сумма будет равна \(1 - 1 + 0 - 0 = 0\).

Помогите ей!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^3\), \(n\) четное)  — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 1\))  — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

Для каждого набора входных данных сначала выведите число \(k\) (\(\frac{n}{2} \leq k \leq n\)) — число элементов, которые останутся после удаления. В следующей строке выведите \(k\) чисел, которые не будут удалены, в том порядке, в котором они идут в массиве \(a\). Обратите внимание, вам надо вывести сами числа, а не их индексы.

Можно показать, что ответ всегда существует. Если существует несколько ответов, выведите любой из них.

Примечание

В первом и втором наборах входных данных знакопеременная сумма массива, очевидно, равна \(0\).

В третьем наборе входных данных знакопеременная сумма массива равна \(1 - 1 = 0\).

В четвертом наборе входных данных знакопеременная сумма уже равна \(1 - 1 + 0 - 0 = 0\), мы можем ничего не удалять.

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\).

C. Шоколадный заяц

интерактив Конструктив математика *1600

Это интерактивная задача.

Мы загадали перестановку \(p\) длины \(n\) из элементов от \(1\) до \(n\). Вам надо ее отгадать. Чтобы это сделать, вы можете сказать нам 2 различных индекса \(i\) и \(j\), и мы вам скажем, чему равняется \(p_{i} \bmod p_{j}\) (остаток от деления \(p_{i}\) на \(p_{j}\)).

У нас хватит терпения на то, чтобы ответить на \(2 \cdot n\) запросов; вам нужно уложиться в это ограничение. Сможете ли вы это сделать?

Напомним, что перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — это перестановка, но \([1,2,2]\) — это не перестановка (\(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Единственная строка содержит целое число \(n\) (\(1 \le n \le 10^4\)) — длину перестановки.

Протокол взаимодействия

Взаимодействие начинается с чтения числа \(n\).

Далее вы можете задать максимум \(2 \cdot n\) запросов следующего вида:

  • «? x y» (\(1 \le x, y \le n, x \ne y\)).

После каждого запроса вам необходимо считать целое число \(k\), равное \(p_x \bmod p_y\).

Когда вы отгадаете перестановку, выведите в одной строку «! » (без кавычек) и массив \(p\), после чего завершите работу.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Ваша программа должна немедленно завершиться после прочтения ответа «-1», вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Формат взломов

В первой строке выведите \(n\) (\(1 \le n \le 10^4\)). Во второй строке выведите перестановку из \(n\) чисел \(p_1, p_2, \ldots, p_n\).

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\).

C. Дискретное ускорение

Бинарный поиск дп математика реализация *1500

Рассмотрим дорогу длиной \(l\) метров. Начало дороги имеет координату \(0\), конец дороги имеет координату \(l\).

Есть две машины, первая стоит в начале дороги, вторая стоит в конце дороги. Они начинают ехать одновременно. Первая машина будет ехать от начала дороги к концу, вторая машина будет ехать от конца дороги к началу.

Изначально они будут ехать со скоростью \(1\) метр в секунду. Есть \(n\) флажков, расположенных в различных координатах \(a_1, a_2, \ldots, a_n\). Каждый раз, когда любая из двух машин проезжает мимо флажка, скорость этой машины увеличивается на \(1\) метр в секунду.

Найдите, через какое время машины встретятся (их координаты совпадут).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^4\)): количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n\), \(l\) (\(1 \leq n \leq 10^5\), \(1 \leq l \leq 10^9\)): количество флажков и длина дороги.

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) в возрастающем порядке (\(1 \leq a_1 < a_2 < \ldots < a_n < l\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное вещественное число: время, через которое машины встретятся.

Ваш ответ будет признан правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\). Более формально, если ваш ответ \(a\) и ответ жюри \(b\), ваш ответ будет признан правильным, если \(\frac{|a-b|}{\max{(1, b)}} \leq 10^{-6}\).

Примечание

В первом наборе входных данных машины встретятся в координате \(5\).

Первая машина будет в координате \(1\) через \(1\) секунду, и после этого ее скорость увеличится на \(1\) и станет равной \(2\)-м метрам в секунду. Через \(2\) секунды машина окажется в координате \(5\). Итак, первая машина будет в координате \(5\) через \(3\) секунды.

Вторая машина будет в координате \(9\) через \(1\) секунду, и после этого ее скорость увеличится на \(1\) и станет равной \(2\)-м метрам в секунду. Через \(2\) секунды машина окажется в координате \(5\). Итак, вторая машина будет в координате \(5\) через \(3\) секунды.

Во втором наборе входных данных через \(1\) секунду первая машина будет в координате \(1\) и будет иметь скорость, равную \(2\)-м метрам в секунду; вторая машина будет в координате \(9\) и будет иметь скорость \(1\) метр в секунду. Поэтому после этого они встретятся через \(\frac{9-1}{2+1} = \frac{8}{3}\) секунд. Итак, ответ равен \(1 + \frac{8}{3} = \frac{11}{3}\).

I. Битовая магия

дп математика *3200

Вам дано положительное целое число \(k\) и массив \(a_1, a_2, \ldots, a_n\) неотрицательных различных чисел от \(k\) до \(2^c-1\).

В каждую из следующих \(k\) секунд один элемент выбирается случайно равновероятно из всех \(n\) элементов и уменьшается на \(1\).

Для каждого целого числа \(x\), \(0 \leq x \leq 2^c - 1\), вам нужно найти вероятность, что в конце побитовый XOR всех чисел в массиве равен \(x\).

Каждое из этих значений может быть представлено в виде несократимой дроби \(\frac{p}{q}\), и вам нужно найти \(p \cdot q^{-1}\) по модулю \(998\,244\,353\).

Входные данные

В первой строке находятся три целых числа \(n, k, c\) (\(1 \leq n \leq (2^c - k)\), \(1 \leq k \leq 16\), \(1 \leq c \leq 16\)).

Во второй строке находятся \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(k \leq a_i \leq 2^c-1\)).

Выходные данные

Выведите \(2^c\) целых чисел: вероятность, что побитовой XOR в конце равен \(x\), для всех \(x\) среди \(\{0, 1, \ldots, 2^c-1\}\) по модулю \(998\,244\,353\).

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\).

C. Ещё одно восстановление массива

математика Перебор теория чисел *1200

У нас есть секретный массив. Вы не знаете этот массив, и вам нужно его восстановить. Однако, вам известны некоторые факты об этом массиве:

  • Массив состоит из \(n\) различных положительных (больше \(0\)) целых чисел.
  • Массив содержит два элемента \(x\) и \(y\) (вам известны эти элементы) такие, что \(x < y\).
  • Если отсортировать массив по возрастанию (таким образом, что \(a_1 < a_2 < \ldots < a_n\)), то разности между всеми соседними (последовательными) элементами равны (то есть \(a_2 - a_1 = a_3 - a_2 = \ldots = a_n - a_{n-1})\).

Можно доказать, что такой массив всегда существует при ограничениях, заданных ниже.

Среди всех возможных массивов, удовлетворяющих данным условиям, мы просим восстановить массив, имеющий минимально возможный максимальный элемент. Другими словами, необходимо минимизировать \(\max(a_1, a_2, \dots, a_n)\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит три целых числа \(n\), \(x\) и \(y\) (\(2 \le n \le 50\); \(1 \le x < y \le 50\)) — длину массива и два элемента, которые представлены в массиве, соответственно.

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\)\(i\)-й элемент загаданного массива. Если существует несколько подходящих ответов, вы можете выбрать любой (это также означает, что порядок элементов не имеет значения).

Можно доказать, что такой массив всегда существует при заданных ограничениях.

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\).

B. Классики

геометрия математика *1400

Вот уже прошла почти половина зимы, и Маша мечтает о лете. Санки и коньки ей уже надоели, сегодня всю ночь ей снились классики. Это очень популярная детская игра, в которой игровое поле — классики — выглядит так, как показано на рисунке (все клетки квадратные и нумеруются снизу вверх, клетки в одной строке нумеруются слева направо). Опишем классики цифрами, которые обозначают количество квадратов в строке, начиная с нижней: 1-1-2-1-2-1-2-(1-2)..., где далее повторяется период (1-2).

Система координат задана так, как показано на рисунке. Стороны всех квадратов равны между собой и имеют длину a.

Маша очень умная и сообразительная девочка, и ее волнуют совсем недетские вопросы: если она бросит камешек в точку с координатами (x, y), то попадет ли она в какой-либо квадрат? В случае положительного ответа также требуется определить номер этого квадрата.

Считается, что камешек попал в квадрат, если он находится строго внутри него. То есть камень, упавший на границу квадрата, не считается попавшим.

Входные данные

В единственной строке входных данных записаны три целых числа: a, x, y, где a (1 ≤ a ≤ 100) — сторона квадрата, x и y ( - 106 ≤ x ≤ 106, 0 ≤ y ≤ 106) — координаты камня.

Выходные данные

Выведите номер квадрата, внутрь которого попал камень, или «-1» без кавычек, если камешек на границе какого-то квадрата или вне классиков.

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]\).

G. Нет игры - нет жизни

битмаски игры математика матрицы *2700

Рассмотрим следующую игру Алисы и Боба на ориентированном ациклическом графе. Каждая вершина может содержать произвольное количество фишек. Алиса и Боб совершают ходы по очереди. Первой ходит Алиса. Ход состоит в том, чтобы передвинуть ровно одну фишку по какому-то ребру, исходящему из вершины, в которой сейчас лежит фишка, в конец этого ребра. Проигрывает тот, кто не может сделать ход. Оба играют оптимально.

Рассмотрим следующий процесс, происходящий каждую секунду на данном графе с \(n\) вершинами:

  1. Целое число \(v\) выбирается случайно и равновероятно из \([1, n + 1]\).
  2. Если \(v \leq n\), в \(v\)-ю вершину графа добавляется фишка, а процесс переходит к шагу 1.
  3. Если \(v = n + 1\), Алиса и Боб играют в описанную выше игру на данном графе с текущим расположением фишек, определяется победитель этой игры. После чего, процесс завершается.

Найдите вероятность победы Алисы. Можно показать, что ответ можно представить в виде \(\frac{P}{Q}\), где \(P\) и \(Q\) — взаимно простые целые числа, \(Q \not\equiv 0 \pmod{998\,244\,353}\). Выведите значение \(P \cdot Q^{-1} \bmod 998\,244\,353\).

Входные данные

В первой строке даны два целых числа \(n\) и \(m\) — количество вершин и ребер в графе (\(1 \leq n \leq 10^5\), \(0 \leq m \leq 10^5\)).

Затем следует \(m\) строк, в \(i\)-й из которых содержатся два целых числа \(u_i\) и \(v_i\) — начало и конец \(i\)-го ребра (\(1 \leq u_i, v_i \leq n\)). Гарантируется, что граф является ациклическим.

Выходные данные

В единственной строке выведите вероятность победы Алисы по модулю \(998\,244\,353\).

A. В поисках Саске

Конструктив математика *800

Наруто пробрался в логово Орочимару и пытается найти Саске. В логове Орочимару есть \(T\) комнат. Каждая дверь в комнату характеризуется количеством печатей \(n\) на ней и целочисленными силами печатей \(a_1\), \(a_2\), ... \(a_n\). Силы печатей \(a_i\) не равны нулю и не превосходят \(100\) по модулю, а \(n\) всегда четно.

Для того чтобы открыть комнату, Наруто необходимо подобрать такие \(n\) печатей с целочисленными силами \(b_1\), \(b_2\), ..., \(b_n\), чтобы \(a_{1} \cdot b_{1} + a_{2} \cdot b_{2} + ... + a_{n} \cdot b_{n} = 0\). Силы печатей Наруто \(b_i\) также должны быть ненулевыми (как и данные \(a_i\)) и не превосходить \(100\) по модулю. Необходимо подобрать печати для всех комнат в логове.

Входные данные

В первой строке задано число \(T\) (\(1 \leq T \leq 1000\)) — количество комнат в логове Орочимару. В следующих строках содержатся описания дверей.

В первой строке описания каждой двери содержится четное число \(n\) (\(2 \leq n \leq 100\)) — количество печатей на двери.

В следующей строке содержится последовательность целых ненулевых чисел \(a_1\), \(a_2\), ..., \(a_n\) через пробел (\(|a_{i}| \leq 100\), \(a_{i} \neq 0\)) — силы печатей.

Выходные данные

Для каждой двери на отдельной строке необходимо вывести последовательность ненулевых целых чисел \(b_1\), \(b_2\), ..., \(b_n\) (\(|b_{i}| \leq 100\), \(b_{i} \neq 0\)) через пробел — силы печатей, необходимые для открытия этой двери. Если есть несколько искомых последовательностей, выведите любую из них. Можно доказать, что ответ всегда существует.

Примечание

Для первой двери Наруто может использовать силы печатей \([-100, 1]\). Необходимое условие будет выполняться: \(1 \cdot (-100) + 100 \cdot 1 = 0\).

Для второй двери Наруто может использовать силы печатей \([1, 1, 1, -1]\). Необходимое условие будет выполняться: \(1 \cdot 1 + 2 \cdot 1 + 3 \cdot 1 + 6 \cdot (-1) = 0\).

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-битный целочисленный тип.

A. Побег из тюрьмы

математика Перебор *800

Некоторая тюрьма может быть представлена в виде прямоугольной таблицы с \(n\) строками и \(m\) столбцами, каждая клетка которой — камера. Таким образом, всего есть \(n \cdot m\) камер. В тюрьме \(n \cdot m\) заключенных, по одному в каждой камере. Обозначим клетку-камеру в \(i\)-й строке и в \(j\)-м столбце как \((i, j)\).

В клетке \((r, c)\) заключенные прорыли тоннель, который можно использовать для побега! Чтобы не попасться, они будут убегать ночью.

В начале ночи каждый заключенный находится в своей клетке. Когда наступает ночь, они могут начать двигаться в соседние клетки. Формально, за одну секунду заключенный, находящийся в клетке \((i, j)\), может переместиться в любую из клеток \(( i - 1 , j )\) , \(( i + 1 , j )\) , \(( i , j - 1 )\) или \(( i , j + 1 )\), если они находятся на территории тюрьмы. Он также может остаться в клетке \((i, j)\).

Заключенные хотят знать минимальное необходимое время для того, чтобы все они смогли собраться в клетке \(( r , c )\). Обратите внимание, что в любой клетке одновременно могут находиться сколько угодно заключенных.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 10^4)\) — количество тестовых случаев.

Каждая из следующих \(t\) строк содержит четыре целых числа \(n\), \(m\), \(r\), \(c\) (\(1 \le r \le n \le 10^9\), \(1 \le c \le m \le 10^9\)).

Выходные данные

Выведите \(t\) строк — ответы для каждого тестового случая.

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]\). В нем нет ни одной инверсии.

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)\), выведите любой из них.

A. Покупка факелов

математика *1000

Вы играете в очень популярную игру, которая называется Cubecraft. Изначально у вас в инвентаре находится одна палка и вы хотите скрафтить \(k\) факелов. Один факел можно скрафтить при помощи одной палки и одного угля.

К счастью, вы встретили очень щедрого странствующего торговца, у которого есть два предложения для обмена:

  • обменять \(1\) палку на \(x\) палок (вы теряете \(1\) палку и получаете \(x\) палок).
  • обменять \(y\) палок на \(1\) уголь (вы теряете \(y\) палок и получаете \(1\) уголь).

В течение одного обмена вы можете использовать только одно из этих двух предложений. Вы можете использовать любые предложения для обмена сколько угодно раз, в любом порядке.

Ваша задача — найти минимальное количество обменов, которое вам необходимо совершить, чтобы вы смогли скрафтить хотя бы \(k\) факелов. Ответ всегда существует при заданных ограничениях.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит три целых числа \(x\), \(y\) и \(k\) (\(2 \le x \le 10^9\); \(1 \le y, k \le 10^9\)) — количество палок, которые вы можете купить за одну палку, количество палок, необходимое для покупки одного угля, и количество факелов, которые вам нужно скрафтить, соответственно.

Выходные данные

Выведите ответ на каждый набор тестовых данных: минимальное количество обменов, которое вам необходимо совершить, чтобы вы смогли скрафтить хотя бы \(k\) факелов. Ответ всегда существует при заданных ограничениях.

F. Одинаковое произведение

математика Структуры данных теория чисел *3000

Вам задано четыре целых числа \(n\), \(m\), \(l\) и \(r\).

Назовем четверку чисел \((x_1, y_1, x_2, y_2)\) хорошей если:

  1. \(1 \le x_1 < x_2 \le n\);
  2. \(1 \le y_2 < y_1 \le m\);
  3. \(x_1 \cdot y_1 = x_2 \cdot y_2\);
  4. \(l \le x_1 \cdot y_1 \le r\).

Найдите любую хорошую четверку для каждого \(x_1\) от \(1\) по \(n\) включительно.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)).

Вторая строка содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le nm\)).

Выходные данные

Для каждого \(x_1\) от \(1\) по \(n\):

  • если такой четверки целых чисел не существует, выведите \(-1\);
  • Иначе, выведите четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\). Если существует несколько возможных ответов, выведите любой из них.

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\).

E. Расшифровка

Конструктив математика реализация теория чисел *2100

Агент по имени Кефир расшифровывает послание, которое содержит только одно составное число \(n\).

Сначала Кефир выписывает по кругу все делители числа \(n\), большие \(1\). Он может задать любой изначальный порядок чисел в кругу.

После этого за одно действие Кефир может выбрать любые два соседние числа в кругу и вставить между ними их наименьшее общее кратное. Он может выполнять такое действие сколько угодно раз.

Послание расшифровано, если любые два соседние числа в кругу не взаимно просты. Заметим, что при заданных ограничениях послание всегда можно расшифровать.

Найдите, за какое минимальное количество действий послание можно расшифровать и как для этого нужно изначально расставить по кругу делители.

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 100)\) — количество наборов входных данных. Следующие \(t\) строк содержат описания наборов входных данных.

В единственной строке каждого набора входных данных находится единственное целое составное число \(n\) \((4 \le n \le 10^9)\)  — число из послания.

Гарантируется, что суммарное количество делителей \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите изначальный порядок делителей, больших \(1\), в кругу. Во второй строке выведите минимальное количество действий, необходимых для того, чтобы расшифровать послание.

Если существует несколько возможных порядков с минимальным количеством действий, выведите любой.

Примечание

В первом наборе входных данных у числа \(6\) три делителя, больших \(1\): \(2, 3, 6\). В любом случае числа \(2\) и \(3\) будут стоять рядом в кругу, и поэтому между ними необходимо вставить их наименьшее общее кратное. После этого в кругу будут числа \(2, 6, 3, 6\), и каждые два соседних числа будут не взаимно просты.

Во втором наборе входных данных у числа \(4\) два делителя, больших \(1\): \(2, 4\), и они не взаимно просты, поэтому вставлять наименьшее общее кратное не нужно.

В третьем наборе входных данных все делители \(30\), большие \(1\), можно расставить в кругу так, чтобы любые два соседние числа не были взаимно просты.

A. Помогите крестьянину

математика Перебор *1600

Жил да был в Тридевятом царстве крестьянин Семеныч, и была у него любимая корова Зорька. Все лето он заготавливал для нее корма на зиму — косил траву, сушил ее, складывал в стога. Будучи продвинутым крестьянином, для удобства хранения Семеныч собирал сено в одинаковые соломенные блоки кубической формы и складывал их у себя в амбаре. За лето упорного труда он заготовил целых A·B·C соломенных блоков, и сложил их в амбаре в виде прямоугольного параллелепипеда в A слоев в высоту, B рядов в слое по C блоков в каждом ряду.

В конце осени Семеныч еще раз зашел в амбар полюбоваться заготовленным за лето кропотливого труда сеном и с ужасом обнаружил, что соломенные блоки валялись в амбаре в полном беспорядке. Оказывается, в амбар тайком пробрались воры и полностью разобрали и унесли один слой блоков на передней, задней, верхней и боковых стенках, в результате чего в амбаре остался параллелепипед из (A - 1) × (B - 2) × (C - 2) соломенных блоков. Чтобы скрыть следы преступления, воры разобрали его на отдельные блоки размером 1 × 1 × 1 и разбросали их по всему амбару. Семеныч насчитал в амбаре после ограбления n соломенных блоков, но забыл числа A, B и C.

Зная число n, найдите минимально возможное и максимально возможное количество соломенных блоков, которое было украдено.

Входные данные

В единственной строке записано целое число n из условия задачи (1 ≤ n ≤ 109).

Выходные данные

Выведите через пробел минимальное и максимальное количество соломенных блоков, которые могли быть похищены ворами.

Учтите, что ответ на задачу может быть довольно большим, поэтому необходимо использовать 64-битный целый тип для вычислений. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Рассмотрим первый тест из примера. Если первоначально в амбаре у Семеныча находился параллелепипед из 32 = 2 × 4 × 4 соломенных блоков, после ограбления в амбаре осталось как раз 4 = (2 - 1) × (4 - 2) × (4 - 2) соломенных блоков. Так воры могли украсть 32 - 4 = 28 соломенных блоков. Если первоначально в амбаре у Семеныча находился параллелепипед из 45 = 5 × 3 × 3 соломенных блоков, после ограбления в амбаре осталось 4 = (5 - 1) × (3 - 2) × (3 - 2) соломенных блоков. Так воры могли украсть 45 - 4 = 41 соломенных блоков. Ни при каких других вариантах первоначального размещения блоков (таких, что после ограбления в амбаре остается ровно 4 блока) из амбара не могло быть похищено менее 28 или более 41 блока.

A. Сортировка кубов

математика сортировки *900

Господи, вы же просто ящики с ногами! Это же ваше единственное назначение — жать на кнопки! Как можно не уметь то, для чего вы были созданы?

О, как смешно! Мы тут уже двенадцать часов торчим, а вы всё еще не закончили. Не понимаю, чего это вам так весело. У вас один час! Решите задачу!

Уитли решил попробовать себя в создании тестовых камер. Он создал отличную камеру, но в ней не хватало лишь одной детали — кубов.

В камеру необходимо было доставить \(n\) кубов. \(i\)-й куб имеет объем \(a_i\).

Уитли необходимо расставить кубы так, чтобы они были отсортированы в порядке неубывания объема. Строго говоря, для каждого \(i>1\) должно выполняться условие \(a_{i-1} \le a_i\).

Для этого Уитли может менять местами две соседние кубы, то есть для любого \(i>1\) можно поменять местами кубы на позициях \(i-1\) и \(i\).

Проблема в том, что Уитли нетерпелив. Если ему придется сделать больше, чем \(\frac{n \cdot (n-1)}{2}-1\) операций обмена, он не захочет делать столь нудную работу.

Уитли надо узнать: можно ли расставить кубы в порядке неубывания обьема, соблюдая все условия?

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находится одно целое положительное число \(n\) (\(2 \le n \le 5 \cdot 10^4\)) — количество кубов.

Во второй строке находятся \(n\) целых положительных чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — объемы кубов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно слово: «YES» (без кавычек), если кубы могут быть отсортированы при заданных условиях, и «NO» (без кавычек) иначе.

Примечание

В первом наборе входных данных возможно отсортировать все кубы, используя \(7\) операций обмена.

Во втором наборе входных данных все кубы уже отсортированы.

В третьем наборе входных данных мы можем сделать \(0\) обменов, однако кубы еще не отсортированы, поэтому отсортировать мы их не можем.

B. Камень и рычаг

битмаски математика *1200

«Плотину надо поднять. Рычагом. Я его дам.

Канал нужно завалить. Камнем. Камень я не дам.»

Данику срочно нужны рычаг и камень! Естественно, проще всего достать их у Ящера-Отшельника.

Ящер дал Данику рычаг просто так, а вот для того, чтобы получить камень, Даник должен был решить следующую задачу:

Дано целое положительное число \(n\), а также массив \(a\), содержащий целые положительные числа. Необходимо найти количество пар индексов \((i,j)\) таких, что \(i<j\) и \(a_i\) \(\&\) \(a_j \ge a_i \oplus a_j\), где \(\&\) обозначает операцию побитового И, в то время как \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Даник решил эту задачу. А сможете ли вы?

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находится одно целое положительное число \(n\) (\(1 \le n \le 10^5\)) — длина массива.

Во второй строке находятся \(n\) целых положительных чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое неотрицательное число — ответ на задачу.

Примечание

В первом наборе входных данных подходит только одна пара чисел: \((4,7)\): для нее \(4\) \(\&\) \(7 = 4\), а \(4 \oplus 7 = 3\).

Во втором наборе входных данных подходит любая пара чисел.

В третьем наборе входных данных подходят две пары чисел: \((6,5)\) и \((2,3)\).

В четвертом наборе входных данных нет подходящих пар.

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\).

A. Ограждение

геометрия математика *800

Юре поставлена задача построить замкнутое ограждение в форме произвольного невырожденного простого четырехугольника. Ему для этого выдали три прямых участка забора с известными длинами \(a\), \(b\), \(c\). Теперь ему нужно понять, какой длины должен быть четвертый участок забора \(d\), чтобы успешно построить ограждение. Ограждение должно быть в форме четырехугольника, стороны которого равны \(a\), \(b\), \(c\), \(d\). Помогите Юре, найдите любую подходящую длину.

Простой невырожденный четырехугольник — это четырехугольник без самопересечений, построенный на четырех точках, никакие три из которых не лежат на одной прямой.

Входные данные

В первой строке задается целое число \(t\) — количество тестовых случаев (\(1 \le t \le 1000\)). В следующих \(t\) строках задаются сами тестовые случаи.

В каждой строке задаются три целых числа \(a\), \(b\) и \(c\) — длины выданных участков забора (\(1 \le a, b, c \le 10^9\)).

Выходные данные

Для каждого теста в отдельной строке выведите целое число \(d\) — длину четвертого участка забора, которая подойдет для успешного выполнения задачи. Если существует несколько решений, то выведите любое из них. Можно показать, что ответ всегда существует.

Примечание

Из отрезков с длинами \(1\), \(2\), \(3\), \(4\) можно составить четырехугольник.

Из отрезков с длинами \(12\), \(34\), \(56\), \(42\) можно составить четырехугольник.

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

C. Торг

дп Комбинаторика математика *1700

Порой сложно прийти к конечной цене в торге. Вот и Саша с Вовой никак не могут прийти к соглашению – Саша стремится назвать цену как можно больше, а Вова — вычеркнуть из нее как можно больше цифр. Т. е. получается так, что Саша называет какое-то целое число \(n\), Вова вычеркивает из него непустую последовательность подряд идущих цифр, а оставшиеся цифры схлопываются в одно число.

Например, если из числа \(1213121\) вычеркнуть подстроку \(1312\), то получится число \(121\).

Допустима, что итоговая цена содержит ведущие нули. Если Вова вычеркнет все цифры, то считается, что получился \(0\).

Саша хочет как-то ограничить Вову, чтобы тот не вычеркнул все число, но, чтобы у него был правильные аргументы для убеждения, ему нужно знать сумму всех чисел, которые могут получиться после того, как Вова сделает вычеркивание.

Помогите Саше посчитать. А так как число может получиться достаточно большим, то считайте его по модулю \(10^9 + 7\).

Входные данные

В первой и единственной строке задается целое число \(n\) (\(1 \le n < 10^{10^5}\)).

Выходные данные

В единственной строке выведите искомую сумму по модулю \(10^9 + 7\).

Примечание

Рассмотрим первый пример.

Вова может вычеркнуть \(1\), \(0\), \(7\), \(10\), \(07\) или \(107\). Получившиеся числа равны \(07\), \(17\), \(10\), \(7\), \(1\), \(0\). Их сумма равна \(42\).

F. Скучные запросы

математика Структуры данных теория чисел *2700

У Юры есть очень самый обыкновенный и скучный массив \(a\) длины \(n\). Казалось бы, ничего скучнее быть не может, но Владик так не думает!

Чтобы сделать массив Юры более скучным, Владик решил сделать \(q\) скучных запросов. Каждый запрос состоит из двух целых чисел \(x\) и \(y\). Далее для вычисления границ \(l\) и \(r\) данного запроса используется формула: \(l = (last + x) \bmod n + 1\), \(r = (last + y) \bmod n + 1\), где \(last\) — это ответ на предыдущий запрос (изначально он равен нулю), а \(\bmod\) — это операция взятия остатка от деления. Если получилось, что \(l > r\), то их значения нужно поменять местами.

Когда Владик наконец посчитал границы \(l\) и \(r\) для текущего запроса, то он захотел узнать значение наименьшего общего кратного (НОК) на отрезке \([l; r]\) для исходного массива \(a\) по модулю \(10^9 + 7\). НОК некоторого набора элементов — это наименьшее натуральное число, которое делится на каждое из чисел данного набора. Посчитанный НОК будет являться ответом на текущий запрос.

Помогите Владику и выведите ответ на каждый запрос!

Входные данные

Первая строка ввода содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество элементов массива.

Следующая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 2 \cdot 10^5\)) — описание элементов массива.

Третья строка ввода содержит единственное целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Следующие \(q\) строк содержат по два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)) — описание очередного запроса.

Выходные данные

Выведите \(q\) целых чисел — ответ на каждый запрос.

Примечание

Пояснение к примеру:

  • границы первого запроса \((0 + 1) \bmod 3 + 1 = 2\) и \((0 + 3) \bmod 3 + 1 = 1\). НОК на отрезке \([1, 2]\) равен \(6\);
  • границы второго запроса \((6 + 3) \bmod 3 + 1 = 1\) и \((6 + 3) \bmod 3 + 1 = 1\). НОК на отрезке \([1, 1]\) равен \(2\);
  • границы третьего запроса \((2 + 2) \bmod 3 + 1 = 2\) и \((2 + 3) \bmod 3 + 1 = 3\). НОК на отрезке \([2, 3]\) равен \(15\);
  • границы четвертого запроса \((15 + 2) \bmod 3 + 1 = 3\) и \((15 + 3) \bmod 3 + 1 = 1\). НОК на отрезке \([1, 3]\) равен \(30\).

F. Coins

математика *2700

A famous gang of pirates, Sea Dogs, has come back to their hideout from one of their extravagant plunders. They want to split their treasure fairly amongst themselves, that is why You, their trusted financial advisor, devised a game to help them:

All of them take a sit at their round table, some of them with the golden coins they have just stolen. At each iteration of the game if one of them has equal or more than 2 coins, he is eligible to the splitting and he gives one coin to each pirate sitting next to him. If there are more candidates (pirates with equal or more than 2 coins) then You are the one that chooses which one of them will do the splitting in that iteration. The game ends when there are no more candidates eligible to do the splitting.

Pirates can call it a day, only when the game ends. Since they are beings with a finite amount of time at their disposal, they would prefer if the game that they are playing can end after finite iterations, and if so, they call it a good game. On the other hand, if no matter how You do the splitting, the game cannot end in finite iterations, they call it a bad game. Can You help them figure out before they start playing if the game will be good or bad?

Input

The first line of input contains two integer numbers \(n\) and \(k\) (\(1 \le n \le 10^{9}\), \(0 \le k \le 2\cdot10^5\)), where \(n\) denotes total number of pirates and \(k\) is the number of pirates that have any coins.

The next \(k\) lines of input contain integers \(a_i\) and \(b_i\) (\(1 \le a_i \le n\), \(1 \le b_i \le 10^{9}\)), where \(a_i\) denotes the index of the pirate sitting at the round table (\(n\) and \(1\) are neighbours) and \(b_i\) the total number of coins that pirate \(a_i\) has at the start of the game.

Output

Print \(1\) if the game is a good game: There is a way to do the splitting so the game ends after finite number of iterations.

Print \(-1\) if the game is a bad game: No matter how You do the splitting the game does not end in finite number of iterations.

Note

In the third example the game has no end, because You always only have only one candidate, after whose splitting you end up in the same position as the starting one.

J. Bubble Cup hypothesis

битмаски дп Конструктив математика *2400

The Bubble Cup hypothesis stood unsolved for \(130\) years. Who ever proves the hypothesis will be regarded as one of the greatest mathematicians of our time! A famous mathematician Jerry Mao managed to reduce the hypothesis to this problem:

Given a number \(m\), how many polynomials \(P\) with coefficients in set \({\{0,1,2,3,4,5,6,7\}}\) have: \(P(2)=m\)?

Help Jerry Mao solve the long standing problem!

Input

The first line contains a single integer \(t\) \((1 \leq t \leq 5\cdot 10^5)\) - number of test cases.

On next line there are \(t\) numbers, \(m_i\) \((1 \leq m_i \leq 10^{18})\) - meaning that in case \(i\) you should solve for number \(m_i\).

Output

For each test case \(i\), print the answer on separate lines: number of polynomials \(P\) as described in statement such that \(P(2)=m_i\), modulo \(10^9 + 7\).

Note

In first case, for \(m=2\), polynomials that satisfy the constraint are \(x\) and \(2\).

In second case, for \(m=4\), polynomials that satisfy the constraint are \(x^2\), \(x + 2\), \(2x\) and \(4\).

K. Lonely Numbers

Бинарный поиск математика теория чисел *1600

In number world, two different numbers are friends if they have a lot in common, but also each one has unique perks.

More precisely, two different numbers \(a\) and \(b\) are friends if \(gcd(a,b)\), \(\frac{a}{gcd(a,b)}\), \(\frac{b}{gcd(a,b)}\) can form sides of a triangle.

Three numbers \(a\), \(b\) and \(c\) can form sides of a triangle if \(a + b > c\), \(b + c > a\) and \(c + a > b\).

In a group of numbers, a number is lonely if it doesn't have any friends in that group.

Given a group of numbers containing all numbers from \(1, 2, 3, ..., n\), how many numbers in that group are lonely?

Input

The first line contains a single integer \(t\) \((1 \leq t \leq 10^6)\) - number of test cases.

On next line there are \(t\) numbers, \(n_i\) \((1 \leq n_i \leq 10^6)\) - meaning that in case \(i\) you should solve for numbers \(1, 2, 3, ..., n_i\).

Output

For each test case, print the answer on separate lines: number of lonely numbers in group \(1, 2, 3, ..., n_i\).

Note

For first test case, \(1\) is the only number and therefore lonely.

For second test case where \(n=5\), numbers \(1\), \(3\) and \(5\) are lonely.

For third test case where \(n=10\), numbers \(1\), \(5\) and \(7\) are lonely.

C. Captain of Knights

математика *3100

Mr. Chanek just won the national chess tournament and got a huge chessboard of size \(N \times M\). Bored with playing conventional chess, Mr. Chanek now defines a function \(F(X, Y)\), which denotes the minimum number of moves to move a knight from square \((1, 1)\) to square \((X, Y)\). It turns out finding \(F(X, Y)\) is too simple, so Mr. Chanek defines:

\(G(X, Y) = \sum_{i=X}^{N} \sum_{j=Y}^{M} F(i, j)\)

Given X and Y, you are tasked to find \(G(X, Y)\).

A knight can move from square \((a, b)\) to square \((a', b')\) if and only if \(|a - a'| > 0\), \(|b - b'| > 0\), and \(|a - a'| + |b - b'| = 3\). Of course, the knight cannot leave the chessboard.

Input

The first line contains an integer \(T\) \((1 \le T \le 100)\), the number of test cases.

Each test case contains a line with four integers \(X\) \(Y\) \(N\) \(M\) \((3 \leq X \leq N \leq 10^9, 3 \leq Y \leq M \leq 10^9)\).

Output

For each test case, print a line with the value of \(G(X, Y)\) modulo \(10^9 + 7\).

D. Danger of Mad Snakes

дп Комбинаторика математика *2300

Mr. Chanek The Ninja is one day tasked with a mission to handle mad snakes that are attacking a site. Now, Mr. Chanek already arrived at the hills where the destination is right below these hills. The mission area can be divided into a grid of size \(1000 \times 1000\) squares. There are \(N\) mad snakes on the site, the i'th mad snake is located on square \((X_i, Y_i)\) and has a danger level \(B_i\).

Mr. Chanek is going to use the Shadow Clone Jutsu and Rasengan that he learned from Lord Seventh to complete this mission. His attack strategy is as follows:

  1. Mr. Chanek is going to make \(M\) clones.
  2. Each clone will choose a mad snake as the attack target. Each clone must pick a different mad snake to attack.
  3. All clones jump off the hills and attack their respective chosen target at once with Rasengan of radius \(R\). If the mad snake at square \((X, Y)\) is attacked with a direct Rasengan, it and all mad snakes at squares \((X', Y')\) where \(max(|X' - X|, |Y' - Y|) \le R\) will die.
  4. The real Mr. Chanek will calculate the score of this attack. The score is defined as the square of the sum of the danger levels of all the killed snakes.

Now Mr. Chanek is curious, what is the sum of scores for every possible attack strategy? Because this number can be huge, Mr. Chanek only needs the output modulo \(10^9 + 7\).

Input

The first line contains three integers \(N\) \(M\) \(R\) \((1 \le M \le N \le 2 \cdot 10^3, 0 \le R < 10^3)\), the number of mad snakes, the number of clones, and the radius of the Rasengan.

The next \(N\) lines each contains three integers, \(X_i\), \(Y_i\), dan \(B_i\) \((1 \le X_i, Y_i \le 10^3, 1 \le B_i \le 10^6)\). It is guaranteed that no two mad snakes occupy the same square.

Output

A line with an integer that denotes the sum of scores for every possible attack strategy.

Note

Here is the illustration of all six possible attack strategies. The circles denote the chosen mad snakes, and the blue squares denote the region of the Rasengan:

So, the total score of all attacks is: \(3.600 + 3.600 + 4.900 + 3.600 + 10.000 + 8.100 = 33.800\).

A. Номер этажа

математика реализация *800

Вася идет в гости к однокласснику Пете. Вася знает, что Петя живет в квартире номер \(n\).

В доме Пети всего один подъезд, причем на первом этаже всего \(2\) квартиры, а на каждом из следующих этажей по \(x\) квартир. Квартиры нумеруются с единицы, начиная с первого этажа. То есть квартиры, находящиеся на первом этаже имеют номера \(1\) и \(2\), квартиры на втором этаже имеют номера с \(3\) до \((x + 2)\), квартиры на третьем этаже имеют номера от \((x + 3)\) до \((2 \cdot x + 2)\), и так далее.

Перед вами стоит задача помочь Васе и определить номер этажа, на котором живет его друг Петя. Считайте, что количества этажей в доме всегда достаточно для того, чтобы в доме была квартира номер \(n\).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит два целых числа \(n\) и \(x\) (\(1 \le n, x \le 1000\)) — номер квартиры, в которой живет Петя и количество квартир на каждом из этажей дома, кроме первого (на первом этаже находятся две квартиры).

Выходные данные

Выведите ответ на каждый набор тестовых данных: номер этажа, на котором живет Петя.

Примечание

В первом наборе тестовых данных примера на первом этаже находятся квартиры с номерами \(1\) и \(2\), на втором этаже находятся квартиры с номерами \(3\), \(4\) и \(5\), на третьем этаже находятся квартиры с номерами \(6\), \(7\) и \(8\). Поэтому Петя живет на третьем этаже.

Во втором наборе тестовых данных примера Петя живет в квартире с номером \(1\), которая находится на первом этаже.

C. Увеличение и копирование

Бинарный поиск Конструктив математика *1100

Изначально вам дан массив \(a\), состоящий из одного элемента \(1\) (\(a = [1]\)).

За один ход вы можете совершить одно из следующих действий:

  • Увеличить какой-то (единственный) элемент \(a\) на \(1\) (выбрать какое-то \(i\) от \(1\) до текущей длины \(a\) и увеличить \(a_i\) на единицу);
  • Дописать копию какого-то (единственного) элемента \(a\) в конец массива (выбрать какое-то \(i\) от \(1\) до текущей длины \(a\) и добавить \(a_i\) в конец массива).

Например, рассмотрим последовательность из пяти ходов:

  1. Вы берете первый элемент \(a_1\), дописываете его копию в конец массива и получаете \(a = [1, 1]\).
  2. Вы берете первый элемент \(a_1\), увеличиваете его на \(1\) и получаете \(a = [2, 1]\).
  3. Вы берете второй элемент \(a_2\), дописываете его копию в конец массива и получаете \(a = [2, 1, 1]\).
  4. Вы берете первый элемент \(a_1\), дописываете его копию в конец массива и получаете \(a = [2, 1, 1, 2]\).
  5. Вы берете четвертый элемент \(a_4\), увеличиваете его на \(1\) и получаете \(a = [2, 1, 1, 3]\).

Ваша задача — найти минимальное количество ходов, необходимое для того, чтобы получить массив с суммой хотя бы \(n\).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 10^9\)) — нижняя граница на сумму массива.

Выходные данные

Выведите ответ на каждый набор тестовых данных: минимальное количество ходов, необходимое для того, чтобы получить массив с суммой хотя бы \(n\).

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\).

Выходные данные

Выведите два целых числа — минимальное и максимальное количество раундов, которое может выиграть Аня.

Примечание

В первом примере Аня может не выиграть ни одного раунда, если покажет, например, сначала ножницы, а потом бумагу, а Боря покажет камень, а потом ножницы. В лучшем случае Аня выиграет один раунд, если, например, сначала покажет бумагу, а потом ножницы, а Боря покажет камень, а потом ножницы.

Во втором примере Аня может не выиграть ни одного раунда, если, например, Боря в каждом раунде будет показывать те же предметы, что и Аня.

В третьем примере Аня всегда показывает бумагу, а Боря всегда показывает камень, поэтому Аня в любом случае выиграет все три раунда.

A. Избегая ноля

математика сортировки *900

Вам дан массив из \(n\) целых чисел \(a_1,a_2,\dots,a_n\).

Вы должны создать массив из \(n\) целых чисел \(b_1,b_2,\dots,b_n\) такой, что:

  • Массив \(b\)  — это перестановка массива \(a\), т.е. он содержит одни и те же значения, и каждое из них встречается одинаковое количество раз в этих массивах. Другими словами, мультимножества \(\{a_1,a_2,\dots,a_n\}\) и \(\{b_1,b_2,\dots,b_n\}\) должны быть равны.

    Например, если \(a=[1,-1,0,1]\), то \(b=[-1,1,1,0]\) и \(b=[0,1,-1,1]\)  — это перестановки \(a\), но \(b=[1,-1,-1,0]\) и \(b=[1,0,2,-3]\)  — это не перестановки \(a\).

  • Для всех \(k=1,2,\dots,n\) сумма первых \(k\) элементов \(b\) не равна нулю. Формально, для всех \(k=1,2,\dots,n\) должно выполняться \(\)b_1+b_2+\cdots+b_k\not=0\,.\(\)

Если массив \(b_1,b_2,\dots, b_n\) с необходимыми свойствами не существует, необходимо вывести NO.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке содержится целое число \(t\) (\(1\le t \le 1000\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 50\))  — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\dots, a_n\) (\(-50\le a_i\le 50\))  — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных, если не существует массива \(b_1,b_2,\dots,b_n\) с требуемыми свойствами, выведите одну строку со словом NO.

В противном случае выведите строку со словом YES, а затем строку с \(n\) целыми числами \(b_1,b_2,\dots,b_n\).

Если существует более одного массива \(b_1,b_2,\dots,b_n\), удовлетворяющего требуемым свойствам, то можно вывести любой из них.

Примечание

Пояснение первого набора входных данных: Массив с нужными свойствами равен \(b=[1,-2,3,-4]\). Для этого массива все выполняется:

  • Первый элемент \(b\) равен \(1\).
  • Сумма первых двух элементов \(b\) равна \(-1\).
  • Сумма первых трех элементов \(b\) равна \(2\).
  • Сумма первых четырех элементов \(b\) равна \(-2\).

Пояснение второго набора входных данных: Поскольку все значения в \(a\) равны \(0\), любая перестановка \(b\) массива \(a\) будет иметь все элементы, равные \(0\), и поэтому для нее явно не сможет быть выполнено второе свойство из условия (например, потому что \(b_1=0\)). Следовательно, в данном случае ответом будет NO.

Пояснение третьего набора входных данных:. Массив с нужными свойствами равен \(b=[1, 1, -1, 1, -1]\). Для этого массива все выполняется:

  • Первый элемент \(b\) равен \(1\).
  • Сумма первых двух элементов \(b\) равна \(2\).
  • Сумма первых трех элементов \(b\) равна \(1\).
  • Сумма первых четырех элементов \(b\) равна \(2\).
  • Сумма первых пяти элементов \(b\) равна \(1\).

Пояснение четвертого набора входных данных: Массив с нужными свойствами равен \(b=[-40,13,40,0,-9,-31]\). Для этого массива все выполняется:

  • Первый элемент \(b\) равен \(-40\).
  • Сумма первых двух элементов \(b\) равна \(-27\).
  • Сумма первых трех элементов \(b\) равна \(13\).
  • Сумма первых четырех элементов \(b\) равна \(13\).
  • Сумма первых пяти элементов \(b\) равна \(4\).
  • Сумма первых шести элементов \(b\) равна \(-27\).

E. Ксумма

битмаски Конструктив математика матрицы теория чисел *2500

У вас есть доска и изначально на ней написано только одно нечетное число \(x\). Ваша цель  — написать на доске число \(1\).

Вы можете писать новые числа на доску, используя две следующие операции.

  • Вы можете взять два числа (не обязательно разные), которые уже написаны на доске, и написать их сумму на доске. Два выбранных вами числа остаются на доске.
  • Вы можете взять два числа (не обязательно разные), которые уже написаны на доске, и записать их побитовое исключающее ИЛИ (XOR) на доске. Два выбранных вами числа остаются на доске.
Выполните последовательность операций так, чтобы в конце число \(1\) находилось на доске.
Входные данные

В единственной строке входа содержится нечетное целое число \(x\) (\(3 \le x \le 999,999\)).

Выходные данные

В первой строке выведите \(q\)  — число выполняемых операций. Затем должны следовать \(q\) строк, каждая из которых описывает одну операцию.

  • Операция "сумма" описывается строкой "\(a\) + \(b\)", где \(a, b\) должны быть целыми числами, уже присутствующими на доске.
  • Операция "'xor" описывается строкой "\(a\) ^\(b\)", где \(a, b\) должны быть целыми числами, уже присутствующими на доске.
Символ операции (+ или ^) должен быть отделен от \(a, b\) пробелами.

Вы можете выполнить не более \(100,000\) операций (т.е. \(q\le 100,000\)), а все числа, записанные на доске, должны быть в диапазоне \([0, 5\cdot10^{18}]\). Можно доказать, что при таких ограничениях требуемая последовательность операций существует. Вы можете вывести любую подходящую последовательность операций.

A. Коробку - тянуть

математика *800

Кролик пытается передвинуть коробку с едой для остальных обитателей зоопарка на координатной плоскости из точки с координатами \((x_1,y_1)\) в точку с координатами \((x_2,y_2)\).

У него есть веревка, которую он может использовать для того, чтобы тянуть коробку. Он может двигать коробку, только если он находится на расстоянии ровно \(1\) от коробки в направлении одной из двух координатных осей. Тогда он может передвинуть коробку в то место, где он сейчас находится, и сам подвинуться на \(1\) в том же направлении.

Например, если коробка находится в точке \((1,2)\), и кролик находится в точке \((2,2)\), он может передвинуть коробку вправо на \(1\), поместив коробку в точку \((2,2)\). Сам кролик переместится в точку \((3,2)\).

Также кролик может переместиться на \(1\) вправо, влево, вверх или вниз, не двигая коробку. В этом случае он не обязательно должен находиться на расстоянии \(1\) от коробки в направлении одной из координатных осей. Чтобы снова передвинуть коробку, он должен снова оказаться в точке рядом с коробкой. Кроме того, кролик не может переместиться в точку с коробкой.

Кролик может стартовать в любой точке. Он тратит \(1\) секунду на то, чтобы переместиться на \(1\) вправо, влево, вверх или вниз независимо от того, тянет ли он коробку при движении или нет.

Определите минимальное время, которое требуется, чтобы переместить коробку из точки \((x_1,y_1)\) в точку \((x_2,y_2)\). Обратите внимание, что неважно, в какой точке при этом в конце окажется кролик.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) \((1 \leq t \leq 1000)\): количество наборов входных данных. Описание наборов входных данных следует.

Каждая из следующих \(t\) строк содержит четыре целых числа \(x_1, y_1, x_2, y_2\) \((1 \leq x_1, y_1, x_2, y_2 \leq 10^9)\), описывающих очередной набор входных данных.

Выходные данные

Для каждого набора входных данных выведите единственное целое число: минимальное время в секундах, которое нужно кролику, чтобы переместить коробку из \((x_1,y_1)\) в \((x_2,y_2)\).

Примечание

В первом наборе входных данных стартовая и конечная позиции коробки это \((1,2)\) и \((2,2)\), соответственно. Конфигурация совпадает с картинкой из условия. Кролику нужна только \(1\) секунда для передвижения коробки. Этот ход изображен на картинке из условия.

Во втором наборе входных данных кролик может начать в \((2,1)\). Он двигает коробку в \((2,1)\), сам перемещаясь в \((3,1)\). Затем он перемещается в \((3,2)\), оттуда в \((2,2)\), не двигая коробку. Затем он двигает коробку в \((2,2)\), сам перемещаясь в \((2,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\).

A. Помогите Василисе Премудрой 2

математика Перебор *1000

Василисе Премудрой из Тридевятого царства, Тридесятого государства ее подруга Хелависа Премудрая из Тридесятого царства, Тридевятого государства в очередной раз прислала чудесный ларчик с секретом. Однако в чем секрет ларчика Василиса Премудрая пока не знает, потому что в очередной раз не может его открыть. Она надеется, что вы в очередной раз поможете ей в этом.

Замок ларчика устроен следующим образом: в нем в виде квадрата 2 × 2 расположено 4 одинаковых углубления для самоцветов, а по краям замка возле углублений написаны некоторые числа. Пример замка изображен на рисунке ниже.

К ларчику прилагаются 9 самоцветов той же формы, что и углубления, на каждом из которых написано одно из чисел от 1 до 9 (каждое из чисел написано ровно на одном из самоцветов). Открыть ларчик можно только после того, как его правильно инкрустировать самоцветами — то есть вставить в каждое углубление на замке ровно по одному самоцвету. При этом суммы чисел по строкам, столбцам, и двум диагоналям квадрата должны совпасть с числами, записанными по краям замка. Например, замок выше откроется, если вставить в углубления самоцветы с числами как на рисунке ниже.

Теперь Василиса Премудрая хочет по числам на замке ларчика определить, какие самоцветы ей нужно вставить в углубления для открытия ларчика. Помогите Василисе решить эту нелегкую задачу.

Входные данные

На входе заданы числа, записанные по краям замка ларчика. В первой строке записаны через пробел целые числа r1 и r2, задающие требуемые суммы чисел по строкам квадрата, во второй строке записаны через пробел целые числа c1 и c2, задающие требуемые суммы чисел по столбцам квадрата, в третьей строке записаны через пробел целые числа d1 и d2, задающие требуемые суммы чисел на главной и побочной диагоналях искомого квадрата-замка (1  ≤ r1, r2, c1, c2, d1, d2 ≤ 20). Соответствие переменных и мест, на которых они записаны, см. на рисунке ниже. Также см. второй тест из примеров, демонстрирующий пример из условия задачи.

Выходные данные

Выведите схему инкрустации ларчика: две строки по два разделенных пробелами целых числа от 1 до 9. Числа должны быть попарно различными. Если для заданного замка решения задачи не существует, выведите единственное число «-1» (без кавычек).

Если решений несколько, выведите любое.

Примечание

Обратите внимание на последний тест из условия: ларчик нельзя открыть, поскольку для этого Василисе Премудрой потребовалось бы 4 одинаковых самоцвета с числом «5» на каждом из них, однако, у нее имеется лишь по одному самоцвету с каждым из чисел от 1 до 9.

A. Количество квартир

Конструктив математика Перебор *900

Недавно в городе, где живет Монокарп, построили дом с новой планировкой. Согласно данной планировке в доме есть три типа квартир: трехкомнатные, пятикомнатные и семикомнатные. Известно, что в каждой комнате есть ровно по одному окну. Таким образом, в трехкомнатной квартире три окна, в пятикомнатной — пять, в семикомнатной — семь.

Монокарп обошел дом со всех сторон и насчитал в нем \(n\) окон. Монокарпу стало интересно, сколько квартир каждого типа может быть в этом доме.

К сожалению, Монокарп только научился считать, поэтому попросил вас помочь ему найти возможное количество трехкомнатных, пятикомнатных и семикомнатных квартир в доме, если известно, что во всех квартирах этого дома ровно \(n\) окон. Так как ответов может быть несколько, разрешается вывести любой подходящий.

Например:

  • если Монокарп насчитал \(30\) окон, в доме могло быть \(2\) трехкомнатных, \(2\) пятикомнатных и \(2\) семикомнатных квартиры, так как \(2 \cdot 3 + 2 \cdot 5 + 2 \cdot 7 = 30\);
  • если Монокарп насчитал \(67\) окон, в доме могло быть \(7\) трехкомнатных, \(5\) пятикомнатных и \(3\) семикомнатных квартиры, так как \(7 \cdot 3 + 5 \cdot 5 + 3 \cdot 7 = 67\);
  • если Монокарп насчитал \(4\) окна, он, скорее всего, ошибся, так как ни один дом с такой планировкой не может иметь \(4\) окна.
Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(1 \le n \le 1000\)) — количество окон в доме.

Выходные данные

Для каждого набора входных данных, если дома с новой планировкой и заданным количеством окном просто не может быть, выведите \(-1\).

В противном случае, выведите три целых неотрицательных числа — количество трехкомнатных, пятикомнатных и семикомнатных квартир в доме. Если подходящих ответов несколько, выведите любой из них.

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\), которые должны быть стерты с доски во время очередной операции.

G. Очередное взвешивание графа

битмаски графы дп математика поиск в глубину и подобное Потоки *2600

Дан ориентированный ацикличный граф (ориентированный граф, не содержащий циклов) из \(n\) вершин и \(m\) дуг. \(i\)-я дуга ведет из вершины \(x_i\) в вершину \(y_i\) и имеет вес \(w_i\).

Ваша задача — для каждой вершины \(v\) выбрать некоторое целое число \(a_v\), после чего на каждой дуге \(i\) записать такое число \(b_i\), что \(b_i = a_{x_i} - a_{y_i}\). Вы должны выбрать числа таким образом, чтобы:

  • все \(b_i\) были положительны;
  • значение выражения \(\sum \limits_{i = 1}^{m} w_i b_i\) было минимально возможным.

Можно показать, что для любого ориентированного ацикличного графа с неотрицательными \(w_i\) такой способ выбрать числа существует.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 18\); \(0 \le m \le \dfrac{n(n - 1)}{2}\)).

Далее следуют \(m\) строк, \(i\)-я из них содержит три целых числа \(x_i\), \(y_i\) и \(w_i\) (\(1 \le x_i, y_i \le n\), \(1 \le w_i \le 10^5\), \(x_i \ne y_i\)) — описание \(i\)-й дуги.

Гарантируется, что строки задают описание \(m\) дуг ориентированного ацикличного графа без кратных дуг.

Выходные данные

Выведите \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_v \le 10^9\)), которые необходимо записать на вершинах, чтобы все \(b_i\) были положительны, и значение выражения \(\sum \limits_{i = 1}^{m} w_i b_i\) было минимально возможным. Если ответов несколько — выведите любой. Можно показать, что ответ всегда существует, и хотя бы один из оптимальных ответов удовлетворяет ограничениям \(0 \le a_v \le 10^9\).

A. Скучные квартиры

математика реализация *800

Есть дом, в котором расположены \(10~000\) квартир, пронумерованных от \(1\) до \(10~000\).

Назовем номер квартиры скучным, если ее номер состоит из одинаковых цифр. Примерами скучных квартир являются \(11, 2, 777, 9999\) и так далее.

Наш герой очень наглый и он любит звонить в домофоны всех скучных квартир до тех пор, пока кто-то не ответит, в следующем порядке:

  • сначала он обзванивает квартиры, состоящие из цифр \(1\), в возрастающем порядке (\(1, 11, 111, 1111\));
  • затем он обзванивает квартиры, состоящие из цифр \(2\), в возрастающем порядке (\(2, 22, 222, 2222\));
  • и так далее.

Житель скучной квартиры \(x\) ответил на звонок. После этого наш герой перестал обзванивать кого-либо еще.

Наш герой хочет знать, как много цифр он суммарно нажал. Ваша задача — помочь посчитать ему суммарное количество нажатых клавиш.

Например, если житель квартиры \(22\) ответил, то наш герой звонил в квартиры с номерами \(1, 11, 111, 1111, 2, 22\). Таким образом, суммарное количество нажатий равно \(1 + 2 + 3 + 4 + 1 + 2 = 13\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 36\)) — количество наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(x\) (\(1 \le x \le 9999\)) — номер квартиры, житель которой ответил на звонок. Гарантируется, что \(x\) состоит из одинаковых цифр.

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: как много цифр суммарно нажал наш герой.

E. Два хоровода

Комбинаторика математика *1300

Однажды \(n\) человек (\(n\) — чётное число) собрались на площади и организовали два хоровода, в каждом из которых танцевало по \(\frac{n}{2}\) человек ровно. Ваша задача — найти, сколькими способами \(n\) человек могут составить два хоровода размера \(\frac{n}{2}\). Каждый из человек должен танцевать ровно в одном из двух хороводов.

Хоровод — это танцевальный круг, который составляют \(1\) или более человек. Два хоровода неотличимы, если один можно перевести в другой выбором начального участника хоровода. Например, хороводы \([1, 3, 4, 2]\), \([4, 2, 1, 3]\) и \([2, 1, 3, 4]\) — неотличимы.

Например, если \(n=2\), то искомое количество способов равно \(1\): один хоровод будет составлен первым человеком, а второй — вторым.

Например, если \(n=4\), то искомое количество способов равно \(3\). Возможные варианты:

  • один хоровод — \([1,2]\), другой — \([3,4]\);
  • один хоровод — \([2,4]\), другой — \([3,1]\);
  • один хоровод — \([4,1]\), другой — \([3,2]\).

Итак, ваша задача — найти, сколькими способами \(n\) человек могут составить два хоровода размера \(\frac{n}{2}\).

Входные данные

Входные данные состоят из единственного целого числа \(n\) (\(2 \le n \le 20\)), \(n\) — чётное число.

Выходные данные

Выведите единственное целое число — количество способов организовать хороводы. Гарантируется, что ответ помещается в \(64\)-битный целочисленный тип данных.

A. Перестановка

математика *800

Для заданного массива \(a\) из \(n\) целых чисел и целого числа \(m\) узнайте, можно ли изменить порядок элементов массива \(a\) так, чтобы \(\sum_{i=1}^{n}{\sum_{j=i}^{n}{\frac{a_j}{j}}}\) было равно \(m\)? Удалять элементы, а также добавлять новые запрещается. Обратите внимание, при делении не происходит округления, например, \(\frac{5}{2}=2.5\).

Входные данные

В первой строке задается целое число \(t\) — количество тестовых случаев (\(1 \le t \le 100\)). Далее задаются сами тестовые случаи, в двух строках каждый.

В первой строке тестового случая задаются два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(0 \le m \le 10^6\)). Во второй строке задаются целые числа \(a_1, a_2, \ldots, a_n\) — элементы массива (\(0 \le a_i \le 10^6\)).

Выходные данные

Для каждого тестового случая выведите «YES», если существует такая перестановка элементов массива, что заданная формула равна заданному значению, а иначе выведите «NO».

Примечание

В первом тесте перестановка может быть \([1, 2, 5]\). Сумма будет равна \((\frac{1}{1} + \frac{2}{2} + \frac{5}{3}) + (\frac{2}{2} + \frac{5}{3}) + (\frac{5}{3}) = 8\). Скобки обозначают внутреннюю сумму \(\sum_{j=i}^{n}{\frac{a_j}{j}}\), а сумма скобок обозначает сумму по \(i\).

B. Простой квадрат

Конструктив математика *900

Саше очень нравится изучать всякие интересные математические вещи, например, магические квадраты. Но Саша понимает, что магические квадраты уже были рассмотрены и изучены сотнями разных людей, поэтому он не видит смысла в продолжении работы над ними. Вместо этого он придумал свой тип квадратов — простой квадрат.

Квадрат размером \(n \times n\) называется простым, если одновременно выполняются три условия:

  • все числа в этом квадрате являются неотрицательными целыми числами, не превосходящими \(10^5\);
  • в квадрате отсутствуют простые числа;
  • суммы чисел в каждых строках и столбцах являются простыми числами.

У Саши есть число \(n\). Теперь он просит вас построить любой простой квадрат размером \(n \times n\). Саша уверен, что такое построение всегда возможно, поэтому помогите ему!

Входные данные

Первая строка ввода содержит единственное число \(t\) (\(1 \le t \le 10\)) — количество тестовых случаев.

Следующие \(t\) строк содержат единственное целое число \(n\) (\(2 \le n \le 100\)) — требуемый размер квадрата в текущем тестовом случае.

Выходные данные

Для каждого тестового случая выведите \(n\) строк по \(n\) чисел в каждой — построенный простой квадрат. Если существует несколько возможных ответов, выведите любой из них.

F. Сумма по подмножествам

Комбинаторика математика теория чисел *2800

В этой задаче вам дано мультимножество \(S\). Необходимо по всем парам подмножеств \(A\) и \(B\) таких, что:

  • \(B \subset A\);
  • \(|B| = |A| - 1\);
  • наибольший общий делитель элементов \(A\) равен единице;

найти сумму \(\sum_{x \in A}{x} \cdot \sum_{x \in B}{x}\) по модулю \(998\,244\,353\).

Входные данные

В первой строке входного файла находится целое число \(m\) (\(1 \le m \le 10^5\)) — количество различных элементов в мультимножестве \(S\).

Далее идут \(m\) строк, в каждой из которых по два целых числа \(a_i\) и \(freq_i\) (\(1 \le a_i \le 10^5, 1 \le freq_i \le 10^9\)). В мультимножестве \(S\) элемент \(a_i\) встречается \(freq_i\) раз. Гарантируется, что все \(a_i\) различны.

Выходные данные

В единственной строке выведите одно целое число — искомую сумму по модулю \(998\,244\,353\).

Примечание

Напомним, что мультимножество — это множество, в котором элементы могут повторяться несколько раз. \(|X|\) — мощность множества \(X\), количество элементов в нем.

\(A \subset B\) — множество \(A\) является подмножеством множества \(B\).

В первом примере \(B=\{1\}, A=\{1,2\}\) и \(B=\{2\}, A=\{1, 2\}\) дают произведение сумм \(1\cdot3 + 2\cdot3=9\). Все другие кандидаты на \(A\) и \(B\) не удовлетворяют требованиям.

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\).

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\).

F. Эмоциональные рыбаки

дп Комбинаторика математика *2600

\(n\) рыбаков только что вернулись с рыбалки. \(i\)-й рыбак поймал рыбу веса \(a_i\).

Рыбаки собираются похвастаться пойманной рыбой друг перед другом. Для этого они сначала выбирают порядок, в котором они показывают пойманную рыбу (каждый рыбак показывает свою рыбу ровно один раз, то есть, формально, порядок является перестановкой целых чисел от \(1\) до \(n\)). Затем они показывают свою рыбу в соответствии с выбранным порядком. Когда рыбак показывает свою рыбу, он может стать радостным, грустным, или остаться спокойным.

Предположим, что рыбак показывает рыбу веса \(x\), и максимальный вес среди ранее показанных рыб равен \(y\) (\(y = 0\), если этот рыбак показывает свою рыбу первым). Тогда:

  • если \(x \ge 2y\), рыбак становится радостным;
  • если \(2x \le y\), рыбак становится грустным;
  • если ни одно из этих условий не выполняется, рыбак остается спокойным.

Назовем порядок, в котором рыбаки показывают свою рыбу, эмоциональным, если после того, как все рыбаки покажут свою рыбу, ни один из них не останется спокойным. Посчитайте количество эмоциональных порядков по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 5000\)).

Во второй строке заданы \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Выведите одно число — количество эмоциональных порядков, взятое по модулю \(998244353\).

D. Влиятельная Ксения

битмаски Конструктив математика *2200

У Ксении есть массив \(a\), состоящий из \(n\) положительных целых чисел \(a_1, a_2, \ldots, a_n\).

За одну операцию она может сделать следующее:

  • выбрать три различных индекса \(i\), \(j\), \(k\), а затем
  • одновременно изменить каждое из \(a_i, a_j, a_k\) на \(a_i \oplus a_j \oplus a_k\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Ксения хочет сделать все \(a_i\) равными за не более чем \(n\) операций или определить, что это невозможно. Она не стала бы просить вас о помощи, но, пожалуйста, помогите ей!

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \leq n \leq 10^5\)) — длину \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы \(a\).

Выходные данные

В первой строке выведите YES или NO в зависимости от того, можно ли сделать все элементы равными за не более чем \(n\) операций.

Если это возможно, выведите целое число \(m\) (\(0 \leq m \leq n\)), которое обозначает количество выполняемых операций.

В каждой из следующих \(m\) строк выведите три различных целых числа \(i, j, k\), представляющих собой одну операцию.

Если таких последовательностей операций много, то выведите любую. Обратите внимание, что вы не должны минимизировать количество операций.

Примечание

В первом примере массив становится равным \([4 \oplus 1 \oplus 7, 2, 4 \oplus 1 \oplus 7, 4 \oplus 1 \oplus 7, 2] = [2, 2, 2, 2, 2]\).

A. Купи строку

математика реализация *800

Вам даны четыре целых числа \(n\), \(c_0\), \(c_1\) и \(h\) и бинарная строка \(s\) длины \(n\).

Бинарная строка — это строка, состоящая из символов \(0\) и \(1\).

Вы можете поменять любой символ строки \(s\) (но строка должна остаться бинарной после изменения). Вы должны заплатить \(h\) монет за каждое такое изменение.

Вы хотите купить строку после нескольких изменений (возможно, нуля). Чтобы купить строку, вы должны купить все ее символы. Чтобы купить символ \(0\), вы должны заплатить \(c_0\) монет, чтобы купить символ \(1\), вы должны заплатить \(c_1\) монет.

Найдите минимальное количество монет, которое нужно, чтобы купить строку.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10\)) — количество наборов входных данных. Следующие \(2t\) строк содержат описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит четыре целых числа \(n\), \(c_{0}\), \(c_{1}\), \(h\) (\(1 \leq n, c_{0}, c_{1}, h \leq 1000\)).

Вторая строка описания каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество монет, нужное, чтобы купить строку.

Примечание

В первом наборе входных данных вы можете купить все символы и заплатить \(3\) монеты, потому что каждый из символов \(0\) и \(1\) стоит \(1\) монету.

Во втором наборе входных данных вы можете сначала поменять \(2\)-й и \(4\)-й символы строки с \(1\) на \(0\) и заплатить \(2\) монеты за это. Ваша строка станет равной \(00000\). После этого вы можете купить строку и заплатить \(5 \cdot 10 = 50\) монет за это. Общее число потраченных монет будет \(2 + 50 = 52\).

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. Рассадка детей

Конструктив математика *800

Сегодня в детском саду появилась новая группа из \(n\) детей, которых нужно рассадить за обеденным столом. Стулья за столом пронумерованы числами от \(1\) до \(4n\). Два ребёнка не могут сидеть на одном и том же стуле. Известно, что дети, которые сели на стулья с номерами \(a\) и \(b\) (\(a \neq b\)) будут баловаться, если:

  1. \(gcd(a, b) = 1\) или,
  2. \(a\) делит \(b\) или \(b\) делит \(a\).

\(gcd(a, b)\) — максимальное число \(x\) такое, что \(a\) делится на \(x\) и \(b\) делится на \(x\).

Например, если \(n=3\) и дети сядут на стулья с номерами \(2\), \(3\), \(4\), то они будут баловаться, так как \(4\) делится на \(2\) и \(gcd(2, 3) = 1\). Если же дети сядут на стулья с номерами \(4\), \(6\), \(10\), то они не будут баловаться.

Воспитательнице очень не хочется, чтобы порядок за столом нарушился, поэтому она хочет рассадить детей так, чтобы никакие \(2\) ребёнка не баловались. Более формально, она хочет, чтобы ни для каких пар стульев \(a\) и \(b\), которые заняли дети, не было выполнено условие выше.

Так как воспитательница сильно занята развлечением детей она попросила вас решить эту задачу.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

В следующих \(t\) строках находится по одному целому числу \(n\) (\(1 \leq n \leq 100\)) — количество детей.

Выходные данные

Выведите \(t\) строк, в которых написаны \(n\) различных целых чисел от \(1\) до \(4n\) — номера стульев, которые должны занять дети в соответствующем наборе входных данных. Если ответов несколько, выведите любой из них. \(n\) чисел можно выводить в любом порядке.

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\) монет за активацию.

E. Длинная перестановка

математика Перебор *2400

Перестановка — это последовательность длины \(n\) целых чисел от \(1\) до \(n\), в которой все числа встречаются ровно по одному разу. Например, \([1]\), \([4, 3, 5, 1, 2]\), \([3, 2, 1]\) — перестановки, а \([1, 1]\), \([4, 3, 1]\), \([2, 3, 4]\) — нет.

Перестановка \(a\) лексикографически меньше перестановки \(b\) (обе имеют одинаковую длину \(n\)), если в первой слева позиции \(i\), в которой они отличаются, верно \(a[i] < b[i]\). Например, перестановка \([1, 3, 2, 4]\) лексикографически меньше перестановки \([1, 3, 4, 2]\), потому что первые два элемента совпадают, а третий элемент в первой перестановке меньше, чем во второй.

Следующая перестановка для перестановки \(a\) длины \(n\) — это лексикографически наименьшая перестановка \(b\) длины \(n\) лексикографически большая \(a\). Например:

  • для перестановки \([2, 1, 4, 3]\) следующей является перестановка \([2, 3, 1, 4]\);
  • для перестановки \([1, 2, 3]\) следующей является перестановка \([1, 3, 2]\);
  • для перестановки \([2, 1]\) следующей не существует.

Вам дано число \(n\) — длина изначальной перестановки. Изначальная перестановка имеет вид \(a = [1, 2, \ldots, n]\). Другими словами \(a[i] = i\) (\(1 \le i \le n\)).

Вам требуется обработать \(q\) запросов двух типов.

  • \(1\) \(l\) \(r\): запрос на сумму всех элементов на отрезке \([l, r]\), то есть необходимо найти \(a[l] + a[l + 1] + \ldots + a[r]\).
  • \(2\) \(x\): \(x\) раз заменить текущую перестановку на следующую. Например, если \(x=2\) и текущая перестановка имеет вид \([1, 3, 4, 2]\), то мы должны выполнить такую цепочку замен \([1, 3, 4, 2] \rightarrow [1, 4, 2, 3] \rightarrow [1, 4, 3, 2]\).

Для каждого запроса \(1\)-го типа выведите искомую сумму.

Входные данные

В первой строке находится два целых числа \(n\) (\(2 \le n \le 2 \cdot 10^5\)) и \(q\) (\(1 \le q \le 2 \cdot 10^5\)), где \(n\) — длина исходной перестановки, а \(q\) — количество запросов.

В следующих \(q\) строках находится по одному запросу \(1\) или \(2\) типа. Запрос \(1\) типа состоит из трёх целых чисел \(1\), \(l\) и \(r\) \((1 \le l \le r \le n)\), запрос \(2\) типа состоит из двух целых чисел \(2\) и \(x\) \((1 \le x \le 10^5)\).

Гарантируется, что все запросы \(2\)-го типа выполнить возможно.

Выходные данные

Для каждого запроса \(1\) типа выведите в отдельной строке одно целое число — искомую сумму.

Примечание

Изначально перестановка имеет вид \([1, 2, 3, 4]\). Обработка запросов происходит следующим образом:

  1. \(2 + 3 + 4 = 9\);
  2. \([1, 2, 3, 4] \rightarrow [1, 2, 4, 3] \rightarrow [1, 3, 2, 4] \rightarrow [1, 3, 4, 2]\);
  3. \(1 + 3 = 4\);
  4. \(4 + 2 = 6\)

A. Деление

математика Перебор теория чисел *1500

Из предметов в школе Олегу больше всего нравятся история и математика, а его любимый раздел математики — деление.

Чтобы улучшить свои навыки в делении, Олег загадал \(t\) пар целых чисел \(p_i\) и \(q_i\) и решил для каждой пары найти максимальное число \(x_i\), такое что

  • \(p_i\) делится нацело на \(x_i\),
  • \(x_i\) не делится нацело на \(q_i\).
Так как Олег очень хорош в делении, то он быстро нашёл нужный числа. Теперь ему интересно, сможете ли вы тоже справиться с этой задачей.
Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 50\)) — количество пар чисел.

В следующих \(t\) строках задано по два целых числа \(p_i\) и \(q_i\) (\(1 \le p_i \le 10^{18}\); \(2 \le q_i \le 10^{9}\)) — \(i\)-я пара загаданых чисел.

Выходные данные

Выведите \(t\) целых чисел, где \(i\)-е число — это максимальное число \(x_i\), такое что \(p_i\) делится нацело на \(x_i\), а \(x_i\) не делится нацело на \(q_i\).

Можно показать, что при заданных ограничениях всегда существует хотя бы один подходящий \(x_i\).

Примечание

Для \(p_1 = 10\), \(q_1 = 4\) число \(x_1 = 10\) подходит, так как это максимальный делитель \(10\), и \(10\) не делится на \(4\).

Для \(p_2 = 12\), \(q_2 = 6\) заметим, что:

  • \(12\) не подходит в качестве \(x_2\), так как \(12\) делится на \(q_2 = 6\),
  • \(6\) не подходит в качестве \(x_2\), так как \(6\) делится на \(q_2 = 6\).
Следующий по величине делитель \(p_2 = 12\) — это \(4\), и он нам подходит, так как \(4\) не делится нацело на \(6\).

B. Разбивай и суммируй

Комбинаторика математика сортировки *1900

Вам задан массив \(a\) длины \(2n\). Рассмотрим разбиение массива \(a\) на две подпоследовательности \(p\) и \(q\) длины \(n\) (каждый элемент массива \(a\) должен попасть ровно в одну подпоследовательность: в \(p\) или в \(q\)).

Отсортируем \(p\) по неубыванию, а \(q\) — по невозрастанию, и получим последовательности \(x\) и \(y\), соответственно. Тогда назовём стоимостью разбиения \(f(p, q) = \sum_{i = 1}^n |x_i - y_i|\).

Вам необходимо найти сумму \(f(p, q)\) по всем корректным разбиениям массива \(a\). Так как это число может быть слишком большим, требуется посчитать остаток от деления его на \(998244353\).

Входные данные

В первой строке задано единственное целое число \(n\) (\(1 \leq n \leq 150\,000\)).

Во второй строке заданы \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(998244353\).

Примечание

Два разбиения массива считаются различными, если отличаются наборы индексов элементов, входящих в подпоследовательность \(p\).

В первом примере существует два корректных разбиения массива \(a\):

  1. \(p = [1]\), \(q = [4]\), тогда \(x = [1]\), \(y = [4]\), \(f(p, q) = |1 - 4| = 3\)
  2. \(p = [4]\), \(q = [1]\), тогда \(x = [4]\), \(y = [1]\), \(f(p, q) = |4 - 1| = 3\).

Во втором примере существует шесть корректных разбиений массива \(a\):

  1. \(p = [2, 1]\), \(q = [2, 1]\) (в подпоследовательность \(p\) выбраны элементы с индексами \(1\) и \(2\) исходного массива);
  2. \(p = [2, 2]\), \(q = [1, 1]\);
  3. \(p = [2, 1]\), \(q = [1, 2]\) (в подпоследовательность \(p\) выбраны элементы с индексами \(1\) и \(4\) исходного массива);
  4. \(p = [1, 2]\), \(q = [2, 1]\);
  5. \(p = [1, 1]\), \(q = [2, 2]\);
  6. \(p = [2, 1]\), \(q = [2, 1]\) (в подпоследовательность \(p\) выбраны элементы с индексами \(3\) и \(4\)).

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. Добавьте конфет

Конструктив математика *800

Есть \(n\) пакетов с конфетами, изначально \(i\)-й пакет содержит \(i\) конфет. Вы хотите, чтобы в конце все пакеты содержали одинаковое количество конфет.

Чтобы добиться этого, вы:

  • Выберете \(m\), удовлетворяющее \(1 \le m \le 1000\).

  • Выполните \(m\) операций. В \(j\)-ю операцию вы выберете один из пакетов и добавите по \(j\) конфет во все пакеты, кроме выбранного.

Ваша цель — найти подходящую последовательность операций, после которой все пакеты будут содержать равное количество конфет.

  • Можно доказать, что при заданных ограничениях такая последовательность всегда существует.

  • Вы не должны минимизировать \(m\).

  • Если есть несколько подходящих последовательностей, вы можете вывести любую.

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n\le 100\)).

Выходные данные

Для каждого набора входных данных выведите две строки с вашим ответом.

В первой строке выведите \(m\) (\(1\le m \le 1000\)) — количество операций, которые вы хотите выполнить.

Во второй строке выведите \(m\) положительных целых чисел \(a_1, a_2, \dots, a_m\) (\(1 \le a_i \le n\)), где \(a_j\) — это номер пакета, который вы выбрали в \(j\)-ю операцию.

Примечание

В первом наборе входных данных, добавив \(1\) конфету во все мешки кроме второго, получаем конфигурацию с \([2, 2]\) конфетами.

Во втором наборе входных данных сначала вы используете первые три операции, чтобы добавить \(1+2+3=6\) конфет в сумме к каждому мешку кроме третьего, что дает вам \([7, 8, 3]\). После этого вы добавляете \(4\) конфеты во второй и третий мешки, таким образом получая \([7, 12, 7]\), а потом по \(5\) конфет в первый и третий мешки — в результате получая \([12, 12, 12]\).

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\).

C. Счастливая подпоследовательность

дп Комбинаторика математика *2100

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

У Пети есть последовательность a из n целых чисел.

Подпоследовательность последовательности a — это последовательность, которая получается из a путем удаления нуля или более ее элементов.

Две подпоследовательности считаются различными, если множества индексов входящих в них чисел различны, то есть значения элементов не учитываются при сравнении подпоследовательностей. В частности, любая последовательность длины n имеет ровно 2n различных подпоследовательностей (считая пустую).

Подпоследовательность называется счастливой, если она имеет длину ровно k, и не содержит двух одинаковых счастливых чисел (несчастливые числа могут повторяться сколько угодно раз).

Помогите Пете найти количество различных счастливых подпоследовательностей последовательности a. Так как родители не разрешают Пете играть с большими числами, результат нужно вывести по модулю простого числа 1000000007 (109 + 7).

Входные данные

В первой строке через пробел задано два целых числа n и k (1 ≤ k ≤ n ≤ 105). В следующей строке задано n целых чисел ai (1 ≤ ai ≤ 109) — последовательность a.

Выходные данные

В единственной строке выведите одно число — ответ на задачу по модулю простого числа 1000000007 (109 + 7).

Примечание

В первом примере все 3 подпоследовательности нужной длины являются счастливыми.

Во втором примере есть 4 счастливые подпоследовательности, множества индексов для которых равны (индексация с 1): {1, 3}, {1, 4}, {2, 3} и {2, 4}.

C1. Крестики Нолики Errichto (простая версия)

Конструктив математика *2100

Единственное различие между простой и сложной версиями задачи состоит в том, что символ O не встречается во входных данных простой версии.

Errichto бросил Monogon-у следующий вызов, чтобы запугать его и не дать занять первое место по вкладу на Codeforces.

В таблице для игры в крестики нолики есть \(n\) строк и \(n\) столбцов. Каждая клетка таблицы либо пустая, либо содержит фишку. Всего есть два типа фишек: X и O. Если есть три фишки одного типа, последовательные в какой-то строке или в каком-то столбце, то это выигрышная конфигурация. Иначе это ничейная конфигурация.

Примеры в первой строке это выигрышные конфигурации. Примеры во второй строке это ничейные конфигурации.

За одну операцию вы можете поменять фишку X на O или фишку O на X. Обозначим за \(k\) общее количество фишек в таблице. Ваша задача сделать таблицу ничейной за не более \(\lfloor \frac{k}{3}\rfloor\) (округление вниз) операций.

Вы не обязаны минимизировать количество операций.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 300\)) — размер таблицы.

В следующих \(n\) строках находятся строки, состоящие из \(n\) символов, задающие изначальную таблицу. Символ в \(i\)-й строке и \(j\)-м столбце это '.', если клетка пустая, иначе он совпадает с типом фишки, содержащейся в этой клетке таблицы: 'X' или 'O'.

Гарантируется, что не все клетки пустые.

В простой версии, символ 'O' не встречается во входных данных.

Сумма \(n\) по всем наборам входных данных не превосходит \(300\).

Выходные данные

Для каждого набора входных данных выведите состояние таблицы после выполнения операций.

У нас есть доказательство, что решение всегда существует. Если есть несколько возможных решений, выведите любое.

Примечание

В первом наборе входных данных есть изначально три 'X' последовательных во второй строке и во втором столбце. Изменив фишку посередине на 'O' мы получим ничейную конфигурацию. При этом мы поменяли \(1\le \lfloor 5/3\rfloor\) фишку.

Во втором наборе входных данных мы изменяем \(9\le \lfloor 32/3\rfloor\) фишек и после этого не существует трех 'X' или 'O', последовательных в одной строке или одном столбце, поэтому это ничейная конфигурация.

В третьем наборе входных данных мы изменяем \(3\le \lfloor 12/3\rfloor\) фишки и получившаяся конфигурация будет ничейной.

C2. Крестики Нолики Errichto (сложная версия)

Конструктив математика *2300

Единственное различие между простой и сложной версиями задачи состоит в том, что символ O не встречается во входных данных простой версии.

Errichto бросил Monogon-у следующий вызов, чтобы запугать его и не дать занять первое место по вкладу на Codeforces.

В таблице для игры в крестики нолики есть \(n\) строк и \(n\) столбцов. Каждая клетка таблицы либо пустая, либо содержит фишку. Всего есть два типа фишек: X и O. Если есть три фишки одного типа, последовательные в какой-то строке или в каком-то столбце, то это выигрышная конфигурация. Иначе это ничейная конфигурация.

Примеры в первой строке это выигрышные конфигурации. Примеры во второй строке это ничейные конфигурации.

За одну операцию вы можете поменять фишку X на O или фишку O на X. Обозначим за \(k\) общее количество фишек в таблице. Ваша задача сделать таблицу ничейной за не более \(\lfloor \frac{k}{3}\rfloor\) (округление вниз) операций.

Вы не обязаны минимизировать количество операций.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 300\)) — размер таблицы.

В следующих \(n\) строках находятся строки, состоящие из \(n\) символов, задающие изначальную таблицу. Символ в \(i\)-й строке и \(j\)-м столбце это '.', если клетка пустая, иначе он совпадает с типом фишки, содержащейся в этой клетке таблицы: 'X' или 'O'.

Гарантируется, что не все клетки пустые.

Сумма \(n\) по всем наборам входных данных не превосходит \(300\).

Выходные данные

Для каждого набора входных данных выведите состояние таблицы после выполнения операций.

У нас есть доказательство, что решение всегда существует. Если есть несколько возможных решений, выведите любое.

Примечание

В первом наборе входных данных есть изначально три 'O' последовательных во второй строке и во втором столбце. Изменив фишку посередине на 'X' мы получим ничейную конфигурацию. При этом мы поменяли \(1\le \lfloor 5/3\rfloor\) фишку.

Во втором наборе входных данных итоговая конфигурация ничейная. Мы поменяли \(8\le \lfloor 32/3\rfloor\) фишек.

В третьем наборе входных данных итоговая конфигурация ничейная. Мы поменяли \(7\le \lfloor 21/3\rfloor\) фишек.

H1. Соединение нитями (простая версия)

бпф Комбинаторика математика *2900

Единственное различие между двумя версиями задачи состоит в том, что в простой версии задачи нет обновлений.

Есть \(n\) катушек, расположенных вокруг круглого стола. Катушки бывают двух цветов: черного и белого.

Любые две катушки одного цвета можно соединить нитью-отрезком того же цвета. Определим соответствие как способ соединить катушки так, что каждая катушка будет соединена ровно с одной другой катушкой.

Раскраска это выбор цветов (белого или черного) для каждой катушки. Раскраска называется возможной, если для нее существует хотя бы одно соответствие. Это равносильно тому, что количества черных и белых катушек четные.

Для соответствия можно посчитать количество раз, которое какая-то белая нить пересекает какую-то черную нить. Мы считаем не количество точек пересечения, а количество пар нитей разных цветов, которые пересекаются, поэтому одна точка пересечения может быть посчитана несколько раз, если несколько пар нитей пересекаются в одной и той же точке. Если \(c\) это возможная раскраска, обозначим за \(f(c)\) минимальное количество пересечений по всем возможным корректным соответствиям для этой раскраски.

Картинка изображает раскраску bwbbbwww. Для нарисованного соответствия есть одно пересечение между нитями разного цвета. Можно показать, что это минимальное возможное количество по всем корректным соответствиям для этой раскраски, поэтому \(f(\text{bwbbbwww}) = 1\).

Вам дана строка \(s\) описывающая незавершенную раскраску с черными, белыми и непокрашенными катушками. Раскраска \(c\) называется \(s\)-достижимой, если ее можно получить, раскрасив все непокрашенные катушки в \(s\), не меняя цвета остальных.

Раскраска \(c\) выбирается случайно равновероятно по всем возможным \(s\)-достижимым раскраскам. Найдите математическое ожидание \(f(c)\). Вы должны найти его по модулю \(998244353\).

Можно показать, что ответ может быть записан в виде \(\frac{p}{q}\), где \(p\) и \(q\) некоторые взаимно простые целые числа и \(q\not\equiv 0\pmod{998244353}\). Тогда ответ по модулю \(998244353\) будет равен \((p\cdot q^{-1})\) modulo \(998244353\).

Входные данные

В первой строке находится два целых числа \(n\), \(m\) (\(2\le n\le 2\cdot 10^5\), \(n\) четное, \(m=0\)) — количество катушек и изменений, соответственно. В простой версии задачи изменений нет, поэтому оно всегда равно \(0\).

Во второй строке находится строка \(s\) длины \(n\) — незавершенная раскраска катушек. \(i\)-й символ будет 'w', 'b' или '?', и будет описывать цвет \(i\)-й катушки как белый, черный и непокрашенный, соответственно.

Гарантируется, что существует хотя бы одна непокрашенная катушка.

Выходные данные

Выведите математическое ожидание \(f(c)\) по модулю \(998244353\).

Примечание

Первый тест почти соответствует картинке. Нельзя покрасить '?' в 'w', потому что тогда получится не возможная раскраска, потому что количество черных катушек будет нечетным. Тогда единственная достижимая возможная раскраска это 'bwbbbwww'. Поскольку \(f(\text{bwbbbwww}) = 1\) математическое ожидание равно \(1\).

Можно показать, что математическое ожидание для второго теста равно \(\frac{9}{16}\).

H2. Соединение нитями (сложная версия)

Комбинаторика математика реализация *3300

Единственное различие между двумя версиями задачи состоит в том, что в простой версии задачи нет обновлений.

Есть \(n\) катушек, расположенных вокруг круглого стола. Катушки бывают двух цветов: черного и белого.

Любые две катушки одного цвета можно соединить нитью-отрезком того же цвета. Определим соответствие как способ соединить катушки так, что каждая катушка будет соединена ровно с одной другой катушкой.

Раскраска это выбор цветов (белого или черного) для каждой катушки. Раскраска называется возможной, если для нее существует хотя бы одно соответствие. Это равносильно тому, что количества черных и белых катушек четные.

Для соответствия можно посчитать количество раз, которое какая-то белая нить пересекает какую-то черную нить. Мы считаем не количество точек пересечения, а количество пар нитей разных цветов, которые пересекаются, поэтому одна точка пересечения может быть посчитана несколько раз, если несколько пар нитей пересекаются в одной и той же точке. Если \(c\) это возможная раскраска, обозначим за \(f(c)\) минимальное количество пересечений по всем возможным корректным соответствиям для этой раскраски.

Картинка изображает раскраску bwbbbwww. Для нарисованного соответствия есть одно пересечение между нитями разного цвета. Можно показать, что это минимальное возможное количество по всем корректным соответствиям для этой раскраски, поэтому \(f(\text{bwbbbwww}) = 1\).

Вам дана строка \(s\) описывающая незавершенную раскраску с черными, белыми и непокрашенными катушками. Раскраска \(c\) называется \(s\)-достижимой, если ее можно получить, раскрасив все непокрашенные катушки в \(s\), не меняя цвета остальных.

Раскраска \(c\) выбирается случайно равновероятно по всем возможным \(s\)-достижимым раскраскам. Найдите математическое ожидание \(f(c)\). Вы должны найти его по модулю \(998244353\).

Также будет производиться \(m\) изменений одного символа в \(s\). После каждого изменения вы должны посчитать математическое ожидание \(f(c)\) снова.

Можно показать, что каждый ответ может быть записан в виде \(\frac{p}{q}\), где \(p\) и \(q\) некоторые взаимно простые целые числа и \(q\not\equiv 0\pmod{998244353}\). Тогда ответ по модулю \(998244353\) будет равен \((p\cdot q^{-1})\) modulo \(998244353\).

Входные данные

В первой строке находится два целых числа \(n\), \(m\) (\(2\le n\le 2\cdot 10^5\), \(n\) четное, \(0\le m\le 2\cdot 10^5\)) — количество катушек и изменений, соответственно.

Во второй строке находится строка \(s\) длины \(n\) — незавершенная раскраска катушек. \(i\)-й символ будет 'w', 'b' или '?', и будет описывать цвет \(i\)-й катушки как белый, черный и непокрашенный, соответственно.

Каждая из следующих \(m\) строк содержит целое число \(i\) (\(1 \leq i \leq n\)) — позицию символа в \(s\), который будет изменен и символ \(c\) (\(c \in \{\text{w}, \text{b}, \text{?}\}\)) — новый цвет катушки \(i\) после изменения.

Гарантируется, что существует хотя бы одна непокрашенная катушка изначально и после каждого изменения.

Выходные данные

Выведите \(m+1\) строку: математическое ожидание \(f(c)\) изначально и после каждого изменения. Все значения должны быть найдены по модулю \(998244353\).

Примечание

Первый тест почти соответствует картинке. Нельзя покрасить '?' в 'w', потому что тогда получится не возможная раскраска, потому что количество черных катушек будет нечетным. Тогда единственная достижимая возможная раскраска это 'bwbbbwww'. Поскольку \(f(\text{bwbbbwww}) = 1\) математическое ожидание равно \(1\).

Во втором тесте строка после каждого изменения будет:

  1. ????w?wb??
  2. ??????wb??
  3. ?w????wb??

В третьем тесте строка после каждого изменения будет:

  1. ww?b
  2. wb?b
  3. wb?b

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\)

D. Игра в круге

геометрия игры математика *1700

Utkarsh снова заставили играть в игры Ashish. Игроки ходят по очереди, Ashish ходит первым.

Рассмотрим плоскость. На нем стоит фишка, исходно в точке \((0,0)\). За один ход игрок может увеличить либо \(x\) координату, либо \(y\) координату фишки ровно на \(k\). Делая эти операции, игрок должен убедиться, что фишка остается в пределах (Евклидового) расстояния \(d\) от \((0,0)\).

Иначе говоря, если после хода координаты фишки \((p,q)\), должно быть выполнено \(p^2 + q^2 \leq d^2\).

Игра кончается, когда текущий игрок не может сделать ход. Можно доказать, что игра закончится за конечное число ходов. Определите, кто выигрывает при правильной игре обоих игроков.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(d\) (\(1 \leq d \leq 10^5\)) и \(k\) (\(1 \leq k \leq d\)).

Выходные данные

Для каждого набора входных данных, если выигрывает первый игрок, выведите «Ashish». Иначе выведите «Utkarsh» (без кавычек).

Примечание

Возможная последовательность действий для первого набора входных данных:

\((0, 0) \xrightarrow{\text{Ashish }} (0, 1) \xrightarrow{\text{Utkarsh }} (0, 2)\).

Ashish не может сделать ход, так что Utkarsh выигрывает.

E1. Битовые запросы (упрощенная версия)

битмаски интерактив Конструктив математика *2000

Это упрощенная версия задачи. Две версии отличаются ограничением на число запросов. Вы можете взламывать по этой задаче только если обе версии решены. Это интерактивная задача.

У Ridbit есть массив \(a\) из \(n\) целых хочет, и он хочет, чтобы Ashish его отгадал. \(n\) является степенью двойки. Ashish может спрашивать запросы трех видов. Они могут быть вида

  • AND \(i\) \(j\)  — узнать побитовое И элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)
  • OR \(i\) \(j\)  — узнать побитовое ИЛИ элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)
  • XOR \(i\) \(j\)  — узнать побитовое исключающее ИЛИ элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)

Можете ли вы помочь Ashish определить элементы массива?

В этой версии, каждый элемент имеет значение из отрезка \([0, n-1]\) (включительно) и Ashish может спросить не более \(n+2\) запросов.

Входные данные

В первой строке записано одно целое число \(n\) \((4 \le n \le 2^{16})\) — длина массива. Гарантируется, что \(n\) — степень двойки.

Протокол взаимодействия

Чтобы сделать запрос, выведите одну из следующих строк (без кавычек):

  • «AND i j»;
  • «OR i j»;
  • «XOR i j»;
где \(i\) и \(j\) \((1 \leq i, j \le n\), \(i \neq j)\) обозначают индексы запроса.

На каждый запрос вы получите в ответ одно целое число \(x\), которое означает значение ответа на ваш вопрос. Если ваш запрос некорректный, вы получите в ответ \(x = -1\). В таком случае вам требуется закончить выполнение программы.

Когда вы угадали элементы массива, вам требуется вывести одну строку, содержащую «!» (без кавычек), после чего должны идти \(n\) разделенных пробелами целых чисел — элементы массива.

Отгадывание массива не считается в числе сделанных запросов.

Интерактор не является адаптивным. Массив \(a\) не меняется с запросами.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы взломать решение, используйте следующий формат.

В первой строке выведите одно целое число \(n\) \((4 \le n \le 2^{16})\) — длину массива. Она должна быть степенью двойки. В следующий строке должны быть записаны \(n\) разделенных пробелами целых чисел из отрезка \([0, n-1]\) — массив \(a\).

Примечание

Массив \(a\) в первом примере это \([0, 0, 2, 3]\).

E2. Битовые запросы (усложенная версия)

битмаски интерактив Конструктив математика *2300

Это усложненная версия задачи. Две версии отличаются ограничением на число запросов. Вы можете взламывать по этой задаче только если обе версии решены.

Это интерактивная задача.

У Ridbit есть массив \(a\) из \(n\) целых хочет, и он хочет, чтобы Ashish его отгадал. \(n\) является степенью двойки. Ashish может спрашивать запросы трех видов. Они могут быть вида

  • AND \(i\) \(j\)  — узнать побитовое И элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)
  • OR \(i\) \(j\)  — узнать побитовое ИЛИ элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)
  • XOR \(i\) \(j\)  — узнать побитовое исключающее ИЛИ элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)

Можете ли вы помочь Ashish определить элементы массива?

В этой версии, каждый элемент имеет значение из отрезка \([0, n-1]\) (включительно) и Ashish может спросить не более \(n+1\) запросов.

Входные данные

В первой строке записано одно целое число \(n\) \((4 \le n \le 2^{16})\) — длина массива. Гарантируется, что \(n\) — степень двойки.

Протокол взаимодействия

Чтобы сделать запрос, выведите одну из следующих строк (без кавычек):

  • «AND i j»;
  • «OR i j»;
  • «XOR i j»;
где \(i\) и \(j\) \((1 \leq i, j \le n\), \(i \neq j)\) обозначают индексы запроса.

На каждый запрос вы получите в ответ одно целое число \(x\), которое означает значение ответа на ваш вопрос. Если ваш запрос некорректный, вы получите в ответ \(x = -1\). В таком случае вам требуется закончить выполнение программы.

Когда вы угадали элементы массива, вам требуется вывести одну строку, содержащую «!» (без кавычек), после чего должны идти \(n\) разделенных пробелами целых чисел — элементы массива.

Отгадывание массива не считается в числе сделанных запросов.

Интерактор не является адаптивным. Массив \(a\) не меняется с запросами.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы взломать решение, используйте следующий формат.

В первой строке выведите одно целое число \(n\) \((4 \le n \le 2^{16})\) — длину массива. Она должна быть степенью двойки. В следующий строке должны быть записаны \(n\) разделенных пробелами целых чисел из отрезка \([0, n-1]\) — массив \(a\).

Примечание

Массив \(a\) в первом примере это \([0, 0, 2, 3]\).

A. Программа робота

математика *800

В клетке \((0, 0)\) 2-мерной решетки стоит робот. Он хочет достичь клетки \((x, y)\). Вот список команд, которые он может выполнять:

  • пойти на север из клетки \((i, j)\) в \((i, j + 1)\);
  • пойти на восток из клетки \((i, j)\) в \((i + 1, j)\);
  • пойти на юг из клетки \((i, j)\) в \((i, j - 1)\);
  • пойти на запад из клетки \((i, j)\) в \((i - 1, j)\);
  • остаться в клетке \((i, j)\).

Робот хочет достичь клетку \((x, y)\) за как можно меньшее количество команд. Однако, он не может выполнять одну и ту же команду два или более раза подряд.

Какое минимальное количество команд необходимо, чтобы достичь \((x, y)\) из \((0, 0)\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк записаны по два целых числа \(x\) и \(y\) (\(0 \le x, y \le 10^4\)) — координаты клетки назначения робота.

Выходные данные

На каждый набор входных данных выведите одно целое число — минимальное необходимое количество команд, чтобы робот достиг \((x, y)\) из \((0, 0)\), если никакую команду нельзя выполнять два или более раза подряд.

Примечание

Объяснение теста из условия:

Мы используем символы N, E, S, W и 0 для обозначения действий «пойти на север», «пойти на восток», «пойти на юг», «пойти на запад» и «остаться на месте», соответственно.

В первом наборе входных данных робот может использовать следующую последовательность команд: NENENENENE.

Во втором наборе входных данных робот может использовать следующую последовательность команд: NENENEN.

В третьем наборе входных данных робот может использовать следующую последовательность команд: ESENENE0ENESE.

В четвертом наборе входных данных роботу не нужно никуда идти.

В пятом наборе входных данных робот может использовать следующую последовательность команд: E0E.

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]\).

D. Радиовышки

дп Комбинаторика математика *1600

На координатной прямой расположено \(n + 2\) города, с номерами от \(0\) до \(n + 1\). \(i\)-й город расположен в точке \(i\).

В каждом из городов \(1, 2, \dots, n\) с вероятностью \(\frac{1}{2}\) строится радиовышка (эти события независимы). После этого вы хотите установить мощность сигнала каждой вышки равной целому числу от \(1\) до \(n\) (мощность сигнала не обязательно одинакова для всех вышек, но и не обязательно отличается). Сигнал с вышки, расположенной в городе \(i\) с мощностью сигнала \(p\), достигает каждого города \(c\), что \(|c - i| < p\).

После постройки вышек вы хотите выбрать мощность сигнала таким образом, чтобы:

  • города \(0\) и \(n + 1\) не получали сигнал от радиовышек;
  • города \(1, 2, \dots, n\) получали сигнал ровно от одной радиовышки каждый.

Например, если \(n = 5\), и вышки построены в городах \(2\), \(4\) и \(5\), вы можете установить мощность сигнала вышки в городе \(2\) равной \(2\), а мощность сигнала вышек в городах \(4\) и \(5\) равной \(1\). Таким образом, города \(0\) и \(n + 1\) не получат сигнал ни от одной вышки, города \(1\), \(2\) и \(3\) получат сигнал от вышки в городе \(2\), город \(4\) получит сигнал от вышки в городе \(4\), а город \(5\) получит сигнал от вышки в городе \(5\).

Посчитайте вероятность того, что после постройки вышек у вас будет возможность установить мощность сигнала каждой из них, чтобы удовлетворить всем ограничениям.

Входные данные

Первая (и единственная) строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — вероятность того, что найдется способ установить мощность сигнала так, чтобы все ограничения были выполнены, взятая по модулю \(998244353\).

Вероятность можно выразить в виде несократимой дроби \(\frac{x}{y}\). Вы должны вывести значение \(x \cdot y^{-1} \bmod 998244353\), где \(y^{-1}\) — целое число, такое, что \(y \cdot y^{-1} \bmod 998244353 = 1\).

Примечание

Настоящий ответ для первого примера — \(\frac{1}{4}\):

  • с вероятностью \(\frac{1}{4}\) вышки построены в обоих городах \(1\) и \(2\), поэтому мы можем установить их мощность сигнала равной \(1\).

Настоящий ответ для второго примера — \(\frac{1}{4}\):

  • с вероятностью \(\frac{1}{8}\) вышки построены в городах \(1\), \(2\) и \(3\), поэтому мы можем установить их мощность сигнала равной \(1\);
  • с вероятностью \(\frac{1}{8}\) построена только одна башня в городе \(2\), и мы можем установить ее мощность сигнала равной \(2\).

Настоящий ответ для третьего примера — \(\frac{5}{32}\). Обратите внимание, что даже если предыдущие пояснения использовали равные мощности сигнала для всех башен, это не обязательно так. Например, если \(n = 5\) и башни построены в городах \(2\), \(4\) и \(5\), вы можете установить мощность сигнала башни в городе \(2\) равной \(2\), а мощность сигнала башен в городах \(4\) и \(5\) равной \(1\).

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\). Обратите внимание, что есть решения с меньшим количеством уровней, но вам не требуется минимизировать их количество.

D. Число в последовательность

Конструктив математика теория чисел *1300

Вам задано целое число \(n\) (\(n > 1\)).

Ваша задача — найти последовательность целых чисел \(a_1, a_2, \ldots, a_k\) такую, что:

  • каждое \(a_i\) строго больше \(1\);
  • \(a_1 \cdot a_2 \cdot \ldots \cdot a_k = n\) (то есть произведение этой последовательности равно \(n\));
  • \(a_{i + 1}\) делится на \(a_i\) для всех \(i\) от \(1\) до \(k-1\);
  • \(k\) является максимально возможным (то есть длина этой последовательности является максимально возможной).

Если существует несколько таких последовательностей, любая из них считается подходящей. Можно доказать, что хотя бы одна корректная последовательность всегда существует для любого целого числа \(n > 1\).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 10^{10}\)).

Гарантируется, что сумма \(n\) не превосходит \(10^{10}\) (\(\sum n \le 10^{10}\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных: в первой строке выведите одно положительное целое число \(k\)максимально возможную длину \(a\). Во второй строке выведите \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) — последовательность длины \(k\), удовлетворяющую ограничениям из условия задачи.

Если существует несколько возможных ответов, вы можете вывести любой из них. Можно доказать, что хотя бы одна корректная последовательность всегда существует для любого целого числа \(n > 1\).

A. Странные функции

математика теория чисел *800

Давайте определим функцию \(f(x)\) (\(x\) — положительное целое число) следующим образом: запишем все цифры десятичного представления \(x\) в обратном порядке, а затем избавимся от лидирующих нулей. Например, \(f(321) = 123\), \(f(120) = 21\), \(f(1000000) = 1\), \(f(111) = 111\).

Давайте определим другую функцию \(g(x) = \dfrac{x}{f(f(x))}\) (\(x\) — положительное целое число).

Ваша задача состоит в следующем: для данного положительного целого числа \(n\) вычислите количество различных значений \(g(x)\) среди всех чисел \(x\) таких, что \(1 \le x \le n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей одно целое число \(n\) (\(1 \le n < 10^{100}\)). Это целое число задается без лидирующих нулей.

Выходные данные

Для набора входных данных выведите одно целое число — количество различных значений, которые может принимать \(g(x)\), если \(x\) может быть любым целым числом из \([1, n]\).

Примечание

Пояснения к двум первым наборам входных данных примера из условия:

  1. если \(n = 4\), то для каждого целого числа \(x\) такого, что \(1 \le x \le n\), \(\dfrac{x}{f(f(x))} = 1\);
  2. если \(n = 37\), то для некоторых целых чисел \(x\) таких, что \(1 \le x \le n\), \(\dfrac{x}{f(f(x))} = 1\) (например, если \(x = 23\), \(f(f(x)) = 23\),\(\dfrac{x}{f(f(x))} = 1\)); а для других значений \(x\), \(\dfrac{x}{f(f(x))} = 10\) (например, если \(x = 30\), \(f(f(x)) = 3\), \(\dfrac{x}{f(f(x))} = 10\)). Итак, существуют два различных значения \(g(x)\).

B. Прыжки

Конструктив математика *1200

Вы стоите на оси \(\mathit{OX}\) в точке \(0\) и хотите попасть в целочисленную точку \(x > 0\).

Вы можете сделать некоторое количество прыжков. Предположим, вы сейчас в точке \(y\) (\(y\) может быть отрицательным) и прыгаете в \(k\)-й раз. Вы можете:

  • либо прыгнуть в точку \(y + k\),
  • либо прыгнуть в точку \(y - 1\).

Какое минимальное количество прыжков вам понадобится, чтобы попасть в точку \(x\)?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано единственное целое число \(x\) (\(1 \le x \le 10^6\)) — точка, куда вам нужно попасть.

Выходные данные

Для каждого набора входных данных, выведите единственное число — минимальное количество прыжков, чтобы попасть в \(x\). Можно доказать, что мы можем достигнуть любую целую точку \(x\).

Примечание

В первом наборе входных данных \(x = 1\), поэтому вам нужен только один прыжок: \(1\)-й прыжок из \(0\) в \(0 + 1 = 1\).

Во втором наборе \(x = 2\). Вам необходимы хотя бы три прыжка:

  • \(1\)-й прыжок из \(0\) в \(0 + 1 = 1\);
  • \(2\)-й прыжок из \(1\) в \(1 + 2 = 3\);
  • \(3\)-й прыжок из \(3\) в \(3 - 1 = 2\);

Двух прыжков недостаточно, потому что есть только следующие варианты:

  • \(1\)-й прыжок равный \(-1\) и \(2\)-й равный \(-1\) — вы попадете в \(0 -1 -1 =-2\);
  • \(1\)-й прыжок равный \(-1\) и \(2\)-й равный \(+2\) — вы попадете в \(0 -1 +2 = 1\);
  • \(1\)-й прыжок равный \(+1\) и \(2\)-й равный \(-1\) — вы попадете в \(0 +1 -1 = 0\);
  • \(1\)-й прыжок равный \(+1\) и \(2\)-й равный \(+2\) — вы попадете в \(0 +1 +2 = 3\);

В третьем наборе, вам нужно два прыжка: \(1\)-й равный \(+1\) и \(2\)-й равный \(+2\), тогда \(0 + 1 + 2 = 3\).

В четвертом наборе, вам нужно три прыжка: \(1\)-й равный \(-1\), \(2\)-й равный \(+2\) и \(3\)-й равный \(+3\), тогда \(0 - 1 + 2 + 3 = 4\).

C. Пинг-понг

игры Конструктив математика *1100

Алиса и Боб играют в пинг-понг по упрощенным правилам.

Игрок, подающий мяч, начинает раунд. Подающий наносит удар по мячу, затем принимающий делает ответный удар, отбивая мяч назад. После этого подающий и принимающий должны поочередно отбивать, пока один из них не пропустит мяч.

Тот, кто не отбивает удар, проигрывает этот раунд. Победитель раунда начинает следующий раунд. Алиса начинает первый раунд.

У Алисы \(x\) выносливости, а у Боба \(y\). Чтобы ударить по мячу (при подаче или отбивании), каждый игрок тратит \(1\) выносливости, поэтому, если у него нулевая выносливость, он не может отбить мяч (и проигрывает раунд) или не может подать мяч (в этом случае подача мяча переходит к другому игроку). Если у обоих игроков закончилась выносливость, игра окончена.

Иногда стратегически оптимально не отбивать мяч, проиграть текущий раунд, но сохранить выносливость. Но во время подачи игрок обязан произвести удар, если у него осталась выносливость.

И Алиса, и Боб играют оптимально и хотят, во-первых, максимизировать свое количество побед а, во-вторых, минимизировать количество побед своего противника.

Подсчитайте итоговое число побед Алисы и Боба.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^6\)) — выносливость Алисы и Боба.

Выходные данные

Для каждого набора входных данных выведите два целых числа — итоговое число побед Алисы и Боба, если они оба играют оптимально.

Примечание

В первом примере Алиса подает мяч и тратит \(1\) выносливости. Затем Боб отбивает мяч и также тратит \(1\) выносливости. Алиса не может отбить мяч, так как у нее не осталось выносливости, и она проигрывает раунд. У них обоих закончилась выносливость, так что игра закончилась с \(0\) побед у Алисы и \(1\) победой Боба.

Во втором примере Алиса подает мяч и тратит \(1\) выносливости. Боб решает не отбивать мяч — он проигрывает раунд, но сохраняет выносливость. Алиса, как победитель последнего раунда, подает мяч в следующем и тратит еще \(1\) выносливости. На этот раз Боб отбивает мяч и тратит \(1\) выносливости. У Алисы не осталось сил, поэтому она не может отбить мяч и проигрывает раунд. У них обоих закончилась выносливость, так что игра закончилась с \(1\) победой у Алисы и \(1\) победой у Боба.

В третьем примере Алиса подает мяч и тратит \(1\) выносливости. Боб отбивает мяч и тратит \(1\) выносливости. У Алисы кончилась выносливость, поэтому она не может отбить мяч и проигрывает раунд. Боб, как победитель, подает мяч в следующих \(6\) раундах. Каждый раз Алиса не может отбить мяч и проигрывает каждую раунд. Игра заканчивается с \(0\) побед у Алисы и \(7\) победами у Боба.

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\).

A. Ряд НОД

математика теория чисел *1600

Вам даны две последовательности целых чисел \(a_1, \ldots, a_n\) и \(b_1, \ldots, b_m\). Для каждого \(j = 1, \ldots, m\) найдите наибольший общий делитель чисел \(a_1 + b_j, \ldots, a_n + b_j\).

Входные данные

В первой строке записано два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2 \cdot 10^5\)).

Во второй строке записано \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \leq a_i \leq 10^{18})\).

В третьей строке записано \(m\) целых чисел \(b_1, \ldots, b_m\) (\(1 \leq b_j \leq 10^{18})\).

Выходные данные

Выведите \(m\) целых чисел. \(j\)-е из этих чисел должно быть равно НОД\((a_1 + b_j, \ldots, a_n + b_j)\).

C. Латинский квадрат

математика матрицы *2700

Вам дана квадратная матрица размера \(n\). В каждой строке и каждом столбце этой матрицы записана перестановка чисел \(1\), \(2\), \(\ldots\), \(n\). Пусть \(a_{i, j}\) означает число на пересечении \(i\)-й строки и \(j\)-го столбца для всех \(1 \leq i, j \leq n\). Строки нумеруются \(1, \ldots, n\) сверху вниз, а столбцы нумеруются \(1, \ldots, n\) слева направо.

Мы совершаем операции шести типов:

  • R: циклически сдвинуть все столбцы вправо, формально, заменить значение каждого \(a_{i, j}\) на \(a_{i, ((j - 2)\bmod n) + 1}\);
  • L: циклически сдвинуть все столбцы влево, формально, заменить значение каждого \(a_{i, j}\) на \(a_{i, (j\bmod n) + 1}\);
  • D: циклически сдвинуть все строки вниз, формально, заменить значение каждого \(a_{i, j}\) на \(a_{((i - 2)\bmod n) + 1, j}\);
  • U: циклически сдвинуть все строки вверх, формально, заменить значение каждого \(a_{i, j}\) на \(a_{(i\bmod n) + 1, j}\);
  • I: заменить перестановку, которую можно прочитать в каждой строке слева направо, на обратную;
  • C: заменить перестановку, которую можно прочитать в каждом столбце сверху вниз, на обратную.

Обратной к перестановке \(p_1\), \(p_2\), \(\ldots\), \(p_n\) является перестановка \(q_1\), \(q_2\), \(\ldots\), \(q_n\), такая что \(p_{q_i} = i\) для каждого \(1 \leq i \leq n\).

Можно показать, что после любой последовательности операций любая строка и любой столбец матрицы всё ещё будет содержать перестановку чисел \(1, 2, \ldots, n\).

Вам дано описание исходной матрицы. Нужно совершить \(m\) операций и вывести получившееся состояние матрицы.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество тестовых примеров. Далее следует описание \(t\) примеров.

Первого строка описания каждого примера содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 1000, 1 \leq m \leq 10^5\)) — размер матрицы и количество операций.

Каждая из следующих \(n\) строк содержит по \(n\) целых чисел через пробел — элементы матрицы \(a\) (\(1 \leq a_{i, j} \leq n\)).

В последней строке описания записано \(m\) символов, описывающих операции по порядку в формате, описанном выше.

Сумма всех \(n\) не превосходит \(1000\), а сумма всех \(m\) не превосходит \(10^5\).

Выходные данные

Для каждого примера выведите \(n\) строк, по \(n\) чисел в каждой — получившееся состояние матрицы после \(m\) операций.

Примечание

Лишние переводы строк между ответами для примера выше добавлены для наглядности, выводить их необязательно.

A. Красно-синее перемешивание

математика Теория вероятностей *800

У нас есть \(n\) карточек, пронумерованных числами \(1, \ldots, n\). На карточке \(i\) написана красная цифра \(r_i\) и синяя цифра \(b_i\).

Мы переупорядочиваем все \(n\) карточек слева направо в случайном порядке, так что все перестановки \(1, \ldots, n\) равновероятны. Затем мы читаем все красные цифры слева направо, и получаем целое число \(R\). Аналогично мы читаем все синие цифры и получаем число \(B\). Ведущие нули в числах игнорируются. Если все цифры в числе равны нулю, то такое число равно \(0\). Ниже изображено одно из возможных переупорядочиваний трёх карт, и пример того, как определять \(R\) и \(B\).

Два игрока, Красный и Синий, заключают пари. Красный ставит на то, что после перемешивания \(R > B\), а Синий ставит на то, что \(R < B\). Если в итоге \(R = B\), то объявляется ничья и никто не выигрывает спор.

Определите, кто из двух игроков имеет лучшие шансы выиграть спор, либо что шансы игроков одинаковы. Для формального описания того, как сравниваются вероятности, см. секцию Примечание.

Входные данные

В первой строке записано одно целое число \(T\) (\(1 \leq T \leq 100\)) — количество тестовых примеров.

Далее следуют описания \(T\) примеров. Описание каждого примера начинается со строки с одним целым числом \(n\) (\(1 \leq n \leq 1000\)) — количеством карточек.

В следующей строке записано \(n\) цифр \(r_1, \ldots, r_n\) — красные цифры на карточках \(1, \ldots, n\) соответственно.

В следующей строке записано \(n\) цифр \(b_1, \ldots, b_n\) — синие цифры на карточках \(1, \ldots, n\) соответственно.

Цифры в каждой строке записаны без разделителей.

Выходные данные

Выведите \(T\) ответов на примеры по порядку, по одному ответу на строку.

Если шансы Красного игрока на победу строго выше, выведите «RED».

Если шансы Синего игрока на победу строго выше, выведите «BLUE».

Если шансы игроков совпадают, выведите «EQUAL».

Обратите внимание, что регистр всех ответов важен.

Примечание

Формально, пусть \(n_R\) равно количеству перестановок карточек \(1, \ldots, n\), при которых получающиеся числа \(R\) и \(B\) удовлетворяют \(R > B\). Аналогично, пусть \(n_B\) равно количеству перестановок, при которых \(R < B\). Если \(n_R > n_B\), вам нужно вывести «RED». Если \(n_R < n_B\), нужно вывести «BLUE». Если \(n_R = n_B\), выведите «EQUAL».

В первом примере \(R = 777\) и \(B = 111\) независимо от порядка карт, поэтому Красный всегда выигрывает.

Во втором примере существует две перестановки карт, при которых выигрывает Красный, и четыре перестановки, при которых выигрывает Синий:

  • перестановка \(1, 2, 3\): \(314 > 159\);
  • перестановка \(1, 3, 2\): \(341 > 195\);
  • перестановка \(2, 1, 3\): \(134 < 519\);
  • перестановка \(2, 3, 1\): \(143 < 591\);
  • перестановка \(3, 1, 2\): \(431 < 915\);
  • перестановка \(3, 2, 1\): \(413 < 951\).

Поскольку \(R < B\) происходит более часто, вывести нужно «BLUE».

В третьем примере \(R = B\) независимо от порядка карт, поэтому спор всегда заканчивается вничью, и шансы обоих игроков на победу равны нулю.

B. Ходы и повороты

дп математика *1300

В начале координат бесконечной двумерной плоскости находится робот. Каждую секунду робот перещается ровно на \(1\) метр в одном из четырёх направлений: на север, юг, запад или восток. Робот может выбрать произвольное направление для первого шага, но после этого в конце каждой секунды он обязан повернуть на 90 градусов влево или вправо относительно направления, в котором только что двигался. Например, если робот только что переместился на север или юг, его следующий шаг должен быть на запад или восток, и наоборот.

Робот совершает ровно \(n\) шагов из начального положения в соответствиями с правилами выше. В скольких различных точках робот может оказаться в итоге? Финальное направление робота можно игнорировать.

Входные данные

В единственной строке записано одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество шагов робота.

Выходные данные

Выведите одно целое число — количество различных возможных положений робота после ровно \(n\) шагов.

Примечание

В первом примере робот переместится на 1 метр на север, юг, запад или восток в зависимости от исходного направления.

Во втором примере робот всегда окажется в \(\sqrt{2}\) метрах на северо-западе, северо-востоке, юго-западе или юго-востоке.

C. Случайные события

дп математика Теория вероятностей *1500

Рон — счастливый обладатель перестановки \(a\) длины \(n\).

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) — не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Над перестановкой Рона ставится \(m\) экспериментов следующего вида: (\(r_i\), \(p_i\)). Это обозначает, что элементы в диапазоне \([1, r_i]\) (другими словами, префикс длины \(r_i\)) будут отсортированы в возрастающем порядке с вероятностью \(p_i\). Все эксперименты проводятся в том же порядке, в котором задаются во входных данных.

Для примера рассмотрим перестановку \([4, 2, 1, 5, 3]\) и эксперимент (\(3, 0.6\)). После такого эксперимента с вероятностью \(60\%\) перестановка примет вид \([1, 2, 4, 5, 3]\), а с вероятностью \(40\%\) останется без изменений.

Вам требуется определить, с какой вероятностью перестановка станет полностью отсортированной по возрастанию после \(m\) экспериментов.

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 100\)).

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) \((1 \le n, m \le 10^5)\) — количество элементов в перестановке и количество экспериментов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le n)\) — описание перестановки.

Каждая из следующих \(m\) входных данных содержат целое число \(r_i\) и вещественное число \(p_i\) \((1 \le r_i \le n, 0 \le p_i \le 1)\) — длина префикса массива и вероятность, с которой он отсортируется. Все вероятности даны с точностью не более \(6\) знаков после запятой.

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(10^5\) (\(\sum n, \sum m \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите единственное число — вероятность, что после всех экспериментов перестановка окажется отсортированной. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Для первого набора входных данных можно показать, что только от того, выполнится ли сортировка с помощью правила \((4, 0.6)\), зависит, будет ли итоговая перестановка отсортированной.

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».

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]\) одинаковые.

E1. Близкие наборы (простая версия)

Бинарный поиск Комбинаторика математика сортировки *1500

Это простая версия этой задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(k\) и \(m\) (в этой версии \(k=2\), \(m=3\)). Также в этой версии задачи НЕ НУЖНО выводить ответ по какому-либо модулю.

Вам задана последовательность \(a\) длины \(n\), состоящая из целых чисел от \(1\) до \(n\). Среди чисел могут быть одинаковые.

Найдите количество наборов из \(m = 3\) элементов, таких что максимальное число в наборе отличается от минимального не больше, чем на \(k = 2\). Формально, в этой задаче вам нужно найти количество троек индексов \(i < j < z\), таких что

\(\)\max(a_i, a_j, a_z) - \min(a_i, a_j, a_z) \le 2.\(\)

Например, если \(n=4\) и \(a=[1,2,4,3]\), то существуют две такие тройки (\(i=1, j=2, z=4\) и \(i=2, j=3, z=4\)). Если же \(n=4\) и \(a=[1,1,1,1]\), то все четыре возможные тройки подходят.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следуют \(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\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) ответов на наборы входных данных. Каждый ответ — это количество упорядоченных троек элементов, таких что максимальное число в тройке отличается от минимального не больше, чем на \(2\). Обратите внимание, что в отличии от сложной версии задачи, здесь не нужно выводить ответ по какому-либо модулю. Необходимо вывести точное значение ответа.

E2. Близкие наборы (сложная версия)

Бинарный поиск Комбинаторика математика реализация сортировки *1700

Это сложная версия этой задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(k\) и \(m\). В этой версии задачи нужно выводить ответ по модулю \(10^9+7\).

Вам задана последовательность \(a\) длины \(n\), состоящая из целых чисел от \(1\) до \(n\). Среди чисел могут быть одинаковые.

Найдите количество наборов из \(m\) элементов, таких что максимальное число в наборе отличается от минимального не больше, чем на \(k\). Формально, вам нужно найти количество наборов из \(m\) индексов \(i_1 < i_2 < \ldots < i_m\), таких что

\(\)\max(a_{i_1}, a_{i_2}, \ldots, a_{i_m}) - \min(a_{i_1}, a_{i_2}, \ldots, a_{i_m}) \le k.\(\)

Например, если \(n=4\), \(m=3\), \(k=2\), \(a=[1,2,4,3]\), то существуют две такие тройки (\(i=1, j=2, z=4\) и \(i=2, j=3, z=4\)). Если же \(n=4\), \(m=2\), \(k=1\), \(a=[1,1,1,1]\), то все шесть возможных пар подходят.

Поскольку ответ может быть достаточно большим, вам нужно посчитать его по модулю \(10^9 + 7\) (остаток при делении на число \(10^9 + 7\)).

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится три целых числа \(n\), \(m\), \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 100\), \(1 \le k \le n\)) — длина последовательности \(a\), количество элементов в искомых наборах и максимальная разница элементов в наборе.

В следующей строке находятся \(n\) целых чисел \(a_1, a_2,\ldots, a_n\) (\(1 \le a_i \le n\)) — последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) ответов на наборы входных данных. Каждый ответ — это количество наборов из \(m\) элементов по модулю \(10^9 + 7\), таких что максимальное число в наборе отличается от минимального не больше, чем на \(k\).

A. Подземелье

Бинарный поиск математика *1100

Вы играете в новую компьютерную игру, в которой необходимо сражаться с монстрами. В очередном подземелье вы встретили трех монстров; у одного из них \(a\) очков здоровья, у второго \(b\) очков здоровья, а у третьего — \(c\).

Для убийства монстров у вас есть пушка, которая наносит \(1\) единицу урона выбранному монстру. При этом каждый \(7\)-й (т. е. выстрелы с номерами \(7\), \(14\), \(21\) и т. д.) выстрел пушки усиленный и наносит \(1\) урона всем монстрам, а не только одному из них. Если текущее здоровье монстра равно \(0\), он не может быть целью обычного выстрела и не получает урона от усиленного выстрела.

Вы хотите красиво пройти подземелье, а именно, убить всех монстров одним и тем же усиленным выстрелом (т. е. после очередного усиленного выстрела очки здоровья каждого из монстров должны впервые стать равными \(0\)). Каждый выстрел должен попадать в монстра, т. е. вы не можете стрелять мимо цели.

Входные данные

Первая строка содержит одного целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из единственной строки, которая содержит три целых числа \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 10^8\)) — количество очков здоровья у каждого из монстров.

Выходные данные

Для каждого набора входных данных выведите YES, если можно убить всех монстров одним и тем же усиленным выстрелом. Иначе выведите NO. Каждую букву можно выводить в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом примере вы можете действовать следующим образом: \(1\)-й выстрел в первого монстра, \(2\)-й выстрел во второго монстра, \(3\)-й выстрел в третьего монстра, \(4\)-й выстрел в первого монстра, \(5\)-й выстрел в третьего монстра, \(6\)-й выстрел в третьего монстра и \(7\)усиленный выстрел убьет всех монстров.

Во втором примере вы не можете убить монстров усиленным выстрелом, т. к. суммарное количество очков здоровья монстров равно \(3\), и вы убьете их за первые 3 выстрела.

F. Максимальное правильное множество

битмаски дп математика *3100

Назовем множество положительных целых чисел \(S\) правильным, если выполняются следующие два условия:

  • \(S \subseteq \{1, 2, \dots, n\}\);
  • если \(a \in S\) и \(b \in S\), то \(|a-b| \neq x\) и \(|a-b| \neq y\).

Для заданных значений \(n\), \(x\) и \(y\) вам необходимо найти размер максимального правильного множества.

Входные данные

Единственная строка входных данных содержит три целых числа \(n\), \(x\) и \(y\) (\(1 \le n \le 10^9\); \(1 \le x, y \le 22\)).

Выходные данные

Выведите одно целое число — размер максимального правильного множества.

A. Коровья дилемма

геометрия математика Перебор *800

Аргусу было поручено охранять Ио, которая является необычной коровой. Ио настоящий исследователь, и часто далеко уходит, что усложняет жизнь Аргуса. Поэтому, пастух решил построить огороженное пастбище для Ио.

Вдоль реки, около которой Аргус пасет Ио, растет \(n\) деревьев. Будем считать, что река это ось \(OX\) прямоугольной системы координат, а \(n\) деревьев это точки с \(y\) координатами равными \(0\). Также, есть еще одно дерево, растущее в точке \((0, 1)\).

Аргус натянет веревку вокруг трех из деревьев, получив треугольное пастбище. Ио не интересует его форма, но ей важна площадь. У Аргуса есть много способов построить забор, но для Ио важны только те, при которых получатся различные по площади пастбища. Вычислите количество различных площадей, которые может иметь получившееся пастбище. Обратите внимание, что пастбище должно иметь ненулевую площадь.

Входные данные

Во входных данных находятся несколько (не меньше одного) наборов входных данных. В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее даны \(t\) наборов входных данных, описание каждого занимает две строки.

В первой строке каждого наборов входных данных дано одно целое число \(n\) (\(1 \leq n \leq 50\)), обозначающее количество деревьев, растущих вдоль реки. В следующей строке дано \(n\) различных целых чисел \(x_1 < x_2 < \ldots < x_{n - 1} < x_n\) (\(1 \leq x_i \leq 50\)) — \(x\) координаты деревьев, растущих вдоль реки.

Выходные данные

Для каждого наборов входных данных в отдельной строке выведите одно целое число — количество различных ненулевых площадей, которые могут иметь треугольники с деревьями в качестве вершин.

Примечание

В первом наборе входных данных есть \(6\) невырожденных треугольников со следующими площадями: \(0.5\), \(0.5\), \(1\), \(1.5\), \(1.5\) и \(2\). Пастбище может иметь \(4\) различных площади, поэтому \(4\) является ответом.

Во втором наборе входных данных есть \(3\) невырожденных треугольника со следующими площадями: \(1\), \(1\) и \(2\). Пастбище может иметь \(2\) различных площади, поэтому ответ \(2\).

Следующие иллюстрации показывают два возможных варианта площади во втором наборе входных данных. Синие треугольники на первой иллюстрации имеют площадь \(1\). Красный треугольник на второй иллюстрации имеет площадь \(2\).

E. Аполлон против Пана

битмаски математика Перебор *1800

Немногие знают, что Пан и Аполлон боролись не только за звание лучшего музыканта всех времен. Несколько тысячелетий спустя они также бросили друг другу вызов в математике (или скорее в быстрых вычислениях). Им предстояло решить следующую задачу:

Рассмотрим \(x_1, x_2, \ldots, x_n\) — последовательность из \(n\) неотрицательных целых чисел. Вычислите следующее значение: \(\)\sum_{i=1}^n \sum_{j=1}^n \sum_{k=1}^n (x_i \, \& \, x_j) \cdot (x_j \, | \, x_k)\(\)

Здесь \(\&\) обозначает побитовый И, а \(|\) обозначает побитовый ИЛИ.

Пан и Аполлон смогли решить эту задачу за несколько секунд. А вы сможете? Для удобства, вычислите ответ по модулю \(10^9 + 7\).

Входные данные

Во входных данных находятся несколько (не меньше одного) наборов входных данных. В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 1\,000\)), обозначающее количество наборов входных данных. Затем дано \(t\) наборов входных данных.

В первой строке каждого набора входных данных дано одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)), длина последовательности. Во второй строке дано \(n\) неотрицательных целых чисел \(x_1, x_2, \ldots, x_n\) (\(0 \leq x_i < 2^{60}\)), элементы последовательности.

Сумма \(n\) по всем наборам входных данных не превышает \(5 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, \(i\)-я должна содержать ответ на \(i\)-й набор входных данных.

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\), сумма первого и второго вектора.

G. Песни сирен

Комбинаторика математика разделяй и властвуй Строки строковые суфф. структуры хэши *2600

Кто по незнанию приближается к ним и слышит голос сирен, тот больше не возвращается.

Гомер, Одиссея

Во времена Ясона и Аргонавтов, было хорошо известно, что сирены используют свои песни, чтобы заманивать моряков к себе на погибель. Но немногие знали, что каждый раз сирены, когда зовут моряков по имени, те становятся слабее и более уязвимыми.

Для целей этой задачи, и песни сирен, и имена моряков будем представлять строками, состоящими из строчных английских букв. Чем больше раз имя моряка появляется как непрерывная подстрока в песне, тем моряк в большей опасности.

Ясон обнаружил, что сирены могут петь одну из \(n+1\) песен, которые имеют следующую структуру: пусть \(s_i\) (\(0 \leq i \leq n\)) будет \(i\)-й песней, а \(t\) — некоторой строкой длины \(n\), тогда для всех \(i < n\): \(s_{i+1} = s_i t_i s_i\). другими словами, \(i+1\)-я песня это конкатенация \(i\)-й песни, \(i\)-й буквы (в \(0\) индексации) строки \(t\), и \(i\)-й песни.

К счастью, он также знает \(s_0\) и \(t\). Ясон интересуется, сколько раз имя моряка встречается в конкретной песне. Ответьте на \(q\) вопросов: дано имя моряка (\(w\)) и номер песни (\(i\)), выведите количество вхождений \(w\) в \(s_i\) как подстроки. Так как это число может быть довольно большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке дано два целых числа \(n\) и \(q\) (\( 1 \leq n, q \leq 10^5\)), обозначающих что есть \(n+1\) песня и \(q\) вопросов. В следующих двух строках даны две строки \(s_0\) и \(t\) (\(1 \leq |s_0| \leq 100, |t| = n\)).

Следующие \(q\) строк содержат вопросы: каждая строка содержит число \(k\) (\( 0 \leq k \leq n\)), индекс песни сирен, и непустую строку \(w\), обозначающую имя моряка. Все строки состоят из строчных английских букв. Сумма длин имен моряков не превышает \(10^6\).

Выходные данные

Выведите \(q\) строк, \(i\)-я из них должна содержать остаток по модулю \(10^9+7\) от числа вхождений \(w\) в \(s_k\).

Примечание

В первом примере песни сирен выглядят так:

  • Песня \(0\): aa
  • Песня \(1\): aabaa
  • Песня \(2\): aabaacaabaa
  • Песня \(3\): aabaacaabaadaabaacaabaa

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\).

D. Сумма путей

дп Комбинаторика математика *2200

Рассмотрим \(n\) клеток, пронумерованных числами \(1,2,\dots, n\) слева направо. Вы можете изначально в любую из этих клеток поставить робота, который затем должен сделать ровно \(k\) шагов.

За один шаг робот перемещается в соседнюю клетку слева или справа, при этом он не может выходить за границы заданных клеток. Иными словами, если робот был в клетке \(i\), он должен переместиться либо в клетку \(i-1\), либо в клетку \(i+1\), при этом клетка, в которую он перемещается, должна иметь номер от \(1\) до \(n\) (включительно). Клетки в том порядке, в котором робот их посещает (включая стартовую клетку), вместе составляют хороший путь.

В каждой клетке записано целое число — в клетке \(i\) записано число \(a_i\). Пусть \(c_0, c_1, \dots, c_k\) — последовательность клеток в хорошем пути в том порядке, в котором они были посещены (\(c_0\) — клетка, где был робот изначально, \(c_1\) — клетка, в которой он оказался после первого шага, и так далее; более формально, \(c_i\) — клетка, в которой оказался робот после \(i\) шагов). Тогда стоимость пути вычисляется по следующей формуле: \(a_{c_0} + a_{c_1} + \dots + a_{c_k}\).

Ваша задача — посчитать суммарную стоимость всех хороших путей. Так как это число может быть очень большим, его надо выводить по модулю \(10^9 + 7\). Два хороших пути различны, если либо различается стартовая клетка, либо существует такое \(i \in [1, k]\), что местоположение робота после \(i\) шагов различается в этих путях.

Также вам нужно обрабатывать \(q\) обновлений значений \(a\) и после каждого обновления вычислять требуемую суммарную стоимость. Каждое обновление меняет число, записанное ровно в одной клетке.

Входные данные

В первой строке заданы три целых числа \(n\), \(k\) и \(q\) (\(2 \le n \le 5000\); \(1 \le k \le 5000\); \(1 \le q \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Затем следуют \(q\) строк. Каждая строка содержит два числа \(i\) и \(x\) (\(1 \le i \le n\); \(1 \le x \le 10^9\)), обозначающих, что значение \(a_i\) становится равным \(x\).

Выходные данные

Выведите \(q\) целых чисел, \(i\)-е из которых должно быть равно суммарной стоимости хороших путей после первых \(i\) обновлений. Так как эти числа могут быть большими, выводите их по модулю \(10^9 + 7\).

Примечание

Все хорошие пути в первом примере: \((1, 2), (2, 1), (2, 3), (3, 2), (3, 4), (4, 3), (4, 5), (5, 4)\).

Изначально значения \(a\) равны \([3, 5, 1, 4, 2]\). После первого обновления — \([9, 5, 1, 4, 2]\). После второго обновления — \([9, 4, 1, 4, 2]\), и так далее.

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\).

I. Plane Tiling

геометрия математика реализация *2500

You are given five integers \(n\), \(dx_1\), \(dy_1\), \(dx_2\) and \(dy_2\). You have to select \(n\) distinct pairs of integers \((x_i, y_i)\) in such a way that, for every possible pair of integers \((x, y)\), there exists exactly one triple of integers \((a, b, i)\) meeting the following constraints:

\( \begin{cases} x \, = \, x_i + a \cdot dx_1 + b \cdot dx_2, \\ y \, = \, y_i + a \cdot dy_1 + b \cdot dy_2. \end{cases} \)
Input

The first line contains a single integer \(n\) (\(1 \le n \le 10^5\)).

The second line contains two integers \(dx_1\) and \(dy_1\) (\(-10^6 \le dx_1, dy_1 \le 10^6\)).

The third line contains two integers \(dx_2\) and \(dy_2\) (\(-10^6 \le dx_2, dy_2 \le 10^6\)).

Output

If it is impossible to correctly select \(n\) pairs of integers, print NO.

Otherwise, print YES in the first line, and then \(n\) lines, the \(i\)-th of which contains two integers \(x_i\) and \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)).

If there are multiple solutions, print any of them.

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.

D. Деление с округлением вверх

Конструктив математика Перебор теория чисел *1700

Вам задан массив \(a_1, a_2, \dots, a_n\), в котором \(a_i = i\).

За один шаг, вы можете выбрать две позиции \(x\) и \(y\) (\(x \neq y\)) и присвоить \(a_x = \left\lceil \frac{a_x}{a_y} \right\rceil\) (деление с округлением вверх).

Ваша задача: сделать так, чтобы массив \(a\) состоял из \(n - 1\) единиц и \(1\)-й двойки за не более чем \(n + 5\) шагов. Заметим, что не нужно минимизировать количество шагов.

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите список операций, который сделает так, что массив \(a\) станет состоять из \(n - 1\) единиц и \(1\)-й двойки, в следующем формате: сначала, выведите одно число \(m\) (\(m \le n + 5\)) — количество операций; далее выведите \(m\) пар чисел \(x\) и \(y\) (\(1 \le x, y \le n\); \(x \neq y\)) (\(x\) может быть как больше, так и меньше \(y\)) — выбранные позиции на соответствующем шаге.

Можно доказать, что для заданных ограничений всегда возможно найти некоторый список операций.

Примечание

В первом наборе входных данных, у вас есть массив \(a = [1, 2, 3]\). Вы можете сделать, например, следующее:

  1. выберем \(3\), \(2\): \(a_3 = \left\lceil \frac{a_3}{a_2} \right\rceil = 2\) и массив \(a = [1, 2, 2]\);
  2. выберем \(3\), \(2\): \(a_3 = \left\lceil \frac{2}{2} \right\rceil = 1\) и массив \(a = [1, 2, 1]\).
Вы получили массив с \(2\) единицами и \(1\) двойкой за \(2\) шага.

Во втором наборе, \(a = [1, 2, 3, 4]\). Вы можете, например, сделать следующее:

  1. выберем \(3\), \(4\): \(a_3 = \left\lceil \frac{3}{4} \right\rceil = 1\) и массив \(a = [1, 2, 1, 4]\);
  2. выберем \(4\), \(2\): \(a_4 = \left\lceil \frac{4}{2} \right\rceil = 2\) и массив \(a = [1, 2, 1, 2]\);
  3. выберем \(4\), \(2\): \(a_4 = \left\lceil \frac{2}{2} \right\rceil = 1\) и массив \(a = [1, 2, 1, 1]\).

B. Странное определение

битмаски графы математика теория чисел хэши *1900

Назовём два числа \(x\) и \(y\) смежными, если \(\frac{lcm(x, y)}{gcd(x, y)}\) — полный квадрат. К примеру, \(3\) и \(12\) являются смежными, а \(6\) и \(9\) — нет.

Здесь \(gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\), а \(lcm(x, y)\) обозначает наименьшее общее кратное (НОК) чисел \(x\) и \(y\).

У вас есть массив \(a\) размера \(n\), и каждую секунду происходит следующее: каждый элемент массива \(a_i\) заменяется на произведение всех смежных с ним чисел из массива (включая и сам элемент \(a_i\)).

Пусть \(d_i\) — количество смежных с \(a_i\) чисел из массива (включая само число). Красота массива определяется как \(\max_{1 \le i \le n} d_i\). Вам даны \(q\) запросов, каждый из которых описывается числом \(w\). Для каждого запроса выведите красоту массива после \(w\) секунд.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^5)\) — количество тестовых примеров.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину массива.

Следующая строка содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива.

Следующая строка содержит целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит единственное целое число \(w\) (\(0 \le w \le 10^{18}\)) — описание запроса.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), и сумма значений \(q\) по всем наборам входных данных также не превосходит \(3 \cdot 10^5\)

Выходные данные

Для каждого запроса выведите одно число — красоту массива в соответствующий момент времени.

Примечание

В первом наборе входных данных исходный массив состоит из чисел \([6, 8, 4, 2]\). Элемент \(a_4=2\) в этом массиве является смежным с числами \(a_4=2\) (так как \(\frac{lcm(2, 2)}{gcd(2, 2)}=\frac{2}{2}=1=1^2\)) и \(a_2=8\) (так как \(\frac{lcm(8,2)}{gcd(8, 2)}=\frac{8}{2}=4=2^2\)). Таким образом, \(d_4=2\), и это максимальное значение \(d_i\) среди элементов данного массива.

Во втором наборе входных данных исходный массив состоит из чисел \([12, 3, 20, 5, 80, 1]\). Элементы, смежные с \(12\), это \(\{12, 3\}\), смежные с \(3\) — \(\{12, 3\}\), смежные с \(20\) — \(\{20, 5, 80\}\), смежные с \(5\) — \(\{20, 5, 80\}\), смежные с \(80\) — \(\{20, 5, 80\}\), смежные с \(1\) — \(\{1\}\). Через одну секунду массив превращается в \([36, 36, 8000, 8000, 8000, 1]\).

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\).

В четвертом наборе входных данных невозможно поделить три одинаковых конфеты между двумя людьми.

В пятом наборе входных данных любое разделение также будет нечестным.

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\).

B. LCM строк

математика Перебор Строки теория чисел *1000

Давайте определим операцию умножения между строкой \(a\) и положительным целым числом \(x\): \(a \cdot x\) — это строка, которая является результатом записи \(x\) копий \(a\) одна за другой. Например, «abc» \(\cdot~2~=\) «abcabc», «a» \(\cdot~5~=\) «aaaaa».

Строка \(a\) делится на другую строку \(b\), если существует целое число \(x\) такое, что \(b \cdot x = a\). Например, «abababab» делится на «ab», но не делится на «ababab» или «aa».

LCM из двух строк \(s\) и \(t\) (определяется как \(LCM(s, t)\)) — это самая короткая непустая строка, которая делится как на \(s\), так и на \(t\).

Вам даны две строки \(s\) и \(t\). Найдите \(LCM(s, t)\) или сообщите, что он не существует. Можно показать, что если \(LCM(s, t)\) существует, то он единственный.

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 2000\)) — количество наборов входных данных.

Каждый набор состоит из двух строк, содержащих строки \(s\) и \(t\) (\(1 \le |s|, |t| \le 20\)). Каждый символ в каждой из этих строк является либо 'a', либо 'b'.

Выходные данные

Для каждого набора входных данных выведите \(LCM(s, t)\), если он существует; в противном случае выведите -1. Можно показать, что если \(LCM(s, t)\) существует, то он единственный.

Примечание

В первом примере «baba» = «baba» \(\cdot~1~=\) «ba» \(\cdot~2\).

Во втором примере, «aaaaaa» = «aa» \(\cdot~3~=\) «aaa» \(\cdot~2\).

C. Хватит инверсий

Конструктив математика *1500

У вас есть последовательность \(a\) из \(n\) элементов \(1, 2, 3, \dots, k - 1, k, k - 1, k - 2, \dots, k - (n - k)\) (\(k \le n < 2k\)).

Назовем инверсией в \(a\) пару индексов \(i < j\) таких, что \(a[i] > a[j]\).

Предположим, что у вас есть некоторая перестановка \(p\) размера \(k\) и вы строите последовательность \(b\) размера \(n\) следующим образом: \(b[i] = p[a[i]]\).

Ваша задача — найти такую перестановку \(p\), что суммарное количество инверсий в \(b\) не превосходит суммарного количества инверсий в \(a\), и \(b\) лексикографически максимальна.

Напоминание: последовательность из \(k\) целых чисел называется перестановкой, если она содержит все числа от \(1\) по \(k\) ровно по одному разу.

Еще одно напоминание: последовательность \(s\) лексикографически меньше последовательности \(t\), если либо \(s\) — префикс \(t\), или для первого \(i\), для которого \(s_i \ne t_i\), выполняется \(s_i < t_i\) (в первой позиции, в которой эти последовательности различаются, элемент в \(s\) меньше элемента в \(t\)).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы два целых числа \(n\) и \(k\) (\(k \le n < 2k\); \(1 \le k \le 10^5\)) — длина последовательности \(a\) и ее максимум.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите \(k\) целых чисел — перестановку \(p\), которая максимизирует \(b\) лексикографически, не увеличивая суммарное количество инверсий.

Можно доказать, что \(p\) существует и единственная.

Примечание

В первом наборе входных данных, последовательность \(a = [1]\), поэтому существует только одна перестановка \(p = [1]\).

Во втором наборе, последовательность \(a = [1, 2]\). В \(a\) нет инверсий, а потому только одна перестановка \(p = [1, 2]\) не увеличивает количество инверсий.

В третьем наборе, \(a = [1, 2, 1]\) и имеет \(1\) инверсию. Если мы используем \(p = [2, 1]\), то \(b = [p[a[1]], p[a[2]], p[a[3]]] = [2, 1, 2]\) и также имеет \(1\) инверсию.

В четвертом наборе, \(a = [1, 2, 3, 2]\), и так как \(p = [1, 3, 2]\) то \(b = [1, 3, 2, 3]\). И \(a\), и \(b\) имеют по \(1\) инверсии и \(b\) — лексикографически максимальна.

F. Странное множество

математика Потоки *2700

Обратите внимание на необычное ограничение по памяти.

Задано целое число \(n\) и две последовательности \(a_1, a_2, \dots, a_n\) и \(b_1, b_2, \dots, b_n\).

Назовем множество целых чисел \(S\) такое, что \(S \subseteq \{1, 2, 3, \dots, n\}\) странным, если для каждого элемента \(i\) из \(S\) выполняется следующее условие: для каждого \(j \in [1, i - 1]\), если \(a_j\) делит \(a_i\), то \(j\) также входит в \(S\). Пустое множество является странным.

Стоимостью множества \(S\) назовем величину \(\sum\limits_{i \in S} b_i\). Вам необходимо найти максимальную возможную стоимость странного множества.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(-10^5 \le b_i \le 10^5\)).

Выходные данные

Выведите одно целое число — максимальную стоимость странного множества.

Примечание

Для первого примера странное множество с максимальной стоимостью выглядит следующим образом — \(\{1, 2, 4, 8, 9\}\).

Для второго примера странным множеством с максимальной стоимостью является пустое множество.

G. Плитки

бпф дп Комбинаторика математика *2800

Рассмотрим дорогу, состоящую из нескольких рядов. Каждый ряд разделен на несколько прямоугольных плиток, и все плитки в одном ряду одинаковы. Первый ряд содержит ровно одну прямоугольную плитку. Посмотрите на рисунок ниже, который показывает, как расположены плитки.

Дорога построена следующим образом:

  • первый ряд состоит из \(1\) плитки;
  • затем следует \(a_1\) рядов; каждый из этих рядов содержит на \(1\) плитку больше, чем предыдущий ряд;
  • затем следует \(b_1\) рядов; каждый из этих рядов содержит на \(1\) плитку меньше, чем предыдущий ряд;
  • затем следует \(a_2\) рядов; каждый из этих рядов содержит на \(1\) плитку больше, чем предыдущий ряд;
  • затем следует \(b_2\) рядов; каждый из этих рядов содержит на \(1\) плитку меньше, чем предыдущий ряд;
  • ...
  • затем следует \(a_n\) рядов; каждый из этих рядов содержит на \(1\) плитку больше, чем предыдущий ряд;
  • затем следует \(b_n\) рядов; каждый из этих рядов содержит на \(1\) плитку меньше, чем предыдущий ряд;
Пример дороги с \(n = 2\), \(a_1 = 4\), \(b_1 = 2\), \(a_2 = 2\), \(b_2 = 3\). Ряды расположены слева направо.

Вы начинаете с единственной плитки в первом ряду и хотите добраться до последнего ряда (любой плитки из нее). От вашей текущей плитки вы можете перейти к любой плитке в следующем ряду, которая касается с вашей текущей плиткой.

Вычислите количество различных путей от первого ряда до последнего. Поскольку оно может быть большим, выведите его по модулю \(998244353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)).

Затем следует \(n\) строк. \(i\)-я из них содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^5\); \(|a_i - b_i| \le 5\)).

Дополнительное ограничение: последовательность \(a_i\) и \(b_i\) никогда не приводит к ряду с неположительным числом плиток.

Выходные данные

Выведите одно целое число — количество путей от первого ряда до последнего, взятое по модулю \(998244353\).

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\).

D. Уборка

дп жадные алгоритмы математика Структуры данных *2200

Во время уборки побережья Алиса нашла \(n\) кучек камней. В \(i\)-й кучке было \(a_i\) камней.

Кучки \(i\) и \(i + 1\) являются соседними для всех \(1 \leq i \leq n - 1\). Если кучка \(i\) стала пустой, кучки \(i - 1\) и \(i + 1\) не становятся соседними.

Алиса не хочет сама убирать эти кучки, поэтому она поручила задачу Вам. Она разрешила убирать камни только выполняя следующую операцию:

  • Выбрать две соседних кучки с ненулевым количеством камней, и удалить по одному камню из каждой из них.

Так как это не всегда возможно, Алиса разрешила Вам применить следующую суперспособность:

  • До начала уборки выбрать две соседние кучки и поменять их местами.

Определите, возможно ли убрать все камни, использовав суперспособность не более одного раза.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания самих наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество кучек камней.

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — количество камней в кучках.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите YES или NO — возможно ли убрать все камни, использовав суперспособность не более одного раза.

Примечание

В первом наборе входных данных, можно убрать все камни, не применяя суперспособность: \([1, 2, 1] \rightarrow [1, 1, 0] \rightarrow [0, 0, 0]\).

Во втором наборе можно применить суперспособность ко второй и третьей кучкам, получив первый тестовый случай.

В третьем наборе можно применить суперспособность ко четвёртой и пятой кучкам, получив \(a = [2, 2, 2, 3, 1]\).

В четвёртом наборе можно применить суперспособность к первой и второй кучкам, получив \(a = [1900, 2100, 1600, 3000, 1600]\)

F. 1 2 3 4 ...

дп математика матрицы *3000

У Игоря была последовательность \(d_1, d_2, \dots, d_n\). Когда Игорь зашёл в класс, на доске было записано число \(x\).

Игорь создал последовательность \(p\) по следующему алгоритму:

  1. сначала, \(p = [x]\);
  2. для каждого \(1 \leq i \leq n\) он сделал следующую операцию \(|d_i|\) раз:
    • если \(d_i \geq 0\), он посмотрел на последний элемент \(p\) (назовём его \(y\)) и записал \(y + 1\) в конец \(p\);
    • если \(d_i < 0\), он посмотрел на последний элемент \(p\) (назовём его \(y\)) и записал \(y - 1\) в конец \(p\).

Например, если \(x = 3\), \(d = [1, -1, 2]\), последовательность \(p\) будет равна \([3, 4, 3, 4, 5]\).

Игорь решил посчитать длину наибольшей возрастающей подпоследовательности \(p\) и их количество.

Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов.

Последовательность \(a\) является возрастающей, если каждый элемент \(a\) (кроме первого) строго больше предыдущего.

При \(p = [3, 4, 3, 4, 5]\) длина наибольшей возрастающей подпоследовательности равна \(3\), а их количество равно \(3\): \([\underline{3}, \underline{4}, 3, 4, \underline{5}]\), \([\underline{3}, 4, 3, \underline{4}, \underline{5}]\), \([3, 4, \underline{3}, \underline{4}, \underline{5}]\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 50\)) — количество элементов в \(d\).

Во второй строке задано одно целое число \(x\) (\(-10^9 \leq x \leq 10^9\)) — число на доске.

В третьей строке заданы \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(-10^9 \leq d_i \leq 10^9\)).

Выходные данные

Выведите два целых числа:

  • первое должно быть равно длине наибольшей возрастающей подпоследовательности \(p\), полученной Игорем в этом случае;
  • второе число должно быть равно их количеству по модулю \(998244353\).

По модулю \(998244353\) надо выводить только второе число.

Примечание

Первый пример разобран в условии.

Во втором примере \(p = [100, 101, 102, 103, 104, 105, 104, 103, 102, 103, 104, 105, 106, 107, 108]\).

В третьем примере \(p = [1, 2, \ldots, 2000000000]\).

A. Нечетный делитель

математика теория чисел *900

Вам дано целое число \(n\). Проверьте, есть ли у \(n\) нечетный делитель, отличный от единицы (существует ли такое число \(x\) (\(x > 1\)), что \(n\) делится на \(x\) и \(x\) нечетно).

Например, если \(n=6\), то существует \(x=3\). Если же \(n=4\), то такого числа не существует.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^{14}\)).

Обратите внимание, что числа в некоторых наборах входных данных не влезают в \(32\)-битный целочисленный тип, поэтому вы должны использовать как минимум \(64\)-битный целочисленный тип вашего языка программирования.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если у \(n\) есть нечетный делитель отличный от единицы;
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

B. Новогоднее число

дп математика Перебор *900

Поликарпу запомнился \(2020\)-й год, и он рад приходу нового \(2021\)-го года. Чтобы запомнить такой замечательный момент, Поликарп хочет представить число \(n\) в виде суммы некоторого количества чисел \(2020\) и некоторого количества чисел \(2021\).

Например, если:

  • \(n=4041\), то число \(n\) представимо в виде суммы \(2020 + 2021\);
  • \(n=4042\), то число \(n\) представимо в виде суммы \(2021 + 2021\)
  • \(n=8081\), то число \(n\) представимо в виде суммы \(2020 + 2020 + 2020 + 2021\)
  • \(n=8079\), то число \(n\) нельзя представить в виде суммы чисел \(2020\) и \(2021\).

Помогите Поликарпу понять, может ли число \(n\) быть представлено в виде суммы некоторого количества чисел \(2020\) и некоторого количества чисел \(2021\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — число, которое Поликарп хочет представить в виде суммы чисел \(2020\) и \(2021\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если число \(n\) представимо в виде суммы некоторого количества чисел \(2020\) и некоторого количества чисел \(2021\);
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

C. Бал в Берляндии

графы Комбинаторика математика *1400

В школе, в которой учится Вася, идет подготовка к проведению выпускного. Одно из запланированных выступлений — бал, в котором примут участие пары состоящие из мальчиков и девочек.

Каждый класс должен представить на бал по две пары. В классе Васи \(a\) мальчиков и \(b\) девочек изъявили желание участвовать в мероприятии. Но не все мальчики и не все девочки готовы танцевать в паре.

Формально, вам известно \(k\) возможных пар, состоящих из одного мальчика и одной девочки. Вам нужно выбрать из этих пар две так, чтобы ни один человек не состоял больше чем в одной паре.

Например, если \(a=3\), \(b=4\), \(k=4\) и следующие пары готовы танцевать вместе \((1, 2)\), \((1, 3)\), \((2, 2)\), \((3, 4)\) (в каждой паре сначала идет номер мальчика, потом номер девочки), то возможны следующие комбинации из двух пар (ниже перечислены не все возможные варианты):

  • \((1, 3)\) и \((2, 2)\);
  • \((3, 4)\) и \((1, 3)\);

Но следующие комбинации не возможны:

  • \((1, 3)\) и \((1, 2)\) — первый мальчик входит сразу в две пары;
  • \((1, 2)\) и \((2, 2)\) — вторая девочка входит сразу в две пары;

Найдите количество способов выбрать две пары, походящие под условие выше. Два способа считаются различными, если состоят из разных пар.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных содержатся три целых числа \(a\), \(b\) и \(k\) (\(1 \le a, b, k \le 2 \cdot 10^5\)) — количество мальчиков и девочек в классе и количество пар готовых танцевать вместе.

Во второй строке каждого набора входных данных содержится \(k\) целых чисел \(a_1, a_2, \ldots a_k\). (\(1 \le a_i \le a\)), где \(a_i\) — номер мальчика в паре с номером \(i\).

В третьей строке каждого набора входных данных содержится \(k\) целых чисел \(b_1, b_2, \ldots b_k\). (\(1 \le b_i \le b\)), где \(b_i\) — номер девочки в паре с номером \(i\).

Гарантируется, что суммы \(a\), \(b\) и \(k\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Гарантируется, что каждая пара указана в одном наборе входных данных не больше одного раза.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — количество способов выбрать две пары, походящие под условие выше.

Примечание

В первом наборе входных данных следующие комбинации из двух пар подходят:

  • \((1, 2)\) и \((3, 4)\);
  • \((1, 3)\) и \((2, 2)\);
  • \((1, 3)\) и \((3, 4)\);
  • \((2, 2)\) и \((3, 4)\).

Во втором наборе входных данных есть всего одна пара.

В третьем наборе входных данных следующие комбинации из двух пар подходят:

  • \((1, 1)\) и \((2, 2)\);
  • \((1, 2)\) и \((2, 1)\).

E. Рекламное агентство

Комбинаторика математика сортировки *1600

Маша работает в рекламном агентстве. В целях продвижения нового бренда она хочет заключить договор с некоторыми блогерами. Всего у Маши есть контакты \(n\) разных блогеров. Блогер с номером \(i\) имеет \(a_i\) подписчиков.

Так как бюджет у Маши ограничен, она может заключить договор только с \(k\) разными блогерами. Конечно же, Маша хочет, чтобы ее рекламу увидело как можно больше людей. Поэтому она должна нанять блогеров с максимальным суммарным количеством подписчиков.

Помогите ей, найдите количество способов выбрать \(k\) блогеров так, чтобы суммарное количество их подписчиков было максимально. Два способа считаются разными, если в первом способе есть хотя бы один блогер, которого нет во втором способе. Маша считает, что у всех блогеров разная аудитория (то есть не существует подписчика, который был бы подписан на двух разных блогеров).

Например, если \(n=4\), \(k=3\), \(a=[1, 3, 1, 2]\), то у Маши есть два способа выбрать \(3\)-х блогеров с максимальным суммарным количеством подписчиков:

  • заключить договор с блогерами с номерами \(1\), \(2\) и \(4\). В таком случае количество подписчиков будет равно \(a_1 + a_2 + a_4 = 6\).
  • заключить договор с блогерами с номерами \(2\), \(3\) и \(4\). В таком случае количество подписчиков будет равно \(a_2 + a_3 + a_4 = 6\).

Так как ответ может быть достаточно большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 1000\)) — количество блогеров и со сколькими из них можно подписать договор.

Во второй строке каждого набора входных данных содержится \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(1 \le a_i \le n\)) — количества подписчиков у блогеров.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — количество способов выбрать \(k\) блогеров так, чтобы суммарное количество их подписчиков было максимально.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных следующие варианты являются подходящими:

  • заключить договор с блогерами с номерами \(1\) и \(2\). В таком случае количество подписчиков будет равно \(a_1 + a_2 = 2\);
  • заключить договор с блогерами с номерами \(1\) и \(3\). В таком случае количество подписчиков будет равно \(a_1 + a_3 = 2\);
  • заключить договор с блогерами с номерами \(1\) и \(4\). В таком случае количество подписчиков будет равно \(a_1 + a_4 = 2\);
  • заключить договор с блогерами с номерами \(2\) и \(3\). В таком случае количество подписчиков будет равно \(a_2 + a_3 = 2\);
  • заключить договор с блогерами с номерами \(2\) и \(4\). В таком случае количество подписчиков будет равно \(a_2 + a_4 = 2\);
  • заключить договор с блогерами с номерами \(3\) и \(4\). В таком случае количество подписчиков будет равно \(a_3 + a_4 = 2\).

В третьем наборе входных данных следующие варианты являются подходящими:

  • заключить договор с блогера с номером \(2\). В таком случае количество подписчиков будет равно \(a_2 = 2\).

G. Странная красота

дп математика сортировки теория чисел *1900

Поликарп нашёл на улице массив \(a\) из \(n\) элементов.

Поликарп изобрёл свой критерий красоты массива. Он называет массив \(a\) красивым, если для каждой пары различных индексов \(i \ne j\) должно быть выполнено хотя бы одно из следующих условий:

  • \(a_i\) делится на \(a_j\);
  • \(a_j\) делится на \(a_i\).

Например, если:

  • \(n=5\) и \(a=[7, 9, 3, 14, 63]\), то массив \(a\) не является красивым (при \(i=4\) и \(j=2\) не выполняется ни одно из условий выше);
  • \(n=3\) и \(a=[2, 14, 42]\), то массив \(a\) является красивым;
  • \(n=4\) и \(a=[45, 9, 3, 18]\), то массив \(a\) не является красивым (при \(i=1\) и \(j=4\) не выполняется ни одно из условий выше);

Некрасивые массивы расстраивают Поликарпа, поэтому он хочет удалить некоторые элементы из массива \(a\) так, чтобы он стал красивым. Помогите Поликарпу определить, какое наименьшее число элементов массива необходимо удалить, чтобы массив \(a\) стал красивым.

Входные данные

В первой строке содержит одно целое число \(t\) (\(1 \leq t \leq 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное число элементов массива, которые необходимо удалить, чтобы массив \(a\) стал красивым.

Примечание

В первом наборе входных данных удаление элементов \(7\) и \(14\) сделает массив \(a\) красивым.

Во втором наборе входных данных массив \(a\) уже является красивым.

В третьем наборе входных данных удаление одного из элементов \(45\) или \(18\) сделает массив \(a\) красивым.

В четвертом наборе входных данных массив \(a\) уже является красивым.

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}\);

A. Nezzar и доска

Конструктив математика теория чисел *1800

На доске написаны \(n\) различных целых чисел \(x_1,x_2,\ldots,x_n\). Nezzar может сделать следующую операцию несколько раз.

  • Выбрать два числа \(x,y\) (не обязательно различных) на доске и записать на доске число \(2x-y\). Обратите внимание, что он не убирает выбранные числа.

Nezzar интересуется, может ли его любимое число \(k\) оказаться на доске после того, как он выполнит эту операцию несколько раз.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n,k\) (\(2 \le n \le 2 \cdot 10^5\), \(-10^{18} \le k \le 10^{18}\)).

Во второй строке описания каждого набора входных данных находятся \(n\) различных целых чисел \(x_1,x_2,\ldots,x_n\) (\(-10^{18} \le x_i \le 10^{18}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в собственной строке выведите «YES», если число \(k\) может оказаться на доске. Иначе выведите «NO».

Вы можете вывести каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных число \(1\) уже написано на доске.

Во втором наборе входных данных Nezzar может выполнить следующие операции, чтобы написать число \(k=0\) на доску:

  • Выбрать \(x=3\) и \(y=2\) и написать \(4\) на доску.
  • Выбрать \(x=4\) и \(y=7\) и написать \(1\) на доску.
  • Выбрать \(x=1\) и \(y=2\) и написать \(0\) на доску.

В третьем наборе входных данных невозможно получить число \(k = -1\) на доске.

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\) градусам.

F. Nezzar и шоколадные плитки

бпф Комбинаторика математика Теория вероятностей *3500

Nezzar купил свое любимое лакомство — \(n\) шоколадных плиток с длинами \(l_1,l_2,\ldots,l_n\). Однако некоторые из них могут быть слишком длинными, чтобы правильно их хранить!

Чтобы решить эту проблему, Nezzar придумал интересный процесс разделения их на маленькие кусочки. Сначала Nezzar кладет свои шоколадные плитки в черный ящик. Затем он совершает следующую операцию, пока максимальная длина плитки превышает \(k\).

  • Nezzar выбирает случайную шоколадную плитку из ящика с вероятностью, пропроциональной ее длине \(x\).
  • После шага \(1\) Nezzar равномерно выбирает вещественное число \(r \in (0,x)\) и делит выбранную шоколадную плитку на две плитки с длинами \(r\) и \(x-r\).
  • Наконец, он кладет две новых шоколадных плитки обратно в черный ящик.

Nezzar интересуется, чему равно математическое ожидание количества операций, которое он сделает для того, чтобы разделить свои шоколадные плитки на маленькие кусочки.

Можно показать, что ответ может быть представлен как \(\frac{P}{Q}\), где \(P\) и \(Q\) — взаимно простые числа и \(Q \not \equiv 0\) (\(\bmod 998\,244\,353\)). Выведите значение \(P\cdot Q^{-1} \mod 998\,244\,353\).

Входные данные

В первой строке находится два целых числа \(n\) и \(k\) (\(1 \le n \le 50, 1 \le k \le 2000\)).

Во второй строке находится \(n\) целых чисел \(l_1, l_2, \ldots, l_n\) (\(1 \le l_i\), \(\sum_{i=1}^{n} l_i \le 2000\)).

Выходные данные

Выведите единственное целое число — математическое ожидание количества операций, которое Nezzar сделает, чтобы разделить свои шоколадные плитки на маленькие кусочки, по модулю \(998\,244\,353\).

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\) не может быть равно сумме счастливых чисел.

C. Nezzar и симметричный массив

математика реализация сортировки *1700

Много тысячелетий назад был симметричный массив \(a_1,a_2,\ldots,a_{2n}\), состоящий из \(2n\) различных целых чисел. Массив \(a_1,a_2,\ldots,a_{2n}\) называется симметричным, если для всех целых чисел \(1 \le i \le 2n\) существует целое число \(1 \le j \le 2n\) такое, что \(a_i = -a_j\).

Для каждого целого числа \(1 \le i \le 2n\) Nezzar выписал целое число \(d_i\), равное сумме модулей разности между \(a_i\) и всеми числами из \(a\), то есть \(d_i = \sum_{j = 1}^{2n} {|a_i - a_j|}\).

Прошел миллион лет, и сейчас Nezzar с трудом помнит массив \(d\) и полностью забыл массив \(a\). Nezzar хочет узнать, существует ли симметричный массив \(a\), состоящий из \(2n\) различных целых чисел, из которого получается массив \(d\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \le n \le 10^5\)).

Во второй строке описания каждого набора входных данных находится \(2n\) целых чисел \(d_1, d_2, \ldots, d_{2n}\) (\(0 \le d_i \le 10^{12}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует любой возможный массив \(a\). Иначе выведите «NO».

Вы можете выводить символы в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных \(a=[1,-3,-1,3]\) это один из возможных массивов, из которых получается \(d=[8,12,8,12]\).

Во втором наборе входных данных можно показать, что не существует симметричных массивов, состоящих из различных целых чисел, из которых можно получить массив \(d\).

E. Школьные клубы

бпф дп математика Теория вероятностей теория чисел *3500

В школе Гомера есть \(n\) студентов, которые любят клубы.

Изначально есть \(m\) клубов, и каждый из \(n\) студентов находится ровно в одном клубе. Другими словами, в \(i\)-м клубе \(a_i\) студентов для \(1 \leq i \leq m\), причем \(a_1+a_2+\dots+a_m = n\).

\(n\) студентов настолько недружелюбны, что каждый день один (выбранный равновероятно среди всех \(n\) студентов) из них злится. Разозлившийся студент сделает одну из следующих вещей.

  • С вероятностью \(\frac 1 2\) он покидает свой нынешний клуб, затем сам создает новый клуб и присоединяется к нему. В новом клубе, который он создает, есть только один ученик (он сам).
  • С вероятностью \(\frac 1 2\) он не создает новый клуб. В этом случае он меняет свой клуб на некоторый (возможно, на тот же клуб, в котором он находится в настоящее время) с вероятностью, пропорциональной количеству студентов в нем. Формально, пусть есть \(k\) клубов, и в \(i\)-м клубе есть \(b_i\) студентов для \(1 \leq i \leq k\) (до того, как студент разозлится). Он покидает свой текущий клуб, а затем присоединяется к \(i\)-му клубу с вероятностью \(\frac {b_i} {n}\).

Отметим, что когда клуб становится пустым, студенты никогда не присоединятся к нему, потому что любой ученик, который разозлится, присоединится к пустому клубу с вероятностью \(0\) в соответствии с приведенным выше утверждением.

Гомер интересуется ожидаемым количеством дней до того момента, когда все студенты окажутся в одном и том же клубе впервые.

Мы можем доказать, что ответ может быть представлен в виде рационального числа \(\frac p q\) с \(\gcd(p, q) = 1\). Вы должны найти значение \(pq^{-1} \bmod 998\,244\,353\). Можно показать, что \(q \bmod 998\,244\,353 \neq 0\) при заданных ограничениях задачи.

Входные данные

Первая строка содержит одно целое положительное число \(m\) (\(1 \leq m \leq 1000\)) — начальное количество клубов.

Вторая строка содержит \(m\) положительных целых чисел \(a_1, a_2, \dots, a_m\) (\(1 \leq a_i \leq 4 \cdot 10^8\)) с \(1 \leq a_1+a_2+\dots+a_m \leq 4 \cdot 10^8\), где \(a_i\) обозначает количество учеников в \(i\)-м клубе изначально.

Выходные данные

Выведите одно целое число — ожидаемое количество дней, пока все студенты не окажутся в одном клубе впервые, по модулю \(998\,244\,353\).

Примечание

В первом примере независимо от того, какой студент разозлится, два студента с вероятностью \(\frac 1 4\) попадут в один и тот же клуб. Таким образом, ожидаемое количество дней, пока каждый ученик не окажется в одном клубе, должно составлять \(4\).

Во втором примере мы отмечаем, что в первый день:

  • Единственный студент в первом клубе разозлится с вероятностью \(\frac 1 3\). Если он разозлится, то создаст новый клуб и присоединится к нему с вероятностью \(\frac 1 2\) (в этом случае будет три клуба, в которых будут состоять \(0, 1, 2\) студента, соответственно); покинет свой текущий клуб и присоединится ко второму с вероятностью \(\frac 1 2 \cdot \frac 2 3 = \frac 1 3\), или останется с вероятностью \(\frac 1 2 \cdot \frac 1 3 = \frac 1 6\);
  • Каждый из двух студентов во втором клубе разозлится с вероятностью \(\frac 1 3\). Если один из них разозлится, то создаст новый клуб и присоединится к нему с вероятностью \(\frac 1 2\), покинет свой текущий клуб и присоединится ко второму с вероятностью \(\frac 1 2 \cdot \frac 1 3 = \frac 1 6\), или останется с вероятностью \(\frac 1 2 \cdot \frac 2 3 = \frac 1 3\).

В четвертом примере изначально есть только один клуб. То есть каждый студент уже в одном клубе. Так что ответ — \(0\).

A. Средство от бессонницы

Конструктив математика реализация *800

«Раз дракон. Два дракон. Три дракон», — считала принцесса. У нее была бессонница, а считать барашков ей надоело еще в девять лет.

Впрочем, считать драконов просто так тоже было скучно, поэтому она развлекалась как могла. Этой ночью она представляла, что все посчитанные драконы явились сюда, чтобы ее украсть, а она отбивается от них, как может. Каждого k-ого дракона она била сковородкой по морде. Каждому l-ому — прищемляла хвост балконной дверью. Каждому m-ому — наступала на лапу острым каблучком. Наконец, каждому n-ому она грозила позвать мамочку, и он в ужасе ретировался.

Скольким воображаемым драконам успела нанести моральный или физический ущерб принцесса, если всего она насчитала d драконов?

Входные данные

Входные данные содержат целые числа k, l, m, n и d, каждое число в отдельной строке (1 ≤ k, l, m, n ≤ 10, 1 ≤ d ≤ 105).

Выходные данные

Выведите количество пострадавших драконов.

Примечание

В первом примере каждый первый дракон был жестоко бит сковородкой. Некоторым доставалось также от дверей и каблучков, но даже сковородки хватало всем.

Во втором примере неповрежденными остались драконы 1, 7, 11, 13, 17, 19 и 23.

B. Побег

математика реализация *1500

Принцесса собирается сбежать из пещеры дракона. Это нужно как следует спланировать.

Принцесса бегает со скоростью vp миль в час, дракон летает со скоростью vd миль в час. Дракон обнаружит побег через t часов и немедленно бросится в погоню. Затея кажется безнадежной, но принцесса заметила, что дракон очень жаден и не очень умен. Чтобы задержать его, принцесса решает прихватить с собой несколько драгоценностей из его сокровищницы. Когда дракон догоняет принцессу, она может бросить на землю драгоценность; тогда дракон остановится, подберет упавшее, вернется в пещеру и потратит f часов в самой пещере на возвращение вещицы на место и наведение порядка в сокровищнице, после чего вновь отправится в погоню, начиная все с самого начала.

Предполагая, что принцесса будет бежать по прямой без остановок, сколько драгоценностей ей нужно взять с собой, чтобы успеть добраться до королевского замка, расположенного на расстоянии c миль от пещеры дракона? Если дракон догоняет принцессу в тот момент, когда она добегает до замка, считается, что она успела раньше (дополнительная драгоценность не нужна).

Входные данные

Входные данные содержат целые числа vp, vd, t, f и c (1 ≤ vp, vd ≤ 100, 1 ≤ t, f ≤ 10, 1 ≤ c ≤ 1000), каждое число записано в отдельной строке.

Выходные данные

Выведите минимальное количество драгоценностей, необходимых для того, чтобы побег удался.

Примечание

В первом примере через час после побега принцесса будет находиться на расстоянии 1 от пещеры, а дракон обнаружит побег. Через 2 часа после побега дракон догонит принцессу на расстоянии 2 от пещеры, и ей нужно будет расстаться с первой драгоценностью. Возвращение в пещеру и возня в сокровищнице займет у дракона еще два часа; за это время принцесса убежит на расстояние 4 от пещеры. Во второй раз дракон догонит принцессу на расстоянии 8 от пещеры, и ей понадобится вторая драгоценность, после чего она спокойно добежит до замка.

Второй пример аналогичен первому, но второй раз дракон догонит принцессу ровно в тот момент, когда она добежит до замка, и вторая драгоценность ей не понадобится.

D. Мешок мышек

дп игры математика Теория вероятностей *1800

Дракон и принцесса решают, что делать в новогоднюю ночь: дракон предлагает лететь в горы любоваться танцами фей под луной, а принцесса — лечь спать пораньше. Договориться полюбовно они отчаялись и решили отдаться на волю случая.

Они по очереди тянут мышек из мешка, в котором изначально w белых и b черных мышек, и выигрывает тот, кто первым достает белую мышь. После каждой вытянутой драконом мыши оставшиеся впадают в панику, и одна из них выпрыгивает из мешка сама (принцесса вытаскивает мышей из мешка аккуратно и не пугает их). Принцесса тянет первой. Какова вероятность ее победы?

Если мыши в мешке закончились, а белую так никто и не вытащил, победителем считается дракон. Мыши, которые выпрыгнули сами, не считаются вытащенными (не определяют победителя). Единожды покинув мешок, мыши в него не возвращаются. Любая мышь вытаскивается из мешка с одинаковой вероятностью, и любая мышь выпрыгивает из мешка с одинаковой вероятностью.

Входные данные

В единственной строке входных данных записано два целых числа w и b (0 ≤ w, b ≤ 1000).

Выходные данные

Выведите вероятность победы принцессы. Ответ считается правильным, если абсолютная или относительная погрешность не превосходит 10 - 9.

Примечание

Рассмотрим подробнее первый тест. С вероятностью 1/4 принцесса вытащит белую мышь сразу же и выиграет. С вероятностью 3/4 * 2/3 = 1/2 после этого дракон вытащит черную мышь и не выиграет; затем в мешке останется одна белая и одна черная мышь, одна из которых выпрыгнет, а вторая достанется принцессе в ее второй ход. Если оставшаяся мышь белая, выигрывает принцесса (вероятность 1/2 * 1/2 = 1/4), иначе мыши заканчиваются, и по правилам выигрывает дракон.

A. Побег

математика *800

Майкл обвиняется в нарушении масочного режима и создании риска распространения коронавируса. Теперь он приговорён отбывать наказание в тюрьме. К счастью, Майкл знает внутреннее устройство тюрьмы, а оно довольно простое.

Тюрьма может быть представлена в виде прямоугольника \(a\times b\), разбитого на \(ab\) клеток. Каждая клетка обозначает тюремную камеру, перегородки между клетками обозначают стены между камерами, и внешние перегородки обозначают внешние стены тюрьмы. Перед заключением Майкл может воспользоваться своими связями среди сотрудников тюрьмы, чтобы сделать (очень хорошо спрятанные) отверстия в стенах (как во внутренних, так и во внешних). Майкл не знает, в какую камеру он попадёт, но хочет, чтобы вне зависимости от этого он потом смог выбраться наружу. С другой стороны, чтобы обезопасить себя, он хочет сломать как можно меньше стен.

Найдите наименьшее количество стен, которые нужно сломать, чтобы после этого из каждой камеры можно было выбраться наружу.

Входные данные

В первой строке записано единственное число \(t\) (\(1\leq t\leq 100\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк записано по два целых числа \(a\) and \(b\) (\(1\leq a, b\leq 100\)), задающих очередной набор входных данных.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите единственное число — ответ на задачу.

Примечание

Возможные планы побега для наборов входных данных из примера изображены ниже. Серым цветом обозначены сломанные стены, черным — не сломанные.

B. Восстановление модуля

математика реализация *1500

За первое место на олимпиаде Лёше подарили много массивов целых чисел, уверив его, что эти массивы очень дорогие. Сразу после награждения Лёша принял решение продать их. На двери пункта приема массивов было сказано, что принимаются только массивы, которые можно сжать в генератор, работающий по следующему принципу:

На вход генератору дается четверка целых чисел \(n\), \(m\), \(c\), \(s\), при этом \(n\) и \(m\) положительны, \(s\) неотрицательно, а для \(c\) верно, что \(0 \leq c < m\). Массив \(a\) из \(n\) элементов генерируется по следующим правилам:

  • \(a_1 = s \bmod m\), где \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\);
  • \(a_i = (a_{i-1} + c) \bmod m\) для всех \(i\) таких, что \(1 < i \le n\).

Например, если \(n = 5\), \(m = 7\), \(c = 4\), а \(s = 10\), то \(a = [3, 0, 4, 1, 5]\).

Цена такого массива вычисляется очень просто — это значение \(m\) в этой четверке чисел.

Лёше стало интересно, сколько денег он может потребовать за каждый свой массив. Помогите Лёше определить для каждого массива, можно ли его задать какой-нибудь четверкой чисел \(n\), \(m\), \(c\), \(s\), и, если да, найти максимальное значение \(m\) среди всех подходящих четверок.

Входные данные

На первой строке находится целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество массивов.

Первая строка описания массива содержит целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер очередного массива, полученного Лешей.

Вторая строка описания массива содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\) ) — элементы массива.

Гарантируется, что суммарный размер массивов не превосходит \(10^5\).

Выходные данные

Для каждого массива выведите:

  • \(-1\), если нет такой четверки чисел, что генерирует этот массив;
  • \(0\), если есть четверки чисел со сколь угодно большим \(m\);
  • максимальное значение \(m\) и любое подходящее \(c\) (\(0 \leq c < m\)) в остальных случаях.

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\).

B. Замена и возрастание

дп математика реализация *1200

Дано положительное целое число \(k\). Два массива называются \(k\)-похожими, если:

  • они строго возрастающие;
  • они имеют одинаковую длину;
  • все их элементы — это положительные целые числа между \(1\) и \(k\) (включительно);
  • они различаются в ровно одной позиции.

Вам дано число \(k\), строго возрастающий массив \(a\) и \(q\) запросов. Для каждого запроса вам даны два целых числа \(l_i \leq r_i\). Ваша задача найти, сколько массивов \(b\) существует таких, что \(b\) \(k\)-похож на массив \([a_{l_i},a_{l_i+1}\ldots,a_{r_i}]\).

Входные данные

В первой строке находятся три целых числа \(n\), \(q\) и \(k\) (\(1\leq n, q \leq 10^5\), \(n\leq k \leq 10^9\)) — длина массива \(a\), количество запросов и число \(k\).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots,a_n\) (\(1 \leq a_i \leq k\)). Этот массив строго возрастающий: \(a_1 < a_2 < \ldots < a_n\).

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\), \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)).

Выходные данные

Выведите \(q\) строк. \(i\)-я из них должна содержать ответ на \(i\)-й запрос.

Примечание

В первом примере:

В первом запросе есть \(4\) массива, которые \(5\)-похожи на \([2,4]\): \([1,4],[3,4],[2,3],[2,5]\).

Во втором запросе есть \(3\) массива, которые \(5\)-похожи на \([4,5]\): \([1,5],[2,5],[3,5]\).

C. Деление и остаток

Бинарный поиск математика Перебор теория чисел *1700

Пара положительных целых чисел \((a,b)\) называется специальной, если \(\lfloor \frac{a}{b} \rfloor = a \bmod b\). Здесь \(\lfloor \frac{a}{b} \rfloor\) — это результат целочисленного деления \(a\) на \(b\), а \(a \bmod b\) — это остаток от такого деления.

Вам даны два целых числа \(x\) и \(y\). Найдите количество специальных пар \((a,b)\) таких, что \(1\leq a \leq x\) и \(1 \leq b \leq y\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находятся два целых числа \(x\), \(y\) (\(1 \le x,y \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите ответ в единственной строке.

Примечание

В первом наборе входных данных единственная специальная пара — это \((3, 2)\).

Во втором наборе входных данных нет ни одной специальной пары.

В третьем наборе входных данных есть две специальные пары: \((3, 2)\) и \((4, 3)\).

D. Делители и степенные разности

графы Конструктив математика теория чисел *2200

Вам дана матрица \(a\), состоящая из положительных целых чисел. В ней \(n\) строк и \(m\) столбцов.

Постройте матрицу \(b\), состоящую из положительных целых чисел. Она должна иметь такой же размер, что и матрица \(a\), а также должны выполняться следующие условия:

  • \(1 \le b_{i,j} \le 10^6\);
  • \(b_{i,j}\) делится на \(a_{i,j}\);
  • модуль разности чисел в любой паре соседних клеток (двух клеток, имеющих общую сторону) в \(b\) равен \(k^4\) для некоторого целого числа \(k \ge 1\) (\(k\) не обязательно одинаковое для всех пар, для каждой пары это число может быть свое).

Можно показать, что ответ всегда существует.

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(2 \le n,m \le 500\)).

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е число в \(i\)-й строке — это \(a_{i,j}\) (\(1 \le a_{i,j} \le 16\)).

Выходные данные

Выведите \(n\) строк, в каждой \(m\) целых чисел. \(j\)-е число в \(i\)-й строке должно быть \(b_{i,j}\).

Примечание

В первом примере матрица \(a\) может быть использована как матрица \(b\), потому что модуль разности чисел в любой паре соседних клеток равен \(1 = 1^4\).

В третьем примере:

  • \(327\) делится на \(3\), \(583\) делится на \(11\), \(408\) делится на \(12\), \(664\) делится на \(8\);
  • \(|408 - 327| = 3^4\), \(|583 - 327| = 4^4\), \(|664 - 408| = 4^4\), \(|664 - 583| = 3^4\).

B. Круговорот котов в квартире

математика теория чисел *1200

Представьте, что у вас дома живет два кота: A и B. Всего в доме есть \(n\) мест, в которых оба кота любят поспать.

Ваши коты очень любят поспасть и им нравятся все эти места, поэтому они перемещаются от места к месту каждый час по циклу:

  • Кот A меняет свое место нахождения в порядке: \(n, n - 1, n - 2, \dots, 3, 2, 1, n, n - 1, \dots\) Другими словами, в первый час он лежит на месте \(n\) и потом перемещается по местам в порядке убывания циклически;
  • Кот B меняет свое место нахождения в порядке: \(1, 2, 3, \dots, n - 1, n, 1, 2, \dots\) Другими словами, в первый час он лежит на месте \(1\) и потом перемещается по местам в порядке возрастания циклически.

Кот B намного моложе, а потому у них есть строгая иерархия: A и B не ложатся вместе. Иначе говоря, если оба кота хотят лечь на место \(x\), то A занимает данное место, а B ложится в следующее по своему порядку место (если \(x < n\), то в \(x + 1\), а если \(x = n\) то в \(1\)). Кот B ложится на места согласно своему порядку, поэтому он не вернется на пропущенное место \(x\) после того, как A освободит его, а переместится на место \(x + 2\) и так далее.

Определите, где на каком месте будет лежать B на \(k\)-м часу.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 10^9\); \(1 \le k \le 10^9\)) — количество мест в квартире и час \(k\).

Выходные данные

Для каждого набора входных данных, выведите одно число — номер места, где кот B будет спать на \(k\)-м часу.

Примечание

В первом наборе входных данных, \(n = 2\), поэтому:

  • в \(1\)-й час, A лежит на месте \(2\) и B — на \(1\);
  • во \(2\)-й час, A перемещается на место \(1\), а B — на \(2\).
Если \(n = 3\), то:
  • в \(1\)-й час, A лежит на месте \(3\) и B — на \(1\);
  • во \(2\)-й час, A перемещается на место \(2\); B тоже хотел бы переместиться с \(1\) на \(2\), но это место занято, поэтому он перемещается на \(3\);
  • в \(3\)-й час, A перемещается на место \(1\); B тоже хоте бы переместиться с \(3\) на \(1\), но это место занято, поэтому он перемещается на \(2\).

В шестом наборе входных данных:

  • A находится в следующих местах каждый час: \([5, 4, 3, 2, 1]\);
  • B находится в следующих местах каждый час: \([1, 2, 4, 5, 2]\).

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\) очка).

D. Пифагоровы тройки

Бинарный поиск математика Перебор теория чисел *1500

Пифагорова тройка — это тройка целых чисел \((a, b, c)\) таких, что можно образовать прямоугольный треугольник с длинами первого катета, второго катета и гипотенузы, равными \(a\), \(b\) и \(c\) соответственно. Примером пифагоровой тройки является \((3, 4, 5)\).

Вася изучает свойства прямоугольных треугольников, и он использует формулу, которая определяет, является ли некоторая тройка целых чисел пифагоровой. К сожалению, он забыл точную формулу; он помнит только, что формула была каким-то уравнением с квадратами. Поэтому он придумал следующую формулу: \(c = a^2 - b\).

Очевидно, что это неправильная формула для проверки, является ли тройка чисел пифагоровой. Но, к удивлению Васи, его формула сработала на тройке \((3, 4, 5)\): \(5 = 3^2 - 4\) поэтому по формуле Васи, это пифагорова тройка.

Когда Вася нашел правильную формулу (и понял, что его формула неверна), он задался вопросом: сколько существует троек целых чисел \((a, b, c)\) \(1 \le a \le b \le c \le n\) таких, что они являются пифагоровыми как по его формуле, так и по настоящему определению? Он попросил вас посчитать количество таких троек.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей одно целое число \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Для каждого теста выведите одно целое число — количество троек целых чисел \((a, b, c)\) \(1 \le a \le b \le c \le n\) таких, чтобы они являются пифагоровыми как по настоящему определению, так и по формуле, которую придумал Вася.

Примечание

Единственная пифагорова тройка, удовлетворяющая \(c = a^2 - b\) и \(1 \le a \le b \le c \le 9\), является \((3, 4, 5)\); поэтому ответ для \(n = 3\) равен \(0\), а ответ для \(n = 6\) (и для \(n = 9\)) равен \(1\).

G. Подсчет строк

бпф дп Комбинаторика математика *2700

У вас есть \(c_1\) букв 'a', \(c_2\) букв 'b', ..., \(c_{26}\) букв 'z'. Вы хотите построить красивую строку длины \(n\) из них (очевидно, \(i\)-я буква может быть использована не более \(c_i\) раз). Каждое значение \(c_i\) больше \(\frac{n}{3}\).

Назовем строку красивой, если у нее нет ни одной палидромной непрерывной подстроки, длина которой нечетна и больше \(1\). Например, строка «abacaba» не является красивой, у нее есть несколько палиндромных подстрок, длина которых нечетна и больше \(1\) (одна из таких подстрок — «aca»). Другой пример: строка «abcaa» —- красивая.

Посчитайте количество различных строк, которые можно построить, и выведите его по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(3 \le n \le 400\)).

Во второй строке заданы \(26\) целых чисел \(c_1\), \(c_2\), ..., \(c_{26}\) (\(\frac{n}{3} < c_i \le n\)).

Выходные данные

Выведите одно целое число — количество различных строк, которые можно построить, взятое по модулю \(998244353\).

A. От нуля до Y

*особая задача математика *900

Вам даны два положительных (больше нуля) целых числа \(x\) и \(y\). Также у вас есть переменная \(k\), изначально равная \(0\).

Вы можете выполнять следующие два типа операций:

  • увеличить \(k\) на \(1\) (т. е. присвоить \(k := k + 1\));
  • увеличить \(k\) на \(x \cdot 10^{p}\) для некоторого неотрицательного \(p\) (т. е. присвоить \(k := k + x \cdot 10^{p}\) для \(p \ge 0\)).

Найдите минимальное количество операций, описанных выше, чтобы значение \(k\) стало равно \(y\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, чтобы значение \(k\) стало равно \(y\).

Примечание

В первом примере можно использовать следующую последовательность операций:

  1. прибавить \(1\);
  2. прибавить \(2 \cdot 10^0 = 2\);
  3. прибавить \(2 \cdot 10^0 = 2\);
  4. прибавить \(2 \cdot 10^0 = 2\).
\(1 + 2 + 2 + 2 = 7\).

Во втором примере можно использовать следующую последовательность операций:

  1. прибавить \(3 \cdot 10^1 = 30\);
  2. прибавить \(3 \cdot 10^0 = 3\);
  3. прибавить \(3 \cdot 10^0 = 3\);
  4. прибавить \(3 \cdot 10^0 = 3\);
  5. прибавить \(3 \cdot 10^0 = 3\).
\(30 + 3 + 3 + 3 + 3 = 42\).

C. Двое полицейских

*особая задача Бинарный поиск математика Перебор *1900

Задана улица, которую можно представить массивом длины \(n\).

Двое полицейских патрулируют эту улицу: первый стоит в точке \(x\), а второй стоит в точке \(y\).

В течение одной минуты оба полицейских могут решить, что им делать (независимо): пойти влево (если текущая позиция больше \(1\)), пойти вправо (если текущая позиция меньше \(n\)), или же не делать ничего.

Улица считается чистой, если каждая точка улицы посещена хотя бы одним полицейским.

Ваша задача — найти минимальное количество минут, необходимое полицейским для того, чтобы посетить каждую точку улицы (опять же, каждая точка должна быть посещена хотя бы одним из них).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит три целых числа \(n\), \(x\) и \(y\) (\(2 \le n \le 10^6\); \(1 \le x, y \le n\); \(x \ne y\)) — длину улицы, позицию первого полицейского и позицию второго полицейского, соответственно.

Гарантируется, что сумма \(n\) не превосходит \(10^6\) (\(\sum n \le 10^6\)).

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное количество минут, необходимое полицейским, чтобы посетить каждую точку улицы.

J. Цветочный магазин

*особая задача бпф математика Структуры данных *3100

Ваша подруга является владельцем цветочного магазина. Чтобы подготовиться к следующим праздникам (когда, как обычно, продажи взлетят до небес), она попросила вас написать ей специальную программу, которая поможет проанализировать имеющиеся у нее запасы.

Есть \(n\) различных типов цветов, которые она может заказать, и каждый цветок типа \(i\) стоит \(w_i\). Последние праздники прошли с большим успехом, она продала все цветы, которые у нее были, так что сейчас все ее запасы пусты.

С этого момента она начинает рутинные операции по заказу и продаже цветов, одновременно пытаясь проанализировать, что у нее есть под рукой. Все это можно представить в виде \(m\) запросов трех типов:

  • «\(1\) \(i\) \(c\)» — она купила \(c\) цветов типа \(i\);
  • «\(2\) \(i\) \(c\)» — она продала \(c\) цветов типа \(i\);
  • «\(3\) \(l\) \(r\) \(k\)» — сколько вариантов букетов она может составить, используя только цветы типов \(l, l + 1, \dots, r\) со стоимостью не более \(k\). Для простоты можно представить, что букет — это мультисет цветов, а два букета различны, если они различны как мультисеты. Стоимость букета — это сумма всех цветов, которые в нем есть.

Помогите своей подруге и напишите программу, которая сможет обрабатывать все эти запросы.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 1000\); \(1 \le m \le 1000\)) — количество типов цветов и количество запросов.

Вторая строка содержит \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le 1000\)) — стоимость одного цветка каждого типа.

Следующие \(m\) строк содержат запросы — по одному на строке. Каждый запрос имеет один из трех типов:

  • \(1\) \(i\) \(c\) (\(1 \le i \le n\); \(1 \le c \le 5000\));
  • \(2\) \(i\) \(c\) (\(1 \le i \le n\); \(1 \le c \le 5000\)). Гарантируется, что в этот момент есть по крайней мере \(c\) цветов типа \(i\);
  • \(3\) \(l\) \(r\) \(k\) (\(1 \le l \le r \le n\); \(1 \le k \le 5000\))

Гарантируется, что общая стоимость всех цветов в магазине после каждого запроса не превышает \(5000\).

Выходные данные

Для каждого запроса третьего типа выведите, сколько вариантов букетов можно составить, используя только цветы типов \(l, l + 1, \dots, r\) со стоимостью не более \(k\). Поскольку ответ может быть слишком большим, выведите его по модулю \(998\,244\,353\).

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\) уже плотный.

B. Сбалансированные остатки

Конструктив математика Перебор *1000

Вам дано число \(n\) (делящееся на \(3\)) и массив \(a[1 \dots n]\). За один ход вы можете увеличить любой из элементов массива на единицу. Формально, вы выбираете индекс \(i\) (\(1 \le i \le n\)) и заменяете \(a_i\) на \(a_i + 1\). Вы можете выбирать один и тот же индекс \(i\) неоднократно для разных ходов.

Обозначим за \(c_0\), \(c_1\) и \(c_2\) количества чисел из массива \(a\) которые имеют остаток \(0\), \(1\) и \(2\) при делении на число \(3\) соответственно. Скажем, что массив \(a\) имеет сбалансированные остатки, если \(c_0\), \(c_1\) и \(c_2\) равны между собой.

Например, если \(n = 6\) и \(a = [0, 2, 5, 5, 4, 8]\), то возможна следующая последовательность ходов:

  • изначально \(c_0 = 1\), \(c_1 = 1\) и \(c_2 = 4\), эти величины не равны между собой. Увеличим \(a_3\), теперь массив \(a = [0, 2, 6, 5, 4, 8]\);
  • \(c_0 = 2\), \(c_1 = 1\) и \(c_2 = 3\), эти величины не равны между собой. Увеличим \(a_6\), теперь массив \(a = [0, 2, 6, 5, 4, 9]\);
  • \(c_0 = 3\), \(c_1 = 1\) и \(c_2 = 2\), эти величины не равны между собой. Увеличим \(a_1\), теперь массив \(a = [1, 2, 6, 5, 4, 9]\);
  • \(c_0 = 2\), \(c_1 = 2\) и \(c_2 = 2\), эти величины равны между собой, значит, массив \(a\) имеет сбалансированные остатки.

Найдите, какое минимальное количество ходов необходимо сделать, чтобы массив \(a\) имел сбалансированные остатки.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(3 \le n \le 3 \cdot 10^4\)) — длина массива \(a\). Гарантируется, что число \(n\) делится на \(3\).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 100\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(150\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество ходов, которые надо совершить, чтобы массив \(a\) имел сбалансированные остатки.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных необходимо сделать один ход для \(i=2\).

В третьем наборе входных данных необходимо сделать три хода:

  • первый ход: \(i=9\);
  • второй ход: \(i=9\);
  • третий ход: \(i=2\).

В четвертом наборе входных данных величины \(c_0\), \(c_1\) и \(c_2\) изначально совпадают, поэтому массив \(a\) уже имеет сбалансированные остатки.

C. Сумма кубов

Бинарный поиск математика Перебор Перебор *1100

Вам дано целое положительное число \(x\). Проверьте, представимо ли число \(x\) в виде суммы кубов двух целых положительных чисел.

Формально, вам нужно проверить, существует ли два целых числа \(a\) и \(b\) (\(1 \le a, b\)), таких что \(a^3+b^3=x\).

Например, если \(x = 35\), то подходят числа \(a=2\) и \(b=3\) (\(2^3+3^3=8+27=35\)). Если же \(x=4\), то ни одна пара чисел \(a\) и \(b\) не подходит.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одного целого положительного числа \(x\) (\(1 \le x \le 10^{12}\)).

Обратите внимание, что числа в некоторых наборах входных данных не помещаются в \(32\)-битный целочисленный тип, поэтому вы должны использовать как минимум \(64\)-битный целочисленный тип вашего языка программирования.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если число \(x\) представимо в виде суммы кубов двух целых положительных чисел.
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Число \(1\) не представимо в виде суммы двух кубов.

Число \(2\) представимо в виде \(1^3+1^3\).

Число \(4\) не представимо в виде суммы двух кубов.

Число \(34\) не представимо в виде суммы двух кубов.

Число \(35\) представимо в виде \(2^3+3^3\).

Число \(16\) представимо в виде \(2^3+2^3\).

Число \(703657519796\) представимо в виде \(5779^3+7993^3\).

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\) красивым.

G. Старый дисковод

Бинарный поиск математика Структуры данных *1900

Поликарп разбирал свой чердак и нашел на нем старый дисковод. В дисковод был вставлен круглый диск, на котором было написано \(n\) целых чисел.

Поликарп выписал числа с диска в массив \(a\). Оказалось, что дисковод работает по следующему алгоритму:

  • дисковод принимает на вход одно положительное число \(x\) и ставит указатель на первый элемент массива \(a\);
  • после этого дисковод начинает крутить диск, каждую секунду перемещая указатель на следующий элемент, вычисляя сумму всех элементов, побывавших под указателем. Так как диск круглый, то в массиве \(a\) после последнего элемента вновь следует первый;
  • как только сумма станет не меньше \(x\), дисковод завершит работу.

Поликарп хочет подробнее изучить работу дисковода, но у него совсем нет свободного времени. Поэтому он задал вам \(m\) вопросов. Для ответа на \(i\)-й из них вам нужно найти сколько секунд будет работать дисковод, если дать ему на вход число \(x_i\). Обратите внимание, что в некоторых случаях дисковод может работать бесконечно долго.

Например, если \(n=3, m=3\), \(a=[1, -3, 4]\) и \(x=[1, 5, 2]\), то ответы на вопросы следующие:

  • ответ на первый запрос равен \(0\), так как дисковод изначально указывает на первый элемент, и изначальная сумма равна \(1\).
  • ответ на второй запрос равен \(6\), дисковод прокрутит диск полностью два раза, и сумма станет равной \(1+(-3)+4+1+(-3)+4+1=5\).
  • ответ на третий запрос равен \(2\), сумма \(1+(-3)+4=2\).
Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных состоит из двух целых положительных чисел \(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\) целых положительных чисел \(x_1, x_2, \ldots, x_m\) (\(1 \le x \le 10^9\)).

Гарантируется, что суммы \(n\) и \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных на отдельной строке выведите \(m\) чисел, где \(i\)-е число равно:

  • \(-1\), если дисковод будет работать бесконечно долго;
  • количество секунд, в течение которых будет работать дисковод, в противном случае.

B. Минимальная стоимость

математика Перебор *1200

Дан граф из \(n\) строк и \(10^6 + 2\) столбцов, где строки пронумерованы от \(1\) до \(n\), а столбцы от \(0\) до \(10^6 + 1\):

Обозначим вершину в строке \(i\) и столбце \(j\) как \((i, j)\).

Изначально для каждого \(i\) строка \(i\) содержит ровно одно препятствие — в вершине \((i, a_i)\). Вы хотите переместить несколько препятствий так, чтобы можно было достичь вершины \((n, 10^6+1)\), начав в вершине \((1, 0)\), перемещаясь по ребрам этого графа (нельзя проходить через вершины с препятствиями). Для перемещения одного препятствия на соседнюю по ребру свободную вершину нужны \(u\) или \(v\) монет:

  • Если в вершине \((i, j)\) есть препятствие, можно использовать \(u\) монет, чтобы переместить его в вершину \((i-1, j)\) или вершину \((i+1, j)\), если эта вершина существует, и в данный момент в ней нет препятствия.
  • Если в вершине \((i, j)\) есть препятствие, то можно использовать \(v\) монет, чтобы переместить его в вершину \((i, j-1)\) или вершину \((i, j+1)\), если эта вершина существует, и в данный момент в ней нет препятствия.
  • Обратите внимание, что вы не можете перемещать препятствия за пределы сетки. Например, нельзя переместить препятствие с вершины \((1,1)\) в \((0,1)\).

Для лучшего понимания смотрите картинку выше.

Найдите минимальное количество монет, которое нужно потратить, чтобы можно было достичь вершины \((n, 10^6+1)\), начав в вершине \((1, 0)\), перемещаясь по ребрам этого графа, не проходя через вершины с препятствиями.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(u\) и \(v\) (\(2 \le n \le 100\), \(1 \le u, v \le 10^9\)) — количество строк в графе и количества монет, необходимых для перемещения по вертикали и горизонтали соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) обозначает, что препятствие в \(i\)-й строке находится в вершине \((i, a_i)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество монет, которое нужно потратить, чтобы можно было достичь вершины \((n, 10^6+1)\), начав в вершине \((1, 0)\), перемещаясь по ребрам этого графа, не проходя через вершины с препятствиями.

Можно показать, что при ограничениях задачи всегда существует способ сделать такое путешествие возможным.

Примечание

В первом примере два препятствия стоят в вершинах \((1, 2)\) и \((2,2)\). Вы можете передвинуть препятствие с \((2, 2)\) в \((2, 3)\), а затем в \((1, 3)\). Общая стоимость будет составлять \(u+v = 7\) монет.

Во втором примере два препятствия стоят в \((1, 3)\) и \((2,2)\). Вы можете передвинуть препятствие с \((1, 3)\) в \((2, 3)\). Стоимость составляет \(u = 3\) монеты.

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\).

G. Обменяйте и переверните

графы Конструктив математика *2800

Есть \(n\) монет, пронумерованных от \(1\) до \(n\). Изначально монета \(c_i\) находится на позиции \(i\) и лежит лицевой стороной вверх ((\(c_1, c_2, \dots, c_n)\) является перестановкой чисел от \(1\) до \(n\)). Вы можете делать операции с этими монетами.

Одна операция состоит в следующем:

  • Выберите \(2\) различных индекса \(i\) и \(j\).

  • Поменяйте местами монеты на позициях \(i\) и \(j\).

  • Затем переверните обе эти монеты на позициях \(i\) и \(j\) (если они изначально лежали лицевой стороной вверх, то после операции они будут лежать лицевой стороной вниз, и наоборот).

Постройте последовательность из не более чем \(n+1\) операций таким образом, чтобы после выполнения всех операций монета \(i\) находилась на позиции \(i\) лицевой стороной вверх.

Обратите внимание, что вам не нужно минимизировать количество операций.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — количество монет.

Во второй строке содержатся \(n\) целых чисел \(c_1,c_2,\dots,c_n\) (\(1 \le c_i \le n\), \(c_i \neq c_j\) для \(i\neq j\)).

Выходные данные

В первой строке выведите целое число \(q\) \((0 \leq q \leq n+1)\) — количество операций, которые вы использовали.

В каждой из следующих \(q\) строк выведите по два целых числа \(i\) и \(j\) \((1 \leq i, j \leq n, i \ne j)\) — позиции, которые вы выбрали для очередной операции.

Примечание

Будем обозначать монету \(i\), обращенную лицевой стороной вверх, как \(i\), а монету \(i\), обращенную вниз, как \(-i\).

Последовательность ходов, выполненная в первом примере, изменяет монеты следующим образом:

  • \([~~~2,~~~1,~~~3]\)
  • \([-3,~~~1,-2]\)
  • \([-3,~~~2,-1]\)
  • \([~~~1,~~~2,~~~3]\)

Во втором примере монеты изначально находятся на своих местах, поэтому операций не нужно.

A. Три пловца

математика *800

Три пловца устроили марафон в бассейне. Ровно в 12 часов дня они начали заплыв от левого бортика бассейна.

Известно, что первый пловец проплывает бассейн туда и обратно за \(a\) минут, второй — за \(b\) минут, а третий — за \(c\) минут. Иными словами, первый пловец оказывается у левого бортика спустя \(0\), \(a\), \(2a\), \(3a\) и так далее минут после начала заплыва, второй пловец — спустя \(0\), \(b\), \(2b\), \(3b\) и так далее минут после начала заплыва, а третий пловец — спустя \(0\), \(c\), \(2c\), \(3c\) и так далее минут после начала заплыва.

Вы подошли к левому бортику бассейна ровно в \(p\) минут после начала заплыва. Определите, через какое минимальное число минут после вашего прихода один из пловцов окажется у левого бортика.

Входные данные

В первой строке задано целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Следующие \(t\) строк задают наборы входных данных.

В каждой строке задано четыре целых числа \(p\), \(a\), \(b\) и \(c\) (\(1 \leq p, a, b, c \leq 10^{18}\)) — время (в минутах) после начала заплыва, в которое вы пододшли к левому бортику бассейна, а также времена (в минутах), которые требуются пловцам, чтобы проплыть бассейн от левого бортика до правого и обратно.

Выходные данные

Для каждого набора входных данных, выведите одно целое число — через сколько минут после вашего прихода один из пловцов окажется у бортика.

Примечание

В первом наборе входных данных первый пловец находится у левого бортика в \(0, 5, 10, 15, \ldots\) минут после полудня, второй пловец находится у левого бортика в \(0, 4, 8, 12, \ldots\) минут после полудня, а третий пловец находится у левого бортика в \(0, 8, 16, 24, \ldots\) минут после полудня. Вы подошли к бассейну через \(9\) минут после полудня и через минуту встретите первого пловца у левого бортика.

Во втором наборе входных данных первый пловец находится у левого бортика в \(0, 6, 12, 18, \ldots\) минут после полудня, второй пловец находится у левого бортика в \(0, 10, 20, 30, \ldots\) минут после полудня, а третий пловец находится у левого бортика в \(0, 9, 18, 27, \ldots\) минут после полудня. Вы подошли к бассейну через \(2\) минуты после полудня и через \(4\) минуты встретите первого пловца у левого бортика.

В третьем наборе входных данных вы подошли к бассейну через \(10\) минут после полудня. В это же время у левого бортика находятся все три пловца. Редкостная удача!

В четвёртом наборе входных данных все пловцы находится у левого бортика в \(0, 9, 18, 27, \ldots\) минут после полудня. Вы подошли к бассейну через \(10\) минут после полудня и через \(8\) минут встретите всех трёх пловцов у левого бортика.

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\).

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}\). Ровно одна единица.

В третьем примере из условия можно показать, что ответа нет.

D. НОД массива

математика Перебор реализация сортировки Структуры данных теория чисел хэши *2100

Дан массив \(a\) длины \(n\). Требуется обработать \(q\) запросов следующего вида: даны два целых числа \(i\) и \(x\), необходимо умножить элемент \(a_i\) на \(x\).

После обработки каждого запроса нужно вывести наибольший общий делитель (НОД) всех чисел массива \(a\).

Так как ответ может быть слишком большим, вам требуется вывести его по модулю \(10^9+7\).

Входные данные

Первая строка входных данных содержит два целых числа — \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) натуральных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — элементы массива \(a\) до изменений.

Следующие \(q\) строк содержат запросы в следующем формате: в каждой строке содержатся два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(1 \le x \le 2 \cdot 10^5\)).

Выходные данные

Выведите \(q\) строк: после выполнения каждого запроса выведите НОД всех чисел массива по модулю \(10^9+7\) в отдельной строке.

Примечание

После первого запроса массив станет \([12, 6, 8, 12]\), \(\operatorname{gcd}(12, 6, 8, 12) = 2\).

После второго запроса — \([12, 18, 8, 12]\), \(\operatorname{gcd}(12, 18, 8, 12) = 2\).

После третьего запроса — \([12, 18, 24, 12]\), \(\operatorname{gcd}(12, 18, 24, 12) = 6\).

Здесь функция \(\operatorname{gcd}\) обозначает наибольший общий делитель.

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\).

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\) единиц энергии.

D. Деревья поиска в ширину

графы Деревья Комбинаторика кратчайшие пути математика поиск в глубину и подобное *2600

Будем говорить, что остовное дерево некоторого графа является деревом поиска в ширину с корнем в вершине \(s\), если и только если для всех вершин \(t\) кратчайшее расстояние между вершинами \(s\) и \(t\) в графе равно кратчайшему расстоянию между \(s\) и \(t\) в этом остовном дереве.

Для фиксированного графа можно определить \(f(x,y)\) как число остовных деревьев в данном графе таких, что они являются деревьями поиска в ширину как с корнем в \(x\), так и с корнем в \(y\).

Вам дан неориентированный связный граф с \(n\) вершинами и \(m\) ребрами. Вычислите \(f(i,j)\) для всех \(i\), \(j\) по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 400\), \(0 \le m \le 600\)) — количество вершин и ребер в графе.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(a_i\), \(b_i\) (\(1 \leq a_i, b_i \leq n\), \(a_i < b_i\)), описывающих ребро, соединяющее \(a_i\) и \(b_i\).

Гарантируется, что все ребра различны, а граф — связный.

Выходные данные

Выведите \(n\) строк, каждая из которых содержит \(n\) целых чисел.

Число в строке \(i\) на позиции \(j\) должно быть равно \(f(i,j) \bmod 998\,244\,353\).

Примечание

Изображения ниже описывают первый пример.

Дерево из красных ребер является деревом поиска в ширину с корнем как в \(1\), так и в \(2\).

Похожим образом можно построить деревья поисков в ширину для любой пары соседних вершин.

B. Max и Mex

математика *1100

Вам дано мультимножество \(S\), изначально состоящее из \(n\) различных неотрицательных целых чисел. Мультимножество это множество, которое может содержать некоторые элементы несколько раз.

Вы должны выполнить следующую операцию \(k\) раз:

  • Добавить число \(\lceil\frac{a+b}{2}\rceil\) (округление вверх) в \(S\), где \(a = \operatorname{mex}(S)\), а \(b = \max(S)\). Если это число уже присутствует во множестве, добавьте его еще раз.

Здесь \(\operatorname{max}\) мультимножества обозначает максимальный элемент в этом мультимножестве, а \(\operatorname{mex}\) мультимножества обозначает минимальное неотрицательное число, которое не лежит в этом мультимножестве. Например,

  • \(\operatorname{mex}(\{1,4,0,2\})=3\);
  • \(\operatorname{mex}(\{2,5,1\})=0\).

Ваша задача — вычислить количество различных элементов в \(S\) после выполнения \(k\) операций.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1\le n\le 10^5\), \(0\le k\le 10^9\)) — изначальный размер мультимножества \(S\) и количество операций, которые вы должны выполнить.

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(a_1,a_2,\dots,a_n\) (\(0\le a_i\le 10^9\))  — числа в изначальном мультимножестве.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите количество различных элементов в \(S\) после выполнения \(k\) операций.

Примечание

В первом наборе входных данных \(S=\{0,1,3,4\}\), \(a=\operatorname{mex}(S)=2\), \(b=\max(S)=4\), \(\lceil\frac{a+b}{2}\rceil=3\). Поэтому в \(S\) добавляется число \(3\), а \(S\) становится равным \(\{0,1,3,3,4\}\). Таким образом, ответ равен \(4\).

Во втором наборе входных данных \(S=\{0,1,4\}\), \(a=\operatorname{mex}(S)=2\), \(b=\max(S)=4\), \(\lceil\frac{a+b}{2}\rceil=3\). Поэтому в \(S\) добавляется число \(3\), а \(S\) становится равным \(\{0,1,3,4\}\). Таким образом, ответ равен \(4\).

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\)-делимым, потому что он состоит из одного элемента.

C1. k-НОК (простая версия)

Конструктив математика *1200

Это простая версия задачи. Единственное отличие  — в этой версии задачи \(k = 3\).

Дано целое число \(n\). Необходимо найти такие \(k\) положительных целых чисел \(a_1, a_2, \ldots, a_k\), что:

  • \(a_1 + a_2 + \ldots + a_k = n\)
  • \(LCM(a_1, a_2, \ldots, a_k) \le \frac{n}{2}\)

\(LCM\)  — наименьшее общее кратное чисел \(a_1, a_2, \ldots, a_k\).

Можно показать, что при заданных ограничениях ответ всегда существует.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) \((1 \le t \le 10^4)\)  — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находятся два целых числа \(n\), \(k\) (\(3 \le n \le 10^9\), \(k = 3\)).

Выходные данные

Для каждого набора входных данных выведите \(k\) положительных целых чисел \(a_1, a_2, \ldots, a_k\), удовлетворяющих необходимым условиям.

C2. k-НОК (сложная версия)

Конструктив математика *1600

Это сложная версия задачи. Единственное отличие  — в этой версии задачи \(3 \le k \le n\).

Дано целое число \(n\). Необходимо найти такие \(k\) положительных целых чисел \(a_1, a_2, \ldots, a_k\), что:

  • \(a_1 + a_2 + \ldots + a_k = n\)
  • \(LCM(a_1, a_2, \ldots, a_k) \le \frac{n}{2}\)

\(LCM\)  — наименьшее общее кратное чисел \(a_1, a_2, \ldots, a_k\).

Можно показать, что при заданных ограничениях ответ всегда существует.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) \((1 \le t \le 10^4)\)  — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находятся два целых числа \(n\), \(k\) (\(3 \le n \le 10^9\), \(3 \le k \le n\)).

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(k\) положительных целых чисел \(a_1, a_2, \ldots, a_k\), удовлетворяющих необходимым условиям.

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]\)

A. GCD Sum

математика Перебор *800

\(\text{\)gcdSum\(}\) положительного целого числа — это \(gcd\) этого числа и суммы его цифр. Формально, \(\text{\)gcdSum\(}(x) = gcd(x, \text{ сумма цифр } x)\) для положительного целого \(x\). \(gcd(a, b)\) обозначает наибольший общий делитель \(a\) и \(b\) — наибольшее целое число \(d\), такое, что оба числа \(a\) и \(b\) делятся на \(d\).

Например: \(\text{\)gcdSum\(}(762) = gcd(762, 7 + 6 + 2)=gcd(762,15) = 3\).

Вам дано целое число \(n\). Найдите наименьшее целое число \(x \ge n\), для которого \(\text{\)gcdSum\(}(x) > 1\).

Входные данные

В первой строке задано одно целое число \(t\) \((1 \le t \le 10^4)\) — количество наборов входных данных.

Затем следуют \(t\) строк, каждая из которых содержит одно целое число \(n\) \((1 \le n \le 10^{18})\).

Все наборы входных данных в одном тесте различны.

Выходные данные

Выведите \(t\) строк, \(i\)-я из которых должна содержать одно целое число — ответ на \(i\)-й набор входных данных.

Примечание

Объяснение трех наборов входных данных из примера:

Набор 1: \(n = 11\):

\(\text{\)gcdSum\(}(11) = gcd(11, 1 + 1) = gcd(11,\ 2) = 1\).

\(\text{\)gcdSum\(}(12) = gcd(12, 1 + 2) = gcd(12,\ 3) = 3\).

Значит, минимальное целое число \(\ge 11\), для которого \(gcdSum\) \(> 1\) — это \(12\).

Набор 2: \(n = 31\):

\(\text{\)gcdSum\(}(31) = gcd(31, 3 + 1) = gcd(31,\ 4) = 1\).

\(\text{\)gcdSum\(}(32) = gcd(32, 3 + 2) = gcd(32,\ 5) = 1\).

\(\text{\)gcdSum\(}(33) = gcd(33, 3 + 3) = gcd(33,\ 6) = 3\).

Значит, минимальное целое число \(\ge 31\), для которого \(gcdSum\) \(> 1\) — это \(33\).

Набор 3: \(\ n = 75\):

\(\text{\)gcdSum\(}(75) = gcd(75, 7 + 5) = gcd(75,\ 12) = 3\).

\(\text{\)gcdSum\(}\) числа \(75\) уже \(> 1\). Значит, это число и является ответом.

F. Рождественская игра

битмаски Деревья дп игры математика поиск в глубину и подобное Структуры данных *2500

Алиса и Боб собираются отмечать Рождество, играя в игру с деревом подарков. Дерево состоит из \(n\) вершин (пронумерованных от \(1\) до \(n\), вершина \(r\) является корнем). На \(i\)-й вершине висят \(a_i\) подарков.

Перед началом игры выбирается некоторое целое число \(k\). Затем игра проходит следующим образом:

  • Алиса начинает игру, затем ходы совершаются обоими игроками по очереди;
  • на каждом ходу текущий игрок выбирает некоторую вершину (например, \(i\)), которая находится на глубине хотя бы \(k\). Затем игрок снимает некоторое положительное целое число подарков, которые висят на этой вершине, — назовем его \(m\) \((1 \le m \le a_i)\);
  • затем игрок вешает эти \(m\) подарков на \(k\)-го предка (назовем его \(j\)) \(i\)-й вершины (\(k\)-м предком вершины \(i\) назовем такую вершину \(j\), что \(i\) — потомок \(j\), а глубина \(j\) ровно на \(k\) меньше глубины \(i\)). Теперь количество подарков на \(i\)-й вершине \((a_i)\) уменьшилось на \(m\), а \(a_j\), соответственно, увеличилось на \(m\);
  • Алиса и Боб играют оптимально. Тот, кто не может совершить ход, проигрывает.

Для каждого возможного корня дерева сообщите, кто выиграет игру — Алиса или Боб.

Глубина вершины \(i\) в дереве с корнем \(r\) определяется, как количество ребер на простом пути из вершины \(r\) до вершины \(i\). Глубина корня \(r\) равна нулю.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) \((3 \le n \le 10^5, 1 \le k \le 20)\).

В каждой из следующих \(n-1\) строк записаны два целых числа \(x\) и \(y\) \((1 \le x, y \le n, x \neq y)\), описывающие неориентированное ребро между двумя вершинами \(x\) и \(y\). Эти ребра образуют дерево из \(n\) вершин.

В следующей строке записаны \(n\) целых чисел, задающих массив \(a\) \((0 \le a_i \le 10^9)\).

Выходные данные

Выведите \(n\) целых чисел, где \(i\)-е число равно \(1\), если Алиса выиграет игру, если дерево подвешено за вершину \(i\), и \(0\) в противном случае.

Примечание

Посчитаем ответ для примера с корнем в 1 и в 2.

Корень 1

Алиса всегда выигрывает в данном случае. Возможная игра между Алисой и Бобом выглядит так:

  • Алиса перемещает один подарок из вершины 4 в вершину 3.
  • Боб перемещает четыре подарка из вершины 5 в вершину 2.
  • Алиса перемещает четыре подарка из вершины 2 в вершину 1.
  • Боб перемещает три подарка из вершины 2 в вершину 1.
  • Алиса перемещает три подарка из вершины 3 в вершину 1.
  • Боб перемещает три подарка из вершины 4 в вершину 3.
  • Алиса перемещает три подарка из вершины 3 в вершину 1.

Боб не может сделать ход, а потому проигрывает.

Корень 2

Боб всегда выигрывает в данном случае. Пример игры:

  • Алиса перемещает четыре подарка из вершины 4 в вершину 3.
  • Боб перемещает четыре подарка из вершины 5 в вершину 2.
  • Алиса перемещает шесть подарков из вершины 3 в вершину 1.
  • Боб перемещает шесть подарков из вершины 1 в вершину 2.

Алиса не может сделать ход, а потому проигрывает.

A. Домино на подоконнике

Комбинаторика Конструктив математика *800

У вас есть игральная доска, которую можно представить в виде поля из \(2 \times n\) клеток.

Первые \(k_1\) клеток на первой строке и первые \(k_2\) клеток на второй строке покрашены в белый. Все остальные клетки окрашены в черный.

У вас есть \(w\) белых доминошек (плитки \(2 \times 1\), обе клетки которых белые) и \(b\) черных доминошек (плитки \(2 \times 1\), обе клетки которых черные).

Вы можете положить белую доминошку на доску, если обе клетки доски под ней белые и не заняты другими доминошками. Аналогично, вы можете положить черную доминошку на доску, если обе клетки доски под ней черные и не заняты другими доминошками.

Можете ли вы положить все \(w + b\) доминошек на доску, если вы можете класть доминошки как вертикально, так и горизонтально?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 3000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных заданы три целых числа \(n\), \(k_1\) и \(k_2\) (\(1 \le n \le 1000\); \(0 \le k_1, k_2 \le n\)).

Во второй строке каждого набора заданы два целых числа \(w\) и \(b\) (\(0 \le w, b \le n\)).

Выходные данные

Для каждого набора входных данных, выведите YES, если возможно уложить все \(w + b\) доминошек на доску, или NO в противном случае.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных, \(n = 1\), \(k_1 = 0\) и \(k_2 = 1\). Следовательно, у доски \(2 \times 1\) клетка \((1, 1)\) — черная, а \((2, 1)\) — белая. Таким образом, вы не можете положить ни одной белой доминошки, так как только одна клетка доски белая.

Во втором наборе, доска того же размера \(2 \times 1\), но обе клетки — белые. Так как \(w = 0\) и \(b = 0\), то вы можете уложить \(0 + 0 = 0\) доминошек на доску.

В третьем наборе, доска \(2 \times 3\), но полностью покрашена в черный (так как \(k_1 = k_2 = 0\)), а потому вы не можете уложить ни одной белой доминошки.

В четвертом наборе, клетки \((1, 1)\), \((1, 2)\), \((1, 3)\) и \((2, 1)\) — белые, а все остальные — черные. Вы можете уложить \(2\) белые доминошки на позиции \(((1, 1), (2, 1))\) и \(((1, 2), (1, 3))\), и \(2\) черные доминошки на позиции \(((1, 4), (2, 4))\) \(((2, 2), (2, 3))\).

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\).

D. Количество пар

дп математика теория чисел *2100

Вам даны три положительных (больше нуля) целых числа \(c\), \(d\) и \(x\).

Вы должны найти количество пар положительных целых чисел \((a, b)\) таких, что выполняется равенство \(c \cdot lcm(a, b) - d \cdot gcd(a, b) = x\). Где \(lcm(a, b)\) — наименьшее общее кратное \(a\) и \(b\), а \(gcd(a, b)\) — наибольший общий делитель \(a\) и \(b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей три целых числа \(c\), \(d\) и \(x\) (\(1 \le c, d, x \le 10^7\)).

Выходные данные

Для каждого тестового случая выведите одно целое число — количество пар (\(a, b\)), таких, что выполняется вышеописанное равенство.

Примечание

В первом примере корректные пары: (\(1, 4\)), (\(4,1\)), (\(3, 6\)), (\(6, 3\)).

Во втором примере корректные пары: (\(1, 2\)), (\(2, 1\)), (\(3, 3\)).

E. Хаотичное слияние

дп Комбинаторика математика Строки *2400

Заданы две строки \(x\) и \(y\), обе состоят из строчных латинских букв. Пусть \(|s|\) будет длиной строки \(s\).

Назовем последовательность \(a\) последовательностью слияния, если она состоит из ровно \(|x|\) нулей и ровно \(|y|\) единиц в некотором порядке.

Слияние \(z\) получается из последовательности \(a\) по следующим правилам:

  • если \(a_i=0\), то удалить букву из начала \(x\) и приписать ее в конец \(z\);
  • если \(a_i=1\), то удалить букву из начала \(y\) и приписать ее в конец \(z\).

Две последовательности слияния \(a\) и \(b\) считаются различными, если существует такая позиция \(i\), что \(a_i \neq b_i\).

Назовем строку \(z\) хаотичной, если для всех \(i\) от \(2\) до \(|z|\) \(z_{i-1} \neq z_i\).

Пусть \(s[l,r]\) для некоторых \(1 \le l \le r \le |s|\) будет подстрокой последовательных букв \(s\), начинающейся с позиции \(l\) и заканчивающейся в позиции \(r\) включительно.

Пусть \(f(l_1, r_1, l_2, r_2)\) будет количеством различных последовательностей слияния \(x[l_1,r_1]\) и \(y[l_2,r_2]\), которые производят хаотичные слияния. Обратите внимание, что рассматриваются только непустые подстроки \(x\) и \(y\).

Посчитайте \(\sum \limits_{1 \le l_1 \le r_1 \le |x| \\ 1 \le l_2 \le r_2 \le |y|} f(l_1, r_1, l_2, r_2)\). Выведите ответ по модулю \(998\,244\,353\).

Входные данные

В первой строке записана строка \(x\) (\(1 \le |x| \le 1000\)).

Во второй строке записана строка \(y\) (\(1 \le |y| \le 1000\)).

Обе строки состоят только из строчных латинских букв.

Выходные данные

Выведите одно число — сумму \(f(l_1, r_1, l_2, r_2)\) по \(1 \le l_1 \le r_1 \le |x|\) и \(1 \le l_2 \le r_2 \le |y|\) по модулю \(998\,244\,353\).

Примечание

В первом примере:

  • \(6\) пар подстрок «a» and «b», каждая с корректными последовательностями слияния «01» and «10»;
  • \(3\) пары подстрок «a» and «bb», каждая с корректной последовательностью слияния «101»;
  • \(4\) пары подстрок «aa» and «b», каждая с корректной последовательностью слияния «010»;
  • \(2\) пары подстрок «aa» and «bb», каждая с корректными последовательностями слияния «0101» and «1010»;
  • \(2\) пары подстрок «aaa» and «b», каждая без корректных последовательностей слияния;
  • \(1\) пара подстрок «aaa» and «bb» с корректной последовательностью слияния «01010».

Поэтому ответ равен \(6 \cdot 2 + 3 \cdot 1 + 4 \cdot 1 + 2 \cdot 2 + 2 \cdot 0 + 1 \cdot 1 = 24\).

B. Лазер

математика *1800

Сегодня в НИИ Пете, как самому ответственному сотруднику, поручили провести очень важный эксперимент. Суть опыта заключается в том, чтобы расплавить плитку шоколада с помощью новой лазерной установки. Установка состоит из прямоугольного ячеистого оперативного поля размером n × m сантиметров и руки-робота. Каждая ячейка поля представляет собой квадрат размера 1 × 1. На руке-роботе расположены два лазера, направленные на поле перпендикулярно его плоскости. В любой момент времени лазеры попадают в центры некоторых двух клеток поля. Так как лазеры расположены на руке, то их движение происходит синхронно — при перемещении одного из лазеров на некоторый вектор, второй перемещается на тот же вектор.

Про эксперимент известно следующее:

  • изначально оперативное поле полностью покрывает шоколадка размером n × m, а также оба лазера находятся над полем и включены;
  • шоколад, под воздействием лазера плавится только в пределах одной ячейки оперативного поля (над которой находится лазер), лазер должен попадать в центр ячейки поля;
  • руку-робота можно передвигать только параллельно краям оперативного поля, после каждого перемещения лазеры должны указывать в центры ячеек;
  • очень важно, чтобы в любой момент оба лазера находились над полем. Пете совсем не хочется стать вторым Гордоном Фрименом.

Даны n и m, а также ячейки (x1, y1) и (x2, y2), над которыми изначально висят лазеры (xi — номер столбца, yi — номер строки). Будем считать, что строки нумеруются сверху вниз числами от 1 до m, а столбцы — числами от 1 до n слева направо. Необходимо найти количество ячеек оперативного поля, шоколад на которых не может быть расплавлен при соблюдении указанных правил.

Входные данные

В первой строке задано число t (1 ≤ t ≤ 10000) — количество наборов входных данных в тесте. В каждой из следующих t строк перечислены через пробел целые числа n, m, x1, y1, x2, y2 (2 ≤ n, m ≤ 109, 1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m). Ячейки (x1, y1) и (x2, y2) различны.

Выходные данные

В каждой из t строк выходного файла должен содержатся ответ на соответствующий набор входных данных.

A. Победи или замерзни

игры математика теория чисел *1400

Вы даже не представляете себе, как же холодно нашим друзьям этой зимой в городе XXXводске! Чтобы согреться, двое из них играют в следующую игру. Изначально на бумажке написано одно целое число q. Своим ходом игрок должен написать любое число, являющееся нетривиальным делителем последнего из написанных чисел, после чего он должен столько раз пробежать вокруг гостиницы. Напоминаем, что делитель числа называется нетривиальным, если он отличен от единицы и от самого делимого числа.

Тот, кто первым не может сделать ход, выигрывает, так как он остается лежать в теплой кроватке под тремя одеялами, пока другой еще наворачивает круги. Определите, кто выигрывает при оптимальной игре обоих, и, если выигрывает первый игрок, то выведите любой выигрышный первый ход.

Входные данные

В первой строке записано единственное целое число q (1 ≤ q ≤ 1013).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В первой строке выведите номер игрока-победителя (1 или 2). Если побеждает первый игрок, то во второй строке должно находиться еще одно целое число — его первый ход (если первый игрок не может сделать даже первый ход, выведите 0). Если решений несколько, выведите любое.

Примечание

Число 6 имеет только два нетривиальных делителя: 2 и 3. Из чисел 2 и 3 ходов сделать уже нельзя, поэтому они оба являются выигрышными, а значит число 6 проигрышное. Из числа 30 можно сделать ход в число 6, которое, как мы уже знаем, проигрышное, значит этот ход принесет нам победу.

B. Количество строк

графы Комбинаторика математика поиск в глубину и подобное *1600

Для тех, кто еще не понял: этой зимой в городе XXXводске реально холодно! Настолько холодно, что в голову порой лезут странные мысли. Например, сколько существует строк длины ровно n, над алфавитом размера m, таких, что любая подстрока длины в точности k является палиндромом. Ваша задача — найти это количество по модулю 1000000007 (109 + 7). Смотрите не упустите ни одной!

Напоминаем, что подстрока является палиндромом, если она одинаково читается как слева направо, так и справа налево.

Входные данные

Первая и единственная строка содержит три целых числа: n, m и k (1 ≤ n, m, k ≤ 2000).

Выходные данные

Выведите одно целое число — количество строк описанного вида по модулю 1000000007 (109 + 7).

Примечание

В первом примере допустимой является только одна строка: «a» (обозначим как «a» единственную букву нашего алфавита).

Во втором примере (если обозначить буквы алфавита как «a» и «b») допустимы следующие строки: «aaaaa» и «bbbbb».

C. Хитрый жук

математика Структуры данных Теория вероятностей *2200

Наверное, нет уже смысла напоминать, что этой зимой в городе XXXводске совсем не жарко. В связи с этим резко возросла популярность общественного транспорта. На маршруте 62-го автобуса в точности n остановок (причем остановка номер 1 — первая на пути, а номер n — последняя). Остановки расположены на одной прямой и имеют координаты 0 = x1 < x2 < ... < xn.

Каждый день 62-ым автобусом пользуются ровно m человек. Для каждого человека известен номер остановки, на которой он садится, и номер остановки, на которой он выходит. Билет от остановки a до остановки b (a < b) стоит xb - xa рублей. Однако кондуктор может не продать пассажиру билет от остановки c до остановки d (c < d), или вовсе не продавать билет. Более формально: Кондуктор выбирает не более одного отрезка с C по D (C <= D) на который он НЕ ПРОДАЕТ БИЛЕТ. То есть пассажир имеет билет на отрезках [A, C] и [D, B]. Сэкономленные деньги кондуктор и пассажир делят поровну. Заработку кондуктора мешают постоянные проверки, случающиеся во время перегонов между двумя последовательными остановками. За каждого пассажира, не имевшего билет на проезд этого перегона, проверка берет с кондуктора штраф c рублей.

Вам известны координаты всех остановок xi; номера остановок, на которых заходит и выходит i-ый пассажир, ai и bi (ai < bi); штраф c; а также pi — вероятность того, что на перегоне между i-ой и i + 1-ой остановкой произойдет проверка. Кондуктор попросил вас помочь ему составить план продажи билетов, максимизирующий математическое ожидание его прибыли.

Входные данные

Первая строка содержит три целых числа n, m и c (2 ≤ n ≤ 1.5·105, 1 ≤ m ≤ 3·105, 1 ≤ c ≤ 104).

Следующая строка содержит n целых чисел xi (0 ≤ xi ≤ 109, x1 = 0, xi < xi + 1) — координаты остановок вдоль маршрута автобуса.

Третья строка содержит n - 1 целое число pi (0 ≤ pi ≤ 100) – вероятность в процентах появления кондуктора на перегоне между остановкой i и остановкой i + 1.

Далее следуют m строк, описывающие пассажиров автобуса, каждая строка содержит ровно два целых числа ai и bi (1 ≤ ai < bi ≤ n) — номера остановок, на которых заходит и выходит i-ый пассажир.

Выходные данные

Выведите одно вещественное число — максимальное математическое ожидание прибыли кондуктора. Ответ будет считать верным, если его относительная или абсолютная погрешность не превосходит 10 - 6.

Примечание

Комментарий к первому примеру:

Первому и третьему пассажиру продаем билет с остановки 1 до остановки 2. Второму пассажиру билет не продаем. На перегоне 1-2 проверка появляется всегда, но у обоих пассажиров будет билет на него. На перегоне 2-3 проверка не появляется никогда, поэтому второго пассажира никто не поймает. Итого наша прибыль (0 + 90 / 2 + 90 / 2) = 90.

A. Поеду домой

математика Перебор реализация хэши *1800

На третьем месяце дистанционного обучения студентке Насте стало скучно, и она решила поехать домой к себе в родной город на пару недель с целью развеяться. Чтобы ей было веселее в дороге, её друг подарил ей массив целых чисел \(a\).

Шел пятый час поездки, и Настя вспомнила про подарок. Чтобы развлечь себя, она решила проверить, можно ли выбрать четыре различных индекса \(x, y, z, w\) таких, что \(a_x + a_y = a_z + a_w\).

Занявшись этим делом, Настя не заметила, как прошло время, и её поезд уже пришел на станцию назначения. Она не успела закончить проверку, но всё ещё хочет узнать истину. Сможете ей помочь?

Входные данные

Первая строка содержит целое число \(n\) (\(4 \leq n \leq 200\,000\)) — количество чисел в массиве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 2.5 \cdot 10^6\)).

Выходные данные

Выведите «YES», если четыре таких индекса существуют, и «NO» иначе.

Если они существуют, далее выведите сами индексы \(x\), \(y\), \(z\) и \(w\) (\(1 \le x, y, z, w \le n\)).

Если возможных ответов несколько, выведите любой.

Примечание

В первом примере \(a_2 + a_3 = 1 + 5 = 2 + 4 = a_1 + a_6\). Обратите внимание, что ответ 2 3 4 6 также подходит.

Во втором примере нельзя выбрать четыре таких индекса. Ответ 1 2 2 3 не подходит, потому что в нем не все индексы различны, хоть и \(a_1 + a_2 = 1 + 3 = 3 + 1 = a_2 + a_3\)

B. Две люстры

Бинарный поиск китайская теорема об остатках математика Перебор теория чисел *2200

Вася — директор крупной строительной компании. Как и у всякого большого начальника у него есть большой, солидно обставленный кабинет, в котором висят две хрустальные люстры. Так сложилось, что Васе проще думать, если свет в комнате каждый день разного цвета. Когда Вася отдавал распоряжение о том, как именно оформлять его кабинет, он также указал, что ему нужны две таких люстры, чтобы в них каждый день цвет освещения изменялся по какому-нибудь циклу. Например, по такому: красный – коричневый – желтый – красный – коричневый – желтый, и так по кругу.

В продаже было несколько люстр, отличающихся друг от друга набором цветов в цикле или порядком. По какой-то ошибке, а может из-за невнимательности, человек, ответственный за выбор люстр, купил две разные люстры.

Из-за того, что люстры разные, в некоторые дни они будут светить одинаково, а в некоторые — по-разному. Естественно, это не солидно, и вообще раздражает Васю, так что когда в \(k\)-й раз наступит событие «сегодня люстры светят разными цветами», Вася очень разозлится и кого-то уволит (вероятно, сотрудника, купившего люстры). Ваша задача – понять, на какой день, начиная со дня установки люстр, это случится. Считайте, что Вася очень любит работать, поэтому работает каждый день, без праздников и выходных.

Входные данные

В первой строке даны три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 500\,000\); \(1 \le k \le 10^{12}\)) — количество цветов в первой люстре, количество цветов во второй люстре и сколько раз люстры должны гореть разным цветом, чтобы Вася очень разозлился.

Во второй строке даны \(n\) различных чисел \(a_i\) (\(1 \le a_i \le 2 \cdot \max(n, m)\)), задающих последовательность цветов для первой люстры.

В третьей строке даны \(m\) различных чисел \(b_j\) (\(1 \le b_i \le 2 \cdot \max(n, m)\)), задающих последовательность цветов для второй люстры.

В \(i\)-й день первая люстра светит цветом \(a_x\), где \(x = ((i - 1) \mod n) + 1)\), а вторая цветом \(b_y\), где \(y = ((i - 1) \mod m) + 1)\).

Гарантируется, что последовательность \(a\) не совпадает тождественно с последовательностью \(b\), а значит лампы будут периодически раздражать Васю.

Выходные данные

Выведите одно число — через сколько дней Вася очень разозлится.

Примечание

В первом тесте из условия люстры будут гореть разными цветами в дни \(1\), \(2\), \(3\) и \(5\). Соответственно ответом является \(5\).

E. 2-раскраска

дп Комбинаторика математика *3100

Дана сетка с \(n\) строками и \(m\) столбцами. Каждая ячейка сетки должна быть окрашена в синий или желтый цвет.

Раскраска сетки называется глупой, если в каждой строке есть ровно один отрезок синих ячеек, а в каждом столбце — ровно один отрезок желтых ячеек.

Другими словами, каждая строка должна иметь хотя бы одну синюю ячейку, и все синие ячейки в строке должны быть последовательными. Точно так же каждый столбец должен иметь хотя бы одну желтую ячейку, а все желтые ячейки в столбце должны быть последовательными.

Пример глупой раскраски.
Примеры умных раскрасок. В первой раскраске отсутствует синяя ячейка во втором ряду, а во второй раскраске есть два желтых отрезка во втором столбце.

Сколько всего существует глупых раскрасок сетки? Две раскраски считаются различными, если есть какая-то ячейка, которая раскрашена в них в разные цвета.

Входные данные

Единственная строка содержит два целых числа \(n\), \(m\) (\(1\le n, m\le 2021\)).

Выходные данные

Выведите единственное целое число — количество глупых раскрасок по модулю \(998244353\).

Примечание

Для первого примера единственные две глупые раскраски \(2\times 2\) изображены ниже.

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\).

F. Математика

*особая задача математика *2200

*Эти два изображения эквивалентны, вы можете использовать любое из них.

Входные данные

Входные данные содержат одно целое число \(a\) (\(-100 \le a \le 100\)).

Выходные данные

Выведите ответ – целое число.

A. Странная таблица

математика *800

Поликарп нашел прямоугольную таблицу, состоящую из \(n\) строк и \(m\) столбцов. Он заметил, что в каждой ячейке таблицы записан ее номер, полученный по следующему алгоритму «по столбцам»:

  • ячейки занумерованы начиная с единицы;
  • ячейки нумеруются слева направо по столбцам, а внутри каждого столбца сверху вниз;
  • номер каждой ячейки — целое число, на единицу большее, чем номер предыдущей ячейки.

Например, если \(n = 3\) и \(m = 5\), то таблица будет занумерована следующим образом:

\(\) \begin{matrix} 1 & 4 & 7 & 10 & 13 \\ 2 & 5 & 8 & 11 & 14 \\ 3 & 6 & 9 & 12 & 15 \\ \end{matrix} \(\)

Однако, Поликарп считает такую нумерацию неудобной. Ему нравится нумерация «по строкам»:

  • ячейки занумерованы начиная с единицы;
  • ячейки нумеруются сверху вниз по строкам, а внутри каждой строки слева направо;
  • номер каждой ячейки — целое число, на единицу большее, чем номер предыдущей ячейки.

Например, если \(n = 3\) и \(m = 5\), то Поликарпу нравится следующая нумерация таблицы: \(\) \begin{matrix} 1 & 2 & 3 & 4 & 5 \\ 6 & 7 & 8 & 9 & 10 \\ 11 & 12 & 13 & 14 & 15 \\ \end{matrix} \(\)

У Поликарпа мало времени, поэтому он просит вас узнать, какой был бы номер ячейки в нумерации «по строкам», если в нумерации «по столбцам» ячейка имеет номер \(x\)?

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, в которой находится три целых числа \(n\), \(m\), \(x\) (\(1 \le n, m \le 10^6\), \(1 \le x \le n \cdot m\)), \(n\) и \(m\) — количество строк и столбцов в таблице, и \(x\) — номер ячейки.

Обратите внимание, что числа в некоторых наборах входных данных не влезают в \(32\)-битный целочисленный тип, поэтому вы должны использовать как минимум \(64\)-битный целочисленный тип вашего языка программирования.

Выходные данные

Для каждого набора входных данных выведите одно целое число — номер ячейки в нумерации «по строкам».

F. Треугольные пути

графы Конструктив кратчайшие пути математика сортировки *2000

Рассмотрим бесконечный треугольник, состоящий из слоев. Занумеруем слои, начиная с единицы, от верхней точки треугольника (сверху вниз). На \(k\)-м слое треугольника расположены \(k\) точек, пронумерованных слева направо. Каждая точка бесконечного треугольника описывается парой чисел \((r, c)\) (\(1 \le c \le r\)), где \(r\) — номер слоя, а \(c\) — номер точки в слое. Из каждой точки \((r, c)\) исходит два направленных ребра в точки \((r+1, c)\) и \((r+1, c+1)\), но только одно из рёбер активировано. Если \(r + c\) — чётно, тогда активировано ребро в точку \((r+1, c)\), иначе активировано ребро в точку \((r+1, c+1)\). Изучите картинку для лучшего понимания.

Черным цветом обозначены активированные ребра. Серым цветом обозначены не активированные ребра.

Из точки \((r_1, c_1)\) можно дойти до точки \((r_2, c_2)\), если между ними существует путь только из активированных рёбер. Например, на картинке выше существует путь из точки \((1, 1)\) в точку \((3, 2)\), но не существует пути из точки \((2, 1)\) в точку \((1, 1)\).

Изначально вы находитесь в точке \((1, 1)\). За каждый ход вы можете:

  • Заменить активированное ребро для точки \((r, c)\). То есть, если активировано ребро в точку \((r+1, c)\), то вместо него активированным станет ребро в точку \((r+1, c+1)\), иначе, если активировано ребро в точку \((r+1, c+1)\), то вместо него активированным станет ребро в точку \((r+1, c)\). Это действие увеличивает стоимость пути на \(1\);
  • Переместиться из текущей точку в другую, перейдя по активированному ребру. Это действие не увеличивает стоимость пути.

Вам дана последовательность из \(n\) точек бесконечного треугольника \((r_1, c_1), (r_2, c_2), \ldots, (r_n, c_n)\). Найдите путь минимальной стоимости из точки \((1, 1)\), проходящий через все \(n\) точек в произвольном порядке.

Входные данные

Первая строка содержит одно целое \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор начинается со строки, в которой записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество точек, которые необходимо посетить.

Во второй строке находится \(n\) чисел \(r_1, r_2, \ldots, r_n\) (\(1 \le r_i \le 10^9\)), где \(r_i\) — номер слоя, в котором находится \(i\)-я точка.

Во третьей строке находится \(n\) чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le r_i\)), где \(c_i\) — номер \(i\)-й точки в слое \(r_i\).

Гарантируется, что все \(n\) точек различны.

Гарантируется, что всегда существует хотя бы один способ обойти все \(n\) точек.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную стоимость пути, проходящего через все точки в соответствующем наборе входных данных.

A. Газировкопитие

математика реализация *800

В городе XXXводске очень холодно этой зимой! Чтобы согреться, компания из n друзей решила купить k бутылок газировки «Take-It-Light» объемом l миллилитров каждая. Также они купили c лаймов (каждый из который разрезали на d долек) и p граммов соли.

Для одного тоста каждому из друзей требуется nl миллилитров газировки, одна долька лайма и np граммов соли. Друзья хотят сделать как можно больше тостов, при этом все должны выпить поровну. Сколько тостов получится сделать у каждого?

Входные данные

В первой и единственной строке записаны положительные целые числа n, k, l, c, d, p, nl, np, не превосходящие 1000 и не меньшие 1. Числа разделены ровно одним пробелом.

Выходные данные

Выведите одно целое число — сколько тостов сможет сделать каждый из друзей.

Примечание

Комментарий к первому примеру:

Всего газировки у друзей 4 * 5 = 20 мл, значит ее хватит на 20 / 3 = 6 тостов. Лаймов хватит на 10 * 8 = 80 тостов, соли же на 100 / 1 = 100. Однако в компании 3 друга поэтому ответ min(6, 80, 100) / 3 = 2.

B. Длина НОД

Конструктив математика теория чисел *1100

Даны три целых числа \(a\), \(b\) и \(c\).

Найдите два целых положительных числа \(x\) и \(y\) (\(x > 0\), \(y > 0\)) такие, что:

  • десятичная запись \(x\) без лидирующих нулей состоит из \(a\) цифр;
  • десятичная запись \(y\) без лидирующих нулей состоит из \(b\) цифр;
  • десятичная запись \(gcd(x, y)\) без лидирующих нулей состоит из \(c\) цифр.

\(gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Выведите \(x\) и \(y\). Если возможны несколько ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 285\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк записаны по три целых числа \(a\), \(b\) и \(c\) (\(1 \le a, b \le 9\), \(1 \le c \le min(a, b)\)) — необходимые длины чисел.

Можно показать, что ответ существует для всех наборов входных данных при заданных ограничениях.

Дополнительное ограничение на входные данные: все наборы входных данных различны.

Выходные данные

На каждый набор входных данных выведите два целых положительных числа — \(x\) и \(y\) (\(x > 0\), \(y > 0\)) такие, что:

  • десятичная запись \(x\) без лидирующих нулей состоит из \(a\) цифр;
  • десятичная запись \(y\) без лидирующих нулей состоит из \(b\) цифр;
  • десятичная запись \(gcd(x, y)\) без лидирующих нулей состоит из \(c\) цифр.
Примечание

В примере:

  1. \(gcd(11, 492) = 1\)
  2. \(gcd(13, 26) = 13\)
  3. \(gcd(140133, 160776) = 21\)
  4. \(gcd(1, 1) = 1\)

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\).

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, иначе.

Если существует несколько подходящих перестановок, выведите любую из них.

G. Короткая задача

дп математика Перебор теория чисел *1700

Обозначим за \(d(n)\) сумму всех делителей числа \(n\), т.е. \(d(n) = \sum\limits_{k | n} k\).

Например, \(d(1) = 1\), \(d(4) = 1+2+4=7\), \(d(6) = 1+2+3+6=12\).

Для заданного числа \(c\), найдите минимальное \(n\) такое, что \(d(n) = c\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных характеризуется одним целым числом \(c\) (\(1 \le c \le 10^7\)).

Выходные данные

Для каждого набора входных данных выведите:

  • «-1», если не существует \(n\), такого что \(d(n) = c\);
  • \(n\), иначе.

B. Последовательности И

битмаски Комбинаторика Конструктив математика *1400

Последовательность \(n\) (\(n \ge 2\)) неотрицательных целых чисел \(a_1, a_2, \dots, a_n\) называется хорошей, если для всех \(i\) от \(1\) до \(n-1\) выполняется следующее условие: \(\)a_1 \: \& \: a_2 \: \& \: \dots \: \& \: a_i = a_{i+1} \: \& \: a_{i+2} \: \& \: \dots \: \& \: a_n,\(\) где \(\&\) обозначает операцию побитового И.

Вам дан массив \(a\) размера \(n\) (\(n \geq 2\)). Найдите количество перестановок \(p\) чисел от \(1\) до \(n\), для которых последовательность \(a_{p_1}\), \(a_{p_2}\), ... ,\(a_{p_n}\) является хорошей. Так как это число может быть большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 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\).

Выходные данные

Выведите \(t\) строк, где \(i\)-я строка содержит количество хороших перестановок в \(i\)-м наборе входных данных по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных все числа равны, поэтому все перестановки являются хорошими. Всего есть \(6\) перестановок чисел от \(1\) до \(3\): \([1,2,3]\), \([1,3,2]\), \([2,1,3]\), \([2,3,1]\), \([3,1,2]\), \([3,2,1]\).

Во втором наборе входных данных можно показать, что хороших перестановок нет.

В третьем наборе входных данных существуют \(36\) хороших перестановок. Например, перестановка \([1,5,4,2,3]\) дает последовательность \(s=[0,0,3,2,0]\). Она хорошая, так как

  • \( s_1 = s_2 \: \& \: s_3 \: \& \: s_4 \: \& \: s_5 = 0\),
  • \( s_1 \: \& \: s_2 = s_3 \: \& \: s_4 \: \& \: s_5 = 0\),
  • \( s_1 \: \& \: s_2 \: \& \: s_3 = s_4 \: \& \: s_5 = 0\),
  • \( s_1 \: \& \: s_2 \: \& \: s_3 \: \& \: s_4 = s_5 = 0\).

E. Ценовой баланс

Комбинаторика Конструктив математика сортировки *2300

Массив называется красивым, если все его элементы равны.

Вы можете преобразовать некоторый массив, выполнив следующие шаги любое количество раз:

  1. Выберите два индекса \(i\) и \(j\) (\(1 \leq i,j \leq n\)), а также целое число \(x\) (\(1 \leq x \leq a_i\)). Назовем \(i\) истоком, а \(j\) — стоком.
  2. Уменьшите \(i\)-й элемент на \(x\), и увеличьте \(j\)-й элемент на \(x\). Итоговые значения на \(i\)-й и \(j\)-й позициях равны \(a_i-x\) и \(a_j+x\) соответственно.
  3. Стоимость такой операции равна \(x \cdot |j-i| \).
  4. После этой операции \(i\) больше не может стать стоком, а \(j\) больше не может стать истоком.
Общая стоимость преобразования равна сумме стоимостей на шаге \(3\).

Например, массив \([0, 2, 3, 3]\) может быть преобразован в красивый массив \([2, 2, 2, 2]\) с общей стоимостью \(1 \cdot |1-3| + 1 \cdot |1-4| = 5\).

Массив называется сбалансированным, если его можно преобразовать в красивый массив, и стоимость такого преобразования однозначно определена. Другими словами, минимальная стоимость преобразования в красивый массив равна максимальной стоимости.

Вам дан массив \(a_1, a_2, \ldots, a_n\) длины \(n\), элементы которого — неотрицательные целые числа. Ваша задача — найти количество сбалансированных массивов, являющихся перестановками данного. Два массива считаются различными, если элементы на некоторых позициях отличаются. Так как ответ может быть большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите одно целое число — количество сбалансированных перестановок по модулю \(10^9+7\).

Примечание

В первом примере \([1, 2, 3]\) является сбалансированным массивом, так как мы можем выбрать индекс \(3\) как исток, и индекс \(1\) как сток. После этой операции мы получим красивый массив \([2, 2, 2]\), итоговая стоимость преобразования равна \(2\). Можно показать, что это единственное возможная последовательность операций, приводящая к красивому массиву. Аналогично можно показать, что все другие перестановки тоже сбалансированные.

Во втором примере сбалансированные перестановки — это \([0, 0, 4, 4]\) и \([4, 4, 0, 0]\).

В третьем примере все перестановки являются сбалансированными.

A. Идеально неидеальный массив

математика теория чисел *800

Вам дан массив \(a\) длины \(n\). Скажите, существует ли непустая подпоследовательность этого массива такая, что произведение ее элементов не является полным квадратом.

Последовательность \(b\) является подпоследовательностью массива \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, ни одного) элементов.

Входные данные

В первой строке находится одно целое число \(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 10^4\)) — элементы массива \(a\).

Выходные данные

Если существует подпоследовательность массива \(a\), произведение элементов которой не является полным квадратом, выведите «YES». Иначе, выведите «NO».

Примечание

В первом примере, произведение элементов всего массива (\(20\)) не является полным квадратом.

Во втором примере, произведение элементов любой подпоследовательности является полным квадратом.

B. AND 0, большая сумма

битмаски Комбинаторика математика *1200

Первыми словами маленького Бадави были «AND 0 большая сумма», поэтому он решил решить следующую задачу. Даны два целых числа \(n\) и \(k\), вычислите количество массивов длины \(n\), таких что:

  • все элементы массива это целые числа от \(0\) до \(2^k-1\) (включительно);
  • побитовое И всех его элементов это \(0\);
  • сумма его элементов максимальная возможная.

Так как ответ может быть очень большим, выведите его остаток от деления на \(10^9+7\).

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных даны два целых числа \(n\) и \(k\) (\(1 \le n \le 10^{5}\), \(1 \le k \le 20\)).

Выходные данные

Для каждого набора входных данных выведите количество массивов, удовлетворяющих всем условиям. Так как ответ может быть большим, выведите его остаток от деления на \(10^9+7\).

Примечание

В первом примере подходят \(4\) массива:

  • \([3,0]\),
  • \([0,3]\),
  • \([1,2]\),
  • \([2,1]\).

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\) на весы, и весы в любом случае взорвутся.

B. Феникс и пазл

геометрия математика Перебор теория чисел *1000

Феникс играет с новым пазлом, который состоит из \(n\) одинаковых фрагментов. Каждый фрагмент — это равнобедренный прямоугольный треугольник, как показано ниже.

Фрагмент пазла

Цель пазла — собрать квадрат, используя \(n\) фрагментов. Феникс может поворачивать и двигать фрагменты как хочет, но фрагменты нельзя накладывать друг на друга и все \(n\) фрагментов должны быть использованы (конечно же, в квадрате не должно быть никаких прогалов). Может ли Феникс решить пазл?

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 10^9\)) — количество фрагментов в пазле.

Выходные данные

Для каждого набора, если Феникс может собрать квадрат из \(n\) фрагментов, выведите YES. Иначе, выведите NO.

Примечание

Для \(n=2\), Феникс может собрать следующий квадрат:

Для \(n=4\), Феникс может собрать такой квадрат:

Для \(n=6\), Феникс не сможет собрать квадрат.

E. Феникс и компьютеры

дп Комбинаторика математика *2200

В один ряд стоят \(n\) компьютеров, первоначально все выключены, и Феникс хочет всех их включить. Он будет лично включать их по одному. Однако в любой момент времени, если компьютеры \(i-1\) и \(i+1\) оказались включены, то компьютер \(i\) \((2 \le i \le n-1)\) включится сам автоматически (если он еще не включен). Заметим, что Феникс не может включить компьютер, который уже включился автоматически.

Рассмотрим только последовательности компьютеров, включенных непосредственно Фениксом, сколько существует таких последовательностей, включающих все компьютеры? Две последовательности различны, если либо множество компьютеров, включенных лично Фениксом, различается, либо порядок их включения различен. Так как ответ может быть слишком большим, выведите его по модулю \(M\).

Входные данные

В первой строке заданы два целых числа \(n\) и \(M\) (\(3 \le n \le 400\); \(10^8 \le M \le 10^9\)) — количество компьютеров и модуль. Гарантируется, что \(M\) — простое.

Выходные данные

Выведите одно число — количество способов включить все компьютеры по модулю \(M\).

Примечание

В первом примере, для Феникса есть \(6\) последовательностей, при которых он включит все компьютеры:

  • \([1,3]\). Включить компьютер \(1\), потом \(3\). Заметим, что компьютер \(2\) включится автоматически после того, как компьютер \(3\) будет включен Фениксом, но мы учитываем только компьютеры, включенные непосредственно Фениксом.
  • \([3,1]\). Включить компьютер \(3\), потом \(1\).
  • \([1,2,3]\). Включить компьютеры \(1\), потом \(2\), затем \(3\).
  • \([2,1,3]\)
  • \([2,3,1]\)
  • \([3,2,1]\)

G. Феникс и одометры

графы математика поиск в глубину и подобное теория чисел *2700

В городе Огня, есть \(n\) перекрестков и \(m\) односторонних дорог: \(i\)-я дорога ведет от перекрестка \(a_i\) к \(b_i\) и имеет длину \(l_i\) миль.

Также есть \(q\) машин, которые могут передвигаться только по этим дорогам. Машина \(i\) стоит у перекрестка \(v_i\) и оборудована одометром с начальным значением \(s_i\), который увеличивается на один за каждую пройденную милю и сбрасывается в \(0\) когда достигает значения \(t_i\). Фениксу дано задание покататься на машинах по каким-то дорогам (возможно, совсем не двигаться) и вернуться к стартовому перекрестку с одометром, сброшенным в \(0\).

Для каждой машины определите, возможно ли это.

Машина может посещать одни и те же перекрестки и ездить по одним и тем же дорогам произвольное количество раз. Одометры не прекращают считать пройденное расстояние после сброса, а потому одометры можно сбрасывать произвольное количество раз.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le m \le 2 \cdot 10^5\)) — количество перекрестков и количество дорог, соответственно.

В каждой из следующих \(m\) строк заданы три целых числа \(a_i\), \(b_i\) и \(l_i\) (\(1 \le a_i, b_i \le n\); \(a_i \neq b_i\); \(1 \le l_i \le 10^9\)) — описание \(i\)-й дороги. Граф дорог необязательно связный. Гарантируется, что между любой парой перекрестков есть не более одной дороги в каждом направлении.

В следующей строке задано целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество машин.

В каждой из следующих \(q\) строк заданы три целых числа \(v_i\), \(s_i\) и \(t_i\) (\(1 \le v_i \le n\); \(0 \le s_i < t_i \le 10^9\)) — стартовый перекресток \(i\)-й машины, стартовое значение \(i\)-го одометра и значение, при котором \(i\)-й одометр сбрасывается, соответственно.

Выходные данные

Выведите \(q\) ответов. Если одометр \(i\)-й машины можно сбросить в \(0\) покатавшись по некоторым дорогам и вернувшись назад в \(v_i\), выведите YES. В противном случае выведите NO.

Примечание

Ниже представлена иллюстрация первого примера:

В первом запросе, Феникс может проехать на машине следующем образом: \(1\) \(\rightarrow\) \(2\) \(\rightarrow\) \(3\) \(\rightarrow\) \(1\) \(\rightarrow\) \(2\) \(\rightarrow\) \(3\) \(\rightarrow\) \(1\). Одометр будет сброшен \(3\) раза, и будет показывать \(0\) к концу поездки.

Во втором примере, можно показать, что не существует способа сбросить одометр в \(0\) и при этом вернуться к пересечению \(1\).

В третьем примере, одометр уже показывает \(0\), а поэтому нет необходимости куда-то ехать.

Ниже представлена иллюстрация второго примера:

C. Ехаб снова делит массив

битмаски дп Конструктив математика *1700

Ехаб снова решил развлечься. У него есть массив \(a\) длины \(n\). Он называет массив хорошим, если его нельзя разбить на \(2\) непересекающихся подпоследовательности такие, что сумма элементов первой равна сумме элементов второй. Сейчас он хочет удалить минимальное количество элементов из \(a\) так, что оставшийся массив будет хорошим. Вы можете ему в этом помочь?

Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов. Разбить массив это разделить его на \(2\) подпоследовательности так, чтобы каждый элемент входил ровно в одну из них. Вы должны использовать все элементы по одному разу.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\)) — размер массива \(a\).

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(1 \le a_i \le 2000\)) — элементы массива \(a\).

Выходные данные

Первая строка должна содержать минимальное количество элементов, которое нужно удалить.

Вторая строка должна содержать индексы этих элементов, записанные через пробел.

Если существует несколько решений, выведите любое из них. Можно показать, что решение всегда существует.

Примечание

В первом примере вы можете разбить массив на \([6,9]\) и \([3,12]\), так что необходимо удалить хотя бы \(1\) элемент. Удаление \(3\) подходит.

Во втором примере массив уже хороший.

E. Ехаб играет с перестановками

дп Комбинаторика математика *2500

На этот раз Ехаб будет играть с перестановками. У него есть \(n\) кубиков, расположенных в ряд, с числами от \(1\) до \(n\), написанными на них. Он сделает ровно \(j\) операций. В ходе каждой из операций он выбирает \(2\) кубика и меняет их местами.

Ехаб задался вопросом: сколько различных последовательностей кубиков я могу получить в конце? Так как Ехаб непостоянный человек, он не уверен, сколько операций хочет совершить. Поэтому он просит вас узнать ответ на его вопрос для всех \(j\) от \(1\) до \(k\).

Входные данные

В первой строке записано \(2\) целых числа \(n\) и \(k\) (\(2 \le n \le 10^9\), \(1 \le k \le 200\)) — количество кубиков, что есть у Ехаба, и параметр \(k\) из условия.

Выходные данные

Выведите \(k\) целых чисел. \(i\)-е из них — это количество возможных последовательностей, которые можно получить после ровно \(i\) операций. Так как это число может быть очень большим, выведите его остаток от деления на \(10^9+7\).

Примечание

Во втором примере есть \(3\) последовательности, которые можно получить после \(1\) операции, потому что вы можете поменять местами \(3\) различные пары индексов. Также, есть ровно \(3\) последовательности, которые можно получить после \(2\) операций:

  • \([1,2,3]\),
  • \([3,1,2]\),
  • \([2,3,1]\).

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\).

A. Красные и синие мармеладки

математика *800

У вас есть \(r\) красных и \(b\) синих мармеладок. Вы хотите разложить их по нескольким пакетам (возможно, в один) таким образом, что в каждом пакете:

  • есть хотя бы одна красная мармеладка (т. е. количество красных мармеладок \(r_i \ge 1\));
  • есть хотя бы одна синяя мармеладка (т. е. количество синих мармеладок \(b_i \ge 1\));
  • количество красных и синих мармеладок различается не более чем на \(d\) (или \(|r_i - b_i| \le d\))

Можете ли вы разложить все мармеладки?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано три целых числа \(r\), \(b\) и \(d\) (\(1 \le r, b \le 10^9\); \(0 \le d \le 10^9\)) — количество красных и синих мармеладок и максимальная разрешенная разность в каждом пакете.

Выходные данные

Для каждого набора, если вы можете разложить все мармеладки, выведите YES. В противном случае выведите NO.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом наборе, вы можете собрать один пакет из \(1\)-й красной и \(1\)-й синей мармеладки. Модуль разности равен \(|1 - 1| = 0 \le d\).

Во втором наборе, вы можете собрать два пакета: \(1\) красная и \(4\) синих мармеладки в первый пакет и \(1\) красная и \(3\) синие — во второй.

В третьем наборе, так как \(b = 1\), вы можете собрать только один пакет с \(6\) красными и \(1\) синей мармеладками. Модуль разности равен \(|6 - 1| = 5 > d\).

В четвертом наборе, так как \(d = 0\) то в каждом пакете должно быть равное количество красных и синих мармеладок, но \(r \neq b\).

B. Торт - это ложь

дп математика *800

Есть клеточное поле размера \(n \times m\). Вы стоите в клетке \((1, 1)\) и хотите попасть в клетку \((n, m)\).

Вы можете перемещаться в соседние клетки вправо или вниз. Другими словами, предположим вы находитесь в клетке \((x, y)\). Вы можете:

  • сдвинуться вправо в клетку \((x, y + 1)\) — это перемещение стоит \(x\) бурлей;
  • сдвинуться вниз в клетку \((x + 1, y)\) — это перемещение стоит \(y\) бурлей.

Можете ли вы достигнуть клетки \((n, m)\), потратив ровно \(k\) бурлей?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 100\); \(0 \le k \le 10^4\)) — размеры поля и точное количество денег, которое вы должны потратить.

Выходные данные

Для каждого набора входных данных, если вы можете попасть в клетку \((n, m)\), потратив ровно \(k\) бурлей, выведите YES. В противном случае выведите NO.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом наборе, вы уже в нужной клетке, потратив \(0\) бурлей.

Во втором, третьем и четвертом наборах, есть только два пути из \((1, 1)\) в \((2, 2)\): \((1, 1)\) \(\rightarrow\) \((1, 2)\) \(\rightarrow\) \((2, 2)\) или \((1, 1)\) \(\rightarrow\) \((2, 1)\) \(\rightarrow\) \((2, 2)\). Оба способа стоят \(1 + 2 = 3\) бурлей, то есть это единственно возможное количество денег, которое вы можете потратить.

В пятом наборе, есть единственный путь из \((1, 1)\) в \((1, 4)\) и его стоимость равна \(1 + 1 + 1 = 3\) бурлей.

D. Максимальная сумма произведений

дп математика Перебор реализация *1600

Вам заданы два массива целых чисел \(a\) и \(b\) длины \(n\).

Вы можете развернуть не более одного подмассива (последовательного отрезка) массива \(a\).

Ваша задача состоит в том, чтобы перевернуть такой подмассив, чтобы сумма \(\sum\limits_{i=1}^n a_i \cdot b_i\) была максимально возможной.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^7\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^7\)).

Выходные данные

Выведите одно целое число — максимально возможную сумма после разворота не более одного подмассива (последовательного отрезка) \(a\).

Примечание

В первом примере можно перевернуть подмассив \([4, 5]\). Тогда \(a = [2, 3, 2, 3, 1]\) и \(2 \cdot 1 + 3 \cdot 3 + 2 \cdot 2 + 3 \cdot 4 + 1 \cdot 2 = 29\).

Во втором примере не нужно использовать операцию. \(13 \cdot 2 + 37 \cdot 4 = 174\).

В третьем примере можно перевернуть подмассив \([3, 5]\). Тогда \(a = [1, 8, 3, 6, 7, 6]\) и \(1 \cdot 5 + 8 \cdot 9 + 3 \cdot 6 + 6 \cdot 8 + 7 \cdot 8 + 6 \cdot 6 = 235\).

B. Заурядные числа

математика Перебор теория чисел *800

Назовем целое положительное число \(n\) заурядным, если в десятичной системе счисления все его цифры одинаковые. Например числа \(1\), \(2\) и \(99\) являются заурядными числами, а \(719\) и \(2021\) не являются заурядными числами.

Для заданного числа \(n\) найдите количество заурядных чисел среди чисел от \(1\) до \(n\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных характеризуется одним целым числом \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество заурядных чисел среди чисел от \(1\) до \(n\).

D. Одинаковые разницы

математика Структуры данных хэши *1200

Вам дан массив \(a\) из \(n\) целых чисел. Посчитайте количество пар индексов \((i, j)\), таких что \(i < j\) и \(a_j - a_i = j - i\).

Входные данные

В первой строке содержится одно целое число \(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 n\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар индексов \((i, j)\), таких что \(i < j\) и \(a_j - a_i = j - i\).

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\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество ходов, которое нужно сделать, чтобы пройти уровень.

A. Настя и почти хорошие числа

Конструктив математика теория чисел *1000

Настя загадала \(2\) целых положительных числа \(A\) и \(B\) и сказала, что:

  • Число называется хорошим, если оно кратно \(A \cdot B\);
  • Иначе число называется почти хорошим, если оно кратно \(A\).

Например, если \(A = 6\) и \(B = 4\), то числа \(24\) и \(72\) хорошие, числа \(6\), \(660\) и \(12\) — почти хорошие, числа \(16\), \(7\) не являются ни хорошими, ни почти хорошими.

Найдите \(3\) различных положительных целых числа \(x\), \(y\) и \(z\) такие, что ровно одно из них хорошее, а остальные \(2\) — почти хорошие, и \(x + y = z\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(A\) и \(B\) (\(1 \le A \le 10^6\), \(1 \le B \le 10^6\)) — загаданные Настей числа.

Выходные данные

Для каждого набора входных данных выведите:

  • «YES» и \(3\) различных положительных целых числа \(x\), \(y\) и \(z\) (\(1 \le x, y, z \le 10^{18}\)) такие, что ровно одно из них хорошее, а остальные \(2\) — почти хорошие, и \(x + y = z\).
  • «NO», если ответа не существует.
Буквы в словах «YES» и «NO» можно выводить в любом регистре.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных: \(60\) — хорошее число; \(10\) и \(50\) — почти хорошие.

Во втором наборе входных данных: \(208\) — хорошее число; \(169\) и \(39\) — почти хорошие.

В третьем наборе входных данных: \(154\) — хорошее число; \(28\) и \(182\) — почти хорошие.

B. Настя и хороший массив

Конструктив математика теория чисел *1300

Насте подарили массив целых положительных чисел длины \(n\).

Она называет такой массив \(a\) хорошим, что для любого \(i\) (\(2 \le i \le n\)) выполняется \(gcd(a_{i - 1}, a_{i}) = 1\), где \(gcd(u, v)\) обозначает наибольший общий делитель (НОД) чисел \(u\) и \(v\).

Вы можете выполнять такую операцию: выбрать некоторые различные индексы \(i, j\) (\(1 \le i, j \le n\), \(i \neq j\)), а также два целых числа \(x, y\) (\(1 \le x, y \le 2 \cdot 10^9\)). При этом должно выполняться \(\min{(a_i, a_j)} = \min{(x, y)}\). Затем заменить \(a_i\) на \(x\), а \(a_j\) на \(y\).

Девочка просит вас за не более чем \(n\) операций сделать массив хорошим.

Можно показать, что это всегда возможно.

Входные данные

Первая строка содержит одно целое число \(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^9\)) — массив Насти.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого из \(t\) наборов входных данных в первой строке выведите одно целое число \(k\) (\(0 \le k \le n\)) — количество выполненных вами операций. Вам не нужно минимизировать это число.

В каждой из последующих \(k\) строк выведите \(4\) целых числа \(i\), \(j\), \(x\), \(y\) (\(1 \le i \neq j \le n\), \(1 \le x, y \le 2 \cdot 10^9\)) такие, что \(\min{(a_i, a_j)} = \min{(x, y)}\) — таким образом вы заменяете \(a_i\) на \(x\); \(a_j\) на \(y\).

Если существует несколько решений, выведите любое из них.

Примечание

Рассмотрим первый набор входных данных.

Изначально \(a = [9, 6, 3, 11, 15]\).

В первой операции заменяем \(a_1\) на \(11\); \(a_5\) на \(9\). Это возможно потому, что \(\min{(a_1, a_5)} = \min{(11, 9)} = 9\).

После этой операции \(a = [11, 6, 3, 11, 9]\).

Во второй операции заменяем \(a_2\) на \(7\); \(a_5\) на \(6\). Это возможно потому, что \(\min{(a_2, a_5)} = \min{(7, 6)} = 6\).

После этой операции \(a = [11, 7, 3, 11, 6]\) — хороший массив.

Во втором наборе входных данных исходный массив уже является хорошим.

E. Криптовалютные лампочки

дп Комбинаторика математика Теория вероятностей *2600

Для отслеживания курса криптовалют трейдер Василий изобрел удивительный прибор, состоящий из \(n\) лампочек, расположенных в ряд. Прибор работает следующим образом:

Изначально все лампочки в приборе Василия выключены. На очередной итерации прибор Василия равновероятно выбирает выключенную лампочку и включает её, подсказывая Василию, в какую криптовалюту ему стоит вложиться. Если после этой итерации среди каких-то \(k\) подряд идущих лампочек находится более одной включенной, то прибор Василия завершает свою работу.

Василий не любит неопределенности, поэтому просит вас посчитать матожидание количества включенных лампочек в приборе после завершения его работы.

Входные данные

Во входных данных находится несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Единственная строка набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 10^5\)) — количество лампочек и длина проверяемых подотрезков лампочек соответственно.

Выходные данные

Для каждого тестового примера выведите ответ по модулю \(10^9+7\). Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Объяснение первого тестового примера:

Выпишем все возможные последовательности включений лампочек, которые завершают работу прибора:

  1. \((1, 2)\) — включены \(2\) лампочки
  2. \((1, 3, 2)\) — включены \(3\) лампочки
  3. \((2, 1)\) — включены \(2\) лампочки
  4. \((2, 3)\) — включены \(2\) лампочки
  5. \((3, 2)\) — включены \(2\) лампочки
  6. \((3, 1, 2)\) — включены \(3\) лампочки

Тогда итоговое матожидание будет равняться \(\frac{2}{6}\) + \(\frac{3}{6}\) + \(\frac{2}{6}\) + \(\frac{2}{6}\) + \(\frac{2}{6}\) + \(\frac{3}{6}\) = \(\frac{14}{6}\) = \(\frac{7}{3}\).

Тогда требуемый для вывода ответ это \(333333338\), так как \(333333338 \cdot 3 \equiv 7 \pmod{10^9+7}\).

A. Зельеварение

математика теория чисел *800

У вас есть первоначально пустой чан, и вы хотите сварить в нем зелье. Зелье состоит из двух ингредиентов: магическая эссенция и вода. Но чтобы зелье получилось хорошим, вам нужно, чтобы магическая эссенция составляла ровно \(k\ \%\) от полного объема зелья, а вода — \((100 - k)\ \%\).

За один шаг вы можете налить в чан либо один литр эссенции, либо один литр воды. Через какое минимальное количество шагов вы получите хорошее зелье? Вас не волнует количество полученного зелья, а только соотношение между количеством эссенции и воды.

Небольшое напоминание: если вы нальете в чан \(e\) литров эссенции и \(w\) литров воды (\(e + w > 0\)), то магическая эссенция будет составлять ровно \(\frac{e}{e + w} \cdot 100\ \%\) (без округления) от всего объема зелья, а вода — \(\frac{w}{e + w} \cdot 100\ \%\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(k\) (\(1 \le k \le 100\)) — процент эссенции в хорошем зелье.

Выходные данные

Для каждого набора входных данных выведите минимальное количество шагов, за которое можно получить хорошее зелье. Можно доказать, что всегда можно получить хорошее зелье за конечное количество ходов.

Примечание

В первом наборе входных данных вы можете налить \(3\) литра магической эссенции и \(97\) литров воды в чан, чтобы получить зелье с \(3\ \%\) эссенции.

Во втором наборе вы можете налить лишь \(1\) литр магической эссенции и получить зелье со \(100\ \%\) эссенции.

В третьем наборе вы можете налить \(1\) литр эссенции и \(3\) литра воды.

A. Зельеварение

математика теория чисел *800

У вас есть первоначально пустой чан, и вы хотите сварить в нем зелье. Зелье состоит из двух ингредиентов: магическая эссенция и вода. Но чтобы зелье получилось хорошим, вам нужно, чтобы магическая эссенция составляла ровно \(k\ \%\) от полного объема зелья, а вода — \((100 - k)\ \%\).

За один шаг вы можете налить в чан либо один литр эссенции, либо один литр воды. Через какое минимальное количество шагов вы получите хорошее зелье? Вас не волнует количество полученного зелья, а только соотношение между количеством эссенции и воды.

Небольшое напоминание: если вы нальете в чан \(e\) литров эссенции и \(w\) литров воды (\(e + w > 0\)), то магическая эссенция будет составлять ровно \(\frac{e}{e + w} \cdot 100\ \%\) (без округления) от всего объема зелья, а вода — \(\frac{w}{e + w} \cdot 100\ \%\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(k\) (\(1 \le k \le 100\)) — процент эссенции в хорошем зелье.

Выходные данные

Для каждого набора входных данных выведите минимальное количество шагов, за которое можно получить хорошее зелье. Можно доказать, что всегда можно получить хорошее зелье за конечное количество ходов.

Примечание

В первом наборе входных данных вы можете налить \(3\) литра магической эссенции и \(97\) литров воды в чан, чтобы получить зелье с \(3\ \%\) эссенции.

Во втором наборе вы можете налить лишь \(1\) литр магической эссенции и получить зелье со \(100\ \%\) эссенции.

В третьем наборе вы можете налить \(1\) литр эссенции и \(3\) литра воды.

E. Assimilation IV

дп Комбинаторика математика Теория вероятностей *2100

Монокарп играет в компьютерную игру Assimilation IV. В этой игре он управляет огромной империей: основывает города, отстраивает их и захватывает новые земли.

Сейчас в империи Монокарпа \(n\) городов, и Монокарп планирует их развивать. Он собирается в каждом из этих городов построить по одному Монументу, и это поможет ему захватить новые территории. Игра пошаговая и, так как Монокарп еще не очень хорошо разбирается в игре, на каждом ходу он строит ровно один Монумент.

Монокарпа интересуют \(m\) точек на карте, которые он хотел бы контролировать при помощи Монументов. Для каждой точки он знает расстояние от нее до каждого из своих городов. Монументы позволяют захватывать территорию следующим образом: в ход, в который Монокарп строит Монумент в некотором городе, строение позволяет ему контролировать все точки на расстоянии \(1\) до этого города. На следующий ход Монумент будет контролировать все точки на расстоянии не более \(2\), еще через ход — все точки на расстоянии \(3\), и так далее. Монокарп собирается построить \(n\) Монументов за \(n\) ходов, и после этого его империи будут принадлежать каждая интересующая его точка, которая контролируется хотя бы одним Монументом.

Монокарп никак не может придумать оптимальную стратегию, и поэтому на каждом шагу он будет просто выбирать город случайно среди тех, в которых еще нет Монументов. Монокарп интересуется, сколько из \(m\) точек он сможет контролировать к концу хода под номером \(n\). Помогите Монокарпу посчитать математическое ожидание количества точек, которые он сможет контролировать!

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 20\); \(1 \le m \le 5 \cdot 10^4\)) — количество городов в империи Монокарпа и количество интересующих его точек, соответственно.

Далее следуют \(n\) строк по \(m\) чисел: \(j\)-е число в \(i\)-й строке \(d_{i, j}\) (\(1 \le d_{i, j} \le n + 1\)) — это расстояние от \(i\)-го города до \(j\)-й интересующей Монокарпа точки.

Выходные данные

Можно показать, что математическое ожидание количества интересных точек, которые Монокарп сможет контролировать к концу хода \(n\), представимо в виде несократимой дроби \(\frac{x}{y}\). Выведите эту дробь по модулю \(998\,244\,353\) (значение \(x \cdot y^{-1} \bmod 998244353\), где \(y^{-1}\) — такое число, что \(y \cdot y^{-1} \bmod 998244353 = 1\)).

Примечание

Рассмотрим все возможные порядки городов постройки Монументов:

  • \([1, 2, 3]\):
    • первый город контролирует все точки на расстоянии не более \(3\), другими словами, точки \(1\) и \(4\);
    • второй город контролирует все точки на расстоянии не более \(2\), или же точки \(1\), \(3\) и \(5\);
    • третий город контролирует все точки на расстоянии не более \(1\), или же точку \(1\).
    В результате, \(4\) точки контролируются.
  • \([1, 3, 2]\): первый город контролирует точки \(1\) и \(4\); второй — точки \(1\) и \(3\); третий — точку \(1\). Суммарно, \(3\) точки.
  • \([2, 1, 3]\): первый город контролирует точку \(1\); второй — точки \(1\), \(3\) и \(5\); третий — точку \(1\). Суммарно, \(3\) точки.
  • \([2, 3, 1]\): первый город контролирует точку \(1\); второй — точки \(1\), \(3\) и \(5\); третий — точку \(1\). Суммарно, \(3\) точки.
  • \([3, 1, 2]\): первый город контролирует точку \(1\); второй — точки \(1\) и \(3\); третий — точки \(1\) и \(5\). Суммарно, \(3\) точки.
  • \([3, 2, 1]\): первый город контролирует точку \(1\); второй — точки \(1\), \(3\) и \(5\); третий — точки \(1\) и \(5\). Суммарно, \(3\) точки.
Матожидание количества контролируемых точек равно \(\frac{4 + 3 + 3 + 3 + 3 + 3}{6}\) \(=\) \(\frac{19}{6}\) или \(19 \cdot 6^{-1}\) \(\equiv\) \(19 \cdot 166374059\) \(\equiv\) \(166374062\) \(\pmod{998244353}\)

B. Я ненавижу 1111

дп математика теория чисел *1400

Вам дано целое число \(x\). Можете ли вы получить \(x\), просуммировав некоторое количество \(11, 111, 1111, 11111, \ldots\)? (Вы можете использовать любое число среди них любое количество раз).

Например,

  • \(33=11+11+11\)
  • \(144=111+11+11+11\)
Входные данные

Первая строка ввода содержит одно целое число \(t\) \((1 \leq t \leq 10000)\) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(x\) \((1 \leq x \leq 10^9)\) — число, которое вы должны получить.

Выходные данные

Для каждого набора входных данных вы должны вывести одну строку. Если вы можете получить \(x\), выведите «YES» (без кавычек). В противном случае выведите «NO».

Вы можете вывести каждую букву из «YES» и «NO» в любом регистре (верхнем или нижнем).

Примечание

Cпособы получения \(33\) и \(144\) были представлены в условии. Можно показать, что мы не можем представить \(69\) таким образом.

D. Убить Антона

Конструктив математика Перебор Строки Структуры данных *2200

После того, как Антон отклонил \(10^{100}\) задач на структуры данных, Errorgorn очень зол на него и решил его убить.

ДНК Антона можно представить в виде строки \(a\), которая содержит только символы из строки «ANTON» (всего \(4\) различных символов).

Errorgorn может заменить ДНК Антона на строку \(b\), которая должна быть перестановкой \(a\). Однако тело Антона может защититься от этой атаки. За \(1\) секунду его тело может поменять местами \(2\) соседних символа его ДНК, чтобы превратить ее обратно в \(a\). Тело Антона умно и будет использовать минимальное количество ходов.

Чтобы максимизировать вероятность смерти Антона, Errorgorn хочет изменить ДНК Антона на строку, которая максимизирует время, необходимое телу Антона для возвращения к его исходному ДНК. Но поскольку Errorgorn занят решением новых задач на структуры данных, ему нужна ваша помощь, чтобы найти лучшую строку \(B\). Сможете ли вы ему помочь?

Входные данные

Первая строка ввода содержит одно целое число \(t\) \((1 \leq t \leq 100000)\) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит \(1\) строку \(a\) (\(1 \leq |a| \leq 100000\)). \(a\) состоит только из символов "A", "N", "O" и "T".

Гарантируется, что сумма \(|a|\) по всем тестовым примерам не превышает \(100000\).

Выходные данные

Для каждого набора входных данных выведите единственную строку \(b\). Если ответов несколько, вы можете вывести любой из них. \(b\) должна быть перестановкой строки \(a\).

Примечание

Для первого набора входных данных, телу Антона требуется \(7\) секунд, чтобы превратить NNOTA в ANTON:

NNOTA \(\to\) NNOAT \(\to\) NNAOT \(\to\) NANOT \(\to\) NANTO \(\to\) ANNTO \(\to\) ANTNO \(\to\) ANTON.

Обратите внимание, что нельзя вывести такие строки, как AANTON, ANTONTRYGUB, AAA и anton, так как они не являются перестановкой ANTON.

Для первого тестового случая телу Антона требуется \(2\) секунды, чтобы преобразовать AANN в NAAN. Обратите внимание, что другие строки, такие как NNAA и ANNA также будут приняты.

E. Oolimry и суффиксный массив

Комбинаторика Конструктив математика *2400

Однажды Oolimry увидел суффиксный массив. Ему стало интересно, сколько строк могут дать этот суффиксный массив.

Более формально, для данного суффиксного массив длины \(n\) и размера алфавита \(k\), подсчитайте количество строк, которые порождают такой суффиксный массив.

Пусть \(s\) — строка длины \(n\). Тогда \(i\)-й суффикс \(s\) — это подстрока \(s[i \ldots n-1]\). Суффиксный массив — это массив целых чисел, которые представляют собой позиции начал всех суффиксов данной строки после сортировки этих суффиксов в лексикографическом порядке. Например, суффиксный массив oolimry — это \([3,2,4,1,0,5,6]\), так как отсортированный массив суффиксов — это \([\texttt{imry},\texttt{limry},\texttt{mry},\texttt{olimry},\texttt{oolimry},\texttt{ry},\texttt{y}]\).

Строка \(x\) лексикографически меньше строки \(y\), если либо \(x\) является префиксом \(y\)\(x\neq y\)), либо существует такой \(i\), что \(x_i < y_i\), и для любого \(1\leq j < i\) , \(x_j = y_j\).

Входные данные

Первая строка содержит 2 целых числа \(n\) и \(k\) (\(1 \leq n \leq 200000,1 \leq k \leq 200000\)) — длину суффиксного массива и размер алфавита соответственно.

Вторая строка содержит \(n\) целых чисел \(s_0, s_1, s_2, \ldots, s_{n-1}\) (\(0 \leq s_i \leq n-1\)) где \(s_i\)\(i\)-й элемент суффиксного массива, т.е. стартовая позиция \(i\)-го лексикографически наименьшего суффикса. Гарантируется, что для всех \(0 \leq i< j \leq n-1\), \(s_i \neq s_j\).

Выходные данные

Выведите, сколько строк порождают данный суффиксный массив. Поскольку число может быть очень большим, выведите ответ по модулю \(998244353\).

Примечание

В первом примере «abb» является единственным возможным решением.

Во втором примере можно легко показать, что не существует возможных строк, так как все буквы должны быть одинаковыми.

В четвертом примере одной из возможных строк является «ddbacef».

Пожалуйста, не забывайте выводить свои ответы по модулю \(998244353\).

C. Парный вес последовательности

математика реализация хэши *1600

Вес последовательности определяется как количество пар \((i,j)\) (здесь \(i \lt j\)) с равными значениями (\(a_{i} = a_{j}\)). Например, вес последовательности \(a = [1, 1, 2, 2, 1]\) равен \(4\). Множество неупорядоченных пар индексов с равными значениями: \((1, 2)\), \((1, 5)\), \((2, 5)\), и \((3, 4)\).

Вам задана последовательность \(a\) из \(n\) чисел. Найдите сумму весов всех подотрезков \(a\).

Последовательность \(a\) является подотрезком \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее идет описание наборов.

Первая строка каждого набора входных данных содержит целое число \(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\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — сумму весов всех подотрезков \(a\).

Примечание
  • В примере \(1\), все возможные подотрезки \([1, 2, 1, 1]\) имеющие размер более \(1\) это:
    1. \([1, 2]\) содержит \(0\) пар;
    2. \([2, 1]\) содержит \(0\) пар;
    3. \([1, 1]\) содержит \(1\) пару;
    4. \([1, 2, 1]\) содержит \(1\) пару;
    5. \([2, 1, 1]\) содержит \(1\) пару;
    6. \([1, 2, 1, 1]\) содержит \(3\) пары.
    Таким образом ответ \(6\).
  • В примере \(2\) все элементы различны. Таким образом, ни для одного подотрезка нет подходящей пары. Ответ \(0\).

D. MEX дерево

Деревья Комбинаторика математика поиск в глубину и подобное реализация *2400

Вам дано дерево из \(n\) вершин, в котором вершины пронумерованы от \(0\) до \(n-1\). Для каждого \(k\) от \(0\) до \(n\) включительно вам необходимо посчитать количество неупорядоченных пар \((u,v)\), \(u \neq v\), таких, что MEX всех номеров вершин на пути от \(u\) до \(v\) равен \(k\).

MEX последовательности целых чисел равен наименьшему неотрицательному целому числу, которое в ней не встречается.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 2 \cdot 10^{5}\)).

Следующая \(n-1\) строка содержит описание дерева. Каждая строка содержит два целых числа \(u\) и \(v\) (\(0 \le u,v \le n-1\)), задающие ребро между \(u\) и \(v\) (\(u \neq v\)).

Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите \(n+1\) целое число: число путей в дереве таких, что MEX всех номеров вершин на нем равен \(k\), для всех \(k\) от \(0\) до \(n\).

Примечание
  1. В наборе входных данных \(1\):
    • Для \(k = 0\) существует только \(1\) путь из \(2\) в \(3\) с \(MEX([2, 3]) = 0\).
    • Для \(k = 1\) существует \(2\) пути. Один из \(0\) в \(2\) с \(MEX([0, 2]) = 1\), и из \(0\) в \(3\) с \(MEX([0, 2, 3]) = 1\).
    • Для \(k = 2\) существует \(1\) путь из \(0\) в \(1\) с \(MEX([0, 1]) = 2\).
    • Для \(k = 3\) существует \(1\) путь из \(1\) в \(2\) с \(MEX([1, 0, 2]) = 3\)
    • Для \(k = 4\) существует \(1\) путь из \(1\) в \(3\) с \(MEX([1, 0, 2, 3]) = 4\).
  2. В наборе входных данных \(2\):
    • Для \(k = 0\) не существует таких путей.
    • Для \(k = 1\) не существует таких путей.
    • Для \(k = 2\) существует \(1\) путь из \(0\) в \(1\) с \(MEX([0, 1]) = 2\).

B. Kavi разбивает на пары

дп Комбинаторика математика *1700

У Kavi есть \(2n\) точек, лежащих на оси \(OX\), \(i\)-я из которых расположена в точке \(x = i\).

Kavi рассматривает все способы разбить эти \(2n\) точек на \(n\) пар. Среди этих способов его интересуют хорошие способы, которые определяются следующим образом:

Рассмотрим \(n\) отрезков с концами в точках в соответствующих парах. Пара называется хорошей, если для каждых \(2\) различных отрезков \(A\) и \(B\) из этих, для них выполняется хотя бы одно из следующих условий:

  • Один из отрезков \(A\) и \(B\) полностью содержится внутри другого.
  • \(A\) и \(B\) имеют одинаковую длину.

Рассмотрим следующий пример:

\(A\) — хорошее разбиение на пары, так как красный отрезок полностью лежит внутри синего отрезка.

\(B\) — хорошее разбиение, так как красный и синий отрезки имеют одинаковую длину.

\(C\) не является хорошим разбиением, так как ни один из красного и синего отрезков не лежит внутри другого, и они имеют разную длину.

Kavi интересует количество хороших разбиений на пары, поэтому он хочет, чтобы вы нашли его для него. Поскольку результат может быть большим, найдите это число по модулю \(998244353\).

Два разбиения на пары называются различными, если в одном из них какие-то две точки находятся в одной паре, а в другом — в разных парах.

Входные данные

Единственная строка ввода содержит единственное целое число \(n\) \((1\le n \le 10^6)\).

Выходные данные

Выведите количество хороших пар по модулю \(998244353\).

Примечание

Хорошими разбиениями на пары для второго примера являются:

Хорошими разбиениями на пары для третьего примера являются:

F. Ферма AmShZ

бпф Комбинаторика математика *3300

Для AmShZ все массивы равны, но некоторые массивы более равны, чем другие. А именно — массивы, состоящие из \(n\) элементов от \(1\) до \(n\), которые можно превратить в перестановки чисел от \(1\) до \(n\), добавив к каждому элементу по целому неотрицательному числу.

Mashtali который хочет появиться в условии каждой задачи считает, что массив \(b\), состоящий из \(k\) элементов, совместим с более равным массивом \(a\), состоящим из \(n\) элементов, если для каждого \(1 \le i \le k\) выполняется \(1 \le b_i \le n\), а также \(a_{b_1} = a_{b_2} = \ldots = a_{b_k}\).

Найдите количество пар массивов \(a\) и \(b\) таких, что \(a\) — более равный массив, состоящий из \(n\) элементов, а \(b\) — массив, совместимый с \(a\), состоящий из \(k\) элементов, по модулю \(998244353\).

Заметим, что элементы \(b\) не обязательно разные, то же самое верно и для \(a\).

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(k\) \((1 \le n \le 10^9 , 1 \le k \le 10^5)\).

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(998244353\).

Примечание

Для второго примера существует восемь возможных пар:

  1. \(a = \{1, 1\}, b = \{1, 1\}\)
  2. \(a = \{1, 1\}, b = \{1, 2\}\)
  3. \(a = \{1, 1\}, b = \{2, 1\}\)
  4. \(a = \{1, 1\}, b = \{2, 2\}\)
  5. \(a = \{1, 2\}, b = \{1, 1\}\)
  6. \(a = \{1, 2\}, b = \{2, 2\}\)
  7. \(a = \{2, 1\}, b = \{1, 1\}\)
  8. \(a = \{2, 1\}, b = \{2, 2\}\)

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\).

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]\).

F. Бинго

битмаски дп Комбинаторика математика Теория вероятностей *2600

В предвкушении VK Fest 2021 вы составили себе табличку из \(n\) строк и \(n\) столбцов, и в каждую ячейку этой таблички записали некоторое событие, связанное с фестивалем, которое может произойти или нет — например, удастся ли вам выиграть на фестивале приз, или пойдёт ли дождь.

Алгоритмы предсказания ВКонтакте уже оценили для каждого события вероятность того, что оно произойдёт. Событие в строке \(i\) и столбце \(j\) произойдёт с вероятностью \(a_{i, j} \cdot 10^{-4}\). При этом все события совместно независимы друг от друга.

Назовём табличку с событиями выигрышной, если найдётся такая линия, на которой произойдут все \(n\) событий. Линией считается любая горизонталь (ячейки \((i, 1), (i, 2), \ldots, (i, n)\) для некоторого \(i\)), любая вертикаль (ячейки \((1, j), (2, j), \ldots, (n, j)\) для некоторого \(j\)), главная диагональ (ячейки \((1, 1), (2, 2), \ldots, (n, n)\)) и побочная диагональ (ячейки \((1, n), (2, n - 1), \ldots, (n, 1)\)).

Определите вероятность того, что ваша табличка окажется выигрышной, и выведите её по модулю \(31\,607\) (см. формат вывода).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 21\)) — длина стороны таблички.

В \(i\)-й из следующих \(n\) строк задано \(n\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, n}\) (\(0 < a_{i, j} < 10^4\)). Вероятность того, что событие в ячейке таблицы \((i, j)\) произойдёт, равна \(a_{i, j} \cdot 10^{-4}\).

Выходные данные

Выведите вероятность того, что табличка окажется выигрышной, по модулю \(31\,607\).

Формально, пусть \(M = 31\,607\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом примере любые два события образуют линию, поэтому табличка будет выигрышной, если произойдут любые два события. Вероятность этого равна \(\frac{11}{16}\), а \(5927 \cdot 16 \equiv 11 \pmod{31\,607}\).

A. Путешествие в Бертаун

*особая задача математика реализация

Вика решила отправиться в путешествие в Бертаун. Она приезжает в Бертаун в день \(k\). Вика не готова тратить деньги на отели. К счастью, у нее есть \(n\) друзей, которые живут в Бертауне и готовы принять Вику у себя дома. \(i\)-й друг сообщил, что Вика может остановиться у него со дня \(l_i\) по день \(r_i\) включительно.

Вика решила, что остановится не более чем у одного друга. Помогите Вике определить максимальное количество дней, которое она сможет пробыть в Бертауне.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 100\)) — количество друзей Вики и номер дня, когда она приезжает в Бертаун.

Затем следуют \(n\) строк, каждая содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 100\)) — отрезок дней, который Вика может жить у \(i\)-го друга.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество дней, которое Вика сможет пробыть в Бертауне (или \(0\), если ни один из друзей Вики не может принять ее в день \(k\)).

Примечание

В первом примере Вика может погостить у \(2\)-го друга с \(3\)-го по \(6\)-й день.

Во втором примере ни один из друзей Вики не может принять ее в день \(4\).

В третьем примере Вика может погостить у \(1\)-го друга только \(4\)-й день.

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\), что является оптимальным решением.

C. Головоломка маленького Алана

графы дп Комбинаторика математика снм *1300

Во время перерывов в подготовке к Международной олимпиаде школьников по информатике маленький Алан любит решать различные головоломки, чтобы развивать мозги. Сегодня он решает головоломку, которая выглядит как таблица \(2 \times n\), где в каждом ряду записана перестановка чисел \(1,2,3,\ldots,n\).

Задача головоломки — сделать так, чтобы ни в каком ряду и ни в каком столбце не было двух одинаковых чисел (назовем такие состояния решенными), а единственная разрешенная операция — поменять местами два числа в одном столбце. Когда маленький Алан решил головоломку много раз, он заскучал и начал размышлять, а сколько вообще существует различных решенных состояний в данной головоломке, которые он может получить из некоторого начального решенного состояния, применяя только разрешенные операции?

Маленький Алан не справился с этой сложной задачей, поэтому он попросил вас помочь ему. Найдите ответ по модулю \(10^9+7\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(2 \le n \le 4 \cdot 10^5\)).

Следующие две строки описывают начальное состояние головоломки. Каждая строка содержит перестановку чисел \(1,2,3,\ldots,n\), и числа в каждом столбце и в каждой строке различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество решенных состояний головоломки, которые можно получить из данного, меняя местами числа в столбцах. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Примечание

Два возможных решенный состояния в примере \(1\):

  • \([1,4,2,3]\) в первой строке, и \([3,2,1,4]\) во второй,
  • \([3,2,1,4]\) в первой строке, и \([1,4,2,3]\) во второй.

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]\).

E. Омкар и лес

графы Комбинаторика кратчайшие пути математика *2300

Последний присоединившийся последователь Омкара, Ajit, вошел в Священный лес. Ajit понимает, что лес Омкара — это таблица размером \(n\) на \(m\) (\(1 \leq n, m \leq 2000\)), состоящая из целых неотрицательных чисел. Поскольку лес благословлен Омкаром, он удовлетворяет некоторым особым условиям:

  1. Для любых двух соседних по стороне клеток абсолютное значение разности чисел в них не превышает \(1\).
  2. Если число в какой-то клетке строго больше \(0\), то оно должно быть строго больше, чем значение числа в по крайней мере одной клетке, примыкающей к ней по стороне.

К сожалению, Ajit еще не полностью достоин способностей Омкара. Он видит каждую клетку как "0" или "#". Если клетка обозначена как "0", то число в ней должно быть равно \(0\). Иначе число в ней может быть любым неотрицательным целым числом.

Определите, сколько существует различных конфигураций элементов, при которых выполняются эти особые условия. Две конфигурации считаются различными, если существует хотя бы одна клетка такая, что числа, записанные в ней в этих конфигурациях, различны. Поскольку ответ может быть огромным, найдите ответ по модулю \(10^9+7\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \leq t \leq 100\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2000, nm \geq 2\)) — размеры леса.

Далее следуют \(n\) строк, каждая из которых состоит из одной строки из \(m\) символов. Каждый из этих символов является либо "0", либо "#".

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\), а также сумма \(m\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: количество допустимых конфигураций по модулю \(10^9+7\).

Примечание

Для первого набора входных данных есть две допустимых конфигурации:

\(0000\\ 0000\\ 0000\)

и

\(0000\\ 0010\\ 0000\)

F. Омкар и Акмар

meet-in-the-middle бпф геометрия игры китайская теорема об остатках Комбинаторика Конструктив математика строковые суфф. структуры *2600

Омкар и Акмар играют в игру на круговой доске с \(n\) (\(2 \leq n \leq 10^6\)) клетками. Клетки пронумерованы от \(1\) до \(n\), для каждой \(i\) (\(1 \leq i \leq n-1\)) клетка \(i\) соседствует с клеткой \(i+1\), а клетка \(1\) соседствует с клеткой \(n\). Изначально каждая клетка пуста.

Омкар и Акмар по очереди выкладывают на доску букву A или B, причем Акмар ходит первым. Буква должна быть помещена на пустую клетку. Кроме того, буква не может быть помещена в такую клетку, что соседняя клетка содержит ту же букву.

Игрок проигрывает, когда наступает его очередь и больше нет допустимых ходов.

Выведите количество возможных различных игр, в которых оба игрока играют оптимально по модулю \(10^9+7\). Обратите внимание, что мы рассматриваем только те партии, в которых кто-то из игроков проиграл, и не осталось ни одного допустимого хода.

Две игры считаются разными, если количества ходов в них отличаются, или на каком-то ходу буква или номер клетки, на которую ставится буква, были разными.

Ход считается оптимальным, если он максимизирует шансы игрока на победу, предполагая, что другой игрок также играет оптимально. Более формально, если игрок, чья очередь ходить, имеет выигрышную стратегию, он должен сделать ход, после которого у него останется выигрышная стратегия. Если же у него ее нет, то он может сделать любой ход.

Входные данные

Первая строка будет содержать целое число \(n\) (\(2 \leq n \leq 10^6\)) — количество клеток на доске.

Выходные данные

Выведите одно целое число, — количество возможных различных игр, в которых оба игрока играют оптимально по модулю \(10^9+7\).

Примечание

В первом примере первый игрок имеет \(4\) возможных хода. Независимо от того, как ходит первый игрок, у второго игрока есть ровно \(1\) возможный ход, поэтому существует \(4\) возможных игры.

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\) и она минимально возможная, так как это единственные высоты. Трудность максимальна.

D. Удаляя делители

игры математика теория чисел *1700

Алиса и Боб играют в игру.

Они начинают с целого положительного числа \(n\) и поочередно выполняют над ним операции. В свой игрок может вычесть из \(n\) один из его делителей, который не равен \(1\) или \(n\). Игрок, который не может сделать ход в свой ход, проигрывает. Алиса всегда ходит первой.

Обратите внимание, что в каждый ход они вычитают делитель текущего числа.

Вам предлагается выяснить, кто победит в игре, если оба игрока будут играть оптимально.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Каждый набор входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^9\)) — начальное число.

Выходные данные

Для каждого набора входных данных выведите «Alice», если Алиса выиграет игру, или «Bob», если выиграет Боб, если оба игрока играют оптимально.

Примечание

В первом наборе входных данных игра немедленно заканчивается, потому что Алиса не может сделать ход.

Во втором наборе входных данных Алиса может вычесть \(2\), получив \(n = 2\), тогда Боб не сможет сделать ход, и Алиса выиграет.

В третьем наборе входных данных Алиса может вычесть \(3\), получив \(n = 9\). Единственный ход Боба — вычесть \(3\) и сделать \(n = 6\). Теперь Алиса может снова вычесть \(3\) и получить \(n = 3\). После этого Боб не может сделать ход, и Алиса выигрывает.

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\), что привело каждую вершину к нужному значению.

Для графа из второго набора входных данных получить нужные значения невозможно.

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\) не существует.

C. Количество пар

Бинарный поиск математика Структуры данных *1300

Вам задан массив \(a\), состоящий из \(n\) целых чисел. Найдите количество пар индексов \((i, j)\) (\(1 \le i < j \le n\)), для которых сумма \(a_i + a_j\) больше или равна \(l\) и меньше или равна \(r\) (то есть \(l \le a_i + a_j \le r\)).

Например, если \(n = 3\), \(a = [5, 1, 2]\), \(l = 4\) и \(r = 7\), то подходят две пары:

  • \(i=1\) и \(j=2\) (\(4 \le 5 + 1 \le 7\));
  • \(i=1\) и \(j=3\) (\(4 \le 5 + 2 \le 7\)).
Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находятся три целых числа \(n, l, r\) (\(1 \le n \le 2 \cdot 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\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар индексов \((i, j)\) (\(i < j\)), для которых \(l \le a_i + a_j \le r\).

D. Еще одна задача про деление чисел

Конструктив математика теория чисел *1700

Вам даны два целых числа \(a\) и \(b\). За один ход вы можете выполнить одно из следующих действий:

  • Взять целое число \(c\) (\(c > 1\), \(a\) делится на \(c\)) и заменить \(a\) на \(\frac{a}{c}\);
  • Взять целое число \(c\) (\(c > 1\), \(b\) делится на \(c\)) и заменить \(b\) на \(\frac{b}{c}\).

Ваша цель сделать \(a\) равным \(b\), используя \(k\) этих операций.

Например, числа \(a=36\) и \(b=48\) можно сделать равными за \(4\) хода:

  • \(c=6\), делим \(b\) на \(c\) \(\Rightarrow\) \(a=36\), \(b=8\);
  • \(c=2\), делим \(a\) на \(c\) \(\Rightarrow\) \(a=18\), \(b=8\);
  • \(c=9\), делим \(a\) на \(c\) \(\Rightarrow\) \(a=2\), \(b=8\);
  • \(c=4\), делим \(b\) на \(c\) \(\Rightarrow\) \(a=2\), \(b=2\).

Для заданных чисел \(a\) и \(b\) определите, можно ли сделать их равными ровно за \(k\) ходов.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных характеризуется тремя целыми числами \(a\), \(b\) и \(k\) (\(1 \le a, b, k \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите:

  • «Yes», если можно ли сделать числа \(a\) и \(b\) равными ровно за \(k\) ходов;
  • «No», иначе.

Строки «Yes» и «No» можно выводить в произвольном регистре.

F. Интересная функция

Бинарный поиск дп математика теория чисел *1500

Вам заданы два целых числа \(l\) и \(r\), где \(l < r\). Будем прибавлять \(1\) к \(l\) до тех пор, пока результат не окажется равным \(r\). Таким образом, будет сделано ровно \(r-l\) прибавлений единицы. Для каждого такого прибавления посмотрим на количество цифр, которые будут изменены при этом прибавлении. Например:

  • если \(l=909\), то прибавление единицы приведёт к результату \(910\) и будут изменены \(2\) цифры;
  • если к \(l=9\) прибавить единицу, то результат будет равен \(10\) и будут изменены тоже \(2\) цифры;
  • если к \(l=489999\) прибавить единицу, то результат будет равен \(490000\) и будут изменены \(5\) цифр.

Изменённые цифры всегда образуют некоторый суффикс десятичной записи результата.

Выведите суммарное количество изменённых цифр, если требуется из \(l\) получить \(r\), прибавляя каждый раз \(1\).

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый дабор входных данных характеризуется двумя целыми числами \(l\) и \(r\) (\(1 \le l < r \le 10^9\)).

Выходные данные

Для каждого набора входных данных вычислите суммарное количество изменённых цифр, если требуется из \(l\) получить \(r\), прибавляя каждый раз единицу.

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\). К этому моменту только третий будет всё ещё писать тур.

B. Коллайдеры

математика теория чисел *1600

К 2312 году в обитаемой части Вселенной насчитывалось уже n Больших Адронных Коллайдеров, каждому из которых сопоставлялось уникальное натуральное число от 1 до n. Однако ученые не знали, к чему могло привести одновременное включение нескольких коллайдеров, поэтому они так и стояли в выключенном состоянии.

В 2312 году произошло потрясающее открытие: работа коллайдеров безопасна тогда и только тогда, когда все номера включенных коллайдеров попарно взаимно просты друг с другом (два числа взаимно просты, если их наибольший общий делитель равен 1)! Если одновременно будут включены два коллайдера со взаимно непростыми номерами, произойдет глобальный коллапс.

Узнав это, физики тут же бросились включать-выключать коллайдеры и ставить на них разные эксперименты. Чтобы из-за расторопности ученых не произошло беды, был создан Большой Пульт Управления Большими Адронными Коллайдерами. Программное обеспечение для него было поручено написать Вам (ну не вручную же им управлять?).

Изначально все коллайдеры находятся в выключенном состоянии. Вашей программе поступает множество запросов вида «включить/выключить i-ый коллайдер». Программа должна обрабатывать запросы в порядке их поступления и выводить результаты обработки в формате, описанном ниже.

На запрос «+ i» (то есть включить i-ый коллайдер), программа должна выводить ровно один из следующих ответов:

  • «Success», если включение прошло успешно.
  • «Already on», если до запроса i-ый коллайдер уже был включен.
  • «Conflict with j», если происходит конфликт с j-ым коллайдером (то есть j-ый коллайдер включен, и числа i и j не взаимно просты). В этом случае i-ый коллайдер включать не нужно. Если конфликт происходит сразу с несколькими коллайдерами, можно вывести номер любого из них.

На запрос «- i» (то есть выключить i-ый коллайдер), программа должна выводить ровно один из следующих ответов:

  • «Success», если выключение прошло успешно.
  • «Already off», если до запроса i-ый коллайдер уже был выключен.

При выводе ответа на запрос кавычки выводить не нужно.

Входные данные

В первой строке записано два целых числа, разделенных пробелом — n и m (1 ≤ n, m ≤ 105) — количество коллайдеров и количество запросов соответственно.

В следующих m строках даны описания запросов, по одному запросу в строке в формате «+ i» (без кавычек) — включить i-ый коллайдер, либо «- i» (без кавычек) — выключить i-ый коллайдер (1 ≤ i ≤ n).

Выходные данные

Выведите m строк — результаты выполнения запросов в формате, описанном выше. Запросы необходимо обрабатывать в том порядке, в котором они подаются на вход. Не забудьте, что ответы на запросы требуется выводить без кавычек.

Примечание

Обратите внимание, что в примере после второго и девятого запросов включения не происходит. На девятый запрос допустимо также вывести «Conflict with 3».

D. Флатландское фехтование

игры математика *2400

Король Флатландии проводит рыцарский турнир! Победителю достанется полцарства и расположение принцессы, о красоте и мудрости которой ходят легенды. Последней проверкой смелости и силы претендентов будет турнир по фехтованию. Турнир проходит по следующим правилам: участники сражаются один на один, победитель (а точнее, выживший) выходит в следующий круг соревнований.

Перед битвой оба участника становятся в указанные им точки оси Ox с целыми координатами. Затем они совершают ходы по очереди. Первым, естественно, ходит первый участник. На своем ходу первый участник из точки x может переместиться в любую целочисленную точку из отрезка [x + a; x + b], а второй — в любую целочисленную точку из отрезка [x - b; x - a], то есть варианты ходов для игроков симметричны (обратите внимание, что числа a и b не обязаны быть положительными; также, если a ≤ 0 ≤ b, то остаться на месте — корректный ход.) В любой момент участники могут располагаться произвольным образом друг относительно друга, то есть «перепрыгивать» через противника в любую сторону позволяется. Побеждает тот участник, который на своем ходу переместится в точку, где находится его противник.

Разумеется, принцесса уже выбрала себе жениха, и теперь она хочет сделать так, чтобы её избранник выиграл турнир. Он уже вышел в финал турнира, и ему осталась последняя битва. Принцесса просит управляющего турнира расположить участников финала так, чтобы при оптимальных действиях обоих участников выиграл тот, который интересен принцессе. Однако начальное расположение участников уже оглашено, и можно повлиять лишь на то, кто из соперников будет первым участником, а кто — вторым. Но как понять, какой из участников может обеспечить себе победу, ведь принцесса не сильна в военных делах... Поэтому она просит Вас определить, как закончится битва при оптимальных действиях обоих соперников, а также, в случае, если первый участник выигрывает, выигрышный ход для него.

Входные данные

В первой и единственной строке входных данных записано четыре целых числа, разделенных пробелами — x1, x2, a и b (x1 ≠ x2, a ≤ b,  - 109 ≤ x1, x2, a, b ≤ 109) — координаты точек, в которых начинают первый и второй участник, а также два числа, определяющие ходы игроков, соответственно.

Выходные данные

В первой строке выведите результат битвы в виде: «FIRST» (без кавычек), если при оптимальных действиях обоих игроков выигрывает первый участник, «SECOND» (без кавычек), если выигрывает второй участник, или «DRAW» (без кавычек), если никто не может обеспечить себе победу.

В случае, если выигрывает первый участник, в следующей строке выведите одно целое число x — координату точки, в которую должен пойти первый игрок, чтобы выиграть. Указанный ход должен быть корректным, то есть должно выполняться условие x1 + a ≤ x ≤ x1 + b. Если выигрышных ходов несколько, выведите любой. Если первый участник не может обеспечить себе победу, ничего дополнительно выводить не нужно.

Примечание

В первом примере первый участник может выиграть в один ход.

Во втором примере первый участник обязан пойти в точку 1, куда сразу же идет второй участник и выигрывает.

В третьем примере никому из участников не выгодно изменять свое положение, поэтому никто не выигрывает.

B. Древесный массив

графы Деревья дп Комбинаторика математика Перебор Теория вероятностей *2300

Вам задано дерево, состоящее из \(n\) вершин. По заданному дереву вы строите массив, отмечая вершины по одной.

Первоначально, когда еще не помечено ни одной вершины, вы выбираете вершину равновероятно по всем вершинам дерева и отмечаете ее.

После этого, пока еще остаются непомеченные вершины, вы выбираете и помечаете вершину равновероятно среди всех еще непомеченных, но связанных по ребру хотя бы с одной помеченной вершиной.

Можно доказать, что данный процесс пометит все вершины в дереве.

Финальный массив \(a\) — это список номеров вершин в порядке, в котором они были помечены.

Определите математическое ожидание количества инверсий в массиве, полученном на основе заданного дереве с помощью описанного выше алгоритма.

Количество инверсий в массиве \(a\) — это количество пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i > a_j\). Например, в массиве \([4, 1, 3, 2]\) количество инверсий равно \(4\): \((1, 2)\), \((1, 3)\), \((1, 4)\), \((3, 4)\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 200\)) — количество вершин в дереве.

В следующих \(n - 1\) строках заданы по два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\); \(x \neq y\)), означающие ребро между вершинами \(x\) и \(y\).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите математическое ожидание количества инверсий в построенном массиве по модулю \(10^9+7\).

Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Изображение дерева из первого примера:

В первом примере получающиеся массивы почти фиксированы. Если первоначально выбрана вершина \(2\), то единственный возможный массив — это \([2, 1, 3]\) (\(1\) инверсия). Если первоначально выбрана вершина \(3\), то единственный возможный массив — это \([3, 1, 2]\) (\(2\) инверсии). Если первоначально выбрана вершина \(1\), то массивы \([1, 2, 3]\) (\(0\) инверсий) и \([1, 3, 2]\) (\(1\) инверсия) — это единственные варианты и они равновероятны. В результате математическое ожидание количества инверсий равно \(\frac{1}{3}\cdot 1 + \frac{1}{3} \cdot 2 + \frac{1}{3} \cdot (\frac{1}{2} \cdot 0 + \frac{1}{2} \cdot 1) = \frac{7}{6}\).

\(166666669 \cdot 6 = 7 \pmod {10^9 + 7}\), то есть ответ равен \(166666669\).

Изображение дерева из второго примера:

Изображение дерева из третьего примера:

C1. Сходящийся массив (простая версия)

дп математика *2700

Это — упрощенная версия задачи. Единственное различие в том, что в данной версии \(q = 1\). Вы можете взламывать другие решения, только если решены обе версии задачи.

Рассмотрим процесс, проходящий на массивах \(a\) и \(b\) длины \(n\) и \(n-1\) соответственно.

Процесс — это бесконечная последовательность действий. Каждое действие имеет следующий вид:

  • Сначала выберем случайное целое число \(i\) (\(1 \le i \le n-1\)).
  • Теперь одновременно присвоим \(a_i = \min\left(a_i, \frac{a_i+a_{i+1}-b_i}{2}\right)\) и \(a_{i+1} = \max\left(a_{i+1}, \frac{a_i+a_{i+1}+b_i}{2}\right)\) без округлений (то есть значения могут перестать быть целыми).
Пример такой операции представлен в заметках.

Можно доказать, что массив \(a\) сходится, т. е. для каждого \(i\) существует предел, к которому \(a_i\) сходится. Пусть функция \(F(a, b)\) возвращает значение, к которому сходится \(a_1\), в результате процесса на массивах \(a\) и \(b\).

Вам задан массив \(b\), но не массив \(a\). Однако вам задан третий массив \(c\). Назовем массив \(a\) хорошим, если он состоит из целых чисел и удовлетворяет неравенству \(0 \leq a_i \leq c_i\) для всех \(1 \leq i \leq n\).

Ваша задача — посчитать количество хороших массивов \(a\), для которых \(F(a, b) \geq x\), для \(q\) значений \(x\). Так как ответ может быть слишком большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 100\)).

Во второй строке заданы \(n\) целых чисел \(c_1, c_2 \ldots, c_n\) (\(0 \le c_i \le 100\)).

В третьей строке заданы \(n-1\) целых чисел \(b_1, b_2, \ldots, b_{n-1}\) (\(0 \le b_i \le 100\)).

В четвертой строке задано одно целое число \(q\) (\(q=1\)).

В пятой строке заданы \(q\) целых чисел \(x_1, x_2, \ldots, x_q\) (\(-10^5 \le x_i \le 10^5\)).

Выходные данные

Выведите \(q\) целых чисел, где \(i\)-е число — ответ на \(i\)-й запрос, т. е. количество хороших массивов \(a\) с \(F(a, b) \geq x_i\) по модулю \(10^9+7\).

Примечание

Объяснение далее предполагает, что \(b = [2, 1]\) и \(c=[2, 3, 4]\) (как в примере).

Примеры массивов \(a\), которые не являются хорошими:

  • \(a = [3, 2, 3]\) не является хорошим, потому что \(a_1 > c_1\);
  • \(a = [0, -1, 3]\) не является хорошим, потому что \(a_2 < 0\).

Один из возможных хороших массивов \(a\) — это \([0, 2, 4]\). Можно показать, что ни одна операция его не изменит, а потому \(F(a, b) = a_1 = 0\).

Другой возможных хороший массив \(a\) — это \([0, 1, 4]\). За одну операцию с \(i = 1\) мы присваиваем \(a_1 = \min(\frac{0+1-2}{2}, 0)\) и \(a_2 = \max(\frac{0+1+2}{2}, 1)\). То есть, после одной операции с \(i = 1\), \(a\) становится равен \([-\frac{1}{2}, \frac{3}{2}, 4]\). Можно показать, что далее ни одна операция не изменит массив, а потому \(F(a, b) = -\frac{1}{2}\).

C2. Сходящийся массив (сложная версия)

дп математика *2900

Это — усложненная версия задачи. Единственное различие в том, что в данной версии \(1 \le q \le 10^5\). Вы можете взламывать другие решения, только если решены обе версии задачи.

Рассмотрим процесс, проходящий на массивах \(a\) и \(b\) длины \(n\) и \(n-1\) соответственно.

Процесс — это бесконечная последовательность действий. Каждое действие имеет следующий вид:

  • Сначала, выберем случайное целое число \(i\) (\(1 \le i \le n-1\)).
  • Теперь, одновременно присвоим \(a_i = \min\left(a_i, \frac{a_i+a_{i+1}-b_i}{2}\right)\) и \(a_{i+1} = \max\left(a_{i+1}, \frac{a_i+a_{i+1}+b_i}{2}\right)\) без округлений (то есть значения могут перестать быть целыми).
Пример такой операции представлен в заметках.

Можно доказать, что массив \(a\) сходится, т. е. для каждого \(i\) существует предел, к которому \(a_i\) сходится. Пусть функция \(F(a, b)\) возвращает значение, к которому сходится \(a_1\), в результате процесса на массивах \(a\) и \(b\).

Вам задан массив \(b\), но не массив \(a\). Однако вам задан третий массив \(c\). Назовем массив \(a\) хорошим, если он состоит из целых чисел и удовлетворяет неравенству \(0 \leq a_i \leq c_i\) для всех \(1 \leq i \leq n\).

Ваша задача — посчитать количество хороших массивов \(a\), для которых \(F(a, b) \geq x\), для \(q\) значений \(x\). Так как ответ может быть слишком большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 100\)).

Во второй строке заданы \(n\) целых чисел \(c_1, c_2 \ldots, c_n\) (\(0 \le c_i \le 100\)).

В третьей строке заданы \(n-1\) целых чисел \(b_1, b_2, \ldots, b_{n-1}\) (\(0 \le b_i \le 100\)).

В четвертой строке задано одно целое число \(q\) (\(1 \le q \le 10^5\)).

В пятой строке заданы \(q\) целых чисел \(x_1, x_2, \ldots, x_q\) (\(-10^5 \le x_i \le 10^5\)).

Выходные данные

Выведите \(q\) целых чисел, где \(i\)-е число — ответ на \(i\)-й запрос, т. е. количество хороших массивов \(a\) с \(F(a, b) \geq x_i\) по модулю \(10^9+7\).

Примечание

Объяснение далее предполагает, что \(b = [2, 1]\) и \(c=[2, 3, 4]\) (как в примере).

Примеры массивов \(a\), которые не являются хорошими:

  • \(a = [3, 2, 3]\) не является хорошим, потому что \(a_1 > c_1\);
  • \(a = [0, -1, 3]\) не является хорошим, потому что \(a_2 < 0\).

Один из возможных хороших массивов \(a\) — это \([0, 2, 4]\). Можно показать, что ни одна операция его не изменит, а потому \(F(a, b) = a_1 = 0\).

Другой возможных хороший массив \(a\) — это \([0, 1, 4]\). За одну операцию с \(i = 1\) мы присваиваем \(a_1 = \min(\frac{0+1-2}{2}, 0)\) и \(a_2 = \max(\frac{0+1+2}{2}, 1)\). То есть, после одной операции с \(i = 1\), \(a\) становится равен \([-\frac{1}{2}, \frac{3}{2}, 4]\). Можно показать, что далее ни одна операция не изменит массив, а потому \(F(a, b) = -\frac{1}{2}\).

E. Вкусные блюда

математика матрицы *3500

Обратите внимание на необычное ограничение по памяти.

Есть \(n\) поваров, пронумерованных \(1, 2, \ldots, n\), которые готовят блюда для короля. Повар \(i\) обладает мастерством \(i\) и первоначально приготовил блюдо вкусности \(a_i\), где \(|a_i| \leq i\). У каждого повара есть список поваров, блюда которых он может копировать. Чтобы не допускать распространение плохих привычек, король гарантирует, что повар \(i\) может копировать только у поваров с более высоким мастерством.

Повара работают над своими блюдами в течение нескольких дней. Каждый день работа над блюдом разбивается на два этапа.

  1. В начале каждого дня каждый повар может выбрать, поработать или нет над своим блюдом, тем самым умножая вкусность своего блюда на свое мастерство (\(a_i := i \cdot a_i\)).
  2. После того как все (кто хотел) поработали над своими блюдами, каждый повар начинает изучать работу других поваров. А именно, для каждого повара \(j\) из списка повара \(i\), повар \(i\) может выбрать, скопировать ли блюдо повара \(j\), тем самым прибавляя вкусность блюда \(j\) к своему \(i\)-му блюду (\(a_i := a_i + a_j\)). Можно считать, что все копирования происходят одновременно. Иначе говоря, если повар \(i\) хочет скопировать блюдо повара \(j\), он скопирует вкусность блюдо повара \(j\), полученную в конце этапа \(1\).

Чтобы угодить королю, каждый повар стремятся максимизировать вкусность своего блюда.

Наконец, вам заданы \(q\) запросов. Каждый запрос одно из двух видов:

  1. \(1\) \(k\) \(l\) \(r\) — посчитайте сумму вкусностей \(a_l, a_{l+1}, \ldots, a_{r}\) по окончании \(k\)-го дня. Так как данное значение может быть велико, выведите его по модулю \(10^9 + 7\).
  2. \(2\) \(i\) \(x\) — король дарит \(x\) единиц вкусности блюду \(i\)-го повара перед началом \(1\)-го дня (\(a_i := a_i + x\)). Заметим, что королю нравятся вкусные блюда, а потому он дарит положительную вкусность (\(x > 0\)).

Обратите внимание, что запросы типа \(1\) не зависят от других запросов. Точнее говоря, каждый запрос типа \(1\) — это только возможный сценарий и он не меняет вкусности \(a_i\) для запросов далее. При этом запросы типа \(2\) накапливаются, но меняют только первоначальные значения \(a_i\) блюд. В примечании представлены примеры запросов.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 300\)) — количество поваров.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-i \le a_i \le i\)).

Каждая из следующих \(n\) строк начинается с целого числа \(c_i\) (\(0 \le c_i < n\)), означающего количество поваров, у которых \(i\)-й повар может копировать блюда. Далее за ним следует \(c_i\) различных числа \(d\) (\(i < d \le n\)), обозначающих, что повар \(i\) может копировать у повара \(d\) каждый день во время \(2\)-го этапа.

В следующей строке задано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит запрос одного из двух видов:

  • \(1\) \(k\) \(l\) \(r\) (\(1 \le l \le r \le n\); \(1 \le k \le 1000\));
  • \(2\) \(i\) \(x\) (\(1 \le i \le n\); \(1 \le x \le 1000\)).

Гарантируется, что есть хотя бы один запрос первого вида.

Выходные данные

Для каждого запроса первого вида выведите одно число — ответ на этот запрос.

Примечание

Ниже показаны множества поваров, у которых может копировать каждый из поваров в примере.

  • \(1\): \(\{2, 3, 4, 5\}\)
  • \(2\): \(\{3\}\)
  • \(3\): \(\{4\}\)
  • \(4\): \(\{5\}\)
  • \(5\): \(\emptyset\) (ни у кого)

Далее следует описание первого примера.

Для первого запроса вида \(1\) первоначальные значения вкусностей равны \([1, 0, -2, -2, 4]\).

Значения вкусностей после каждого этапа в первый день:

  1. \([1, 0, -2, -2, 20]\) (повар \(5\) работает над своим блюдом).
  2. \([21, 0, -2, 18, 20]\) (повар \(1\) и повар \(4\) копируют у повара \(5\)).

Таким образом, ответ на \(1\)-й запрос равен \(21 + 0 - 2 + 18 + 20 = 57\).

Для \(5\)-го запроса (\(3\)-й вида \(1\)), первоначальные значения вкусностей теперь равны \([1, 0, 0, 1, 4]\).

День 1

  1. \([1, 0, 0, 4, 20]\) (повара \(4\) и \(5\) работают над своими блюдами).
  2. \([25,0, 4, 24, 20]\) (повар \(1\) копирует у поваров \(4\) и \(5\), повар \(3\) копирует у повара \(4\), повар \(4\) копирует у повара \(5\)).

День 2

  1. \([25, 0, 12, 96, 100]\) (все, кроме повара \(2\) работают над своими блюдами).
  2. \([233, 12, 108, 196, 100]\) (повар \(1\) копирует у поваров \(3\), \(4\) и \(5\), повар \(2\) у \(3\), повар \(3\) у \(4\), повар \(4\) у повара \(5\)).

    Таким образом, ответ на \(5\)-й запрос равен \(12+108+196=316\).

Можно показать, что на каждом описанном шаге все повара действовали оптимально.

B. Приятные пары

математика Перебор реализация теория чисел *1200

Вам задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) различных целых чисел. Посчитайте количество пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i \cdot a_j = i + j\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой стоке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — длина массива \(a\).

Во второй строке каждого набора заданы \(n\) целых чисел через пробел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 2 \cdot n\)) — массив \(a\). Гарантируется, что все элементы массива различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите количество пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i \cdot a_j = i + j\).

Примечание

В первом наборе единственная пара, удовлетворяющая условиям — это \((1, 2)\), так как \(a_1 \cdot a_2 = 1 + 2 = 3\)

Во втором наборе единственная подходящая пара – это \((2, 3)\).

В третьем наборе пары, удовлетворяющие условиям — это \((1, 2)\), \((1, 5)\) и \((2, 3)\).

A. Нечётное множество

математика *800

Вам дано мультимножество (то есть множество, которое может содержать несколько одинаковых элементов), содержащее \(2n\) целых чисел. Определите, возможно ли разбить его ровно на \(n\) пар (каждый элемент должен присутствовать ровно в одной паре) так, чтобы сумма элементов в каждой паре была нечётна (то есть при делении на \(2\) давала остаток \(1\)).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 100\)) – количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1\leq n\leq 100\))

Вторая строка каждого набора содержит \(2n\) целых чисел \(a_1,a_2,\dots, a_{2n}\) (\(0\leq a_i\leq 100\)) — числа в множестве.

Выходные данные

Для каждого набора входных данных выведите «Yes», если множество можно разбить ровно на \(n\) пар таких, что сумма элементов в каждой паре нечётна, и «No» иначе. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом наборе входных данных возможно следующее разбиение множества: \((2,3)\), \((4,5)\).

Во втором, третьем и пятом наборах можно показать, что разбиение невозможно.

В четвертом наборе возможно следующее разбиение множества: \((2,3)\).

B. Сложить и умножить

Конструктив математика теория чисел *1500

Дано бесконечное множество, сгенерированное следующим образом:

  • \(1\) принадлежит множеству.
  • Если \(x\) принадлежит множеству, то \(x \cdot a\) и \(x+b\) также принадлежат множеству.

Например, если \(a=3\) и \(b=6\), то первые пять элементов множества равны:

  • \(1\),
  • \(3\) (\(1\) лежит в множестве, поэтому \(1\cdot a=3\) лежит в множестве),
  • \(7\) (\(1\) лежит в множестве, поэтому \(1+b=7\) лежит в множестве),
  • \(9\) (\(3\) лежит в множестве, поэтому \(3\cdot a=9\) лежит в множестве),
  • \(13\) (\(7\) лежит в множестве, поэтому \(7+b=13\) лежит в множестве).

Даны положительные целые числа \(a\), \(b\), \(n\). Выясните, принадлежит ли \(n\) множеству.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^5\)) – количество наборов входных данных. Далее следует описание наборов входных данных.

Строка, описывающая набор входных данных содержит три целых числа \(n\), \(a\), \(b\) (\(1\leq n,a,b\leq 10^9\)), разделенных пробелом.

Выходные данные

Для каждого набора входных данных выведите «Yes», если \(n\) принадлежит множеству, и «No» иначе. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом наборе \(24\) генерируется следующим образом:

  • \(1\) лежит в множестве, поэтому \(3\) и \(6\) лежат в множестве;
  • \(3\) лежит в множестве, поэтому \(9\) и \(8\) лежат в множестве;
  • \(8\) лежит в множестве, поэтому \(24\) и \(13\) лежат в множестве.

Таким образом, \(24\) принадлежит множеству.

Первые пять элементов множества из второго набора входных данных описаны в условии. Можно заметить, что \(10\) не в их числе.

C. Странная функция

математика теория чисел *1600

Положим \(f(i)\) равным наименьшему положительному целому числу \(x\) такому, что \(x\) не является делителем \(i\).

Посчитайте \(\sum_{i=1}^n f(i)\) по модулю \(10^9+7\). Иными словами, посчитайте \(f(1)+f(2)+\dots+f(n)\) по модулю \(10^9+7\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^4\)) – количество наборов входных данных. Далее следует описание \(t\) наборов входных данных.

Каждая строка, описывающая набор входных данных, содержит единственное целое число \(n\) (\(1\leq n\leq 10^{16}\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число \(ans\), где \(ans=\sum_{i=1}^n f(i)\) по модулю \(10^9+7\).

Примечание

В четвертом наборе \(n=4\), поэтому \(ans=f(1)+f(2)+f(3)+f(4)\).

  • \(1\) делит \(1\), но \(2\) – не делит, поэтому \(2\) является наименьшим положительным целым числом, которое не делит \(1\). Таким образом, \(f(1)=2\).
  • \(1\) и \(2\) делят \(2\), но \(3\) – не делит, поэтому \(3\) является наименьшим положительным целым числом, которое не делит \(2\). Таким образом, \(f(2)=3\).
  • \(1\) делит \(3\), но \(2\) – не делит, поэтому \(2\) является наименьшим положительным целым числом, которое не делит \(3\). Таким образом, \(f(3)=2\).
  • \(1\) и \(2\) делят \(4\), но \(3\) – не делит, поэтому \(3\) является наименьшим положительным целым числом, которое не делит \(4\). Таким образом, \(f(4)=3\).

Получаем: \(ans=f(1)+f(2)+f(3)+f(4)=2+3+2+3=10\).

D. Очередь с приоритетом

дп Комбинаторика математика реализация Тернарный поиск *2200

Дана последовательность \(A\), в которой каждый элемент записан в формате + x или -, где \(x\) — целое число.

Для последовательности \(S\), в которой каждый элемент записан в формате + x или -, определим \(f(S)\) следующим образом:

  • Проходим по \(S\) от первого элемента до последнего и поддерживаем мультимножество \(T\), изначально пустое.
  • Если элемент последовательности имеет вид + x, добавим \(x\) в \(T\). Иначе удалим наименьший элемент из \(T\) (если \(T\) пусто, ничего делать не нужно).
  • После прохода по \(S\) посчитаем сумму всех элементов в \(T\). \(f(S)\) полагается равным этой сумме.

Последовательность \(b\) является подпоследовательностью последовательности \(a\), если \(b\) может быть получена из \(a\) удалением нуля или больше элементов без изменения порядка оставшихся элементов. Для всех подпоследовательностей \(B\) последовательности \(A\) посчитайте сумму \(f(B)\) по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит целое число \(n\) (\(1\leq n\leq 500\)) – длину \(A\).

Каждая из следующих \(n\) строк начинается с символа операции + или -. Если символ равен +, то за ним следует целое число \(x\) (\(1\le x<998\,244\,353\)). \(i\)-я строка из этих \(n\) строк описывает \(i\)-й элемент \(A\).

Выходные данные

Выведите одно целое число, равное ответу на задачу по модулю \(998\,244\,353\).

Примечание

В первом примере все возможные пары \(B\) и \(f(B)\) выглядят так:

  • \(B=\) {}, \(f(B)=0\).
  • \(B=\) {-}, \(f(B)=0\).
  • \(B=\) {+ 1, -}, \(f(B)=0\).
  • \(B=\) {-, + 1, -}, \(f(B)=0\).
  • \(B=\) {+ 2, -}, \(f(B)=0\).
  • \(B=\) {-, + 2, -}, \(f(B)=0\).
  • \(B=\) {-}, \(f(B)=0\).
  • \(B=\) {-, -}, \(f(B)=0\).
  • \(B=\) {+ 1, + 2}, \(f(B)=3\).
  • \(B=\) {+ 1, + 2, -}, \(f(B)=2\).
  • \(B=\) {-, + 1, + 2}, \(f(B)=3\).
  • \(B=\) {-, + 1, + 2, -}, \(f(B)=2\).
  • \(B=\) {-, + 1}, \(f(B)=1\).
  • \(B=\) {+ 1}, \(f(B)=1\).
  • \(B=\) {-, + 2}, \(f(B)=2\).
  • \(B=\) {+ 2}, \(f(B)=2\).

Сумма этих значений равна \(16\).

E1. Аномальные пары перестановок (простая версия)

бпф дп Комбинаторика математика *2400

Это простая версия задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(n\). Вы можете делать взломы, только если решили обе версии этой задачи.

Перестановка чисел \(1, 2, \ldots, n\) – это последовательность из \(n\) целых чисел, в которой каждое число от \(1\) до \(n\) встречается ровно один раз. Например, \([2,3,1,4]\) является перестановкой \(1, 2, 3, 4\), но \([1,4,2,2]\) – не перестановка, поскольку \(2\) встречается здесь дважды.

Напомним, что количеством инверсий в перестановке \(a_1, a_2, \ldots, a_n\) называется число пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i > a_j\).

Пусть \(p\) и \(q\) – две перестановки чисел \(1, 2, \ldots, n\). Найдите количество пар перестановок \((p,q)\), удовлетворяющих следующим условиям:

  • \(p\) лексикографически меньше \(q\).
  • Количество инверсий в \(p\) больше, чем в \(q\).

Выведите это количество пар по модулю \(mod\). Обратите внимание, что \(mod\) – не обязательно простое число.

Входные данные

В единственной строке содержатся два целых числа \(n\) и \(mod\) (\(1\le n\le 50\), \(1\le mod\le 10^9\)).

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(mod\).

Примечание

Все возможные пары перестановок \((p,q)\) при \(n=4\):

  • \(p=[1,3,4,2]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,2,3]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,3,2]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,3,2]\), \(q=[2,1,4,3]\),
  • \(p=[1,4,3,2]\), \(q=[2,3,1,4]\),
  • \(p=[1,4,3,2]\), \(q=[3,1,2,4]\),
  • \(p=[2,3,4,1]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,1,3]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,3,1]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,3,1]\), \(q=[3,1,4,2]\),
  • \(p=[2,4,3,1]\), \(q=[3,2,1,4]\),
  • \(p=[2,4,3,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,2,4,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,1,2]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,2,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,2,1]\), \(q=[4,1,3,2]\),
  • \(p=[3,4,2,1]\), \(q=[4,2,1,3]\).

E2. Аномальные пары перестановок (сложная версия)

бпф дп Комбинаторика математика *2700

Это сложная версия задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(n\). Вы можете делать взломы, только если решили обе версии этой задачи.

Перестановка чисел \(1, 2, \ldots, n\) – это последовательность из \(n\) целых чисел, в которой каждое число от \(1\) до \(n\) встречается ровно один раз. Например, \([2,3,1,4]\) является перестановкой \(1, 2, 3, 4\), но \([1,4,2,2]\) – не перестановка, поскольку \(2\) встречается здесь дважды.

Напомним, что количеством инверсий в перестановке \(a_1, a_2, \ldots, a_n\) называется число пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i > a_j\).

Пусть \(p\) и \(q\) – две перестановки чисел \(1, 2, \ldots, n\). Найдите количество пар перестановок \((p,q)\), удовлетворяющих следующим условиям:

  • \(p\) лексикографически меньше \(q\).
  • Количество инверсий в \(p\) больше, чем в \(q\).

Выведите это количество пар по модулю \(mod\). Обратите внимание, что \(mod\) – не обязательно простое число.

Входные данные

В единственной строке содержатся два целых числа \(n\) и \(mod\) (\(1\le n\le 500\), \(1\le mod\le 10^9\)).

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(mod\).

Примечание

Все возможные пары перестановок \((p,q)\) при \(n=4\):

  • \(p=[1,3,4,2]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,2,3]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,3,2]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,3,2]\), \(q=[2,1,4,3]\),
  • \(p=[1,4,3,2]\), \(q=[2,3,1,4]\),
  • \(p=[1,4,3,2]\), \(q=[3,1,2,4]\),
  • \(p=[2,3,4,1]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,1,3]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,3,1]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,3,1]\), \(q=[3,1,4,2]\),
  • \(p=[2,4,3,1]\), \(q=[3,2,1,4]\),
  • \(p=[2,4,3,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,2,4,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,1,2]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,2,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,2,1]\), \(q=[4,1,3,2]\),
  • \(p=[3,4,2,1]\), \(q=[4,2,1,3]\).

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\).

Во втором наборе перемещение любой машины не уменьшит неудобство гоночной трассы.

C. Машины соперников

битмаски математика Перебор поиск в глубину и подобное реализация Теория вероятностей *1900

После победы над соперником из Чёрного Списка вы получаете шанс вытянуть \(1\) из \(x\) доступных призовых карточек. Изначально \(x=3\) и доступны следующие карточки: Взятка, Освобождение от конфискации и Машина соперника. Изначально вероятность вытянуть их в случайной попытке равна \(c\), \(m\) и \(p\) соответственно. Также присутствует фактор изменчивости \(v\). Вы можете играть в гонки с соперником до тех пор, пока не вытяните карточку Машина соперника. Предположим, что вы выигрываете каждую гонку и получаете шанс тянуть призовую карточку. В каждом вытягивании вы достаете одну из \(x\) доступных карточек с соответствующей вероятностью. Пусть вы вытянули карточку и вероятность ее вытягивания до вашей попытки была равна \(a\). Тогда

  • Если это карточка Машина соперника, то игра для вас заканчивается и вы больше не можете участвовать в гонках.
  • Иначе
    1. Если \(a\leq v\), то вероятность вытянутой карточки становится равной \(0\) и она перестает быть доступной для последующих вытягиваний, уменьшая \(x\) на \(1\). Более того, освободившаяся вероятность \(a\) распределяется равномерно среди оставшихся доступных карточек.
    2. Если \(a > v\), вероятность вытянутой карточки уменьшается на \(v\), и освободившаяся вероятность распределяется равномерно среди остальных доступных карточек.

Например,

  • Если \((c,m,p)=(0.2,0.1,0.7)\) и \(v=0.1\), то после вытягивания карточки Взятка новые вероятности будут равны \((0.1,0.15,0.75)\).
  • Если \((c,m,p)=(0.1,0.2,0.7)\) и \(v=0.2\), то после вытягивания карточки Взятка новые вероятности будут равны \((\text{Недоступна},0.25,0.75)\).
  • Если \((c,m,p)=(0.2, \text{Недоступна},0.8)\) и \(v=0.1\), то после вытягивания карточки Взятка новые вероятности будут равны \((0.1, \text{Недоступна} ,0.9)\).
  • Если \((c,m,p)=(0.1,\text{Недоступна},0.9)\) и \(v=0.2\), то после вытягивания карточки Взятка новые вероятности будут равны \((\text{Недоступна},\text{Недоступна},1.0)\).

Вам хочется заполучить машину соперника. Для этого вы должны найти математическое ожидание количества гонок, которые нужно пройти, чтобы вытянуть карточку Машина соперника.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит четыре действительных числа \(c\), \(m\), \(p\) и \(v\) (\(0 < c,m,p < 1\), \(c+m+p=1\), \(0.1\leq v\leq 0.9\)).

Гарантируется, что каждое из чисел \(c\), \(m\), \(p\) и \(v\) содержит не более \(4\)-х знаков после запятой.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую одно действительное число — математическое ожидание количества гонок, которые нужно пройти, чтобы вытянуть карточку Машина соперника.

Ответ будет считаться верным, если его абсолютная или относительная ошибка не будет превосходить \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри – \(b\). Ваш ответ считается правильным, если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Обозначим за C вытягивание карточки Взятка, за M — карточки Освобождение от конфискации, за P — карточки Машина соперника.

В первом наборе входных данных возможные последовательности вытягиваний представлены ниже:

  • P с вероятностью \(0.6\);
  • CP с вероятностью \(0.2\cdot 0.7 = 0.14\);
  • CMP с вероятностью \(0.2\cdot 0.3\cdot 0.9 = 0.054\);
  • CMMP с вероятностью \(0.2\cdot 0.3\cdot 0.1\cdot 1 = 0.006\);
  • MP с вероятностью \(0.2\cdot 0.7 = 0.14\);
  • MCP с вероятностью \(0.2\cdot 0.3\cdot 0.9 = 0.054\);
  • MCCP с вероятностью \(0.2\cdot 0.3\cdot 0.1\cdot 1 = 0.006\);
Поэтому математическое ожидание количества гонок равно \(1\cdot 0.6 + 2\cdot 0.14 + 3\cdot 0.054 + 4\cdot 0.006 + 2\cdot 0.14 + 3\cdot 0.054 + 4\cdot 0.006 = 1.532\).

Во втором наборе данных возможные последовательности вытягиваний представлены ниже -

  • P с вероятностью \(0.4\);
  • CP с вероятностью \(0.4\cdot 0.6 = 0.24\);
  • CMP с вероятностью \(0.4\cdot 0.4\cdot 1 = 0.16\);
  • MP с вероятностью \(0.2\cdot 0.5 = 0.1\);
  • MCP с вероятностью \(0.2\cdot 0.5\cdot 1 = 0.1\).

Поэтому математическое ожидание количества гонок равно \(1\cdot 0.4 + 2\cdot 0.24 + 3\cdot 0.16 + 2\cdot 0.1 + 3\cdot 0.1 = 1.86\).

D1. ПРС и криминальный список (простая версия)

битмаски интерактив Конструктив математика *1700

Это простая версия задачи. Единственное различие между простой и сложной версиями заключается в том, что в этой версии \(k=2\). Вы можете делать взломы, только если решили обе версии этой задачи.

Это интерактивная задача.

Для каждого десятичного числа есть соответствующая ему \(k\)-ичная запись. Цифры числа, записанного в \(k\)-ичной системе счисления, будем называть \(k\)-цифрами. Определим \(k\)-ичный XOR двух \(k\)-цифр \(a\) и \(b\) как \((a + b)\bmod k\).

\(k\)-ичный XOR двух \(k\)-ичных чисел равен числу, полученному попарным \(k\)-ичным XOR соответствующих \(k\)-цифр. \(k\)-ичный XOR двух десятичных чисел \(a\) и \(b\) обозначается \(a\oplus_{k} b\) и равен десятичному представлению \(k\)-ичного XOR \(a\) и \(b\), записанных в \(k\)-ичной системе счисления. Все числа, встречающиеся далее в условии, записаны в десятичной системе счисления, если не указано иное. В случае \(k = 2\), что всегда верно для этой версии задачи, \(k\)-ичный XOR — это то же самое, что побитовое исключающее ИЛИ.

Вы взломали базу преступлений Полиции Рокпорт-Сити (ПРС), так же известную как Криминальный Список. Но, чтобы получить к ней доступ, вам нужен пароль. Вы его не знаете, но вполне уверены, что его значение лежит между \(0\) и \(n-1\) включительно. Вы решили угадать его. Вы можете сделать не более чем \(n\) попыток, далее система заблокируется. Система адаптивна – каждый раз, когда вы делаете неверную попытку, она меняет пароль. А именно, если до попытки пароль был равен \(x\) и вы попытались ввести другое число \(y\), то система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\). Угадайте пароль и взломайте систему.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных. Далее следует описание \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) (\(k=2\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Протокол взаимодействия

Для каждого набора входных данных считайте два целых числа \(n\) и \(k\). Вам разрешено сделать не более \(n\) попыток угадать пароль.

Для каждой попытки выведите одно целое число \(y\) (\(0\leq y\leq 2\cdot 10^7\)). Пусть текущий пароль равен \(x\). Считайте одно целое число \(r\).

Если \(x=y\), вы считаете \(r=1\), и этот набор входных данных считается решенным. Далее вы должны продолжить решать оставшиеся наборы.

Иначе вы считаете \(r=0\), и система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\).

После каждой попытки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы сделаете некорректную попытку или превысите лимит в \(n\) попыток, вы считаете \(r=-1\) вместо ответа и получите вердикт Неправильный ответ. В таком случае ваша программа должна немедленно завершается, чтобы избежать неопределенных вердиктов.

Обратите внимание, что система адаптивна. Это значит, что изначальный пароль не зафиксирован в начале и может зависеть от ваших запросов. Гарантируется, что в любой момент времени существует хотя бы один начальный пароль, для которого согласуются все ответы на запросы.

Взломы:

Для взломов используйте следующий формат:

Первая строка должна содержать одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных.

Первая и единственная строка каждого набора должна содержать два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) (\(k=2\)), равные соответственно количеству возможных попыток и основанию системы счисления. Оптимальный начальный пароль будет автоматически подобран системой.

Сумма \(n\) по всем наборам входных данных не должна превышать \(2\cdot 10^5\).

Примечание

В этом наборе входных данных загаданный пароль равен \(2\).

Первая попытка равна \(3\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(1\), поскольку \(2\oplus_2 1=3\).

Вторая попытка равна \(4\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(5\), поскольку \(1\oplus_2 5=4\).

Третья попытка равна \(5\). Это равно текущему паролю. Поэтому система возвращает ответ \(1\) и работа сделана.

Заметьте, что начальный пароль был взят таким для наглядности объяснения. В действительности система может повести себя иначе, поскольку она адаптивна.

D2. ПРС и криминальный список (сложная версия)

интерактив Конструктив математика Перебор *2200

Это сложная версия задачи. Единственное различие между простой и сложной версиями заключается в том, что здесь \(2\leq k\leq 100\). Вы можете делать взломы, только если решили обе версии этой задачи.

Это интерактивная задача!

Для каждого десятичного числа есть эквивалентное ему \(k\)-ичное. Цифры числа, записанного в \(k\)-ичной системе счисления, будем называть \(k\)-цифрами. Определим \(k\)-ичный XOR двух \(k\)-цифр \(a\) и \(b\) как \((a + b)\bmod k\).

\(k\)-ичный XOR двух \(k\)-ичных чисел равен новому числу, полученному из первых двух попарным \(k\)-ичным XOR соответствующих \(k\)-цифр. \(k\)-ичный XOR двух десятичных чисел \(a\) и \(b\) обозначается \(a\oplus_{k} b\) и равен десятичному представлению \(k\)-ичного XOR \(a\) и \(b\), записанных в \(k\)-ичной системе счисления. Все числа, встречающиеся далее в условии, записаны в десятичной системе счисления, если не указано иное.

Вы взломали базу преступлений Полиции Рокпорт-Сити (ПРС), так же известную как Криминальный Список. Но, чтобы получить к ней доступ, вам нужен пароль. Вы его не знаете, но вполне уверены, что его значение лежит между \(0\) и \(n-1\) включительно. Вы решили угадать его. Вы можете сделать не более чем \(n\) попыток, далее система заблокируется. Система адаптивна – каждый раз, когда вы делаете неверную попытку, она меняет пароль. А именно, если до попытки пароль был равен \(x\) и вы попытались ввести другое число \(y\), то система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\). Угадайте пароль и взломайте систему.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных. Далее следует описание \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) \((2\leq k\leq 100)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Протокол взаимодействия

Для каждого набора входных данных считайте два целых числа \(n\) и \(k\). Вам разрешено сделать не более \(n\) попыток угадать пароль.

Для каждой попытки выведите одно целое число \(y\) (\(0\leq y\leq 2\cdot 10^7\)). Пусть текущий пароль равен \(x\). Считайте одно целое число \(r\).

Если \(x=y\), вы считаете \(r=1\), и этот набор входных данных считается решенным. Далее вы должны продолжить решать оставшиеся наборы.

Иначе вы считаете \(r=0\), и система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\).

После каждой попытки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы сделаете некорректную попытку или превысите лимит в \(n\) попыток, вы считаете \(r=-1\) вместо ответа и получите вердикт Неправильный ответ. В таком случае ваша программа должна немедленно завершается, чтобы избежать неопределенных вердиктов.

Обратите внимание, что система адаптивна. Это значит, что изначальный пароль не зафиксирован в начале и может зависеть от ваших запросов. Гарантируется, что в любой момент времени существует хотя бы один начальный пароль, для которого согласуются все ответы на запросы.

Взломы:

Для взломов используйте следующий формат:

Первая строка должна содержать одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных.

Первая и единственная строка каждого набора должна содержать два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) (\(2\leq k\leq 100\)), равные соответственно количеству возможных попыток и основанию системы счисления. Оптимальный начальный пароль будет автоматически подобран системой.

Сумма \(n\) по всем наборам входных данных не должна превышать \(2\cdot 10^5\).

Примечание

Набор 1:

В этом наборе входных данных загаданный пароль равен \(2\).

Первая попытка равна \(3\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(1\), поскольку \(2\oplus_2 1=3\).

Вторая попытка равна \(4\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(5\), поскольку \(1\oplus_2 5=4\).

Третья попытка равна \(5\). Это равно текущему паролю. Поэтому система возвращает ответ \(1\) и работа сделана.

Набор 2:

В этом наборе входных данных загаданный пароль равен \(3\).

Первая попытка равна \(1\). Это не равно текущему паролю. Поэтому система возвращает \(0\) и меняет пароль на \(7\), поскольку \(3\oplus_3 7=1\). \([3=(10)_3\), \(7=(21)_3\), \(1=(01)_3\) и \((10)_3\oplus_3 (21)_3 = (01)_3]\).

Вторая попытка равна \(4\). Это не равно текущему паролю. Поэтому система возвращает \(0\) и меняет пароль на \(6\), поскольку \(7\oplus_3 6=4\). \([7=(21)_3\), \(6=(20)_3\), \(4=(11)_3\) and \((21)_3\oplus_3 (20)_3 = (11)_3]\).

Третья попытка равна \(6\). Это равно текущему паролю. Поэтому система возвращает ответ \(1\) и работа сделана.

Заметьте, что начальные пароли были взяты такими для наглядности объяснения. В действительности система может повести себя иначе, поскольку она адаптивна.

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]\) дадут этот же перенумерованный гиперкуб.

B. AquaMoon и шахматы

Комбинаторика математика *1900

Cirno дала AquaMoon шахматную доску размера \(1 \times n\). Ее клетки пронумерованы целыми числами от \(1\) до \(n\) слева направо. Изначально в некоторых клетках находится одна пешка, а остальные клетки свободны.

На каждой операции AquaMoon может выбрать клетку \(i\) с пешкой и сделать любую из следующих операций (если возможно):

  • Переместить пешку из нее в клетку \((i+2)\), если \(i+2 \leq n\), \((i+1)\)-я клетка занята пешкой, а \((i+2)\)-я клетка свободна.
  • Переместить пешку из нее в клетку \((i-2)\), если \(i-2 \geq 1\), \((i-1)\)-я клетка занята пешкой, а \((i-2)\)-я клетка свободна.

Дано изначальное состояние шахматной доски. AquaMoon хочет посчитать количество состояний, которые достижимы из начального состояния с помощью некоторой последовательности операций. Но она не очень хороша в программировании. Можете ли вы помочь ей? Поскольку ответ может быть большим, найдите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер шахматной доски.

Во второй строке находится строка, состоящая из \(n\) символов «0» или «1». Если \(i\)-й символ это «1», \(i\)-я клетка изначальна занята пешкой, иначе \(i\)-я клетка изначально свободна.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите количество состояний, которое может быть получено из начального с помощью некоторой последовательности операций по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных строки «1100», «0110» и «0011» могут быть получены из изначального состояния с помощью некоторой последовательности операций.

D. AquaMoon и неправильная координата

интерактив Конструктив математика *3000

Cirno дала AquaMoon задачу. Есть \(m\) человек, пронумерованных целыми числами от \(0\) до \(m - 1\). Они стоят на координатной прямой в точках с положительными целочисленными координатами. Они смотрят в направлении увеличения координат.

В этот момент все начинают бежать с фиксированной скоростью в направлении увеличения координат. Изначальная координата \(i\)-о человека на прямой это \(x_i\), а скорость \(i\)-о человека это \(v_i\). Поэтому координата \(i\)-о человека в момент времени \(t\) будет \(x_i + t \cdot v_i\).

Cirno запомнила координаты всех \(m\) человек в \(k\) последовательных целочисленных моментах времени от \(0\) до \(k - 1\). В каждый момент координаты всех \(m\) человек были запомнены в произвольном порядке.

Чтобы сделать задачу более веселой, Cirno изменила одну из координат в момент времени \(y\) (\(0 < y < k-1\)) на другое целое число.

AquaMoon хочет найти момент времени \(y\) и изначальную координату \(p\) перед изменением. К сожалению, она совсем не программист. Поэтому она не смогла решить эту задачу. Можете ли вы помочь ей?

Входные данные

Эта задача сделана как интерактивная. Это означает, что ваше решение будет считывать входные данные, которые вывел интерактор. Однако, интерактор выведет полные входные данные в начале, и после этого вы должны будете вывести ответ. Поэтому вы должны решать задачу так, как если бы вы решали обычную, не интерактивную задачу, потому что у вас не будет никакого процесса взаимодействия. Единственная вещь, про которую вы не должны забыть — это сбросить буфер выходного потока после вывода ответа. Иначе ваше решение может получить вердикт «Решение «зависло»». Обратитесь к руководству по интерактивным задачам для более детальной информации про сброс буфера выходного потока.

В первой строке находится два целых числа \(m\) и \(k\) (\(5 \leq m \leq 1000\), \(7 \leq k \leq 1000\)) — количество человек и количество запомненных моментов.

Следующие \(k\) строк содержат запомненные координаты. \(i\)-я из этих строк содержит \(m\) целых чисел от \(1\) до \(10^6\) (включительно), обозначающих координаты, которые запомнила Cirno в момент времени \(i-1\).

Гарантируется, что входные данные валидные (то есть только одно целое число было изменено на другое в соответствии с условием задачи). Также гарантируется, что \(1 \le v_i \le 1000\) для всех \(1 \leq i \leq m\).

Формат теста для взлома:

В первой строке должно находиться два целых числа \(m\) и \(k\) (\(5 \leq m \leq 1000\), \(7 \leq k \leq 1000\)) — количество человек и количество запомненных моментов.

Во второй строке должно находиться \(m\) целых чисел \(x_0, x_1, \dots,x_{m - 1}\) (\(1 \le x_i \le 10^6\)), где \(x_i\) это изначальная координата \(i\)-о человека.

В третьей строке должно находиться \(m\) целых чисел \(v_0, v_1, \dots,v_{m - 1}\) (\(1 \le v_i \le 1000\)), где \(v_i\) это скорость \(i\)-о человека. Должно быть выполнено, что \(x_i + (k-1) v_i \leq 10^6\) для всех \(0 \leq i < m\).

Каждая из следующих \(k\) строк должна содержать \(m\) целых чисел. \(i\)-я строка должна содержать \(m\) различных целых чисел \(p_0, p_1, \ldots, p_{m-1}\) (\(0 \leq p_j < m\)). Их значение: \(j\)-е целое число во входных данных в момент времени \(i\) это координата человека \(p_{j}\).

В последней строке должно находиться три целых числа \(y\), \(i\), \(c\). Cirno поменяла координату \(i\)-о человека в момент времени \(y\) на \(c\) (\(1 \leq y \leq k-2\), \(0 \leq i \leq m - 1\), \(1 \leq c \leq 10^6\), \(c \neq x_i + y \cdot v_i\)).

Выходные данные

Выведите единственную строку с двумя целыми числами \(y\), \(p\) — момент времени, который содержит измененную координату и изначальная координата.

Примечание

В первом тесте изначальные координаты людей это \(9\), \(6\), \(6\), \(9\), \(9\) и их скорости это \(1\), \(2\), \(1\), \(1\), \(1\). Поэтому несложно заметить, что в момент времени \(4\) одна координата была изменена c \(13\) на \(12\).

Это первый тест, записанный в формате для взломов:


5 7
9 6 6 9 9
1 2 1 1 1
2 3 4 1 0
0 2 3 1 4
4 3 0 1 2
1 3 4 0 2
1 4 0 2 3
2 4 1 3 0
2 4 1 3 0
4 0 12

B. AquaMoon и украденная строка

интерактив математика *1200

У AquaMoon было \(n\) строк длины \(m\) каждая. \(n\) — нечетное число.

Когда AquaMoon отошла, Cirno попыталась разбить эти \(n\) строк на пары. После того, как она сделала \(\frac{n-1}{2}\) пару, она обнаружила, что осталась ровно одна строка без пары!

В гневе она перемешала каждую пару строк. Для каждой пары она выбрала некоторые позиции (хотя бы \(1\) и не более, чем \(m\)) и обменяла символы в двух строках этой пары на выбранных позициях.

Например, если \(m = 6\) и две строки «abcdef» и «xyzklm» в одной паре и Cirno выбрала позиции \(2\), \(3\) и \(6\) она поменяет 'b' с 'y', 'c' с 'z' и 'f' с 'm'. В результате строки станут «ayzdem» и «xbcklf».

Затем Cirno украла строку, оставшуюся без пары, и расположила все оставшиеся строки в некотором порядке.

AquaMoon обнаружила оставшуюся \(n-1\) строку в полном беспорядке. Также, она помнит изначальные \(n\) строк. Она хочет узнать, какую строку украли, но она не очень хороша в программировании. Можете ли вы помочь ей?

Входные данные

Эта задача сделана как интерактивная. Это означает, что ваше решение будет считывать входные данные, которые вывел интерактор. Однако, интерактор выведет полные входные данные в начале, и после этого вы должны будете вывести ответ. Поэтому вы должны решать задачу так, как если бы вы решали обычную, не интерактивную задачу, потому что у вас не будет никакого процесса взаимодействия. Единственная вещь, про которую вы не должны забыть — это сбросить буфер выходного потока после вывода ответа. Иначе ваше решение может получить вердикт «Решение «зависло»». Обратитесь к руководству по интерактивным задачам для более детальной информации про сброс буфера выходного потока.

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных содержится два целых числа \(n\), \(m\) (\(1 \leq n \leq 10^5\), \(1 \leq m \leq 10^5\)) — количество строк и длина каждой строки, соответственно.

Следующие \(n\) строк каждая содержат строку длины \(m\), описывающую изначальные \(n\) строк. Все строки состоят из символов латинского алфавита в нижнем регистре.

Следующая \(n-1\) строка каждая содержит строку длины \(m\), описывающую строки, после того, как Cirno сделала обмены и переставила их.

Гарантируется, что \(n\) нечетно и что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^5\).

Формат теста для взлома:

В первой строке должно находиться единственное целое число \(t\). После этого должно следовать описание \(t\) наборов входных данных в следующем формате:

В первой строке должно находиться два целых числа \(n\) и \(m\).

В следующих \(n\) строках должны быть записаны \(n\) строк длины \(m\), описывающих изначальные строки.

Следующие \(\frac{n-1}{2}\) строк должны описывать пары. Каждая должна содержать в следующем порядке: индекс первой строки \(i\) (\(1 \leq i \leq n\)), индекс второй строки \(j\) (\(1 \leq j \leq n\), \(i \neq j\)), количество позиций для обмена \(k\) (\(1 \leq k \leq m\)) и список из \(k\) позиций, в которых будет сделан обмен (\(k\) различных индексов от \(1\) до \(m\) в любом порядке).

В последней строке должна находиться перестановка из целых чисел от \(1\) до \(n\), описывающая способ, которым строки будут перемешаны. Строки будут расположены в том порядке, в котором индексы следуют в перестановке, индекс украденной строки при этом будет пропущен.

Выходные данные

Для каждого набора входных данных выведите украденную строку в единственной строке.

Примечание

В первом наборе входных данных в строках «aaaaa» и «bbbbb» обменяли все позиции и «ccccc» является украденной строкой.

Во втором наборе входных данных в строках «aaaa» и «bbbb» обменяли первые две позиции и «cccc» является украденной строкой.

Это первый тест, записанный в формате для взломов:


3
3 5
aaaaa
bbbbb
ccccc
1 2 5 1 2 3 4 5
2 1 3
3 4
aaaa
bbbb
cccc
1 2 2 1 2
2 1 3
5 6
abcdef
uuuuuu
kekeke
ekekek
xyzklm
1 5 3 2 3 6
2 4 3 2 4 6
5 4 1 2 3

A. Кратчайший путь с препятствием

математика реализация *800

На бесконечном клетчатом поле отмечены три различные клетки: \(A\), \(B\) и \(F\). Выведите длину кратчайшего пути из \(A\) в \(B\), если:

  • за один ход можно переходить на любую из четырех соседних по стороне клеток;
  • посещать клетку \(F\) — запрещено (она является препятствием).
Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных, перед каждым из них входные данные содержат пустую строку.

Каждый набор входных данных состоит из трех строк. Первая из них содержит два целых числа \(x_A, y_A\) (\(1 \le x_A, y_A \le 1000\)) — координаты стартовой клетки \(A\). Вторая из них содержит два целых числа \(x_B, y_B\) (\(1 \le x_B, y_B \le 1000\)) — координаты конечной клетки \(B\). Третья строка содержит два целых числа \(x_F, y_F\) (\(1 \le x_F, y_F \le 1000\)) — координаты клетки \(F\), которая является препятствием. Все три клетки — различны.

Координата \(x\) соответствует номеру столбца, а \(y\) — номеру строки (см. картинки ниже).

Выходные данные

Выведите \(t\) строк. \(i\)-я из них должна содержать ответ для \(i\)-го набора входных данных — длину кратчайшего пути из клетки \(A\) в клетку \(B\), если клетка \(F\) запрещена для посещения.

Примечание
Пример возможного кратчайшего пути для первого набора входных данных.
Пример возможного кратчайшего пути для второго набора входных данных.

B. У чисел есть друзья

Бинарный поиск математика разделяй и властвуй Структуры данных теория чисел *1800

Британский математик Джон Литлвуд однажды высказался об индийском математике Сринивасе Рамануджане: «каждое натуральное число было его личным другом».

Оказывается, натуральные числа могут также дружить друг с другом! Вам дан массив \(a\) из различных натуральных чисел.

Будем называть подмассив \(a_i, a_{i+1}, \ldots, a_j\) группой друзей тогда и только тогда, когда существует целое число \(m \ge 2\) такое, что \(a_i \bmod m = a_{i+1} \bmod m = \ldots = a_j \bmod m\), где \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Ваш друг Грегор хочет знать размер наибольшей группы друзей в \(a\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 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}^{18}\)) – содержимое массива \(a\). Гарантируется, что все числа в \(a\) различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных меньше \(2\cdot 10^5\).

Выходные данные

Ваш вывод должен состоять из \(t\) строк. Каждая строка должна содержать одно целое число — размер наибольшей группы друзей из \(a\).

Примечание

В первом наборе массив равен \([1,5,2,4,6]\). Наибольшая группа друзей здесь \([2,4,6]\), потому что все эти числа сравнимы с \(0\) по модулю \(2\), таким образом \(m=2\).

В первом наборе массив равен \([8,2,5,10]\). Наибольшая группа друзей здесь \([8,2,5]\), потому что все эти числа сравнимы с \(2\) по модулю \(3\), таким образом \(m=3\).

В третьем наборе наибольшая группа друзей равна \([1000,2000]\). Существует несколько возможных подходящих значений \(m\).

C. Три поросенка

бпф дп Комбинаторика математика *2500

Делегации трех поросят со всего мира едут на конференцию! Каждую минуту новая тройка поросят прибывает в конференц-зал. После \(n\)-й минуты конференция завершается.

Большой злой волк узнал об этой конференции и запланировал атаку. В определенную минуту конференции он ворвется в зал, съест ровно \(x\) поросят и убежит.

Волк попросил Грегора помочь ему найти количество возможных планов для атаки, в которых он съест ровно \(x\) поросят, для различных значений \(x\) (\(1 \le x \le 3n\)). Два плана для атаки считаются различными, если атака происходит в различное время, или съедаются различные подмножества поросят.

Обратите внимание, что все запросы независимы, то есть в действительности волк не ест поросят, а только строит планы!

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 10^6\), \(1 \le q \le 2\cdot 10^5\)) — количество минут, которые продлится конференция, и количество запросов, которые сделает волк.

Следующие \(q\) строк содержат по одному целому числу \(x_i\) (\(1 \le x_i \le 3n\)) – количество поросят, которых съест волк в \(i\)-м запросе.

Выходные данные

Вы должны вывести \(q\) строк. В \(i\)-й строке должно содержаться количество планов для атаки, если волк хочет съесть \(x_i\) поросят. Выведите каждый ответ по модулю \(10^9+7\).

Примечание

В приведенном примере \(n=2\). Таким образом, на минуте \(1\) в конференц-зале присутствуют \(3\) поросенка, на минуте \(2\)\(6\) поросят. Даны три запроса: \(x=1\), \(x=5\) и \(x=6\).

Если волк хочет съесть \(1\) поросенка, он может сделать это, используя \(3+6=9\) возможных планов для атаки в зависимости от того, на какой минуте (\(1\) или \(2\)) он прибудет.

Если волк хочет съесть \(5\) поросят, он не может прибыть на минуте \(1\), поскольку в это время в зале недостаточно поросят. Поэтому волк должен прибыть на минуте \(2\) — тогда существует \(6\) возможных планов для атаки.

Если волк хочет съесть \(6\) поросят, то его единственным планом является прибыть к концу конференции и поглотить всех.

Не забудьте выводить ответы по модулю \(10^9+7\)!

D1. Грегор и нечетные коровы (простая версия)

битмаски геометрия математика теория чисел *2300

Это простая версия задачи. Единственное отличие от сложной версии заключается в том, что в данной версии все координаты — четные числа.

Даны \(n\) столбов, расположенных в различных точках на плоскости. Гарантируется, что никакие три столба не лежат на одной прямой.

На плоскости также есть бесконечное количество коров, по одной в каждой точке с целочисленными координатами.

Грегор — член общества иллюминатов и хочет построить треугольный загон, соединив \(3\) различных существующих столба забором. Корова, находящаяся строго внутри загона, считается огражденной. Если ограждено нечётное число коров, и при этом площадь загона равна целому числу, то загон считается интересным.

Найдите количество интересных загонов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 6000\)) — количество столбов, которые Грегор может выбрать в качестве вершин загона.

Следующие \(n\) строк содержат по два целых числа \(x\) и \(y\) (\(0 \le x,y \le 10^7\), \(x\) и \(y\) — четные числа), где \((x,y)\) — координата очередного столба. Все столбы расположены в различных точках. Никакие три столба не лежат на одной прямой.

Выходные данные

Напечатайте одно целое число — количество интересных загонов. Два загона считаются различными, если они образованы различными множествами трех столбов.

Примечание

В первом примере существует только \(1\) загон. Этот загон является интересным, поскольку его площадь равна \(4\) и есть \(1\) пойманная корова, помеченная красным.

Во втором примере есть \(3\) интересных забора.

  • \((0,0)\)\((30,14)\)\((2,10)\)
  • \((2,16)\)\((30,14)\)\((2,10)\)
  • \((30,14)\)\((4,6)\)\((2,10)\)

D2. Грегор и нечетные коровы (сложная версия)

геометрия математика Перебор теория чисел *3300

Это сложная версия задачи. Единственное отличие от простой версии заключается в том, что в данной версии координаты могут быть как чётными, так и нечётными.

Даны \(n\) столбов, расположенных в различных точках на плоскости. Гарантируется, что никакие три столба не лежат на одной прямой.

На плоскости также есть бесконечное количество коров, по одной в каждой точке с целочисленными координатами.

Грегор — член общества иллюминатов и хочет построить треугольный загон, соединив \(3\) различных существующих столба забором. Корова, находящаяся строго внутри загона, считается огражденной. Если ограждено нечётное число коров, и при этом площадь загона равна целому числу, то загон считается интересным.

Найдите количество интересных загонов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 6000\)) — количество столбов, которые Грегор может выбрать в качестве вершин загона.

Следующие \(n\) строк содержат по два целых числа \(x\) и \(y\) (\(0 \le x,y \le 10^7\), где \((x,y)\) — координата очередного столба. Все столбы расположены в различных точках. Никакие три столба не лежат на одной прямой.

Выходные данные

Напечатайте одно целое число — количество интересных загонов. Два загона считаются различными, если они образованы различными множествами трех столбов.

Примечание

В первом примере существует только \(1\) загон. Этот загон является интересным, поскольку его площадь равна \(4\) и есть \(1\) пойманная корова, помеченная красным.

Во втором примере существует \(4\) возможных загона. Однако, только один из них является интересным. Этот загон имеет площадь, равную \(8\), и \(5\) пойманных коров.

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\) плохо покрашенных области.

A. Грегор и криптография

математика теория чисел *800

Грегор изучает RSA — известный алгоритм криптографии, и несмотря на то, что он пока не понимает, как работает RSA, он очаровался простыми числами и работой с ними.

Любимое простое число Грегора равно \(P\). Грегор хочет найти два основания \(P\). Формально, Грегор хочет найти два целых числа \(a\) и \(b\), удовлетворяющих двум следующим условиям.

  • \(P \bmod a = P \bmod b\), где \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\), и
  • \(2 \le a < b \le P\).

Помогите Грегору найти два основания его любимого простого числа!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 1000\)).

Каждая последующая строка содержит одно целое число \(P\) (\(5 \le P \le {10}^9\)), где \(P\) гарантированно простое.

Выходные данные

Вывод должен состоять из \(t\) строк. Каждая строка должна содержать два целых числа \(a\) и \(b\) (\(2 \le a < b \le P\)). Если существует несколько решений, выведите любое.

Примечание

В первом примере \(P=17\). \(a=3\) и \(b=5\) допустимые основания, потому что \(17 \bmod 3 = 17 \bmod 5 = 2\). Существуют другие допустимые пары.

Во втором примере \(P=5\), единственное решение здесь — \(a=2\) и \(b=4\).

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\) очков.

D. Отличные массивы

Бинарный поиск Комбинаторика Конструктив математика реализация сортировки *2300

Назовем целочисленный массив \(a_1, a_2, \dots, a_n\) хорошим, если \(a_i \neq i\) для всех \(i\).

Пусть \(F(a)\) — это количество пар \((i, j)\) (\(1 \le i < j \le n\)) таких, что \(a_i + a_j = i + j\).

Назовем массив \(a_1, a_2, \dots, a_n\) отличным если:

  • \(a\) — хороший;
  • \(l \le a_i \le r\) для всех \(i\);
  • \(F(a)\) максимально возможное среди всех хороших массивов размера \(n\).

Для заданных \(n\), \(l\) и \(r\) посчитайте количество отличных массивов по модулю \(10^9 + 7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы три целых числа \(n\), \(l\) и \(r\) (\(2 \le n \le 2 \cdot 10^5\); \(-10^9 \le l \le 1\); \(n \le r \le 10^9\)).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество отличных массивов по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных, можно показать, что максимальное \(F(a)\) среди всех хороших массивов \(a\) равно \(2\). Отличными являются следующие массивы:

  1. \([2, 1, 2]\);
  2. \([0, 3, 2]\);
  3. \([2, 3, 2]\);
  4. \([3, 0, 1]\).

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\) абсолютная величина любого числа быть не может.

D1. Домино (упрощённая версия)

Конструктив математика *1700

Единственное отличие этой задачи от задачи D2 состоит в том, что в этой задаче не нужно выводить способ построения ответа, но это необходимо делать в D2.

Рассмотрим прямоугольную таблицу размера \(n \times m\) (из \(n\) строк и \(m\) столбцов). Значение \(n \cdot m\) является чётным числом.

Доминошка — это фигура из двух клеток, имеющих общую сторону. Доминошка является горизонтальной, если одна из клеток находится правее другой, или вертикальной, если одна из клеток находится выше другой.

Необходимо узнать, возможно ли разместить на таблице \(\frac{nm}{2}\) доминошек таким образом, чтобы ровно \(k\) из них были расположены горизонтально, остальные — вертикально. Доминошки не должны пересекаться, и на таблице не должно оставаться незанятых ячеек.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки. Строка содержит три целых числа — \(n\), \(m\), \(k\) (\(1 \le n,m \le 100\), \(0 \le k \le \frac{nm}{2}\), \(n \cdot m\) — чётно) — количество строк, столбцов в таблице и горизонтальных доминошек соответственно.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите «YES», если возможно расположить доминошки описанным способом, иначе — «NO».

Каждую букву можно выводить в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

D2. Домино (усложнённая версия)

Конструктив математика реализация *2100

Единственное отличие этой задачи от задачи D1 состоит в том, что в задаче D1 не нужно выводить способ построения ответа, но это необходимо делать в этой задаче.

Рассмотрим прямоугольную таблицу размера \(n \times m\) (из \(n\) строк и \(m\) столбцов). Значение \(n \cdot m\) является чётным числом.

Доминошка — это фигура из двух клеток, имеющих общую сторону. Доминошка является горизонтальной, если одна из клеток находится правее другой, или вертикальной, если одна из клеток находится выше другой.

В этой таблице необходимо разместить \(\frac{nm}{2}\) доминошек таким образом, чтобы ровно \(k\) из них были расположены горизонтально, остальные — вертикально. Доминошки не должны пересекаться, и на таблице не должно оставаться незанятых ячеек.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки. Строка содержит три целых числа — \(n\), \(m\), \(k\) (\(1 \le n,m \le 100\), \(0 \le k \le \frac{nm}{2}\), \(n \cdot m\) — чётно) — количество строк, столбцов в таблице и горизонтальных доминошек соответственно.

Выходные данные

Для каждого набора входных данных выведите:

  • «NO», если невозможно расположить доминошки описанным способом;
  • в противном случае в первой строке, соответствующей набору входных данных, выведите «YES», далее выведите \(n\) строк, каждая из которых содержит по \(m\) символов — описание расположения доминошек на таблице. Каждая ячейка таблицы должна быть помечена строчной буквой латинского алфавита таким образом, чтобы любые две имеющие общую сторону клетки были помечены одинаковыми буквами тогда и только тогда, когда на них размещена одна и та же доминошка. Иными словами, обе части одной доминошки должны быть помечены одинаковой буквой, но две доминошки, соседние по стороне, должны быть помечены разными буквами. Если существует несколько решений, выведите любое из них.

D. Массив как разность

битмаски графы дп Конструктив математика Перебор поиск в глубину и подобное *1800

Вам дана последовательность из \(n\) целых чисел \(a_1, \, a_2, \, \dots, \, a_n\).

Существует ли последовательность из \(n\) целых чисел \(b_1, \, b_2, \, \dots, \, b_n\) такая, что выполняется следующее свойство?

  • Для каждого \(1 \le i \le n\) существуют два (не обязательно различных) индекса \(j\) и \(k\) (\(1 \le j, \, k \le n\)) такие, что \(a_i = b_j - b_k\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, \, \dots, \, a_n\) (\(-10^5 \le a_i \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую YES, если существует последовательность \(b_1, \, \dots, \, b_n\), удовлетворяющая требуемому свойству, и NO в противном случае.

Примечание

В первом наборе входных данных, последовательность \(b = [-9, \, 2, \, 1, \, 3, \, -2]\) удовлетворяет свойству. Действительно, имеет место следующее:

  • \(a_1 = 4 = 2 - (-2) = b_2 - b_5\);
  • \(a_2 = -7 = -9 - (-2) = b_1 - b_5\);
  • \(a_3 = -1 = 1 - 2 = b_3 - b_2\);
  • \(a_4 = 5 = 3 - (-2) = b_4 - b_5\);
  • \(a_5 = 10 = 1 - (-9) = b_3 - b_1\).

Во втором наборе входных данных достаточно выбрать \(b = [0]\), так как \(a_1 = 0 = 0 - 0 = b_1 - b_1\).

В третьем наборе входных данных можно показать, что никакая последовательность \(b\) длины \(3\) не удовлетворяет свойству.

I. Организовываем музыкальный фестиваль

математика поиск в глубину и подобное *3400

Вы являетесь организатором известного «Цюрихского музыкального фестиваля». На фестивале будут выступать \(n\) певцов, обозначенных целыми числами \(1\), \(2\), \(\dots\), \(n\). Вы должны выбрать, в каком порядке они будут выступать на сцене.

У вас есть \(m\) друзей, и у каждого из них есть набор любимых исполнителей. Для каждого \(1\le i\le m\), \(i\)-му другу нравятся певцы \(s_{i,1}, \, s_{i, 2}, \, \dots, \,s_{i, q_i}\).

Ваш друг счастлив, если певцы, которые ему нравятся, выступают последовательно (в произвольном порядке). Порядок выступления певцов является правильным, если он делает счастливыми всех ваших друзей.

Вычислите количество правильный порядков выступлений по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1\le n,\,m\le 100\)) — количество певцов и количество друзей соответственно.

В \(i\)-й из следующих \(m\) строк содержится целое число \(q_i\) (\(1\le q_i\le n\)) — количество любимых певцов \(i\)-го друга — за которым следуют \(q_i\) целых чисел \(s_{i,1}, \, s_{i, 2}, \, \dots, \,s_{i, q_i}\) (\(1\le s_{i,1}<s_{i,2}<\cdots<s_{i,q_i}\le n\)) — номера его любимых певцов.

Выходные данные

Выведите количество правильный порядков выступлений по модулю \(998\,244\,353\).

Примечание

Объяснение первого примера: Есть \(3\) певца и только \(1\) друг. Другу нравятся два певца \(1\) и \(3\). Таким образом, \(4\) правильных порядка:

  • 1 3 2
  • 2 1 3
  • 2 3 1
  • 3 1 2

Объяснение второго примера: Есть \(5\) певцов и \(5\) друзей. Можно показать, что правильных порядков нет.

Пояснение третьего примера: Есть \(100\) певцов и только \(1\) друг. Другу нравится только певец \(50\), следовательно, все \(100!\) возможных порядков правильны.

Пояснение четвертого примера: Есть \(5\) певцов и только \(1\) друг. Другу нравятся все певцы, следовательно, все \(5!=120\) возможных порядков правильны.

A. Сумма цифр

математика теория чисел *800

Пусть \(S(x)\) — это сумма цифр числа \(x\), записанного в десятичной системе счисления. Например, \(S(5) = 5\), \(S(10) = 1\), \(S(322) = 7\).

Мы будем называть число \(x\) интересным, если \(S(x + 1) < S(x)\). В каждом тесте вам будет дано одно число \(n\). Ваша задача — посчитать количество чисел \(x\) таких, что \(1 \le x \le n\) и \(x\) — интересное.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Далее следуют \(t\) строк, \(i\)-я строка содержит одно целое число \(n\) (\(1 \le n \le 10^9\)) для \(i\)-го набора входных данных.

Выходные данные

Выведите \(t\) целых чисел, \(i\)-е число должно быть ответом на \(i\)-й набор входных данных.

Примечание

Первым интересным числом является \(9\).

E. Сдвиг перестановки

графы Комбинаторика Конструктив математика Перебор поиск в глубину и подобное снм *2100

Тождественная перестановка длины \(n\) — это массив \([1, 2, 3, \dots, n]\).

Мы применили следующие операции к тождественной перестановке длины \(n\):

  • Вначале мы циклически сдвинули ее вправо на \(k\) позиций, где \(k\) вам неизвестно (вы знаете только то, что \(0 \le k \le n - 1\)). При циклическом сдвиге массива вправо на \(k\) позиций необходимо взять \(k\) последних элементов исходного массива (не меняя их относительный порядок) и дописать \(n - k\) первых элементов исходного массива справа от них (также не меняя относительный порядок этих \(n - k\) элементов). Например, если бы мы циклически сдвинули тождественную перестановку длины \(6\) на \(2\) позиции вправо, мы бы получили массив \([5, 6, 1, 2, 3, 4]\);
  • Далее мы выполнили следующую операцию не более \(m\) раз: выбрали два элемента массива и поменяли их местами.

Вам даны \(n\) и \(m\), а также полученный массив. Ваша задача — найти все возможные значения \(k\) в операции циклического сдвига.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками. Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 3 \cdot 10^5\); \(0 \le m \le \frac{n}{3}\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), каждое целое число от \(1\) до \(n\) встречается в последовательности ровно один раз) — полученный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • Вначале выведите одно целое число \(r\) (\(0 \le r \le n\)) — количество возможных значений \(k\) в операции циклического сдвига;
  • Далее выведите \(r\) целых чисел \(k_1, k_2, \dots, k_r\) (\(0 \le k_i \le n - 1\)) — все возможные значения \(k\) в возрастающем порядке.
Примечание

Рассмотрим примеры из условия.

  • В первом наборе входных данных единственное возможное значение для циклического сдвига это \(3\). Если мы сдвинем \([1, 2, 3, 4]\) на \(3\) позиции, мы получим \([2, 3, 4, 1]\). Далее мы можем поменять \(3\)-й и \(4\)-й элементы местами, чтобы получить массив \([2, 3, 1, 4]\);
  • Во втором наборе единственное возможное значение для циклического сдвига это \(0\). Если мы сдвинем \([1, 2, 3]\) на \(0\) позиций, мы получим \([1, 2, 3]\). Далее мы не производим операций обмена (так как нам разрешено совершить не более \(1\)-го обмена), таким образом, полученный массив остается равным \([1, 2, 3]\);
  • В третьем наборе все значения от \(0\) до \(2\) допустимы для циклического сдвига:
    • если мы сдвинем \([1, 2, 3]\) на \(0\) позиций, мы получим \([1, 2, 3]\). Далее мы можем поменять \(1\)-й и \(3\)-й элементы, чтобы получить \([3, 2, 1]\);
    • если мы сдвинем \([1, 2, 3]\) на \(1\) позицию, мы получим \([3, 1, 2]\). Далее мы можем поменять \(2\)-й и \(3\)-й элементы, чтобы получить \([3, 2, 1]\);
    • если мы сдвинем \([1, 2, 3]\) на \(2\) позиции, мы получим \([2, 3, 1]\). Далее мы можем поменять \(1\)-й и \(2\)-й элементы, чтобы получить \([3, 2, 1]\);
  • В четвертом наборе входных данных операции обмена запрещены, однако ни один циклический сдвиг не равен массиву \([1, 2, 3, 4, 6, 5]\).

F. Попарные остатки

математика Структуры данных *2300

У вас есть массив \(a\), состоящий из \(n\) различных положительных целых чисел, пронумерованных от \(1\) до \(n\). Определим \(p_k\) как \(\)p_k = \sum_{1 \le i, j \le k} a_i \bmod a_j,\(\)

где \(x \bmod y\) обозначает остаток при делении \(x\) на \(y\). От вас требуется найти и вывести \(p_1, p_2, \ldots, p_n\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину массива.

Вторая строка содержит \(n\) различных целых чисел \(a_1, \ldots, a_n\) (\(1 \le a_i \le 3 \cdot 10^5\), \(a_i \neq a_j\), если \(i \neq j\)).

Выходные данные

Выведите \(n\) целых чисел \(p_1, p_2, \ldots, p_n\).

G. Граф общих делителей

графы Конструктив математика Перебор снм теория чисел хэши *2700

Рассмотрим последовательность различных целых чисел \(a_1, \ldots, a_n\), каждое из которых соответствует отдельной вершине графа. Будем соединять две вершины ребром, если соответствующие им числа не взаимно просты, т. е. если они имеют общий делитель, больший чем \(1\).

Вам даны \(q\) запросов, в каждом запросе вы хотите попасть из вершины, соответствующей значению \(a_s\), в вершину, соответствующую \(a_t\). Для того чтобы это сделать, вы можете выбирать существующее значение \(a_i\), создать новую вершину со значением \(a_{n+1} = a_i \cdot (1 + a_i)\) и соединить ее со всеми вершинами, значения которых не взаимно просты с \(a_{n+1}\). После этого \(n\) увеличивается на \(1\). Вы можете повторять эту операцию любое количество раз, удлиняя последовательность, и, возможно, получая одинаковые значения. Какое минимальное количество вершин нужно добавить, чтобы \(a_t\) стало достижимо из \(a_s\)?

Обратите внимание, что запросы независимы. В каждом запросе вы начинаете с исходной последовательности \(a\), заданной во входных данных.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \leq n \leq 150\,000\), \(1 \leq q \leq 300\,000\)) — размер исходной последовательности и количество запросов.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(2 \leq a_i \leq 10^6\), \(a_i \neq a_j\), если \(i \ne j\)).

\(j\)-я из следующих \(q\) строк содержит два различных целых числа \(s_j\) и \(t_j\) (\(1 \leq s_j, t_j \leq n\), \(s_j \neq t_j\)) — индексы вершин для \(j\)-го запроса.

Выходные данные

Выведите \(q\) строк. \(j\)-я строка должна содержать одно целое число: минимальное количество вершин, которое нужно добавить, чтобы можно было достичь \(a_{s_j}\) из \(a_{t_j}\).

Примечание

В первом примере вы можете добавить вершину со значением \(2 \cdot 3 = 6\), или \(10 \cdot 11 = 110\), или \(3 \cdot 4 = 12\). Ни одно из этих добавлений не нужно в первом запросе, так как вы уже можете добраться из \(a_1 = 2\) в \(a_2 = 10\).

Во втором запросе оптимальным является добавление вершины со значением \(6\) или \(12\). Например, добавляя вершину со значением \(6\), мы сможем добраться из \(a_1 = 2\) в \(a_3 = 3\) по пути со значениями \((2, 6, 3)\).

В последнем запросе второго примера мы хотим добраться из \(a_3 = 7\) в \(a_5 = 25\). Одним из возможных способов достичь это является создание вершины со значением \(6 \cdot 7 = 42\), а затем создание вершины со значением \(25 \cdot 26 = 650\). В финальном графе, состоящем из 7 вершин, существует путь из \(a_3 = 7\) в \(a_5 = 25\).

I. Лестницы

бпф дп Комбинаторика математика разделяй и властвуй *3400

Для перестановки \(p\) чисел от \(1\) до \(n\) мы можем задать лестничный массив \(a\) следующим образом: \(a_i\) равняется длине наибольшего подотрезка перестановки, который содержит позицию \(i\) и состоит из последовательных чисел в отсортированном порядке: \([x, x+1, \ldots, y-1, y]\) или \([y, y-1, \ldots, x+1, x]\) для некоторых \(x \leq y\). Например, для перестановки \(p = [4, 1, 2, 3, 7, 6, 5]\) получается лестничный массив \(a = [1, 3, 3, 3, 3, 3, 3]\).

Вам дан массив \(a\). Ваша задача — посчитать количество перестановок, лестничный массив которых равен \(a\). Так как это количество может быть достаточно большим, посчитайте его по модулю \(998\,244\,353\). Обратите внимание, что количество может быть равно нулю.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину лестничного массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Выходные данные

Выведите количество перестановок, лестничный массив которых равен \(a\). Так как это число может быть довольно большим, выведите его по модулю \(998\,244\,353\).

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\).

E. Вы

дп математика поиск в глубину и подобное теория чисел *2600

Вам дано дерево с \(n\) вершинами. Напомним, что дерево — это связный неориентированный граф без циклов.

Пусть \(a_1, a_2, \ldots, a_n\) — последовательность целых чисел. Выполним следующую операцию ровно \(n\) раз:

  • Выберем неудаленную вершину \(u\). Присвоим \(a_u :=\) количество неудаленных вершин, соседних с \(u\). Затем удалим вершину \(u\) вместе со всеми ребрами, концом которых она является.

Для каждого целого числа \(k\) от \(1\) до \(n\) найдите по модулю \(998\,244\,353\) количество различных последовательностей \(a_1, a_2, \ldots, a_n\), удовлетворяющих следующим условиям:

  • можно получить \(a\), выполнив вышеупомянутую операцию ровно \(n\) раз в некотором порядке.
  • \(\operatorname{gcd}(a_1, a_2, \ldots, a_n) = k\). Здесь \(\operatorname{gcd}\) означает наибольший общий делитель элементов в \(a\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\))  — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)).

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)), указывающих на наличие ребра между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в одной строке \(n\) целых чисел, где для каждого \(k\) от \(1\) до \(n\) \(k\)-е целое число обозначает ответ, когда \(\operatorname{gcd}\) равен \(k\).

Примечание

В первом наборе входных данных дерево изображено на рисунке.

  • Если мы удалим вершины в порядке \(1 \rightarrow 2 \rightarrow 3\) или \(1 \rightarrow 3 \rightarrow 2\), то полученная последовательность будет \(a = [2, 0, 0]\), которая имеет \(\operatorname{gcd}\), равный \(2\).
  • Если удалить узлы в порядке \(2 \rightarrow 1 \rightarrow 3\), то полученная последовательность будет \(a = [1, 1, 0]\), \(\operatorname{gcd}\) которой равен \(1\).
  • Если удалить узлы в порядке \(3 \rightarrow 1 \rightarrow 2\), то полученная последовательность будет \(a = [1, 0, 1]\), \(\operatorname{gcd}\) которой равен \(1\).
  • Если удалить узлы в порядке \(2 \rightarrow 3 \rightarrow 1\) или \(3 \rightarrow 2 \rightarrow 1\), то полученная последовательность будет \(a = [0, 1, 1]\), \(\operatorname{gcd}\) которой равен \(1\).

Обратите внимание, что здесь мы считаем количество различных последовательностей, а не количество различных порядков удаления узлов.

A. PizzaForces

математика Перебор *900

PizzaForces — любимая пиццерия Пети. В PizzaForces готовят и продают пиццы трех размеров: маленькая пицца состоит из \(6\) кусочков, средняя — из \(8\), а большая — из \(10\). На приготовление маленькой, средней или большой пиццы уходит \(15\), \(20\) или \(25\) минут, соответственно.

Сегодня у Пети день рождения, и к нему придут \(n\) его друзей, поэтому он решил сделать заказ из своей любимой пиццерии. Петя хочет заказать столько пиццы, чтобы каждому из друзей достался хотя бы один кусочек пиццы. Время приготовления заказа — это суммарное время приготовления всех пицц в заказе.

Ваша задача — определить минимальное количество минут, которое необходимо для приготовления пицц, содержащих суммарно хотя бы \(n\) кусочков. Например:

  • если \(12\) друзей придут к Пете, он должен сделать заказ, состоящий хотя бы из \(12\) кусочков. Он может заказать две маленьких пиццы, в которых ровно \(12\) кусочков, и время их приготовления — \(30\) минут;
  • если \(15\) друзей придут к Пете, он должен сделать заказ, состоящий хотя бы из \(15\) кусочков. Он может заказать одну маленькую пиццу и одну большую, и получится \(16\) кусочков. Время приготовления в таком случае будет \(40\) минут;
  • если \(300\) друзей придут к Пете, он должен сделать заказ, состоящий хотя бы из \(300\) кусочков. Он может заказать \(15\) маленьких пицц, \(10\) средних и \(13\) больших, суммарно они состоят из \(15 \cdot 6 + 10 \cdot 8 + 13 \cdot 10 = 300\) кусочков, и на их приготовление потребуется \(15 \cdot 15 + 10 \cdot 20 + 13 \cdot 25 = 750\) минут;
  • если к Пете придет только один друг, Петя может заказать одну маленькую пиццу, на приготовление которой уйдет \(15\) минут.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных, состоит из единственной строки, которая содержит одно целое число \(n\) (\(1 \le n \le 10^{16}\)) — количество друзей Пети.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество минут, которое необходимо для приготовления пицц, содержащих суммарно хотя бы \(n\) кусочков.

A. Операции бывают разные

математика *800

У Василия есть два числа \(a\) и \(b\), изначально равные нулю. Василий очень быстро научился делать с ними три различные операции. Перед выполнением каждой операции выбирается некоторое целое положительное число \(k\), с помощью которого производится одна из операций: (обратите внимание, что для каждой операции вы можете выбрать новое число \(k\))

  1. прибавить к \(a\) и \(b\) число \(k\), или
  2. прибавить к \(a\) число \(k\) и отнять от \(b\) число \(k\), или
  3. прибавить к \(b\) число \(k\) и отнять от \(a\) число \(k\).

Обратите внимание, что в результате выполнения операций, числа \(a\) и \(b\) могут становиться в том числе отрицательными.

Василий хочет узнать, какое минимальное количество операций ему потребуется совершить, чтобы число \(a\) стало равно числу \(c\), а число \(b\) стало равно \(d\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(c\) и \(d\) \((0 \le c, d \le 10^9)\) — числа, в которые Василий хочет преобразовать \(a\) и \(b\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которое потребуется Василию, чтобы число \(a\) стало равно \(c\), а \(b\) равно \(d\), или \(-1\), если невозможно добиться равенств, используя описанные операции.

Примечание

Продемонстрируем один из неоптимальных примеров получения пары чисел \((3, 5)\).

  • Используем операцию первого типа с \(k=1\), тогда текущая пара чисел будет равна \((1, 1)\).
  • Используем операцию третьего типа с \(k=8\), тогда текущая пара чисел будет равна \((-7, 9)\).
  • Используем операцию второго типа с \(k=7\), тогда текущая пара чисел будет равна \((0, 2)\).
  • Используем операцию первого типа с \(k=3\), тогда текущая пара чисел будет равна \((3, 5)\).

D. Попробуй угадай

битмаски интерактив Конструктив математика *1800

Это интерактивная задача.

Василий загадал некоторую последовательность чисел \(a_1, a_2, \dots, a_n\), но в целях безопасности он не хочет раскрывать вам ее полностью. Василий готов ответить не больше, чем на \(2 \cdot n\) следующих вопросов:

  • Чему равно значение побитового И двух элементов с индексами \(i\) и \(j\) (\(i \neq j\))
  • Чему равно значение побитового ИЛИ двух элементов с индексами \(i\) и \(j\) (\(i \neq j\))

Вы можете задать любые интересующие вас вопросы Василию и должны узнать \(k\)-е наименьшее число последовательности.

Формально \(k\)-е наименьшее число равно числу на \(k\)-й позиции в отсортированном по неубыванию массиве с 1-индексацией. Для примера, в массиве \([5, 3, 3, 10, 1]\) \(4\)-е наименьшее число будет равно \(5\), а \(2\)-е и \(3\)-е равны \(3\).

Входные данные

Гарантируется, что для каждого элемента из загаданной последовательности выполняется \(0 \le a_i \le 10^9\).

Протокол взаимодействия

В первой строке вам будет дано два целых числа \(n\) и \(k\) \((3 \le n \le 10^4, 1 \le k \le n)\) — количество элементов последовательности \(a\) и число \(k\).

Затем вы можете задать не более \(2 \cdot n\) вопросов (операция «finish» за вопрос не считается).

Каждая строка вашего вывода может быть одного из следующих типов:

  • «or i j» \((1 \le i, j \le n, i \neq j)\), где \(i\) и \(j\) — это индексы элементов, побитовый or которых вы хотите узнать.
  • «and i j» \((1 \le i, j \le n, i \neq j)\), где \(i\) и \(j\) — это индексы элементов, побитовый and которых вы хотите узнать.
  • «finish res», где \(res\) — это \(k\)-е наименьшее число в последовательности. После вывода такой строки необходимо завершить программу.

В ответ на первые два типа операций вы получите целое число \(x\) — результат интересующей вас операции для выбранных чисел.

После вывода каждой строки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «Решение зависло». Для сброса буфера используйте:

  • fflush(stdout) в языке C++
  • System.out.flush() в Java
  • stdout.flush() в Python
  • flush(output) в Pascal
  • смотрите документацию для других языков

Если вы сделаете некорректный запрос, то в ответ вы получите \(-1\). После получения ответа \(-1\), вы должны немедленно завершить свою программу, чтобы получить вердикт «Неправильный ответ».

Взломы

Чтобы совершить взлом, вам потребуется использовать следующий формат:

Первая строка должна содержать два целых числа \(n\) и \(k\) \((3 \le n \le 10^4, 1 \le k \le n)\) — количество элементов последовательности \(a\) и число \(k\).

Вторая строка должна содержать \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((0 \le a_i \le 10^9)\) — описание последовательностии \(a\).

Примечание

В тестовом примере загаданная последовательность выглядит следующим образом: \([1, 6, 4, 2, 3, 5, 4]\).

Ниже разобран протокол взаимодействия из примера.

Запрос (программа участника)Ответ (интерактор)Пояснение
and 2 52\(a_2=6\), \(a_5=3\). Интерактор возвращает побитовый И данных чисел.
or 5 67\(a_5=3\), \(a_6=5\). Интерактор возвращает побитовый ИЛИ данных чисел.
finish 5\(5\) является правильным ответом. Обратите внимание, что требуется найти значение, а не индекс k-го наименьшего числа.

F. Ставки на матчи

битмаски графы дп Комбинаторика математика Теория вероятностей *2500

Василий увлекается не только трейдингом, но и ставками на спортивные матчи. В матче участвует \(n\) спортивных команд. Каждая команда характеризуется силой \(a_i\). Каждые две команды \(i < j\) играют друг с другом ровно один раз. С вероятностью \(\frac{a_i}{a_i + a_j}\) побеждает команда \(i\), с вероятностью \(\frac{a_j}{a_i + a_j}\) побеждает команда \(j\).

Команда называется победителем, если она прямо или косвенно победила все остальные команды. Команда \(a\) победила (прямо или косвенно) команду \(b\), если существует последовательность команд \(c_1\), \(c_2\), ... \(c_k\) такая, что \(c_1 = a\), \(c_k = b\) и команда \(c_i\) выиграла матч у команды \(c_{i + 1}\) для всех \(i\) от \(1\) до \(k - 1\). Обратите внимание, что возможно, что команда \(a\) победила команду \(b\), и в то же время команда \(b\) победила команду \(a\).

Василий хочет, чтобы вы помогли ему определить математическое ожидание количества победителей.

Входные данные

В первой строке находится целое число \(n\) (\(1 \leq n \leq 14\)) — количество команд, участвующих в матче.

В следующей строке находится \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^6\)) — силы команд, участвующих в матче.

Выходные данные

Выведите единственное целое число — математическое ожидание количества победителей турнира по модулю \(10^9 + 7\).

Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Чтобы лучше понять, в каких ситуациях возможно несколько победителей, рассмотрим второй тест:

Одним из возможных результатов сыгранных матчей является следующий (\(a \rightarrow b\) означает, что \(a\) выиграла матч у \(b\)):

  • \(1 \rightarrow 2\)
  • \(2 \rightarrow 3\)
  • \(3 \rightarrow 1\)
  • \(1 \rightarrow 4\)
  • \(1 \rightarrow 5\)
  • \(2 \rightarrow 4\)
  • \(2 \rightarrow 5\)
  • \(3 \rightarrow 4\)
  • \(3 \rightarrow 5\)
  • \(4 \rightarrow 5\)

Или более наглядно на рисунке:

В данном варианте каждая команда из множества \(\{ 1, 2, 3 \}\) прямо или косвенно победила всех. То есть:

  • \(1\)-я победила всех, так как до остальных можно добраться следующим образом \(1 \rightarrow 2\), \(1 \rightarrow 2 \rightarrow 3\), \(1 \rightarrow 4\), \(1 \rightarrow 5\).
  • \(2\)-я победила всех, так как до остальных можно добраться следующим образом \(2 \rightarrow 3\), \(2 \rightarrow 3 \rightarrow 1\), \(2 \rightarrow 4\), \(2 \rightarrow 5\).
  • \(3\)-я победила всех, так как до остальных можно добраться следующим образом \(3 \rightarrow 1\), \(3 \rightarrow 1 \rightarrow 2\), \(3 \rightarrow 4\), \(3 \rightarrow 5\).

Следовательно, количество победителей равно \(3\).

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\) вершин.

A. Ezzat и две подпоследовательности

математика Перебор сортировки *800

У Ezzat есть массив целых (возможно, отрицательных) чисел длины \(n\). Он хочет разделить его на две непустые подпоследовательности \(a\) и \(b\) так, чтобы каждый элемент массива принадлежал ровно одной подпоследовательности, и значение \(f(a) + f(b)\) было максимально возможным. Здесь \(f(x)\) обозначает среднее арифметическое всех элементов \(x\).

Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов.

Среднее арифметическое чисел последовательности это сумма всех чисел последовательности, деленная на их количество.

Например, среднее арифметическое \([1,5,6]\) это \((1+5+6)/3 = 12/3 = 4\), таким образом, \(f([1,5,6]) = 4\).

Входные данные

Во входных данных находятся несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Каждый набор входных данных описывается двумя строками.

В первой строке содержится целое число \(n\) (\(2 \le n \le 10^5\)) — размер массива Ezzat.

Во второй строке содержится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем тестам не превосходит \(3\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное значение, которое может получить Ezzat.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

В первом примере массив \([3, 1, 2]\). Ниже приведены все способы разбить его на две непустые подпоследовательности:

  • \(a = [3]\), \(b = [1,2]\), значит \(f(a) + f(b) = 3 + 1.5 = 4.5\).
  • \(a = [3,1]\), \(b = [2]\), значит \(f(a) + f(b) = 2 + 2 = 4\).
  • \(a = [3,2]\), \(b = [1]\), значит \(f(a) + f(b) = 2.5 + 1 = 3.5\).
Таким образом, максимальное значение \(4.5\).

Во втором примере массив \([-7, -6, -6]\). Ниже приведены все способы разбить его на две непустые подпоследовательности:

  • \(a = [-7]\), \(b = [-6,-6]\), значит \(f(a) + f(b) = (-7) + (-6) = -13\).
  • \(a = [-7,-6]\), \(b = [-6]\), значит \(f(a) + f(b) = (-6.5) + (-6) = -12.5\).
Таким образом, максимальное значение \(-12.5\).

C. Moamen и XOR

битмаски дп Комбинаторика математика матрицы *1700

Moamen и Ezzat играют в игру. Они создают массив \(a\) длины \(n\), состоящий из неотрицательных целых чисел, где каждый элемент меньше \(2^k\).

Moamen победит, если \(a_1 \,\&\, a_2 \,\&\, a_3 \,\&\, \ldots \,\&\, a_n \ge a_1 \oplus a_2 \oplus a_3 \oplus \ldots \oplus a_n\).

Здесь \(\&\) обозначает операцию битового И, а \(\oplus\) обозначает операцию битового исключающего ИЛИ.

Теперь Moamen хочет узнать, сколько существует таких массивов \(a\), где он побеждает?

Так как ответ может быть очень большим, выведите его по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 5\))— количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(1 \le n\le 2\cdot 10^5\), \(0 \le k \le 2\cdot 10^5\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных массивов, в которых Moamen победит.

Выведите результат по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Примечание

В первом примере \(n = 3\), \(k = 1\). В результате все возможные массивы — это \([0,0,0]\), \([0,0,1]\), \([0,1,0]\), \([1,0,0]\), \([1,1,0]\), \([0,1,1]\), \([1,0,1]\) и \([1,1,1]\).

Moamen победит только в \(5\) из них: \([0,0,0]\), \([1,1,0]\), \([0,1,1]\), \([1,0,1]\), \([1,1,1]\).

A. Очарованные игрой

математика Перебор *1300

Алиса и Борис играют в теннис.

Теннисный матч состоит из геймов. В каждом гейме один из игроков подаёт, другой — принимает.

Игроки подают по очереди: за геймом, в котором подаёт Алиса, всегда следует гейм, в котором подаёт Борис, и наоборот.

Каждый гейм заканчивается победой одного из игроков. Если гейм выигрывает подающий игрок, говорят, что этот игрок взял подачу. Если принимающий — говорят, что этот игрок сделал брейк.

Известно, что за матч Алиса выиграла \(a\) геймов, а Борис выиграл \(b\) геймов. Неизвестно, кто первый подавал и кто какие геймы выиграл.

Найдите все такие значения \(k\), что за матч Алисы и Бориса могло быть сделано в сумме ровно \(k\) брейков.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждая из следующих \(t\) строк описывает один набор входных данных и содержит два целых числа \(a\) и \(b\) (\(0 \le a, b \le 10^5\); \(a + b > 0\)) — число геймов, выигранных Алисой и Борисом, соответственно.

Гарантируется, что сумма значений \(a + b\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите целое число \(m\) (\(1 \le m \le a + b + 1\)) — число различных значений \(k\) таких, что за матч могло быть сделано ровно \(k\) брейков.

Во второй строке выведите \(m\) различных целых чисел \(k_1, k_2, \ldots, k_m\) (\(0 \le k_1 < k_2 < \ldots < k_m \le a + b\)) — искомые значения \(k\) в возрастающем порядке.

Примечание

В первом наборе входных данных за матч могло быть сделано любое число брейков от \(0\) до \(3\):

  • Алиса берёт подачу, Борис берёт подачу, Алиса берёт подачу: \(0\) брейков;
  • Борис берёт подачу, Алиса берёт подачу, Алиса делает брейк: \(1\) брейк;
  • Борис делает брейк, Алиса делает брейк, Алиса берёт подачу: \(2\) брейка;
  • Алиса делает брейк, Борис делает брейк, Алиса делает брейк: \(3\) брейка.

Во втором наборе входных данных игроки могли либо каждый взять свою подачу (\(0\) брейков), либо обменяться брейками (\(2\) брейка).

В третьем наборе входных данных могло быть сделано либо \(2\), либо \(3\) брейка:

  • Борис берёт подачу, Борис делает брейк, Борис берёт подачу, Борис делает брейк, Борис берёт подачу: \(2\) брейка;
  • Борис делает брейк, Борис берёт подачу, Борис делает брейк, Борис берёт подачу, Борис делает брейк: \(3\) брейка.

B. Верхняя ячейка

дп математика Перебор теория чисел *1900

Обратите внимание, что ограничение по памяти в этой задаче ниже, чем в других.

У вас есть вертикальная полоска из \(n\) ячеек, последовательно пронумерованных сверху вниз от \(1\) до \(n\).

У вас также есть токен, изначально расположенный в ячейке \(n\). Вы будете двигать токен вверх до тех пор, пока он не окажется в ячейке \(1\).

Пусть в некоторый момент токен находится в ячейке \(x > 1\). Один сдвиг токена может иметь любой из следующих двух видов:

  • Вычитание: вы выбираете целое число \(y\) от \(1\) до \(x-1\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(x - y\).
  • Деление с округлением вниз: вы выбираете целое число \(z\) от \(2\) до \(x\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(\lfloor \frac{x}{z} \rfloor\) (частное от деления \(x\) на \(z\) с округлением вниз).

Найдите число способов, которыми токен может добраться из ячейки \(n\) в ячейку \(1\) за один или более сдвигов, и выведите это число по модулю \(m\). Обратите внимание, что если есть несколько способов переместить токен из одной ячейки в другую за один сдвиг, все эти способы считаются различными (смотрите пояснение к примерам для лучшего понимания).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 4 \cdot 10^6\); \(10^8 < m < 10^9\); \(m\) — простое число) — длину полоски и число, по модулю которого необходимо вычислить ответ.

Выходные данные

Выведите число способов для токена добраться из ячейки \(n\) в ячейку \(1\), по модулю \(m\).

Примечание

В первом тесте есть три способа добраться из ячейки \(3\) в ячейку \(1\) за один сдвиг: с помощью вычитания \(y = 2\), а также с помощью деления на \(z = 2\) или \(z = 3\).

Также есть два способа добраться из ячейки \(3\) в ячейку \(1\) через ячейку \(2\): сначала вычесть \(y = 1\), а потом либо снова вычесть \(y = 1\), либо поделить на \(z = 2\).

Таким образом, всего способов пять.

A. Mocha и математика

битмаски Конструктив математика *900

Mocha — школьница старших классов. В школе она получила от учителей много знаний, особенно от учителя математики. Недавно Mocha узнала о двоичной системе счисления и заинтересовалась битовыми операциями.

Сегодня у Mocha есть массив целых чисел \(a\) длины \(n\). За одну операцию она может выбрать произвольный отрезок \([l, r]\) и для всех значений \(i\) (\(0\leq i \leq r-l\)) одновременно заменить \(a_{l+i}\) на \(a_{l+i} \,\&\, a_{r-i}\), где \(\&\) обозначает операцию побитового И. Эта операция может быть выполнена произвольное количество раз.

Например, если \(n=5\), исходный массив \([a_1,a_2,a_3,a_4,a_5]\), и Mocha выбирает отрезок \([2,5]\), то после применения операции массив будет равен \([a_1,a_2\,\&\, a_5, a_3\,\&\, a_4, a_4\,\&\, a_3, a_5\,\&\, a_2]\).

Mocha хочет сделать максимальное значение в массиве как можно меньше. Помогите, как лучший друг, вычислить это минимально возможное значение максимума?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(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 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное значение максимума после применения некоторого количества операций.

Примечание

В первом наборе входных данных Mocha может выбрать отрезок \([1,2]\), и массив становится равным \([ 0, 0]\), так как первый элемент становится равен \(1\,\&\,2\), а второй — \(2\,\&\,1\).

Во втором наборе входных данных Mocha может выбрать отрезок \([1,3]\), и массив становится равным \([ 1,1,1]\), где первый элемент равен \(1\,\&\,3\), второй элемент — \(1\,\&\,1\), а третий элемент — \(3\,\&\,1\).

E. Mocha и звезды

бпф дп Комбинаторика математика теория чисел *2200

Mocha хочет быть астрологом. В небе над Чжицзяном \(n\) звезд, яркость \(i\)-й звезды равна \(a_i\).

Mocha считает, что \(n\) звезд образуют созвездие, и описывает его состояние массивом \((a_1,a_2,\ldots,a_n)\). Состояние называется математическим, если все три следующих условия выполнены:

  • Для всех \(i\) (\(1\le i\le n\)), \(a_i\) — целое число из отрезка \([l_i, r_i]\).
  • \(\sum \limits _{i=1} ^ n a_i \le m\).
  • \(\gcd(a_1,a_2,\ldots,a_n)=1\).

Здесь, \(\gcd(a_1,a_2,\ldots,a_n)\) обозначает наибольший общий делитель (НОД) чисел \(a_1,a_2,\ldots,a_n\).

Mocha интересуется, сколько существует математических состояний этого созвездия. Так как ответ может быть большим, вы должны найти его по модулю \(998\,244\,353\).

Два состояния \((a_1,a_2,\ldots,a_n)\) и \((b_1,b_2,\ldots,b_n)\) считаются различными, если существует индекс \(i\) (\(1\le i\le n\)) такой, что \(a_i \ne b_i\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 50\), \(1 \le m \le 10^5\)) — количество звезд и верхнее ограничение на сумму яркостей звезд.

Каждая из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)) — отрезок возможных значений яркости \(i\)-й звезды.

Выходные данные

Выведите одно целое число — количество различных математических состояний созвездия по модулю \(998\,244\,353\).

Примечание

В первом примере есть \(4\) различных математических состояния:

  • \(a_1=1\), \(a_2=1\).
  • \(a_1=1\), \(a_2=2\).
  • \(a_1=2\), \(a_2=1\).
  • \(a_1=3\), \(a_2=1\).

B. Кто напротив?

математика *800

Несколько человек (чётное количество) встали в круг. Люди стоят по кругу равномерно. Они пронумерованы по часовой стрелке от \(1\), начиная с некоторого из них. Каждый смотрит через центр круга на противоположного человека.

Пример круга для \(6\) человек. Оранжевые стрелки указывают, кто на кого смотрит.

Вы не знаете, сколько конкретно человек стоит в круге (но их точно чётное количество). Известно, что человек с номером \(a\) смотрит на человека с номером \(b\) (и, конечно, наоборот). На кого смотрит человек с номером \(c\)? Если для заданных \(a\), \(b\) и \(c\) такого круга не существует, то выведите -1.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей три различных целых числа \(a\), \(b\), \(c\) (\(1 \le a,b,c \le 10^8\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число \(d\) — номер человека, на кого может смотреть человек \(c\) в таком круге, что \(a\) смотрит на \(b\). Если существует несколько решений, выведите любое из них. Выведите \(-1\), если не существует круга, удовлетворяющего заданным условиям.

Примечание

В первом наборе входных данных можно составить круг из \(8\) человек. Тогда человек с номером \(6\) будет смотреть на человека с номером \(2\), а человек с номером \(8\) будет смотреть на человека с номером \(4\).

Во втором наборе входных данных не существует круга, удовлетворяющего заданным условиям. Если люди с номерами \(2\) и \(3\) смотрят друг на друга и при этом являются соседями, то круг состоит из \(2\) людей. Но тогда они должны иметь номера \(1\) и \(2\), что противоречит условию.

В третьем наборе входных данных единственный допустимый круг, в котором человек с номером \(2\) смотрит на человека с номером \(4\), состоит из \(4\) человек. Таким образом, человека с номером \(10\) не может быть в этом круге.

C. Бесконечная таблица

математика реализация *800

Поликарп нашёл таблицу, имеющую бесконечное количество строк и столбцов. Строки пронумерованы от \(1\), начиная с самой верхней. Аналогично, столбцы пронумерованы от \(1\), начиная с самого левого.

Изначально таблица не заполнена, и Поликарп хочет это исправить. Он записывает числа от \(1\) и далее в таблицу следующим образом.

Здесь изображено, как он расставит числа от \(1\) до \(10\). Стрелками обозначены дальнейшие действия.

В левую верхнюю ячейку таблицы он записывает число \(1\). Далее он последовательно записывает в таблицу все положительные целые числа, начиная с \(2\), по порядку, придерживаясь следующего алгоритма.

Сначала Поликарп выбирает самую левую незаполненную ячейку в самой первой строке таблицы и заполняет её. Затем, пока у последней заполненной ячейки сосед слева существует и заполнен, он переходит вниз и заполняет очередную ячейку. Таким образом, он переходит вниз до тех пор, пока не окажется в клетке, у которой не заполнен сосед слева (смотрите на вертикальную стрелку, идущую вниз, на рисунке выше).

После этого он начинает заполнять клетки справа налево от текущей, пока не упрётся в первый столбец (смотрите на горизонтальную стрелку, идущую влево, на рисунке выше). После этого Поликарп снова выбирает самую левую незаполненную ячейку в первой строке и идет вниз, и так далее.

У друга Поликарпа есть любимое число \(k\). Он хочет узнать, в какой ячейке это число окажется. Помогите ему найти номер строки и столбца, на пересечении которых находится ячейка, содержащая заданное число \(k\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей одно целое число \(k\) (\(1 \le k \le 10^9\)), координаты которого необходимо найти.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите через пробел два целых числа \(r\) и \(c\) (\(r, c \ge 1\)) — номер строки и номер столбца ячейки, содержащей число \(k\), соответственно.

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\)).

D1. Верхняя ячейка (упрощенная версия)

дп математика Перебор Структуры данных теория чисел *1700

Эта версия задачи отличается от следующей только ограничением на \(n\).

Обратите внимание, что ограничение по памяти в этой задаче ниже, чем в других.

У вас есть вертикальная полоска из \(n\) ячеек, последовательно пронумерованных сверху вниз от \(1\) до \(n\).

У вас также есть токен, изначально расположенный в ячейке \(n\). Вы будете двигать токен вверх до тех пор, пока он не окажется в ячейке \(1\).

Пусть в некоторый момент токен находится в ячейке \(x > 1\). Один сдвиг токена может иметь любой из следующих двух видов:

  • Вычитание: вы выбираете целое число \(y\) от \(1\) до \(x-1\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(x - y\).
  • Деление с округлением вниз: вы выбираете целое число \(z\) от \(2\) до \(x\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(\lfloor \frac{x}{z} \rfloor\) (частное от деления \(x\) на \(z\) с округлением вниз).

Найдите число способов, которыми токен может добраться из ячейки \(n\) в ячейку \(1\) за один или более сдвигов, и выведите это число по модулю \(m\). Обратите внимание, что если есть несколько способов переместить токен из одной ячейки в другую за один сдвиг, все эти способы считаются различными (смотрите пояснение к примерам для лучшего понимания).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(10^8 < m < 10^9\); \(m\) — простое число) — длину полоски и число, по модулю которого необходимо вычислить ответ.

Выходные данные

Выведите число способов для токена добраться из ячейки \(n\) в ячейку \(1\), по модулю \(m\).

Примечание

В первом тесте есть три способа добраться из ячейки \(3\) в ячейку \(1\) за один сдвиг: с помощью вычитания \(y = 2\), а также с помощью деления на \(z = 2\) или \(z = 3\).

Также есть два способа добраться из ячейки \(3\) в ячейку \(1\) через ячейку \(2\): сначала вычесть \(y = 1\), а потом либо снова вычесть \(y = 1\), либо поделить на \(z = 2\).

Таким образом, всего способов пять.

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\).

B. Scenes From a Memory

Конструктив математика Перебор реализация теория чисел *1000

Во время сеанса гипноза Николас неожиданно вспомнил целое положительное число \(n\), не содержащее нулей в десятичной записи.

Вскоре, когда он уже вернулся домой, ему стало интересно: какое максимальное количество цифр можно удалить из числа так, чтобы оно стало не простым, то есть либо составным, либо равным единице? Помогите ему найти ответ!

Для некоторых чисел сделать это невозможно: например, для числа \(53\) невозможно удалить некоторые из его цифр, чтобы получить не простое целое число. Однако, для всех \(n\) в тестах этой задачи гарантируется, что можно удалить некоторые из их цифр, чтобы получить не простое число.

Из числа нельзя удалять все цифры.

Простым называется число, которое не имеет никаких делителей, кроме единицы и самого себя. Составным называется число, которое имеет более двух делителей. \(1\) не является ни простым, ни составным числом.

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находится одно целое положительное число \(k\) (\(1 \le k \le 50\)) — количество цифр в числе.

Во второй строке каждого набора входных данных находится целое положительное число \(n\), не содержащее нулей в десятичной записи (\(10^{k-1} \le n < 10^{k}\)). Гарантируется, что из числа можно удалить менее, чем \(k\) цифр, чтобы оно стало не простым.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите в отдельных двух строках выведите два числа: количество цифр, которое вы оставили в первой строке, и оставшееся после удалений число во второй.

Если существует несколько правильных вариантов ответа, вы можете вывести любой.

Примечание

В первом наборе входных данных нельзя удалить \(2\) цифры из числа \(237\), так как все числа \(2\), \(3\) и \(7\) являются простыми. Однако вы можете удалить \(1\) цифру, получив число \(27 = 3^3\).

Во втором наборе входных данных можно удалить все цифры, кроме одной, так как \(4 = 2^2\) — составное число.

C. Кольца

Конструктив математика *1500

Попал Фродо в плен к Саруману. Сорвал он с шеи Фродо мешочек, вытряхнул его содержимое — а там куча разных колец: золотые и серебряные...

— И как мне теперь определить, которое из них Единое?! — взвыл маг.

— А ты бросай их по очереди в Роковую Расселину и следи, когда Мордор падет!

Где-то в параллельном Средиземье, когда Саруман поймал и обыскал Фродо, он обнаружил лишь \(n\) колец. Причем \(i\)-е кольцо было либо золотым, либо серебряным. Для удобства Саруман записал бинарную строку \(s\) из \(n\) символов, где \(i\)-м символом был 0, если \(i\)-е кольцо золотое, и 1, если серебряное.

У Сарумана есть волшебная функция \(f\), которая принимает бинарную строку, а в ответ выдает число, полученное путем перевода строки в двоичное число, а затем перевода двоичного числа в десятичное. Например, \(f(001010) = 10, f(111) = 7, f(11011101) = 221\).

Саруман, однако, считает, что порядок колец играет какую-то важную роль. Он хочет найти \(2\) пары целых чисел \((l_1, r_1), (l_2, r_2)\), для которых:

  • \(1 \le l_1 \le n\), \(1 \le r_1 \le n\), \(r_1-l_1+1\ge \lfloor \frac{n}{2} \rfloor\)
  • \(1 \le l_2 \le n\), \(1 \le r_2 \le n\), \(r_2-l_2+1\ge \lfloor \frac{n}{2} \rfloor\)
  • Пары \((l_1, r_1)\) и \((l_2, r_2)\) различны. То есть, должно выполняться хотя бы одно из условий \(l_1 \neq l_2\) и \(r_1 \neq r_2\).
  • Пусть \(t\) — подстрока \(s[l_1:r_1]\) строки \(s\), а \(w\) — подстрока \(s[l_2:r_2]\) строки \(s\). Тогда существует неотрицательное целое число \(k\), такое, что \(f(t) = f(w) \cdot k\).

Здесь подстрока \(s[l:r]\) обозначает \(s_ls_{l+1}\ldots s_{r-1}s_r\), а \(\lfloor x \rfloor\) обозначает округление числа вниз до ближайшего целого.

Помогите Саруману решить эту задачу! Гарантируется, что при ограничениях задачи существует хотя бы одно решение.

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находится одно целое положительное число \(n\) (\(2 \le n \le 2 \cdot 10^4\)) — количество колец.

Во второй строке каждого набора входных данных находится непустая бинарная строка длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке четыре числа \(l_1\), \(r_1\), \(l_2\), \(r_2\), которые обозначают начало первой подстроки, конец первой подстроки, начало второй подстроки и конец второй подстроки соответственно.

Если существует несколько правильных вариантов ответа, вы можете вывести любой.

Примечание

В первом наборе входных данных \(f(t) = f(1111) = 15\), \(f(w) = f(101) = 5\).

Во втором наборе входных данных \(f(t) = f(111000111) = 455\), \(f(w) = f(000111) = 7\).

В третьем наборе входных данных \(f(t) = f(0000) = 0\), \(f(w) = f(1000) = 8\).

В четвертом наборе входных данных \(f(t) = f(11011) = 27\), \(f(w) = f(011) = 3\).

В пятом наборе входных данных \(f(t) = f(001111) = 15\), \(f(w) = f(011) = 3\).

D1. Двести двадцать один (простая версия)

дп математика Структуры данных *1700

Это простая версия задачи. Различия между версиями заключаются в том, что в простой версии не требуется выводить номера удаляемых стержней. Вы можете делать взломы, только если обе версии задачи сданы.

Стич любит экспериментировать с различными механизмами вместе со своим другом Спарки. Сегодня они построили очередную машину.

Главным элементом этой машины являются \(n\) стержней, расположенных вдоль одной прямой и пронумерованных от \(1\) до \(n\) включительно. На каждом из этих стержней должен находиться электрический заряд, количественно равный либо \(1\), либо \(-1\) (иначе машина не будет работать). Другим условием работы этой машины является то, что знакопеременная сумма заряда по всем стержням должна равняться нулю.

Более формально, стержни можно представить как массив из \(n\) чисел, характеризующих заряд: либо \(1\), либо \(-1\). Тогда должно выполняться условие: \(a_1 - a_2 + a_3 - a_4 + \ldots = 0\), или, выражаясь проще, \(\sum\limits_{i=1}^n (-1)^{i-1} \cdot a_i = 0\).

Спарки зарядил все \(n\) стержней электрическим током, но оказалось, что стержни заряжены неправильно (знакопеременная сумма заряда не равна нулю). Друзья решили оставить в машине только часть стержней. У Спарки есть \(q\) вопросов. В \(i\)-м вопросе Спарки интересуется: если бы машина состояла только из стержней с номерами с \(l_i\) по \(r_i\) включительно, какое минимальное количество стержней можно было бы удалить из машины так, чтобы знакопеременная сумма зарядов на оставшихся была равна нулю? Возможно, друзья что-то напутали, и знакопеременная сумма уже равна нулю. В таком случае, можно не удалять стержни вовсе.

Если количество стержней равно нулю, будем считать, что знакопеременная сумма зарядов равна нулю, то есть всегда можно удалить все стержни.

Помогите друзьям и ответьте на все вопросы Спарки!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — количество стержней и количество вопросов соответственно.

Во второй строке находятся строка \(s\) длины \(n\), где заряд \(i\)-го стержня равен \(1\), если \(s_i\) это символ «+», или \(-1\), если \(s_i\) это символ «-».

Каждая из следующих \(q\) строк содержит два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — числа, описывающие вопросы Спарки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), а также сумма \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — минимальное количество стержней, которое можно удалить.

Примечание

В первом наборе входных данных для первого запроса можно удалить стержни под номерами \(5\) и \(8\), тогда останется следующий набор стержней: +--+--++-++-. Нетрудно видеть, что здесь знакопеременная сумм равна нулю.

В втором наборе входных данных:

  • Для первого запроса можно удалить стержни под номерами \(1\) и \(11\), тогда останется следующий набор стержней: +--+--++-++-. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для второго запроса можно удалить стержень под номером \(9\), тогда останется следующий набор стержней: ---++-. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для третьего запроса можно не удалять стержни вовсе.

D2. Двести двадцать один (сложная версия)

математика Структуры данных *2200

Это сложная версия задачи. Различия между версиями заключаются в том, что в сложной версии требуется выводить номера удаляемых стержней. Вы можете делать взломы, только если обе версии задачи сданы.

Стич любит экспериментировать с различными механизмами вместе со своим другом Спарки. Сегодня они построили очередную машину.

Главным элементом этой машины являются \(n\) стержней, расположенных вдоль одной прямой и пронумерованных от \(1\) до \(n\) включительно. На каждом из этих стержней должен находиться электрический заряд, количественно равный либо \(1\), либо \(-1\) (иначе машина не будет работать). Другим условием работы этой машины является то, что знакопеременная сумма заряда по всем стержням должна равняться нулю.

Более формально, стержни можно представить как массив из \(n\) чисел, характеризующих заряд: либо \(1\), либо \(-1\). Тогда должно выполняться условие: \(a_1 - a_2 + a_3 - a_4 + \ldots = 0\), или, выражаясь проще, \(\sum\limits_{i=1}^n (-1)^{i-1} \cdot a_i = 0\).

Спарки зарядил все \(n\) стержней электрическим током, но оказалось, что стержни заряжены неправильно (знакопеременная сумма заряда не равна нулю). Друзья решили оставить в машине только часть стержней. У Спарки есть \(q\) вопросов. В \(i\)-м вопросе Спарки интересуется: если бы машина состояла только из стержней с номерами с \(l_i\) по \(r_i\) включительно, какое минимальное количество стержней можно было бы удалить из машины так, чтобы знакопеременная сумма зарядов на оставшихся была равна нулю? Также Спарки хочет знать номера этих стержней. Возможно, друзья что-то напутали, и знакопеременная сумма уже равна нулю. В таком случае, можно не удалять стержни вовсе.

Если количество стержней равно нулю, будем считать, что знакопеременная сумма зарядов равна нулю, то есть всегда можно удалить все стержни.

Помогите друзьям и ответьте на все вопросы Спарки!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — количество стержней и количество вопросов соответственно.

Во второй строке находятся строка \(s\) длины \(n\), где заряд \(i\)-го стержня равен \(1\), если \(s_i\) это символ «+», или \(-1\), если \(s_i\) это символ «-».

Каждая из следующих \(q\) строк содержит два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — числа, описывающие вопросы Спарки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), а также сумма \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Гарантируется, что сумма ответов (минимальное количество стержней, которое можно удалить) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выводите ответ в следующем формате:

В первой строке должно находиться одно целое число \(k\) — минимальное количество стержней, которое можно удалить.

Во второй строке должны находиться \(k\) чисел, разделенных пробелом — номера удаляемых стержней.

Если существует несколько правильных вариантов ответа, вы можете вывести любой.

Примечание

В первом наборе входных данных для первого запроса можно удалить стержни под номерами \(5\) и \(8\), тогда останется следующий набор стержней: +--+--++-++-. Нетрудно видеть, что здесь знакопеременная сумм равна нулю.

В втором наборе входных данных:

  • Для первого запроса можно удалить стержни под номерами \(1\) и \(11\), тогда останется следующий набор стержней: --++---++---. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для второго запроса можно удалить стержень под номером \(9\), тогда останется следующий набор стержней: ---++-. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для третьего запроса можно не удалять стержни вовсе.

F. Tubular Bells

интерактив математика Теория вероятностей теория чисел *2900

Знаете ли вы, что такое оркестровые колокола? Это музыкальный инструмент, состоящий из цилиндрических металлических трубок. В оркестре колокола имитируют колокольный звон.

У Майка тоже есть оркестровые колокола! Они состоят из \(n\) трубок, причем каждая из трубок имеет длину, которая может быть выражена целым числом от \(l\) до \(r\) включительно. Ясно, что длины всех трубок различны (нет смысла делать одинаковые трубки). Также известно, что \(r-l+1 = n\).

Формально, можно сказать, что оркестровые колокола Майка описываются перестановкой \(a\) длины \(n\), которая содержит все числа от \(l\) до \(r\) включительно, причем \(a_i\) обозначает длину \(i\)-й трубки.

Вам предлагается интересная задача: угадать, как выглядит инструмент Майка. Проще говоря, необходимо угадать перестановку.

Майк не скажет вам ни \(l\), ни \(r\). Он скажет вам только \(n\), и разрешит задать не более, чем \(n + 5000\) запросов.

В каждом запросе вы называете два целых положительных числа \(x\), \(y\) таких, что \(1 \le x, y \le n, x \neq y\). В ответ на этот запрос программа, написанная Майком, выдаст вам \(\mathrm{lcm}(a_x, a_y)\), где \(\mathrm{lcm}(c,d)\) обозначает наименьшее общее кратное (НОК) чисел \(c\) и \(d\).

Решите задачу Майка!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В единственной строке каждого набора входных данных находится одно целое положительное число \(n\) (\(3 \le n \le 10^5\)) — количество трубок. Известно, что \(1 \le l \le r \le 2 \cdot 10^5\), т.е. длины трубок не превосходят \(2 \cdot 10^5\).

Гарантируется, что сумма максимального количества запросов (т.е. \(n + 5000\)) по всем наборам входных данных не превосходит \(10^5 + 5000\). То есть сумма \(n\) не превосходит \(10^5 + 5000 - t \cdot 5000\).

Протокол взаимодействия

Для каждого набора входных данных считайте одно целое число \(n\). Вам разрешено сделать не более \(n + 5000\) запросов.

Если вы хотите сделать запрос, выведите его в формате «? \(x\) \(y\)», где \(x\) и \(y\) — номера трубок, для которых вы узнаете НОК их длин. Обратите внимание, что должно выполняться \(1 \le x, y \le n, x \neq y\). Интерактор вернет вам в качестве ответа одно целое число — ответ на ваш запрос.

Если вы готовы вывести ответ, выводите его в формате «! \(a_1\) \(a_2\) ... \(a_n\)». Вывод ответа не считается запросом и не включается в количество допустимых запросов.

После каждого запроса и вывода ответа не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «решение зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Обратите внимание, что интерактор не адаптивен. Это означает, что перестановка изначально фиксирована и не зависит от ваших запросов.

Взломы:

Для взломов используйте следующий формат:

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находится одно целое положительное число \(n\) (\(3 \le n \le 10^5\)) — количество трубок. Известно, что \(1 \le l \le r \le 2 \cdot 10^5\), т.е. длины трубок не превосходят \(2 \cdot 10^5\).

Во второй строке каждого набора входных данных находится массив \(a\) из \(n\) целых положительных чисел — длины трубок. Помните, что \(l \le a_i \le r\) и \(r-l+1 = n\), а также то, что все \(a_i\) различны.

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]\)

H. Xor-квиз

дп интерактив Конструктив математика теория чисел *3200

Это интерактивная задача.

Вам даны два целых числа \(c\) и \(n\). У жюри есть случайно сгенерированное множество \(A\) различных положительных чисел, не превосходящих \(c\) (оно выбирается из всех таких возможных множеств с равной вероятностью). Размер \(A\) равен \(n\).

Ваша задача угадать множество \(A\). Для того, чтобы это сделать, вы можете сделать не более \(\lceil 0.65 \cdot c \rceil\) запросов.

В каждом запросе вы можете выбрать одно целое число \(1 \le x \le c\). В качестве ответа на этот запрос вы получите побитовое исключающее ИЛИ всех таких \(y\), что \(y \in A\) и \(gcd(x, y) = 1\) (т.е. \(x\) и \(y\) взаимно просты). Если таких \(y\) не существует, то такое побитовое ИЛИ равно \(0\).

Вы можете задать все вопросы в самом начале и получить ответы на все запросы. После этого у вас не будет возможности делать запросы.

Вы должны найти любое множество \(A'\) такое, что \(|A'| = n\) и \(A'\) и \(A\) дают одинаковые ответы для всех \(c\) возможных запросов.

Входные данные

Сначала вам даны два целых числа \(c\) и \(n\) (\(100 \le c \le 10^6\), \(0 \le n \le c\)).

Протокол взаимодействия

В первой строке вы должны вывести целое число \(q\) \((0 \le q \le \lceil 0.65 \cdot c \rceil)\) — количество запросов, которые вы хотите сделать. После этого в той же строке выведите \(q\) целых чисел \(x_1, x_2, \ldots, x_q\) \((1 \le x_i \le c)\) — сами запросы.

Для этих запросов вы должны считать \(q\) целых чисел, \(i\)-е из них — это ответ на вышеописанный запрос для \(x = x_i\).

После этого во второй строке вы должны вывести \(n\) целых чисел \(A'_1, A'_2, \ldots, A'_n\) — найденное множество \(A'\).

Если существуют разные множества \(A'\), для которых ответы на все возможные запросы совпадают, то выведите любое из них.

Если вы сделаете более \(\lceil 0.65 \cdot c \rceil\) запросов, или запросы будут некорректными, интерактор немедленно завершит работу, а ваша программа получит вердикт Неправильный ответ.

После вывода запросов не забудьте вывести символ перевода строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Вы не можете делать взломы по этой задаче.

Примечание

Тест из условия сделан только для того, чтобы вы поняли протокол взаимодействия. Ваше решение не будет запускаться на тесте из условия.

В тесте из условия \(A = \{1, 4, 5, 6, 8, 10\}\). Делается \(7\) запросов, \(7 \le \lceil 0.65 \cdot 10 \rceil = 7\), поэтому ограничение на количество запросов не превышено.

Ответы на запросы:

  • Для \(10\): \(1\) — единственное число в множестве \(A\), взаимно простое с \(10\), поэтому ответ \(1\)
  • Для \(2\): \(1_{10} \oplus 5_{10} = 001_2 \oplus 101_2 = 4_{10}\), где \(\oplus\) — побитовое исключающее ИЛИ
  • Для \(3\): \(1_{10} \oplus 4_{10} \oplus 5_{10} \oplus 8_{10} \oplus 10_{10} = 0001_2 \oplus 0100_2 \oplus 0101_2 \oplus 1000_2 \oplus 1010_2 = 2_{10}\)
  • Для \(5\): \(1_{10} \oplus 4_{10} \oplus 6_{10} \oplus 8_{10} = 0001_2 \oplus 0100_2 \oplus 0110_2 \oplus 1000_2 = 11_{10}\)
  • Для \(7\): \(1_{10} \oplus 4_{10} \oplus 5_{10} \oplus 6_{10} \oplus 8_{10} \oplus 10_{10} = 0001_2 \oplus 0100_2 \oplus 0101_2 \oplus 0110_2 \oplus 1000_2 \oplus 1010_2 = 4_{10}\)
  • Для \(1\): \(1_{10} \oplus 4_{10} \oplus 5_{10} \oplus 6_{10} \oplus 8_{10} \oplus 10_{10} = 0001_2 \oplus 0100_2 \oplus 0101_2 \oplus 0110_2 \oplus 1000_2 \oplus 1010_2 = 4_{10}\)
  • Для \(6\): \(1_{10} \oplus 5_{10} = 0001_2 \oplus 0101_2 = 4_{10}\)

C. Проблемные переносы

битмаски дп Комбинаторика математика *1600

Алиса только недавно изучила сложение. Однако она еще не полностью освоила концепт «переноса»: вместо того, чтобы переносить цифру в следующий разряд, она переносит ее через один разряд.

Например, обычный способ подсчета суммы \(2039 + 2976\) показан ниже:

Однако Алиса подсчитывает сумму следующим образом:

А именно, она делает следующее:

  • складывает \(9\) и \(6\), получая \(15\), и переносит \(1\) на два разряда левее, т. е. в столбец «\(0\) \(9\)»;
  • складывает \(3\) и \(7\), получая \(10\), и переносит \(1\) на два разряда левее, т. е. в столбец «\(2\) \(2\)»;
  • складывает \(1\), \(0\), и \(9\), получая \(10\), и переносит \(1\) на два разряда левее, т. е. в столбец над знаком плюс;
  • складывает \(1\), \(2\) и \(2\), получая \(5\);
  • складывает \(1\), получая \(1\).
Таким образом, она получает неправильный результат \(15005\).

Алиса пришла к Бобу и рассказала, что она сложила два целых числа и получила в результате \(n\). Но Боб знает, что Алиса сложила числа как умеет. Помогите Бобу посчитать количество упорядоченных пар положительных целых чисел таких, что при сложении методом Алисы получается число \(n\). Обратите внимание, что пары \((a, b)\) и \((b, a)\) считаются различными при \(a \ne b\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют сами наборы.

В единственно строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 10^9\)) — число, которое получилось у Алисы.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество упорядоченных пар положительных целых чисел, таких что при сложении своим методом Алиса получит в результате \(n\).

Примечание

В первом наборе входных данных при сложении Алисой любой из следующих пар: \(1 + 9\), \(2 + 8\), \(3 + 7\), \(4 + 6\), \(5 + 5\), \(6 + 4\), \(7 + 3\), \(8 + 2\) или \(9 + 1\), она получит \(100\) в результате. Изображение, показывающее как Алиса сложит \(6 + 4\), показано ниже:

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. Заурядные запросы

математика разделяй и властвуй Структуры данных *2200

Недавно, на свой день рождения, Алиса получила массив \(a_1, a_2, \dots, a_n\). Массив ей очень понравился, как ее другу Бобу, которому Алиса его показала.

Однако довольно скоро Боб, как любой хороший друг, попросил Алису выполнить \(q\) операций двух видов над ее массивом:

  • \(1\) \(x\) \(y\): присвоить элементу \(a_x\) значение \(y\) (или \(a_x = y\));
  • \(2\) \(l\) \(r\): посчитать, сколько неубывающих подмассивов содержится в подмассиве \([a_l, a_{l+1}, \dots, a_r]\). Формально, нужно посчитать количество пар индексов \((p,q)\) таких, что \(l \le p \le q \le r\) и \(a_p \le a_{p+1} \le \dots \le a_{q-1} \le a_q\).

Помогите Алисе ответить на запросы Боба!

Входные данные

В первой строке заданы два целых числа \(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\) строках заданы по три целых числа. Первое число в \(i\)-й строке — это \(t_i\), тип операции \(i\)-го запроса (\(t_i = 1\) или \(t_i = 2\)).

Если \(t_i = 1\), то следующие два числа — это \(x_i\) и \(y_i\) (\(1 \le x_i \le n\); \(1 \le y_i \le 10^9\)), позиция \(x_i\) и новое значение \(y_i\) (нужно присвоить \(a_{x_i} = y_i\)).

Если \(t_i = 2\), то следующие два числа — это \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)), границы подмассива, о котором Боб спрашивает Алису в \(i\)-м запросе.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса \(2\)-го типа выведите одно целое число — ответ на данный запрос.

Примечание

Для первого запроса (\(l = 2\) и \(r = 5\)) неубывающие подмассивы \([p,q]\) — это \([2,2]\), \([3,3]\), \([4,4]\), \([5,5]\), \([2,3]\) и \([4,5]\).

C. Заседание жюри

Комбинаторика математика *1500

\(n\) человек собрались, чтобы провести заседание жюри предстоящего соревнования, \(i\)-й член жюри придумал \(a_i\) задач, которыми он хочет поделиться с другими.

Сначала жюри выбирает порядок, которому они будут следовать при обсуждении задач. Пусть это будет перестановка \(p\) чисел от \(1\) до \(n\) (массив размера \(n\), в котором каждое число от \(1\) до \(n\) встречается ровно один раз).

Затем обсуждение происходит следующим образом:

  • если у члена жюри \(p_1\) остались задачи, которые нужно рассказать, то он рассказывает одну задачу. В противном случае он будет пропущен.
  • если у члена жюри \(p_2\) остались задачи, которые нужно рассказать, то он рассказывает одну задачу. В противном случае он будет пропущен.
  • ...
  • если у члена жюри \(p_n\) остались задачи, которые нужно рассказать, то он рассказывает одну задачу. В противном случае он будет пропущен.
  • если остались члены жюри, которые еще не рассказали все свои задачи, то процесс повторяется с самого начала. В противном случае обсуждение заканчивается.

Перестановка \(p\) хорошая, если никто из членов жюри не будет рассказывать две или более задач подряд.

Подсчитайте количество хороших перестановок. Ответ может быть очень большим, поэтому выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(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\)) — количество задач, которые придумал \(i\)-й член жюри.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших перестановок, взятое по модулю \(998\,244\,353\).

Примечание

Объяснение первого примера:

Существуют две возможные перестановки, \(p = [1, 2]\) и \(p = [2, 1]\). Для \(p = [1, 2]\) процесс происходит следующим образом:

  1. первый член жюри рассказывает задачу;
  2. второй член жюри рассказывает задачу;
  3. у первого члена жюри не осталось задач, которые нужно было бы рассказать, поэтому он будет пропущен;
  4. второй член жюри рассказывает задачу.

Второй член жюри рассказал две задачи подряд, поэтому перестановка не является хорошей.

Для \(p = [2, 1]\) процесс происходит следующим образом:

  1. второй член жюри рассказывает задачу;
  2. первый член жюри рассказывает задачу;
  3. второй член жюри рассказывает задачу.

Эта перестановка является хорошей.

B. Эпический роман

*особая задача математика *1300

Алекс купил новый роман, изданный в \(n\) томах. Он прочитал все тома друг за другом, потратив на каждый несколько (один или более) полных дней. Другими словами, в первый день он читал первый том, и каждый следующий день он читал либо тоже самый том, что и днем ранее, либо следующий.

Пусть \(v_i\) — это номер тома, который Алекс читал в \(i\)-й день. Ниже представлены некоторые примеры возможных ситуаций:

  • вполне возможна ситуация, что \(v_1 = 1\), \(v_2 = 1\), \(v_3 = 2\), \(v_4 = 3\), \(v_5 = 3\). То есть Алекс потратил два дня (\(1\)-й и \(2\)-й) на первый том, один день (\(3\)-й) на второй том и два дня (\(4\)-й и \(5\)-й) на третий том;
  • ситуация \(v_1 = 2\), \(v_2 = 2\), \(v_3 = 3\) невозможна, так как Алекс начал чтение с первого тома (таким образом, \(v_1\) не может быть ни чем кроме \(1\));
  • ситуация \(v_1 = 1\), \(v_2 = 2\), \(v_3 = 3\), \(v_4 = 1\) невозможна, так как Алекс не вернется к чтению первого тома после чтения третьего;
  • ситуация \(v_1 = 1\), \(v_2 = 3\) невозможна, так как Алекс не пропускает тома.

Вы знаете, что Алекс читал том \(v_a\) в день \(a\) и том \(v_c\) в день \(c\). Теперь вы хотите угадать, какой том он читал в день \(b\), что находится между днями \(a\) и \(c\) (то есть, \(a < b < c\)). Возможно, однозначного ответа нет, а потому вас устроит любой подходящий по номеру том (т. е. выберете такое значение \(v_b\), что возможна ситуация, когда Алекс читал том \(v_a\) в день \(a\), том \(v_b\) в день \(b\) и том \(v_c\) в день \(c\)).

Входные данные

Во входных данных заданы несколько наборов входных данных. В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют сами наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 100\)) — количество томов, из которых состоит роман.

Во второй строке каждого набора заданы два целых числа \(a\) и \(v_a\) (\(1 \le a \le 98\); \(1 \le v_a \le a\)) означающих, что Алекс читал том \(v_a\) в день \(a\).

В третьей строке каждого набора заданы два целых числа \(c\) и \(v_c\) (\(a + 2 \le c \le 100\); \(v_a \le v_c \le c\)) означающих, что Алекс читал том \(v_c\) в день \(c\).

В четвертой строке каждого набора задано одно целое число \(b\) (\(a < b < c\)) — интересующий вас день.

Гарантируется, что входные данные не противоречивы, то есть Алекс мог читать том \(v_a\) в день \(a\) и том \(v_c\) в день \(c\).

Выходные данные

Для каждого набора входных данных, выведите номер тома, который Алекс мог читать в день \(b\). Если существует несколько ответов, выведите любой из них.

Примечание

В первом наборе входных данных, так как Алекс читал том \(1\) как в день \(1\) так и в день \(100\), то он совершенно точно читал том \(1\) в любой другой день между ними.

Во втором наборе, Алекс мог читать любой том от \(1\) по \(4\) в день \(16\). Например, он мог читать том \(1\) со дня \(1\) по день \(15\), том \(2\) в дни \(16\) и \(17\), том \(3\) в день \(18\) и том \(4\) в дни \(19\) и \(20\).

В третьем наборе входных данных, возможна только одна ситуация: Алекс читал по тому в день, а потому в день \(42\) он читал том \(42\).

D. Лотерея

*особая задача Конструктив математика Перебор реализация *1800

Соревнование Kotlin Heroes близится к завершению. В этот раз в соревновании участвовало \(n\) программистов. И теперь организаторы думают над тем, как развлечь еще и зрителей. Один из возможных вариантов — устроить лотерею. Но для начала нужно провести опрос среди зрителей.

В общем, организаторы опросили \(m\) зрителей, каждому задали два вопроса:

  1. Кто займет первое место?
  2. Кто займет последнее место?

Получив все ответы, организаторы присвоили всем зрителям места на основании того, скольких программистов они угадали. Предположим, что \(c_2\) зрителей правильно угадали и первое и последнее место, \(c_1\) зрителей угадали только первое или только последнее место, и \(c_0\) зрителей не угадали никого. Тогда все \(c_2\) зрителей получат \(1\)-е место, все зрители с одним правильным местом получат место \(c_2 + 1\), а все остальные — место \(c_2 + c_1 + 1\).

Вы были одним из опрашиваемых зрителей. Кроме того, как один из организаторов, вы можете смотреть результаты опроса, но не результаты соревнования. Определите, какое наихудшее место вы можете занять согласно системе ранжирования организаторов?

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 1000\); \(1 \le m \le 2 \cdot 10^5\)) — количество программистов, участвовавших в соревновании, и количество опрошенных зрителей.

В следующих \(m\) строках заданы ответы зрителей. В \(i\)-й строке заданы два целых числа \(f_i\) и \(l_i\) (\(1 \le f_i, l_i \le n\); \(f_i \ne l_i\)) — индексы программистов, кто займет первое и последнее места по мнению \(i\)-го зрителя.

Для простоты, ваш ответ всегда первый, то есть ваш ответ — это \(f_1\) и \(l_1\).

Выходные данные

Выведите одно целое число — худшее место, которое вы можете получить согласно системе ранжирования организаторов (чем больше место, тем хуже).

Примечание

В первом примере, если второй программист займет первое место, а первый программист — последнее, то у вас будет \(0\) правильных ответов в то время, как у других двух зрителей — \(2\) правильных ответа. А потому ваше место (в худшем случае) будет равно \(c_2 + c_1 + 1\) \(=\) \(2 + 0 + 1 = 3\).

Во втором примере, если, например, третий программист займет первое место, а второй программист — последнее место, то у вас будет \(1\) правильный ответ. У зрителей \(2\), \(4\) и \(5\) будет \(2\) правильных ответа, у зрителя \(6\) — \(1\) правильный ответ, и у зрителя \(3\) — \(0\) правильных ответов. В результате ваше место будет равно \(c_2 + 1\) \(=\) \(3 + 1 = 4\). (Заметим, что у зрителя \(6\) также будет место \(4\)).

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» удовлетворяет требованиям. Существуют и другие подходящие строки.

E. Раскраска

Комбинаторика Конструктив математика реализация *2500

Матрица размера \(n \times m\), состоящая только из цифр \(0\) или \(1\) считается красивой, если сумма в каждой подматрице размера \(2 \times 2\) ровно \(2\), т. е. каждый «квадрат» размера \(2 \times 2\) содержит ровно две цифры \(1\) и две цифры \(0\).

Вам задана матрица размера \(n \times m\). Изначально все ячейки матрицы пусты. Обозначим ячейку стоящую на пересечении \(x\)-й строки \(y\)-го столбца как \((x, y)\). Вам нужно обрабатывать запросы трех типов:

  • \(x\) \(y\) \(-1\) — сделать ячейку \((x, y)\) пустой;
  • \(x\) \(y\) \(0\) — записать цифру \(0\) в ячейку \((x, y)\), это перезапишет то, что там было;
  • \(x\) \(y\) \(1\) — записать цифру \(1\) в ячейку \((x, y)\), это перезапишет то, что там было.

После каждого запроса выведите количество способов заполнить пустые ячейки матрицы так, чтобы матрица была красивой. Так как это значение может быть слишком велико, выведите его по модулю \(998244353\).

Входные данные

Первая строка содержит три числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 10^6\); \(1 \le k \le 3 \cdot 10^5\)) — количество строк матрицы, количество столбцов и количество запросов соответственно.

Следующие \(k\) строк содержат описания запросов. \(i\)-я строка содержит три числа \(x_i\), \(y_i\), \(t_i\) (\(1 \le x_i \le n\); \(1 \le y_i \le m\); \(-1 \le t_i \le 1\)) — параметры \(i\)-го запроса.

Выходные данные

После каждого запроса выведите число — количество способов заполнить пустые ячейки матрицы так, чтобы матрица была красивой по модулю \(998244353\).

F. Finding Expected Value

математика *2900

Mr. Chanek opened a letter from his fellow, who is currently studying at Singanesia. Here is what it says.

Define an array \(b\) (\(0 \leq b_i < k\)) with \(n\) integers. While there exists a pair \((i, j)\) such that \(b_i \ne b_j\), do the following operation:

  • Randomly pick a number \(i\) satisfying \(0 \leq i < n\). Note that each number \(i\) has a probability of \(\frac{1}{n}\) to be picked.
  • Randomly Pick a number \(j\) satisfying \(0 \leq j < k\).
  • Change the value of \(b_i\) to \(j\). It is possible for \(b_i\) to be changed to the same value.

Denote \(f(b)\) as the expected number of operations done to \(b\) until all elements of \(b\) are equal.

You are given two integers \(n\) and \(k\), and an array \(a\) (\(-1 \leq a_i < k\)) of \(n\) integers.

For every index \(i\) with \(a_i = -1\), replace \(a_i\) with a random number \(j\) satisfying \(0 \leq j < k\). Let \(c\) be the number of occurrences of \(-1\) in \(a\). There are \(k^c\) possibilites of \(a\) after the replacement, each with equal probability of being the final array.

Find the expected value of \(f(a)\) modulo \(10^9 + 7\).

Formally, let \(M = 10^9 + 7\). It can be shown that the answer can be expressed as an irreducible fraction \(\frac{p}{q}\), where \(p\) and \(q\) are integers and \(q \not \equiv 0 \pmod{M}\). Output the integer equal to \(p \cdot q^{-1} \bmod M\). In other words, output such an integer \(x\) that \(0 \le x < M\) and \(x \cdot q \equiv p \pmod{M}\).

After reading the letter, Mr. Chanek gave the task to you. Solve it for the sake of their friendship!

Input

The first line contains two integers \(n\) and \(k\) (\(2 \leq n \leq 10^5\), \(2 \leq k \leq 10^9\)).

The second line contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(-1 \leq a_i < k\)).

Output

Output an integer denoting the expected value of \(f(a)\) modulo \(10^9 + 7\).

G. GCD Festival

математика теория чисел *2200

Mr. Chanek has an array \(a\) of \(n\) integers. The prettiness value of \(a\) is denoted as:

\(\)\sum_{i=1}^{n} {\sum_{j=1}^{n} {\gcd(a_i, a_j) \cdot \gcd(i, j)}}\(\)

where \(\gcd(x, y)\) denotes the greatest common divisor (GCD) of integers \(x\) and \(y\).

In other words, the prettiness value of an array \(a\) is the total sum of \(\gcd(a_i, a_j) \cdot \gcd(i, j)\) for all pairs \((i, j)\).

Help Mr. Chanek find the prettiness value of \(a\), and output the result modulo \(10^9 + 7\)!

Input

The first line contains an integer \(n\) (\(2 \leq n \leq 10^5\)).

The second line contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)).

Output

Output an integer denoting the prettiness value of \(a\) modulo \(10^9 + 7\).

K. Knitting Batik

математика реализация *2200

Mr. Chanek wants to knit a batik, a traditional cloth from Indonesia. The cloth forms a grid \(a\) with size \(n \times m\). There are \(k\) colors, and each cell in the grid can be one of the \(k\) colors.

Define a sub-rectangle as an ordered pair of two cells \(((x_1, y_1), (x_2, y_2))\), denoting the top-left cell and bottom-right cell (inclusively) of a sub-rectangle in \(a\). Two sub-rectangles \(((x_1, y_1), (x_2, y_2))\) and \(((x_3, y_3), (x_4, y_4))\) have the same pattern if and only if the following holds:

  • they have the same width (\(x_2 - x_1 = x_4 - x_3\));
  • they have the same height (\(y_2 - y_1 = y_4 - y_3\));
  • for every pair \((i, j)\) where \(0 \leq i \leq x_2 - x_1\) and \(0 \leq j \leq y_2 - y_1\), the color of cells \((x_1 + i, y_1 + j)\) and \((x_3 + i, y_3 + j)\) are equal.

Count the number of possible batik color combinations, such that the subrectangles \(((a_x, a_y),(a_x + r - 1, a_y + c - 1))\) and \(((b_x, b_y),(b_x + r - 1, b_y + c - 1))\) have the same pattern.

Output the answer modulo \(10^9 + 7\).

Input

The first line contains five integers \(n\), \(m\), \(k\), \(r\), and \(c\) (\(1 \leq n, m \leq 10^9\), \(1 \leq k \leq 10^9\), \(1 \leq r \leq \min(10^6, n)\), \(1 \leq c \leq \min(10^6, m)\)) — the size of the batik, the number of colors, and size of the sub-rectangle.

The second line contains four integers \(a_x\), \(a_y\), \(b_x\), and \(b_y\) (\(1 \leq a_x, b_x \leq n\), \(1 \leq a_y, b_y \leq m\)) — the top-left corners of the first and second sub-rectangle. Both of the sub-rectangles given are inside the grid (\(1 \leq a_x + r - 1\), \(b_x + r - 1 \leq n\), \(1 \leq a_y + c - 1\), \(b_y + c - 1 \leq m\)).

Output

Output an integer denoting the number of possible batik color combinations modulo \(10^9 + 7\).

Note

The following are all \(32\) possible color combinations in the first example.

E. Easy Scheduling

математика реализация *1200

Eonathan Eostar decided to learn the magic of multiprocessor systems. He has a full binary tree of tasks with height \(h\). In the beginning, there is only one ready task in the tree — the task in the root. At each moment of time, \(p\) processes choose at most \(p\) ready tasks and perform them. After that, tasks whose parents were performed become ready for the next moment of time. Once the task becomes ready, it stays ready until it is performed.

You shall calculate the smallest number of time moments the system needs to perform all the tasks.

Input

The first line of the input contains the number of tests \(t\) (\(1 \leq t \leq 5\cdot 10^5\)). Each of the next \(t\) lines contains the description of a test. A test is described by two integers \(h\) (\(1 \leq h \leq 50\)) and \(p\) (\(1 \leq p \leq 10^4\)) — the height of the full binary tree and the number of processes. It is guaranteed that all the tests are different.

Output

For each test output one integer on a separate line — the smallest number of time moments the system needs to perform all the tasks.

Note

Let us consider the second test from the sample input. There is a full binary tree of height \(3\) and there are two processes. At the first moment of time, there is only one ready task, \(1\), and \(p_1\) performs it. At the second moment of time, there are two ready tasks, \(2\) and \(3\), and the processes perform them. At the third moment of time, there are four ready tasks, \(4\), \(5\), \(6\), and \(7\), and \(p_1\) performs \(6\) and \(p_2\) performs \(5\). At the fourth moment of time, there are two ready tasks, \(4\) and \(7\), and the processes perform them. Thus, the system spends \(4\) moments of time to perform all the tasks.

G. Game of Chance

математика Теория вероятностей *3500

The King wants to marry off his daughter, and he wants her husband to have the greatest innate luckiness possible. To find such a person he decided to hold a heads-or-tails tournament.

If person \(A\) with luckiness \(x\) and person \(B\) with luckiness \(y\) play heads-or-tails against each other, person \(A\) wins with probability \(x/(x+y)\).

The tournament has several rounds. Each round some participants are split into pairs. Each pair plays against each other, and the loser leaves the tournament.

The participants are numbered from \(1\) to \(n\). During the first round, a number \(k\) (\(1 \le k \le n\)) is selected such that \(n-k/2\) is a power of \(2\) (such \(k\) always exists and is unique). Only participants numbered from \(1\) to \(k\) take part in the first round. It ensures that in all other rounds the number of participants is the power of \(2\).

During other rounds, all the participants who still have not left the tournament take part. If during some round, participants numbered \(p_1 < \ldots < p_{2m}\) take part, then they are split into pairs in the following manner: participant \(p_{2i-1}\) plays against participant \(p_{2i}\) for each \(i\) from \(1\) to \(m\).

The rounds are held until only one participant is left. He is declared the winner of the tournament and he will marry the King's daughter. The princess can't wait to find out who is her future husband. She asked every participant to tell her his luckiness. Assuming they did not lie, she wants to know the probability of each participant winning the tournament. As you are the best friend of the princess, she asks you to help her.

Input

The first line of the input contains the number of participants, \(n\) (\(2 \le n \le 3 \cdot 10^5\)). The second line of the input contains \(n\) integer numbers, \(a_1, \ldots, a_{n}\) (\(1 \le a_i \le 10^9\)). The luckiness of the \(i\)-th participant equals to \(a_i\).

Output

Print \(n\) numbers \(p_i\). The \(i\)-th number should be the probability of the \(i\)-th participant winning the tournament. The absolute error of your answer must not exceed \(10^{-9}\).

Note

Here is an example of a tournament bracket, showing the winning probability in each pair.

A. Строковый пасьянс Казимира

математика Строки *800

У Казимира есть строка \(s\), которая состоит исключительно из прописных латинских букв 'A', 'B' и 'C'. За один ход он может сделать одно из двух действий:

  • либо он удаляет ровно одну букву 'A' и ровно одну букву 'B' из произвольных мест строки (эти буквы могут не быть соседними);
  • либо он удаляет ровно одну букву 'B' и ровно одну букву 'C' из произвольных мест строки (эти буквы могут не быть соседними).

Таким образом, за один ход длина строки уменьшается ровно на \(2\). Ходы не зависят друг от друга, и каждый ход Казимир может выбрать любое из двух возможных действий.

Например, если \(s\) \(=\) «ABCABC», то за один ход он может получить строку \(s\) \(=\) «ACBC» (удалил первое вхождение 'B' и второе вхождение 'A'). Это лишь один пример исхода среди большого количества других возможностей сделать ход.

Для заданной строки \(s\) определите, существует ли последовательность ходов, приводящая к пустой строке. Иными словами, цель Казимира — удалить все буквы из строки. Существует ли способ это сделать?

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор данных задается одной строкой \(s\), для которой необходимо определить, можно ли ее удалить с помощью последовательности ходов. Строка \(s\) состоит из прописных букв 'A', 'B', 'C' и имеет длину от \(1\) до \(50\) букв включительно.

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите YES, если соответствующую строку можно удалить полностью, и NO в противном случае.

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

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]\) (первый набор входных данных из примера) описан в условии задачи.

F. Стабилизируй массив (И-версия)

графы кратчайшие пути математика Перебор теория чисел *1700

Задан массив из нулей и единиц \(a[0 \ldots n - 1] = [a_0, a_1, \ldots, a_{n - 1}]\). Обратите внимание, что в этой задаче, в отличие от остальных, индексы массива нумеруются с нуля, а не с единицы.

За один шаг массив \(a\) заменяется на другой массив длины \(n\) по следующим правилам:

  1. Сначала строится новый массив \(a^{\rightarrow d}\) — циклический сдвиг массива \(a\) вправо на \(d\) ячеек. Элементы этого массива определяются как \(a^{\rightarrow d}_i = a_{(i + n - d) \bmod n}\), где \((i + n - d) \bmod n\) — остаток от деления \(i + n - d\) на \(n\).

    Таким образом весь массив \(a^{\rightarrow d}\) можно записать как \(\)a^{\rightarrow d} = [a_{n - d}, a_{n - d + 1}, \ldots, a_{n - 1}, a_0, a_1, \ldots, a_{n - d - 1}]\(\)

  2. Затем каждый элемент массива \(a_i\) заменяется на \(a_i \,\&\, a^{\rightarrow d}_i\), где \(\&\) — операция логического «И».

Например, если \(a = [0, 0, 1, 1]\) и \(d = 1\), то \(a^{\rightarrow d} = [1, 0, 0, 1]\), и значение \(a\) после первого шага будет равно \([0 \,\&\, 1, 0 \,\&\, 0, 1 \,\&\, 0, 1 \,\&\, 1]\), то есть \([0, 0, 0, 1]\).

Процесс завершается, когда массив перестает меняться. Для заданного массива \(a\) определите, будет ли он состоять из одних нулей по окончании процесса. Если да, то также найдите количество шагов, которое процесс совершит до своего завершения.

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора входных данных первая строка содержит два целых числа: \(n\) (\(1 \le n \le 10^6\)) — размер массива, и \(d\) (\(1 \le d \le n\)) — размер сдвига массива на каждом шаге. Во второй строке описания через пробел записаны \(n\) чисел \(a_i\) (\(0 \le a_i \le 1\)) — элементы исходного массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите одно целое число — количество шагов, после которого массив впервые станет состоять из всех нулей. Если же после завершения процесса в массиве все еще будут присутствовать единицы, выведите -1.

Примечание

В третьем наборе входных данных из примера с массивом будут происходить следующие изменения:

  1. В начале \(a = [1, 1, 0, 1, 0]\), и \(a^{\rightarrow 2} = [1, 0, 1, 1, 0]\). Их поэлементное «И» равно \(\)[1 \,\&\, 1, 1 \,\&\, 0, 0 \,\&\, 1, 1 \,\&\, 1, 0 \,\&\, 0] = [1, 0, 0, 1, 0]\(\)
  2. Теперь \(a = [1, 0, 0, 1, 0]\), тогда \(a^{\rightarrow 2} = [1, 0, 1, 0, 0]\). Их поэлементное «И» равно \(\)[1 \,\&\, 1, 0 \,\&\, 0, 0 \,\&\, 1, 1 \,\&\, 0, 0 \,\&\, 0] = [1, 0, 0, 0, 0]\(\)
  3. И, наконец, при \(a = [1, 0, 0, 0, 0]\) получаем \(a^{\rightarrow 2} = [0, 0, 1, 0, 0]\). Их поэлементное «И» равно \(\)[1 \,\&\, 0, 0 \,\&\, 0, 0 \,\&\, 1, 0 \,\&\, 0, 0 \,\&\, 0] = [0, 0, 0, 0, 0]\(\)
Таким образом, ответ — \(3\) итерации.

В четвертом наборе входных данных массив не будет изменяться при сдвиге на \(2\) вправо, потому что каждый элемент будет вычисляться как \(0 \,\&\, 0\) или \(1 \,\&\, 1\). Таким образом, единицы останутся на своих местах, и ответ — -1, массив никогда не будет состоять только из нулей.

F. Задачи для Codeforces

бпф Комбинаторика математика *3300

XYMXYM и CQXYM готовят \(n\) задач для Codeforces. Сложность задачи \(i\) будет равна целому числу \(a_i\), где \(a_i \geq 0\). Сложности задач должны удовлетворять условиям: \(a_i+a_{i+1}<m\) (\(1 \leq i < n\)), а также \(a_1+a_n<m\), где \(m\) — фиксированное целое число. XYMXYM хочет узнать, сколько существует возможных последовательностей сложности задач по модулю \(998\,244\,353\).

Два варианта распределения сложностей \(a\) и \(b\) различны, если существует такое \(i\) (\(1 \leq i \leq n\)), что \(a_i \neq b_i\).

Входные данные

Единственная строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 50\,000\), \(1 \leq m \leq 10^9\)).

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

В первом примере допустимые распределения сложностей \(a\): \([0,0,0]\), \([0,0,1]\), \([0,1,0]\), \([1,0,0]\).

\([1,0,1]\) некорректно, так как \(a_1+a_n \geq m\).

A. CQXYM считает перестановки

Комбинаторика математика теория чисел *800

CQXYM считает перестановки длины \(2n\).

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Перестановка \(p\)(длины \(2n\)) будет посчитана только в том случае, если количество \(i\), удовлетворяющих \(p_i<p_{i+1}\), не меньше \(n\). Например:

  • Перестановка \([1, 2, 3, 4]\) будет посчитана, так как количество таких \(i\) что \(p_i<p_{i+1}\) равно \(3\) (\(i = 1\), \(i = 2\), \(i = 3\)).
  • Перестановка \([3, 2, 1, 4]\) не будет посчитана, так как количество таких \(i\) что \(p_i<p_{i+1}\) равно \(1\) (\(i = 3\)).

CQXYM хочет, чтобы вы помогли ему найти количество таких перестановок по модулю \(1000000007\)(\(10^9+7\)).

Операцией по модулю называется взятие остатка от деления. Например:

  • \(7 \mod 3=1\), так как \(7 = 3 \cdot 2 + 1\),
  • \(15 \mod 4=3\), так как \(15 = 4 \cdot 3 + 3\).
Входные данные

Входные данные состоят из нескольких тестовых примеров.

Первая строка содержит целое число \(t (t \geq 1)\) — количество тестовых примеров. Ниже приводится описание тестовых случаев.

Единственная для каждого тестового случая строка содержит целое число \(n(1 \leq n \leq 10^5)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\)

Выходные данные

Для каждого примера выведите ответ в отдельной строке.

Примечание

\(n=1\), существует только одна перестановка, удовлетворяющая условию: \([1,2].\)

В перестановке \([1,2]\), \(p_1<p_2\), только \(i=1\) подходит под условие. Так как \(1 \geq n\), Эта перестановка будет посчитана. В перестановке \([2,1]\), \(p_1>p_2\). Так как \(0<n\), эта перестановка не будет посчитана.

\(n=2\), существует \(12\) перестановок: \([1,2,3,4],[1,2,4,3],[1,3,2,4],[1,3,4,2],[1,4,2,3],[2,1,3,4],[2,3,1,4],[2,3,4,1],[2,4,1,3],[3,1,2,4],[3,4,1,2],[4,1,2,3].\)

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.

A. Лунтик и концерты

математика *800

Лунтик решил попробовать себя в пении. У него есть \(a\) одноминутных песен, \(b\) двухминутных и \(c\) трёхминутных. Он хочет распределить все песни на два концерта, при этом каждая песня должна быть ровно в одном концерте.

Он хочет, чтобы разница между длительностями концертов была как можно меньше. Длительность концерта — это сумма длительностей всех песен в концерте.

Помогите Лунтику найти наименьшую возможную разницу в минутах между длительностями концертов.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей три целых числа \(a, b, c\) \((1 \le a, b, c \le 10^9)\) — количество одноминутных, двухминутных и трёхминутных песен.

Выходные данные

Для каждого набора входных данных выведите наименьшую возможную разницу в минутах между длительностями концертов.

Примечание

В первом наборе входных данных Лунтик может на первом концерте исполнить одноминутную и двухминутную песни, а на втором — трехминутную. Тогда разница между длительностями будет равна \(0\).

Во втором наборе входных данных Лунтик может на первом концерте исполнить две одноминутных песни, двухминутную песню и трехминутную песню, а на втором — две трехминутных. Тогда длительность первого концерта будет \(1 + 1 + 2 + 3 = 7\), длительность второго будет \(6\). Разница между ними \(|7-6| = 1\).

B. Лунтик и подпоследовательности

Комбинаторика математика *900

Лунтик вышел на утреннюю прогулку и нашел массив \(a\) длины \(n\). Он посчитал сумму \(s\) элементов массива (\(s= \sum_{i=1}^{n} a_i\)). Лунтик называет подпоследовательность массива \(a\) почти полной, если сумма чисел в этой подпоследовательности равна \(s-1\).

Лунтик очень хочет узнать количество почти полных подпоследовательностей массива \(a\). Но ему надо возвращаться домой, поэтому он просит вас решить эту задачу!

Напоминаем, что последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Следующие \(2 \cdot t\) строк содержат описания наборов входных данных. Описание каждого набора состоит из двух строк.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 60\)) — длину массива.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите количество почти полных подпоследовательностей массива.

Примечание

В первом наборе входных данных \(s=1+2+3+4+5=15\), из всех подпоследовательностей почти полной будет только \((2,3,4,5)\), сумма в ней равна \(2+3+4+5=14=15-1\).

Во втором наборе входных данных нет почти полных подпоследовательностей.

В третьем наборе входных данных \(s=1+0=1\), почти полными будут подпоследовательности \((0)\) и \(()\) (пустая подпоследовательность имеет сумму \(0\)).

D. Вупсень, Пупсень и 0

Конструктив математика *1600

Вупсеню и Пупсеню подарили массив целых чисел. Так как Вупсень не любит число \(0\), он выкинул все числа, равные \(0\) из массива. В итоге получился массив \(a\) длины \(n\).

Пупсень, напротив, любит число \(0\) и расстроился, когда увидел массив без нулей. Чтобы подбодрить Пупсеня, Вупсень решил придумать другой массив \(b\) длины \(n\) такой, что \(\sum_{i=1}^{n}a_i \cdot b_i=0\). Так как Вупсень не любит число \(0\), в массиве \(b\) не должно быть чисел, равных \(0\). К тому же числа в этом массиве не должны быть слишком большими, поэтому сумма их абсолютных значений не может превышать \(10^9\). Помогите Вупсеню найти любой такой массив \(b\)!

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Следующие \(2 \cdot t\) строк содержат описания наборов входных данных. Описание каждого набора состоит из двух строк.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 10^5\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^4 \le a_i \le 10^4\), \(a_i \neq 0\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — элементы массива \(b\) (\(|b_1|+|b_2|+\ldots +|b_n| \le 10^9\), \(b_i \neq 0\), \(\sum_{i=1}^{n}a_i \cdot b_i=0\)).

Можно показать, что ответ всегда существует.

Примечание

В первом наборе входных данных \(5 \cdot 1 + 5 \cdot (-1)=5-5=0\). Также можно было, например, вывести \(3\) \(-3\), так как \(5 \cdot 3 + 5 \cdot (-3)=15-15=0\)

Во втором наборе входных данных \(5 \cdot (-1) + (-2) \cdot 5 + 10 \cdot 1 + (-9) \cdot (-1) + 4 \cdot (-1)=-5-10+10+9-4=0\).

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\).

A. Ода ветру

математика теория чисел *800

Лук, украшенный безымянными цветами, несет в себе искренние надежды столь же безымянного человека.

Вы получили элегантный лук, известный как Windblume Ode. В оружие вписан массив из \(n\) (\(n \ge 3\)) положительных попарно различных целых чисел (иными словами, все числа различны).

Найдите наибольшее по количеству элементов подмножество этого массива, сумма которого является составным числом. Положительное целое число \(x\) называется составным, если существует положительное целое число \(y\) такое, что \(1 < y < x\) и \(x\) делится на \(y\).

Если существует несколько подмножеств с таким наибольшим размером с составной суммой, можно вывести любое из них. Можно доказать, что при ограничениях задачи такое непустое подмножество всегда существует.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \leq n \leq 100\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) попарно различных целых чисел \(a_{1},a_{2},\dots,a_{n}\) (\(1 \leq a_{i} \leq 200\)) — элементы массива.

Выходные данные

Для каждого набора входных данных выведите две строки.

Первая строка должна содержать одно целое число \(x\): размер наибольшего подмножества с составной суммой. Следующая строка должна содержать \(x\) разделенных пробелами целых чисел, обозначающих позиции элементов выбранного вами подмножества в исходном массиве.

Примечание

В первом наборе входных данных подмножество \(\{a_2, a_1\}\) имеет сумму \(9\), которая является составным числом. Единственное подмножество размера \(3\) имеет простую сумму, равную \(11\). Обратите внимание, что вы также могли выбрать подмножество \(\{a_1, a_3\}\) с суммой \(8 + 2 = 10\), которое является составным, так как кратно \(2\).

Во втором наборе входных данных сумма всех элементов равна \(21\), что является составным числом. Здесь мы просто берем весь массив в качестве подмножества.

G. Омкар и путешествия во времени

математика Структуры данных *3000

El Psy Kongroo.

Омкар смотрит Steins;Gate.

В Steins;Gate, Окабэ Ринтару нужно выполнить \(n\) заданий (\(1 \leq n \leq 2 \cdot 10^5\)). К сожалению, он не знает, когда ему нужно выполнить задания.

Изначально время равно \(0\). Путешествие во времени происходит по следующим правилам:

  • Для каждого \(k = 1, 2, \ldots, n\), Окабэ поймет в момент времени \(b_k\), что он должен был выполнить \(k\)-е задание в момент времени \(a_k\) (\(a_k < b_k\)).

  • Когда он осознает это, если \(k\)-е задание уже было выполнено в момент времени \(a_k\), Окабэ сохраняет обычный ход времени. В противном случае, он перемещается во времени к моменту \(a_k\).

  • Если Окабэ переместится во времени к моменту \(a_k\), то все задания после этого времени снова станут невыполненными. То есть, для каждого \(i\), если \(a_i>a_k\), \(a_i\) станет невыполненным, если оно было выполненным (если оно было невыполненным, ничего не изменится).

  • У Окабэ плохая память, поэтому он может путешествовать во времени во время \(a_k\) только сразу после того, как попадет во время \(b_k\) и узнает, что он должен был выполнить \(k\)-е задание во время \(a_k\). То есть, даже если Окабэ уже выполнял \(k\)-е задание ранее, он не вспомнит об этом до того, как опять наткнется на информацию об этом задании в момент времени \(b_k\).

Пожалуйста, ознакомьтесь с примером путешествия во времени, который приведен в примечаниях.

Существует определенный набор \(s\) заданий, такой, что в первый момент, когда все задания из \(s\) будут одновременно выполнены (независимо от того, выполнены ли в данный момент какие-либо другие задания), произойдет забавная сцена. Окабэ нравится эта сцена, и он хочет знать, сколько раз Окабэ будет перемещаться во времени, прежде чем эта сцена произойдет. Найдите это число по модулю \(10^9 + 7\). Можно доказать, что в конце концов все \(n\) заданий будут выполнены, поэтому ответ всегда существует.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\))  — количество заданий, которые должен выполнить Окабэ.

Далее следует \(n\) строк. В \(k\)-й из этих строк содержатся два целых числа \(a_k\) и \(b_k\) (\(1 \leq a_k < b_k \leq 2n\))  — время, в которое Окабэ должен выполнить \(k\)-ю задачу и время, когда он узнает об этом соответственно. Все \(2n\) этих времен попарно различны (поэтому каждое время от \(1\) до \(2n\) включительно встречается во входных данных ровно один раз).

Следующая строка содержит единственное целое число \(t\) (\(1 \leq t \leq n\))  — размер набора \(s\) задач, которые приводят к смешной сцене.

Последняя строка содержит \(t\) целых чисел \(s_1, s_2, \ldots, s_t\)  — (\(1 \leq s_k \leq n\), числа \(s_1, s_2, \ldots, s_t\) различны)  — множество \(s\) задач.

Выходные данные

Выведите одно целое число  — количество раз, которое время Окабэ будет путешествовать во времени, пока все задачи в наборе \(s\) не будут одновременно завершены, по модулю \(10^9 + 7\),

Примечание

Для первого примера все задания должны быть выполнены, чтобы произошла забавная сценка.

Первоначально время равно \(0\). Ничего не происходит до момента времени \(3\), когда Окабэ понимает, что он должен был выполнить \(2\)-ю задачу в момент времени \(2\). Затем он перемещается во времени в момент времени \(2\) и выполняет задание.

Поскольку задание уже выполнено, он не перемещается во времени снова, когда время снова становится \(3\). Однако в момент времени \(4\) он перемещается в момент времени \(1\), чтобы выполнить \(1\)-е задание.

Это отменяет \(2\)-е задание. Это означает, что задание \(2\) на данный момент не выполнено, а значит, смешная сцена не произойдет в этот момент, несмотря на то что задание \(1\) на данный момент выполнено, и Окабэ ранее выполнял задачу \(2\).

Когда снова наступит время \(3\), он снова вернется во время \(2\) и снова выполнит \(2\)-е задание.

Теперь все задания выполнены, а Окабэ успел переместиться во времени \(3\) раза.

Во втором примере Окабэ предстоит выполнить те же задания. Однако на этот раз для того, чтобы произошла забавная сцена, необходимо выполнить только первое задание. Прочитав приведенный выше пример, вы можете увидеть, что это произойдет, как только Окабэ переместится во времени в момент \(2\).

A. Математичное сложение

математика *800

Иван решил подготовиться к контрольной работе по решению уравнений в целых числах. Он заметил, что все задания в контрольной имеют следующий вид:

  • Вам даны два положительных целых числа \(u\) и \(v\), найдите любую пару целых чисел (необязательно положительных) \(x\) и \(y\) таких, что: \(\)\frac{x}{u} + \frac{y}{v} = \frac{x + y}{u + v}.\(\)
  • Решение \(x = 0\), \(y = 0\) запрещено, поэтому вы должны найти любое решение с \((x, y) \neq (0, 0)\).

Пожалуйста, помогите Ивану решить некоторые уравнения такого вида.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка описания каждого набора входных данных содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq 10^9\)) — параметры уравнения.

Выходные данные

Для каждого набора входных данных выведите два целых числа \(x\) и \(y\) — возможное решение уравнения. Должно быть выполнено, что \(-10^{18} \leq x, y \leq 10^{18}\) и \((x, y) \neq (0, 0)\).

Можно показать, что ответ всегда существует. Если существует несколько возможных решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных: \(\frac{-1}{1} + \frac{1}{1} = 0 = \frac{-1 + 1}{1 + 1}\).

Во втором наборе входных данных: \(\frac{-4}{2} + \frac{9}{3} = 1 = \frac{-4 + 9}{2 + 3}\).

В третьем наборе входных данных: \(\frac{-18}{3} + \frac{50}{5} = 4 = \frac{-18 + 50}{3 + 5}\).

В четвертом наборе входных данных: \(\frac{-4}{6} + \frac{9}{9} = \frac{1}{3} = \frac{-4 + 9}{6 + 9}\).

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\) и не менять порядок элементов.

D. Угадай перестановку

Бинарный поиск интерактив Комбинаторика математика *2000

Это интерактивная задача.

У жюри была тождественная перестановка \(a\) длины \(n\) (\(a_i = i\)).

Жюри выбрало три целых числа \(i\), \(j\), \(k\) такие, что \(1 \leq i < j < k \leq n\), \(j - i > 1\). После этого жюри развернуло отрезки \([i, j - 1]\) и \([j, k]\) в последовательности \(a\).

Разворачивание подотрезка \([l, r]\) последовательности \(a\) означает переворот подотрезка элементов \(a_l, a_{l+1}, \ldots, a_r\) в последовательности, то есть \(a_l\) меняется местами с \(a_r\), \(a_{l+1}\) с \(a_{r-1}\), и т. д..

Вам дано число \(n\). Вы должны найти \(i\), \(j\), \(k\) с помощью некоторых запросов.

За один запрос вы можете выбрать два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) и узнать количество инверсий на подотрезке \([l, r]\) последовательности \(a\). Жюри скажет вам количество пар \((i, j)\) таких, что \(l \leq i < j \leq r\) и \(a_i > a_j\).

Найдите числа \(i\), \(j\), \(k\), выбранные жюри, сделав не более \(40\) запросов.

Жюри фиксирует числа \(i\), \(j\) и \(k\) до запуска вашей программы и не меняет их в зависимости от ваших запросов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В единственной строке для каждого набора входных данных дано целое число \(n\) (\(4 \leq n \leq 10^9\)). После его считывания, вы должны перейти к процессу взаимодействия с программой жюри и делать запросы. После того, как вы дали ответ, вы должны:

  • Закончить работу программы, если это был последний набор входных данных.
  • Иначе начать работу со следующим набором.
Протокол взаимодействия

Чтобы спросить количество инверсий на отрезке \([l, r]\), выведите «? l r», где (\(1 \leq l \leq r \leq n\)). Вы можете сделать не более \(40\) таких запросов в каждом тестовом случае. В ответ вы получите целое число \(x\).

  • Если \(x = -1\), ваша программа сделала некорректный запрос или превысила допустимое количество запросов для данного набора. В таком случае ваша программа должна немедленно завершиться (иначе решение может получить произвольный вердикт вместо Неправильный ответ).
  • Иначе \(x\) равен количеству инверсий на подотрезке \([l, r]\) последовательности \(a\).

Чтобы дать ответ, выведите «! i j k», где \(i\), \(j\), \(k\) — числа, которые, как вы считаете, загадало жюри. После этого вы должны перейти к следующему набору или завершить программу.

После вывода запроса или ответа не забудьте вывести перевод строки и сбросить буфер выходного потока. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат:

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Каждая из следующих \(t\) строк содержит четыре целых числа \(n\), \(i\), \(j\), \(k\) (\(4 \leq n \leq 10^9\), \(1 \leq i < j < k \leq n\), \(j - i > 1\)).

Примечание

В первом наборе входных данных \(i = 1\), \(j = 3\), \(k = 5\), поэтому последовательность \(a\) равна \([2, 1, 5, 4, 3]\).

Во втором наборе входных данных \(i = 2\), \(j = 4\), \(k = 5\), поэтому последовательность \(a\) равна \([1, 3, 2, 5, 4]\).

D. Ещё одна задача на сортировку

математика Структуры данных *1900

У Пети есть массив целых чисел \(a_1, a_2, \ldots, a_n\). Ему нравятся только отсортированные массивы. К сожалению, имеющийся массив может быть произвольным, поэтому Петя хочет его отсортировать.

Петя любит придумывать различные усложнения, поэтому он хочет осортировать массив, используя только \(3\)-циклы. Более формально, за одну операцию он может выбрать \(3\) попарно различные позиции \(i\), \(j\) и \(k\) (\(1 \leq i, j, k \leq n\)) и применить цикл (\(i \to j \to k \to i\)) к массиву \(a\). Это действие одновременно положит значение \(a_i\) на позицию \(j\), значение \(a_j\) на позицию \(k\), и значение \(a_k\) на позицию \(i\), а остальные элементы массива останутся неизменными.

Например, если массив \(a\) равен \([10, 50, 20, 30, 40, 60]\), и Петя выбирает \(i = 2\), \(j = 1\) и \(k = 5\), то массив изменяется на \([\underline{50}, \underline{40}, 20, 30, \underline{10}, 60]\).

Петя может применять произвольное количество \(3\)-циклов (возможно, ноль). Определите, может ли Петя отсортировать массив \(a\), то есть сделать его неубывающим.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если Петя может отсортировать массив \(a\) с помощью \(3\)-циклов, и «NO» (без кавычек) в противном случае. Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В \(6\)-м наборе входных данных Петя может применить \(3\)-цикл \(1 \to 3 \to 2 \to 1\) для сортировки массива.

В \(7\)-м наборе входных данных Петя может сначала применить \(1 \to 3 \to 2 \to 1\), получив \(a = [1, 4, 2, 3]\). Затем он может применить \(2 \to 4 \to 3 \to 2\) и окончательно отсортировать массив.

F. Неравные соседи

дп Комбинаторика математика *2400

Вам дан массив \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящий из положительных целых чисел. Ваша задача — посчитать количество массивов целых чисел \(b_1, b_2, \ldots, b_n\) длины \(n\) таких, что:

  • \(1 \le b_i \le a_i\) для всех \(i\) (\(1 \le i \le n\)), и
  • \(b_i \neq b_{i+1}\) для всех \(i\) (\(1 \le i \le n - 1\)).

Количество таких массивов может быть очень большим, поэтому выведите это число по модулю \(998\,244\,353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

В единственной строке выведите ответ по модулю \(998\,244\,353\).

Примечание

В первом примере подходят массивы \([1, 2, 1]\) и \([2, 1, 2]\).

Во втором примере допустимы массивы \([1, 2]\), \([1, 3]\), \([2, 1]\) и \([2, 3]\).

I. Омкар и мозаика

Комбинаторика Конструктив математика *3500

Омкар создает мозаику, используя цветные квадратные плитки, которые он размещает в сетке \(n \times n\). Когда мозаика будет завершена, в каждой ячейке сетки будет либо глазурная, либо синоперная плитка. Однако в настоящее время он разместил плитки только в некоторых ячейках.

Завершенная мозаика будет шедевром тогда и только тогда, когда каждая плитка примыкает ровно к \(2\) плиткам того же цвета (\(2\) плитки являются примыкающими, если у них есть общая сторона.) Омкар хочет заполнить оставшиеся плитки так, чтобы мозаика стала шедевром. Теперь ему интересно, правда ли, что есть ровно один способ это сделать, и если да, то какой?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2000\)).

Затем следуют \(n\) строк с \(n\) символами в каждой строке. \(i\)-й символ в \(j\)-й строке соответствует ячейке в строке \(i\) и столбце \(j\) сетки, и будет \(S\), если Омкар поместил в эту ячейку синоперную плитку, \(G\), если Омкар поместил глазурную плитку, и \(.\), если она пуста.

Выходные данные

В первой строке выведите UNIQUE, если существует уникальный способ получить шедевр, NONE, если Омкар не может его создать, и MULTIPLE, если существует более одного способа. Все буквы должны быть заглавными.

Если вы выведете UNIQUE, то после этого выведите \(n\) дополнительных строк с \(n\) символами в каждой строке, такими, что \(i\)-й символ в \(j^{\text{th}}\) строке будет \(S\), если плитка в строке \(i\) и столбце \(j\) шедевра — синоперная, и \(G\), если она глазурная.

Примечание

Для первого примера Омкар может получить шедевры

SSSS

SGGS

SGGS

SSSS

и

SSGG

SSGG

GGSS

GGSS.

Для второго примера можно доказать, что Омкар не может сложить плитки, чтобы создать шедевр.

Для третьего примера можно доказать, что данный шедевр — единственный шедевр, который Омкар может создать, сложив плитки.

Для четвертого примера очевидно, что единственная плитка в любой мозаике, которую создает Омкар, не может быть соседней с двумя плитками одного цвета, так как она будет соседней с \(0\) плитками.

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\), одно и то же оружие не разрешается использовать дважды подряд.

B. Хемосе в магазинах

Конструктив математика снм сортировки *1200

Хемосе вместе со своими друзьями Самезом, Ахмедом, Ашрафом, Саваном и О_Е ходил по магазинам в Германии. Как вы знаете, Хемосе и его друзья решают задачи, поэтому они очень умны. Поэтому они отправятся во все магазины со скидками в Германии.

У Хемосе есть массив из \(n\) целых чисел. Он хочет, чтобы Самез отсортировал массив в неубывающем порядке. Поскольку для Самеза это было бы слишком простой задачей, Хемосе разрешает Самезу использовать только следующую операцию:

  • Выберите индексы \(i\) и \(j\) такие, что \(1 \le i, j \le n\), и \(\lvert i - j \rvert \geq x\). Затем поменяйте местами элементы \(a_i\) и \(a_j\).

Подскажите, пожалуйста, существует ли способ отсортировать массив в неубывающем порядке, используя вышеописанную операцию некоторое конечное число раз (возможно, \(0\))?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) \((1 \leq t \leq 10^5)\). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) \((1 \leq x \leq n \leq 10^5)\).

Вторая строка каждого наборов входных данных содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) \((1 \leq a_i \leq 10^9)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных необходимо вывести одну строку.

Если Самез может отсортировать массив в неубывающем порядке с помощью операции, описанной выше, выведите «YES» (без кавычек). В противном случае выведите «NO» (без кавычек).

Вы можете вывести каждую букву «YES» и «NO» в любом регистре (верхнем или нижнем).

Примечание

В первом наборов входных данных вы не можете выполнить никаких операций.

Во втором наборе входных данных массив уже отсортирован.

В третьем наборе входных данных вы можете выполнить следующие операции:

  • \([5,1,2,3,4]\), \(swap(a_1,a_3)\)
  • \([2,1,5,3,4]\), \(swap(a_2,a_5)\)
  • \([2,4,5,3,1]\), \(swap(a_2,a_4)\)
  • \([2,3,5,4,1]\), \(swap(a_1,a_5)\)
  • \([1,3,5,4,2]\), \(swap(a_2,a_5)\)
  • \([1,2,5,4,3]\), \(swap(a_3,a_5)\)
  • \([1,2,3,4,5]\)

(Здесь под \(swap(a_i, a_j)\) имеется в виду обмен местами элементов на позициях \(i\), \(j\)).

D. Хемосе на ICPC?

Бинарный поиск Деревья интерактив математика поиск в глубину и подобное реализация теория чисел *2300

Это интерактивная задача!

На последнем региональном этапе Хемосе, ЗейадХаттаб и ЯхиаШериф — члены команды Carpe Diem — не прошли отбор на ICPC по каким-то неизвестным причинам. Хемосе был очень расстроен и у него был плохой день после соревнований, но ЗейадХаттаб очень мудрый и хорошо знает Хемосе, и не хочет видеть его грустным.

Зейад знает, что Хемосе любит задачи с деревьями, поэтому он дал ему задачу с деревом с очень особенным устройством.

У Хемоса есть взвешенное дерево на \(n\) вершинах и \(n-1\) ребрах. К сожалению, Хемосе не помнит веса ребер.

Определим \(Dist(u, v)\) для \(u\neq v\) как наибольший общий делитель весов всех ребер на пути от вершины \(u\) к вершине \(v\).

У Хемосе есть специальное устройство. Хемосе может дать устройству набор вершин, и устройство вернет наибольший \(Dist\) между любыми двумя вершинами из этого набора. Более формально, если Хемосе даст устройству набор из \(S\) узлов, устройство вернет наибольшее значение \(Dist(u, v)\) по всем парам \((u, v)\), для которых \(u\), \(v\) \(\in\) \(S\) и \(u \neq v\).

Хемосе может использовать это устройство не более \(12\) раз, и хочет найти любые две различные вершины \(a\), \(b\) такие, что \(Dist(a, b)\) является максимально возможным. Можете ли вы ему помочь?

Протокол взаимодействия

Начните взаимодействие с чтения одного целого числа \(n\) (\(2 \le n \le 10^3\)) — количества вершин в дереве.

Затем прочитайте \(n-1\) строк.

\(i\)-я из следующих \(n-1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i\neq v_i\)), что означает наличие ребра между вершинами \(u_i\) и \(v_i\).

Гарантируется, что веса ребер были \(\leq 10^9\).

Гарантируется, что данный граф является деревом.

Теперь вы можете начать задавать запросы. Чтобы задать запрос о множестве из \(k\) вершин \(v_1, v_2, \ldots, v_k\) (\(2 \le k \le n\), \(1 \le v_i \le n\), все \(v_i\) различны), выведите:

? \(k\) \(v_1\) \(v_2\) \(\ldots\) \(v_k\).

Вы получите целое число \(x\), наибольшее \(Dist(v_i, v_j)\) по \(1 \le i, j \le k\) с \(i \neq j\).

Когда вы найдете \(a\) и \(b\) (\(1 \le a, b \le n)\), \(a\neq b\)) такие, что \(Dist(a, b)\) является максимально возможным, выведите ответ в следующем формате:

! \(a\) \(b\)

Вывод ответа не учитывается в лимит в \(12\) запросов.

Если существует несколько пар \((a, b)\) с одинаковым наибольшим \(Dist(a, b)\), можно вывести любую.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы взломать решение, используйте следующий формат.

Первая строка должна содержать одно целое число \(n\) \((2 \leq n \le 10^3)\) — количество вершин.

В \(i\)-й из следующих \(n-1\) строк должно содержаться три целых числа \(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\) есть ребро с весом \(w_i\).

Эти \(n-1\) ребер должны образовывать дерево.

Примечание

Дерево в первом примере приведено ниже:

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\).

A. Выборы

математика *800

Совсем недавно завершились выборы, в которых участвовали три кандидата. Первый кандидат получил \(a\) голосов, второй кандидат получил \(b\) голосов, третий кандидат получил \(c\) голосов. Для каждого кандидата решите следующую задачу: сколько голосов нужно добавить данному кандидату, чтобы он победил на выборах (т. е. число голосов за данного кандидата было строго больше числа голосов за любого другого кандидата)?

Обратите внимание, что для каждого кандидата необходимо решить данную задачу независимо, т. е. добавленные голоса за какого-либо кандидата не влияют на вычисления при анализе ответа для двух других кандидатов.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей три целых числа \(a\), \(b\) и \(c\) (\(0 \le a,b,c \le 10^9\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите три числа \(A\), \(B\) и \(C\) (\(A, B, C \ge 0\)), разделённые пробелами — ответы на задачу для первого, второго и третьего кандидата соответственно.

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\).

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\).

D1. Все одинаковые

математика теория чисел *1100

Эта задача является упрощённой версией задачи D2, но при этом имеет существенные отличия, поэтому прочитайте условие полностью.

У Поликарпа есть массив из \(n\) (\(n\) — чётное число) целых чисел \(a_1, a_2, \dots, a_n\). Поликарп задумал положительное целое число \(k\). После этого Поликарп стал совершать над массивом операции следующего вида: взять произвольный индекс \(i\) (\(1 \le i \le n\)) и уменьшить число \(a_i\) на \(k\).

После того, как Поликарп совершил некоторое (возможно, нулевое) количество таких операций, оказалось, что все числа в массиве стали одинаковыми. Найдите максимальное \(k\), при котором такая ситуация возможна, или выведите \(-1\), если такое число может быть сколь угодно большим.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое чётное число \(n\) (\(4 \le n \le 40\)) (\(n\) — чётное число). Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots a_n\) (\(-10^6 \le a_i \le 10^6\)).

Гарантируется, что сумма всех \(n\), заданных во входных данных, не превосходит \(100\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число \(k\) (\(k \ge 1\)) — максимальное возможное число, которое Поликарп использовал в операциях над массивом, или \(-1\), если такое число может быть сколь угодно большим.

D2. Половина одинаковых

математика Перебор теория чисел *1900

Эта задача является усложнённой версией задачи D1, но при этом имеет существенные отличия, поэтому прочитайте условие полностью.

У Поликарпа есть массив из \(n\) (\(n\) — чётное число) целых чисел \(a_1, a_2, \dots, a_n\). Поликарп задумал положительное целое число \(k\). После этого Поликарп стал совершать над массивом операции следующего вида: взять произвольный индекс \(i\) (\(1 \le i \le n\)) и уменьшить число \(a_i\) на \(k\).

После того, как Поликарп совершил некоторое (возможно, нулевое) количество таких операций, оказалось, что не менее половины чисел в массиве стали одинаковыми. Найдите максимальное \(k\), при котором такая ситуация возможна, или выведите \(-1\), если такое число может быть сколь угодно большим.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое чётное число \(n\) (\(4 \le n \le 40\)) (\(n\) — чётное число). Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots a_n\) (\(-10^6 \le a_i \le 10^6\)).

Гарантируется, что сумма всех \(n\), заданных во входных данных, не превосходит \(100\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число \(k\) (\(k \ge 1\)) — максимальное возможное число, которое Поликарп использовал в операциях над массивом, или \(-1\), если такое число может быть сколь угодно большим.

F. Красно-чёрное число

meet-in-the-middle дп математика поиск в глубину и подобное реализация *2100

Дано целое неотрицательное число \(x\), десятичная запись которого содержит \(n\) цифр. Необходимо покрасить каждую его цифру в красный или чёрный цвет, так чтобы число, образуемое красными цифрами, делилось на \(A\), а число, образуемое чёрными цифрами, делилось на \(B\). Как в красный, так и в чёрный цвет должна быть покрашена хотя бы одна цифра. Из всех таких покрасок числа \(x\), которые возможны, необходимо вывести любую такую, чтобы, если в красный покрашено \(r\) цифр, а в чёрный — \(b\) цифр, величина \(|r - b|\) была минимально возможной.

Обратите внимание, что число \(x\), а также числа, образуемые цифрами одного цвета, могут содержать ведущие нули.

Пример покраски числа для \(A = 3\) и \(B = 13\)

На рисунке выше показан пример покраски числа \(x = 02165\) из \(n = 5\) цифр для \(A = 3\) и \(B = 13\). Красные цифры образуют число \(015\), которое делится на \(3\), а чёрные — \(26\), которое делится на \(13\). Заметим, что абсолютная величина разности количеств красных и чёрных цифр равна \(1\), меньшего значения добиться невозможно.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит три целых числа \(n\), \(A\), \(B\) (\(2 \le n \le 40\), \(1 \le A, B \le 40\)). Вторая строка содержит целое неотрицательное число \(x\), состоящее ровно из \(n\) цифр и, возможно, содержащее ведущие нули.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке:

  • -1, если не существует искомой покраски;
  • строку \(s\) из \(n\) символов, каждый из которых является буквой «R» или «B». Если \(i\)-я цифра числа \(x\) красится в красный цвет, то \(i\)-й символ строки \(s\) должен быть буквой «R», иначе буквой «B».

Число, которое образовано покрашенными в красный цвет цифрами, должно делится на \(A\). Число, которое образовано покрашенными в черный цвет цифрами, должно делится на \(B\). Значение \(|r-b|\) должно быть минимальным, где \(r\)  — количество красных цифр, а \(b\)  — количество чёрных. Если ответов несколько, то выведите любой из них.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных нет чётных цифр, поэтому невозможно составить число, которое делится на \(2\).

В третьем наборе входных данных любая покраска, содержащая хотя бы одну красную и одну чёрную цифру, подходит, поэтому можно покрасить \(4\) цифры в красный и \(4\) в чёрный (\(|4 - 4| = 0\), т. е. нельзя улучшить результат).

В четвёртом наборе входных данных существует единственная искомая покраска.

A. Загадка последовательной суммы

математика *800

У Теофаниса есть для вас загадка, и, если вы сможете ее решить, он угостит вас халлуми — кипрским сыром.

Вам задано целое число \(n\). Вам нужно найти два целых числа \(l\) и \(r\) таких, что \(-10^{18} \le l < r \le 10^{18}\) и \(l + (l + 1) + \ldots + (r - 1) + r = n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой и единственной строке каждого набора входных данных задано одно целое число \(n\) (\(1 \le n \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите два целых числа \(l\) и \(r\) таких, что \(-10^{18} \le l < r \le 10^{18}\) и \(l + (l + 1) + \ldots + (r - 1) + r = n\).

Можно показать, что ответ всегда существует. Если существует несколько ответов, выведите любой.

Примечание

В первом наборе входных данных, \(0 + 1 = 1\).

Во втором наборе входных данных, \((-1) + 0 + 1 + 2 = 2\).

В четвертом наборе, \(1 + 2 + 3 = 6\).

В пятом наборе, \(18 + 19 + 20 + 21 + 22 = 100\).

В шестом наборе, \((-2) + (-1) + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 = 25\).

B. Особые числа

битмаски математика *1100

Теофанису действительно нравятся последовательности положительных целых чисел, а потому его учитель (Yeltsa Kcir) предложил ему задачу про последовательность, которая состоит только из особых чисел.

Назовем положительное число особым, если оно может быть представлено как сумма различных неотрицательных степеней числа \(n\). Например, для \(n = 4\) число \(17\) является особым, так как может быть представлено как \(4^0 + 4^2 = 1 + 16 = 17\), а вот \(9\) не является.

Теофанис просит вас помочь ему найти \(k\)-е особое число, если они отсортированы в порядке возрастания. Так как данное число может быть слишком большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 10^9\); \(1 \le k \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — \(k\)-е особое число в порядке возрастания по модулю \(10^9+7\).

Примечание

При \(n = 3\), последовательность начинается с \([1,3,4,9...]\)

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.

E1. Раскраска кубика Рубика (простая версия)

Комбинаторика математика *1300

Это простая версия задачи. Различие состоит в том, что в этой версии нет вершин с уже зафиксированными цветами.

Теофанис ужасно проголодался и хочет, наконец, отведать своего любимого блюда, шефталью. Но сначала ему нужно закончить с домашней работой. Поможете ли вы ему в решении данной задачи?

Вам задано идеальное двоичное дерево из \(2^k - 1\) вершин — двоичное дерево, в котором у всех вершин \(i\) от \(1\) по \(2^{k - 1} - 1\) есть ровно два сына: вершины \(2i\) и \(2i + 1\). У вершин с \(2^{k - 1}\) по \(2^k - 1\) нет детей. Вы хотите покрасить его вершины в \(6\) цветов кубика Рубика (белый, зеленый, красный, синий, оранжевый и желтый).

Назовем раскраску хорошей, если все ребра дерева соединяют вершины, цвета которых являются соседними цветами кубика Рубика.

Изображение кубика Рубика и его развертка.

Формально говоря:

  • соседними к белой вершине не могут быть белые и желтые вершины;
  • соседними к желтой вершине не могут быть белые и желтые вершины;
  • соседними к зеленой вершине не могут быть зеленые и синие вершины;
  • соседними к синей вершине не могут быть зеленые и синие вершины;
  • соседними к красной вершине не могут быть красные и оранжевые вершины;
  • соседними к оранжевой вершине не могут быть красные и оранжевые вершины.

Вам нужно посчитать количество хороших раскрасок двоичного дерева. Две раскраски считаются различными, если существует вершина, цвет которой в них различается.

Так как ответ может быть слишком большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой и единственной строке задано одно целое число \(k\) (\(1 \le k \le 60\)) — количество уровней в идеальном двоичном дереве, которое вам нужно раскрасить.

Выходные данные

Выведите одно целое число — количество различных раскрасок по модулю \(10^9+7\).

Примечание

На изображении ниже вы можете видеть одну из корректных раскрасок для первого примера.

E2. Раскраска кубика Рубика (сложная версия)

Деревья дп математика Перебор реализация *2300

Это сложная версия задачи. Различие состоит в том, что в этой версии есть вершины с уже зафиксированными цветами.

Теофанис ужасно проголодался и хочет, наконец, отведать своего любимого блюда, шефталью. Но сначала ему нужно закончить с домашней работой. Поможете ли вы ему в решении данной задачи?

Вам задано идеальное двоичное дерево из \(2^k - 1\) вершин — двоичное дерево, в котором у всех вершин \(i\) от \(1\) по \(2^{k - 1} - 1\) есть ровно два сына: вершины \(2i\) и \(2i + 1\). У вершин с \(2^{k - 1}\) по \(2^k - 1\) нет детей. Вы хотите покрасить его вершины в \(6\) цветов кубика Рубика (белый, зеленый, красный, синий, оранжевый и желтый).

Назовем раскраску хорошей, если все ребра дерева соединяют вершины, цвета которых являются соседними цветами кубика Рубика.

Изображение кубика Рубика и его развертка.

Формально говоря:

  • соседними к белой вершине не могут быть белые и желтые вершины;
  • соседними к желтой вершине не могут быть белые и желтые вершины;
  • соседними к зеленой вершине не могут быть зеленые и синие вершины;
  • соседними к синей вершине не могут быть зеленые и синие вершины;
  • соседними к красной вершине не могут быть красные и оранжевые вершины;
  • соседними к оранжевой вершине не могут быть красные и оранжевые вершины.

Однако, есть \(n\) особых вершин в дереве, цвета которых уже зафиксированы.

Вам нужно посчитать количество хороших раскрасок двоичного дерева. Две раскраски считаются различными, если существует вершина, цвет которой в них различается.

Так как ответ может быть слишком большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(k\) (\(1 \le k \le 60\)) — количество уровней в идеальном двоичном дереве, которое вам нужно раскрасить.

Во второй строке задано одно целое число \(n\) (\(1 \le n \le \min(2^k - 1, 2000)\)) — количество вершин, цвета которых уже выбраны.

В следующих \(n\) строках заданы целое число \(v\) (\(1 \le v \le 2^k - 1\)) и строка \(s\) — номер вершины и ее цвет (\(s\) является одной из следующих строк: white, yellow, green, blue, red или orange).

Гарантируется, что каждая вершина \(v\) появляется во входных данных не более одного раза.

Выходные данные

Выведите одно целое число — количество различных раскрасок по модулю \(10^9+7\).

Примечание

На изображении ниже вы можете видеть одну из корректных раскрасок для первого примера.

F. Идеальная ферма

Конструктив математика *2400

Теофанис решил посетить ферму своего дяди. На ферме есть \(s\) животных и \(n\) загонов для животных. Для удобства, загоны построены в один ряд.

Дядя рассказал Теофанису, что ферму можно назвать удачной, если возможно распределить всех животных по всем загонам так, чтобы не было пустых загонов и существовал последовательный отрезок загонов, в которых в сумме ровно \(k\) животных.

Более того, ферму можно считать идеальной, если она является удачной для любого распределения без пустых загонов.

Ни Теофанис ни его дядя не знают, является ли их ферма идеальной. Поможете ли вы им узнать это?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано три целых числа \(s\), \(n\) и \(k\) (\(1 \le s, n, k \le 10^{18}\); \(n \le s\)).

Выходные данные

Для каждого набора входных данных, выведите YES (в любом регистре), если ферма является идеальной, или NO (в любом регистре) в противном случае.

Примечание

Для первого и второго наборов входных данных, единственная возможная комбинация — это \([1]\), а потому всегда будет отрезок с \(1\) животными, но не всегда — \(2\) животными.

C. Удаление двух элементов

дп математика реализация Структуры данных *1200

У Монокарпа есть массив целых чисел \(a\), состоящий из \(n\) элементов. Обозначим среднее арифметическое всех элементов массива за \(k\) (обратите внимание, что \(k\) может быть вещественным числом).

Среднее арифметическое массива из \(n\) элементов — это сумма всех элементов массива деленная на \(n\), то есть на количество элементов массива.

Монокарп решил удалить из массива \(a\) ровно два элемента, при этом он хочет, чтобы после удаления среднее арифметическое оставшихся \((n - 2)\) элементов массива по-прежнему было равно \(k\).

Перед вами стоит задача определить количество пар позиций \([i, j]\) (\(i < j\)) таких, что если удалить элементы из этих позиций, среднее арифметическое оставшихся \((n - 2)\) элементов массива будет равно \(k\), то есть будет равно среднему арифметическому \(n\) элементов изначального массива \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве Монокарпа.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^{9}\)), где \(a_i\) равно \(i\)-му элементу массива Монокарпа.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите количество пар позиций \([i, j]\) (\(i < j\)) таких, что если удалить элементы из этих позиций, среднее арифметическое оставшихся \((n - 2)\) элементов массива будет равно \(k\), то есть будет равно среднему арифметическому \(n\) элементов изначального массива \(a\).

Примечание

В первом примере можно удалить любую пару чисел, так как все элементы массива одинаковы.

Во второй примере нельзя удалить ни одной пары чисел таким образом, чтобы среднее арифметическое не изменилось.

В третьем примере можно удалить пару элементов в позициях \(1\) и \(3\) или пару элементов в позициях \(4\) и \(5\).

D. Тренировка

геометрия Комбинаторика математика реализация Структуры данных *1700

Монокарп тренер команд Берляндского ГУ по программированию. Он решил собрать тренировку для своих команд перед квалификационным этапом.

У Монокарпа есть \(n\) задач, которые еще не решал ни один из его студентов. У \(i\)-й задачи есть тема \(a_i\) (целое число от \(1\) до \(n\)) и сложность \(b_i\) (целое число от \(1\) до \(n\)), причем все задачи попарно различны, то есть нет двух задач, у которых одинаковы и тема, и сложность.

Монокарп решил выбрать из \(n\) задач ровно \(3\) задачи для тренировки, при этом должно выполняться хотя бы одно из двух условий (возможно, оба):

  • темы всех трех выбранных задач различны;
  • сложности всех трех выбранных задач различны.

Перед вами стоит задача определить количество способов, которыми Монокарп может выбрать три задачи для тренировки.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50000\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество задач, которые есть у Монокарпа.

В \(i\)-й из следующих \(n\) строк следуют по два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)) — тема и сложность \(i\)-й задачи.

Гарантируется, что нет двух задач, у которых одинаковы и тема, и сложность.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите количество способов выбрать три задачи для тренировки, которые удовлетворяют описанным в условии требованиям.

Примечание

В первом примере можно взять следующие наборы по три задачи:

  • задачи с номерами \(1\), \(2\), \(4\);
  • задачи с номерами \(1\), \(3\), \(4\);
  • задачи с номерами \(2\), \(3\), \(4\).

Таким образом, количество способов равно трем.

E. Лестницы

дп Комбинаторика математика Перебор поиск в глубину и подобное реализация Структуры данных *2100

Дана матрица, состоящая из \(n\) строк и \(m\) столбцов. Строки пронумерованы сверху вниз, столбцы пронумерованы слева направо.

Ячейки данной матрицы могут быть свободными или заблокированными.

Назовем путь в матрице лестницей, если он:

  • начинается и заканчивается в свободной ячейке;
  • посещает только свободные ячейки;
  • имеет одну из двух возможных структур:
    1. вторая ячейка лежит на \(1\) справа от первой, третья — на \(1\) снизу от второй, четвертая — на \(1\) справа от третьей, и так далее;
    2. вторая ячейка лежит на \(1\) снизу от первой, третья — на \(1\) справа от второй, четвертая — на \(1\) снизу от третьей, и так далее.

В частности, путь, состоящий из одной ячейки, считается лестницей.

Некоторые примеры лестниц:

Изначально все ячейки в матрице свободные.

Требуется обработать \(q\) запросов, каждый из которых переключает состояние одной ячейки. То есть, если клетка в данный момент свободна, то делает ее заблокированной, а если заблокирована, то делает ее свободной.

После каждого запроса требуется вывести количество различных лестниц. Две лестницы считаются различными, если существует такая ячейка, которая входит в один путь и не входит в другой.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 1000\); \(1 \le q \le 10^4\)) — размерности матрицы и количество запросов.

В каждой из следующих \(q\) строк записаны два целых числа \(x\) и \(y\) (\(1 \le x \le n\); \(1 \le y \le m\)) — описание очередного запроса.

Выходные данные

Выведите \(q\) целых чисел — \(i\)-е число должно быть равно количеству различных лестниц в матрице после \(i\) запросов. Две лестницы считаются различными, если существует такая ячейка, которая входит в один путь и не входит в другой.

G. Сумма хороших чисел

математика Строки строковые суфф. структуры хэши *3200

Назовем целое положительное число хорошим, если в его десятичной записи нет цифры 0.

Для массива хороших чисел \(a\) обнаружили, что сумма некоторых двух соседних элементов равна \(x\) (т.е. \(x = a_i + a_{i + 1}\) для некоторого \(i\)). Оказалось, что \(x\) также является хорошим числом.

Затем элементы массива \(a\) выписали последовательно без разделителей в одну строку \(s\). Например, если \(a = [12, 5, 6, 133]\), то \(s = 1256133\).

Ваша задача — по заданной строке \(s\) и числу \(x\) определить, где в строке находятся соседние элементы массива, которые в сумме дают число \(x\). Если существует несколько возможных ответов, вы можете вывести любой.

Входные данные

Первая строка содержит строку \(s\) (\(2 \le |s| \le 5 \cdot 10^5\)).

Вторая строка содержит целое число \(x\) (\(2 \le x < 10^{200000}\)).

Дополнительное ограничение на входные данные: ответ обязательно существует, то есть всегда можно выбрать две соседних подстроки строки \(s\) так, чтобы, если конвертировать эти подстроки в целые числа, их сумма была равна \(x\).

Выходные данные

В первой строке выведите два целых числа \(l_1\), \(r_1\), означающих, что первое слагаемое (\(a_i\)) находится в строке \(s\) с позиции \(l_1\) до позиции \(r_1\).

Во второй строке выведите два целых числа \(l_2\), \(r_2\), означающих, что второе слагаемое (\(a_{i + 1}\)) находится в строке \(s\) с позиции \(l_2\) до позиции \(r_2\).

Примечание

В первом примере из условия \(s[1;2] = 12\) и \(s[3;3] = 5\), \(12+5=17\).

Во втором примере из условия \(s[2;3] = 54\) и \(s[4;6] = 471\), \(54+471=525\).

В третьем примере из условия \(s[1;1] = 2\) и \(s[2;2] = 3\), \(2+3=5\).

В четвертом примере из условия \(s[2;7] = 218633\) и \(s[8;13] = 757639\), \(218633+757639=976272\).

C. Bubble Strike

Комбинаторика математика Теория вероятностей Тернарный поиск *2000

Little Johnny Bubbles enjoys spending hours in front of his computer playing video games. His favorite game is Bubble Strike, fast-paced bubble shooting online game for two players.

Each game is set in one of the N maps, each having different terrain configuration. First phase of each game decides on which map the game will be played. The game system randomly selects three maps and shows them to the players. Each player must pick one of those three maps to be discarded. The game system then randomly selects one of the maps that were not picked by any of the players and starts the game.

Johnny is deeply enthusiastic about the game and wants to spend some time studying maps, thus increasing chances to win games played on those maps. However, he also needs to do his homework, so he does not have time to study all the maps. That is why he asked himself the following question: "What is the minimum number of maps I have to study, so that the probability to play one of those maps is at least \(P\)"?

Can you help Johnny find the answer for this question? You can assume Johnny's opponents do not know him, and they will randomly pick maps.

Input

The first line contains two integers \(N\) (\(3\) \(\leq\) \(N\) \(\leq\) \(10^{3}\)) and \(P\) (\(0\) \(\leq\) \(P\) \(\leq\) \(1\)) – total number of maps in the game and probability to play map Johnny has studied. \(P\) will have at most four digits after the decimal point.

Output

Output contains one integer number – minimum number of maps Johnny has to study.

G. Shortest path

геометрия кратчайшие пути математика Перебор *2700

You are given \(N\) points on an infinite plane with the Cartesian coordinate system on it. \(N-1\) points lay on one line, and one point isn't on that line. You are on point \(K\) at the start, and the goal is to visit every point. You can move between any two points in a straight line, and you can revisit points. What is the minimum length of the path?

Input

The first line contains two integers: \(N\) (\(3 \leq N \leq 2*10^5\)) - the number of points, and \(K\) (\(1 \leq K \leq N\)) - the index of the starting point.

Each of the next \(N\) lines contain two integers, \(A_i\), \(B_i\) (\(-10^6 \leq A_i, B_i \leq 10^6\)) - coordinates of the \(i-th\) point.

Output

The output contains one number - the shortest path to visit all given points starting from point \(K\). The absolute difference between your solution and the main solution shouldn't exceed \(10^-6\);

Note

The shortest path consists of these moves:

2 -> 5

5 -> 4

4 -> 1

1 -> 3

There isn't any shorter path possible.

H. Hidden Fortress

интерактив математика *2100

This is an interactive problem!

As part of your contribution in the Great Bubble War, you have been tasked with finding the newly built enemy fortress. The world you live in is a giant \(10^9 \times 10^9\) grid, with squares having both coordinates between \(1\) and \(10^9\).

You know that the enemy base has the shape of a rectangle, with the sides parallel to the sides of the grid. The people of your world are extremely scared of being at the edge of the world, so you know that the base doesn't contain any of the squares on the edges of the grid (the \(x\) or \(y\) coordinate being \(1\) or \(10^9\)).

To help you locate the base, you have been given a device that you can place in any square of the grid, and it will tell you the manhattan distance to the closest square of the base. The manhattan distance from square \((a, b)\) to square \((p, q)\) is calculated as \(|a−p|+|b−q|\). If you try to place the device inside the enemy base, you will be captured by the enemy. Because of this, you need to make sure to never place the device inside the enemy base.

Unfortunately, the device is powered by a battery and you can't recharge it. This means that you can use the device at most \(40\) times.

Input

The input contains the answers to your queries.

Interaction

Your code is allowed to place the device on any square in the grid by writing "? \(i\) \(j\)" \((1 \leq i,j \leq 10^9)\). In return, it will recieve the manhattan distance to the closest square of the enemy base from square \((i,j)\) or \(-1\) if the square you placed the device on is inside the enemy base or outside the grid.

If you recieve \(-1\) instead of a positive number, exit immidiately and you will see the wrong answer verdict. Otherwise, you can get an arbitrary verdict because your solution will continue to read from a closed stream.

Your solution should use no more than \(40\) queries.

Once you are sure where the enemy base is located, you should print "! \(x\) \(y\) \(p\) \(q\)" \((1 \leq x \leq p\leq 10^9, 1 \leq y \leq q\leq 10^9)\), where \((x, y)\) is the square inside the enemy base with the smallest \(x\) and \(y\) coordinates, and \((p, q)\) is the square inside the enemy base with the largest \(x\) and \(y\) coordinates. Note that answering doesn't count as one of the 40 queries.

After printing a query or printing the answer, do not forget to output end of line and flush the output. Otherwise, you will get idleness limit exceeded. To do this, use:

  • fflush(stdout) or cout.flush() in C++;
  • System.out.flush() in Java;
  • flush(output) in Pascal;
  • stdout.flush() in Python;
  • See the documentation for other languages.

C. Найти пару

математика реализация сортировки *1700

Перед Вами очередная задача на массивы. Рассмотрим произвольную последовательность из n (не обязательно различных) целых чисел a1, a2, ..., an. Нас будут интересовать всевозможные пары чисел (ai, aj), (1 ≤ i, j ≤ n). Другими словами, рассмотрим все n2 пар чисел, выбранных из заданного массива.

Например, в последовательности a = {3, 1, 5} существует 9 пар чисел: (3, 3), (3, 1), (3, 5), (1, 3), (1, 1), (1, 5), (5, 3), (5, 1), (5, 5).

Отсортируем лексикографически все полученные пары по неубыванию. Напомним, что пара (p1, q1) лексикографически меньше пары (p2, q2) тогда и только тогда, когда либо p1 < p2 либо p1 = p2 и q1 < q2.

Тогда отсортированная последовательность, упомянутая выше, будет выглядеть следующим образом: (1, 1), (1, 3), (1, 5), (3, 1), (3, 3), (3, 5), (5, 1), (5, 3), (5, 5)

Пронумеруем пары в отсортированном списке от 1 до n2. Ваша задача формулируется следующим образом: нужно найти k-ую пару в упорядоченном списке всевозможных пар заданного вам массива.

Входные данные

В первой строке заданы два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ n2). Во второй строке задан массив из n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109). Числа в массиве могут совпадать. Все числа разделены пробелами.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Выходные данные

В единственной строке выведите два числа — искомую k-ую пару.

Примечание

В первом примере отсортированная последовательность для заданного массива выглядит следующим образом: (1, 1), (1, 2), (2, 1), (2, 2). 4-ой среди них является пара (2, 2).

Отсортированная последовательность для массива из второго примера приведена в условии. 2-ой парой в ней является (1, 3).

F. Party Organization

математика Перебор Теория вероятностей *2300

On the great island of Baltia, there live \(N\) people, numbered from \(1\) to \(N\). There are exactly \(M\) pairs of people that are friends with each other. The people of Baltia want to organize a successful party, but they have very strict rules on what a party is and when the party is successful. On the island of Baltia, a party is a gathering of exactly \(5\) people. The party is considered to be successful if either all the people at the party are friends with each other (so that they can all talk to each other without having to worry about talking to someone they are not friends with) or no two people at the party are friends with each other (so that everyone can just be on their phones without anyone else bothering them). Please help the people of Baltia organize a successful party or tell them that it's impossible to do so.

Input

The first line contains two integer numbers, \(N\) (\(5 \leq N \leq 2*10^5\)) and \(M\) (\(0 \leq M \leq 2*10^5\)) – the number of people that live in Baltia, and the number of friendships. The next \(M\) lines each contains two integers \(U_i\) and \(V_i\) (\(1 \leq U_i,V_i \leq N\)) – meaning that person \(U_i\) is friends with person \(V_i\). Two friends can not be in the list of friends twice (no pairs are repeated) and a person can be friends with themselves (\(U_i \ne V_i\)).

Output

If it's possible to organize a successful party, print \(5\) numbers indicating which \(5\) people should be invited to the party. If it's not possible to organize a successful party, print \(-1\) instead. If there are multiple successful parties possible, print any.

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} \(\)

F. Две сортировки

meet-in-the-middle Бинарный поиск математика поиск в глубину и подобное *3400

Целые числа от \(1\) до \(n\) отсортировали по возрастанию в лексикографическом порядке, рассматривая их как строки, и получили массив \(a_1, a_2, \dots, a_n\).

Требуется найти сумму \((\sum_{i = 1}^n ((i - a_i) \mod 998244353)) \mod 10^9 + 7\).

\(x \mod y\) означает остаток от деления числа \(x\) на число \(y\) — этот остаток всегда неотрицателен и не превосходит \(y - 1\), например \(5 \mod 3 = 2\), \((-1) \mod 6 = 5\).

Входные данные

В первой строке содержится одно целое число \(n\) (\(1 \leq n \leq 10^{12}\)).

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).

Например, \(42\) меньше \(6\) лексикографически, так как числа отличаются в первой позиции и \(4 < 6\); \(42 < 420\), так как \(42\) является префиксом \(420\).

Обозначим \(998244353\) за \(M\).

В первом примере последовательность \(a\) будет равна \([1, 2, 3]\).

  • \((1 - 1) \mod M = 0 \mod M = 0\)
  • \((2 - 2) \mod M = 0 \mod M = 0\)
  • \((3 - 3) \mod M = 0 \mod M = 0\)

В результате \((0 + 0 + 0) \mod 10^9 + 7 = 0\)

Во втором примере последовательность \(a\) будет равна \([1, 10, 11, 12, 2, 3, 4, 5, 6, 7, 8, 9]\).

  • \((1 - 1) \mod M = 0 \mod M = 0\)
  • \((2 - 10) \mod M = (-8) \mod M = 998244345\)
  • \((3 - 11) \mod M = (-8) \mod M = 998244345\)
  • \((4 - 12) \mod M = (-8) \mod M = 998244345\)
  • \((5 - 2) \mod M = 3 \mod M = 3\)
  • \((6 - 3) \mod M = 3 \mod M = 3\)
  • \((7 - 4) \mod M = 3 \mod M = 3\)
  • \((8 - 5) \mod M = 3 \mod M = 3\)
  • \((9 - 6) \mod M = 3 \mod M = 3\)
  • \((10 - 7) \mod M = 3 \mod M = 3\)
  • \((11 - 8) \mod M = 3 \mod M = 3\)
  • \((12 - 9) \mod M = 3 \mod M = 3\)

В результате \((0 + 998244345 + 998244345 + 998244345 + 3 + 3 + 3 + 3 + 3 + 3 + 3 + 3) \mod 10^9 + 7\) \(=\) \(2994733059 \mod 10^9 + 7\) \(=\) \(994733045\)

A. Раз-делимое замешательство

Конструктив математика теория чисел *1300

У YouKn0wWho есть последовательность целых чисел \(a_1, a_2, \ldots, a_n\). Он будет выполнять следующую операцию, пока последовательность не станет пустой: выберет индекс \(i\) такой, что \(1 \le i \le |a|\) и \(a_i\) не делится на \((i + 1)\), и удалит этот элемент из последовательности. Здесь \(|a|\) — длина последовательности \(a\) в момент выполнения операции. Обратите внимание, что последовательность \(a\) меняется, и следующая операция выполняется над этой измененной последовательностью.

Например, если \(a=[3,5,4,5]\), то можно выбрать \(i = 2\), так как \(a_2 = 5\) не делится на \(i+1 = 3\). После этой операции последовательность будет \([3,4,5]\).

Помогите YouKn0wWho определить, можно ли удалить всю последовательность с помощью вышеупомянутой операции.

Входные данные

Первая строка содержит одно целое число \(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^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно удалить всю последовательность с помощью вышеупомянутой операции, выведите «NO» (без кавычек) в противном случае. Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных YouKn0wWho может выполнить следующие операции (удаляемые элементы подчеркнуты): \([1, \underline{2}, 3] \rightarrow [\underline{1}, 3] \rightarrow [\underline{3}] \rightarrow [\,].\)

Во втором наборе входных данных невозможно удалить всю последовательность, так как \(i\) может быть только \(1\), а когда \(i=1\), \(a_1 = 2\) делится на \(i + 1 = 2\).

B. Мягкая модульная медиана

Конструктив математика теория чисел *1600

У YouKn0wWho есть два четных целых числа \(x\) и \(y\). Помогите ему найти целое число \(n\) такое, что \(1 \le n \le 2 \cdot 10^{18}\) и \(n \bmod x = y \bmod n\). Здесь \(a \bmod b\) обозначает остаток от \(a\) после деления на \(b\). Если таких целых чисел несколько, выведите любое. Можно показать, что такое целое число всегда существует при заданных ограничениях.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\))  — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(2 \le x, y \le 10^9\), оба числа четные).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^{18}\)), которое удовлетворяет условию, указанному в утверждении. Если таких целых чисел несколько, выведите любое. Можно показать, что такое целое число всегда существует при заданных ограничениях.

Примечание

В первом наборе входных данных \(4 \bmod 4 = 8 \bmod 4 = 0\).

Во втором наборе входных данных \(10 \bmod 4 = 2 \bmod 10 = 2\).

В третьем наборе входных данных \(420 \bmod 420 = 420 \bmod 420 = 0\).

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\).

E. Идеальная задача

дп Комбинаторика математика *3200

Последовательность целых чисел \(b_1, b_2, \ldots, b_m\) называется хорошей, если \(max(b_1, b_2, \ldots, b_m) \cdot min(b_1, b_2, \ldots, b_m) \ge b_1 + b_2 + \ldots + b_m\).

Последовательность целых чисел \(a_1, a_2, \ldots, a_n\) называется идеальной, если каждая непустая подпоследовательность \(a\) является хорошей.

У YouKn0wWho есть два целых числа \(n\) и \(M\), \(M\) — простое. Помогите ему найти количество, по модулю \(M\), идеальных последовательностей \(a_1, a_2, \ldots, a_n\) таких, что \(1 \le a_i \le n + 1\) для каждого \(i\) от \(1\) до \(n\).

Последовательность \(d\) является подпоследовательностью последовательности \(c\), если \(d\) может быть получена из \(c\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая и единственная строка входных данных содержит два целых числа \(n\) и \(M\), разделенных пробелом (\(1 \le n \le 200\); \(10^8 \le M \le 10^9\)). Гарантируется, что \(M\) является простым.

Выходные данные

Выведите одно целое число — количество идеальных последовательностей по модулю \(M\).

Примечание

В первом примере идеальные последовательности — \([2, 2]\), \([2, 3]\), \([3, 2]\) и \([3, 3]\).

Во втором примере, некоторые из идеальных последовательностей — \([3, 4, 3, 5]\), \([4, 5, 4, 4]\), \([4, 5, 5, 5]\) и т.д. Одним из примеров последовательности, которая не является идеальной, является \([2, 3, 3, 4]\), потому что, например, подпоследовательность \([2, 3, 4]\) не является хорошей, так как \(2 \cdot 4 < 2 + 3 + 4\).

F. 18 октября 2017

дп Комбинаторика математика реализация *2700

Это произошло 18 октября 2017 года. Shohag, меланхоличная душа, твердо решил, что будет серьезно заниматься спортивным программированием, поскольку оно показалось ему увлекательным. Прошло 4 года, и он счастлив, что выбрал этот путь. Сейчас он создает раунд на Codeforces. Он нашел выдающуюся задачу, но не имеет ни малейшего представления о том, как ее решить. Помогите ему решить финальную задачу раунда.

Вам даны три целых числа \(n\), \(k\) и \(x\). Найдите количество, по модулю \(998\,244\,353\), последовательностей целых чисел \(a_1, a_2, \ldots, a_n\) таких, что выполняются следующие условия:

  • \(0 \le a_i \lt 2^k\) для каждого целого числа \(i\) от \(1\) до \(n\).
  • Не существует непустой подпоследовательности в \(a\) такой, что побитовое исключающее ИЛИ элементов подпоследовательности равно \(x\).

Последовательность \(b\) является подпоследовательностью последовательности \(c\), если \(b\) может быть получена из \(c\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(x\) (\(1 \le n \le 10^9\), \(0 \le k \le 10^7\), \(0 \le x \lt 2^{\operatorname{min}(20, k)}\)), разделенных пробелами.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превышает \(5 \cdot 10^7\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — ответ на задачу.

Примечание

В первом наборе входных данных допустимыми последовательностями являются \([1, 2]\), \([1, 3]\), \([2, 1]\), \([2, 3]\), \([3, 1]\) и \([3, 2]\).

Во втором наборе входных данных единственной допустимой последовательностью является \([0, 0]\).

A. С.А. Отклонение

математика теория чисел *800

Число \(a_2\) считается средним арифметическим двух чисел \(a_1\) и \(a_3\), если выполняется условие: \(a_1 + a_3 = 2\cdot a_2\).

Определим среднее арифметическое отклонение трех чисел \(a_1\), \(a_2\) и \(a_3\) следующим образом: \(d(a_1, a_2, a_3) = |a_1 + a_3 - 2 \cdot a_2|\).

Арифметика много значит для Jeevan. У него есть три числа \(a_1\), \(a_2\) и \(a_3\), и он хочет минимизировать среднее арифметическое отклонение \(d(a_1, a_2, a_3)\). Для этого он может выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выбрать \(i, j\) из \(\{1, 2, 3\}\) такие, что \(i \ne j\) и увеличить \(a_i\) на \(1\) и уменьшить \(a_j\) на \(1\).

Помогите Jeevan найти минимальное значение \(d(a_1, a_2, a_3)\), которое может быть получено после применения операции любое количество раз.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 5000)\)  — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(a_1\), \(a_2\) и \(a_3\) \((1 \le a_1, a_2, a_3 \le 10^{8})\).

Выходные данные

Для каждого набора входных данных выведите минимальное значение \(d(a_1, a_2, a_3)\), которое может быть получено после применения операции любое количество раз.

Примечание

Обратите внимание, что после применения нескольких операций значения \(a_1\), \(a_2\) и \(a_3\) могут стать отрицательными.

В первом наборе входных данных \(4\) уже является средним арифметическим \(3\) и \(5\).

\(d(3, 4, 5) = |3 + 5 - 2 \cdot 4| = 0\)

Во втором наборе входных данных мы можем применить следующую операцию:

\((2, 2, 6)\) \(\xrightarrow[\text{увеличить \)a_2\(}]{\text{уменьшить \)a_1\(}}\) \((1, 3, 6)\)

\(d(1, 3, 6) = |1 + 6 - 2 \cdot 3| = 1\)

Можно доказать, что получить меньшее среднее арифметическое отклонение нельзя.

В третьем наборе входных данных мы можем применить следующие операции:

\((1, 6, 5)\) \(\xrightarrow[\text{увеличить \)a_3\(}]{\text{уменьшить \)a_2\(}}\) \((1, 5, 6)\) \(\xrightarrow[\text{увеличить \)a_1\(}]{\text{уменьшить \)a_2\(}}\) \((2, 4, 6)\)

\(d(2, 4, 6) = |2 + 6 - 2 \cdot 4| = 0\)

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\).

E. Арена

дп Комбинаторика математика *2100

На арене сражаются \(n\) героев. Изначально у \(i\)-го героя \(a_i\) единиц здоровья.

Бой на арене проходит в несколько раундов. В начале каждого раунда каждый еще живой герой наносит \(1\) урона всем остальным героям. Удары всех героев происходят одновременно. Герои, чье здоровье стало меньше \(1\) в конце раунда, считаются убитыми.

Если после некоторого раунда в живых остается ровно \(1\) герой, то он объявляется победителем. В противном случае победителя нет.

Ваша задача — посчитать количество способов выбрать начальное здоровье для каждого героя \(a_i\), где \(1 \le a_i \le x\), таким образом, чтобы не существовало победителя боя. Количество способов может быть очень большим, поэтому выведите его по модулю \(998244353\). Два способа считаются различными, если хотя бы у одного героя отличается количество здоровья. Например, способы \([1, 2, 1]\) и \([2, 1, 1]\) — разные.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(x\) (\(2 \le n \le 500; 1 \le x \le 500\)).

Выходные данные

Выведите одно целое число — количество способов выбрать начальное здоровье для каждого героя \(a_i\), где \(1 \le a_i \le x\), таким образом, чтобы не существовало победителя боя, взятое по модулю \(998244353\).

B. Математический кузнечик

математика *900

Математический кузнечик расположился на числовой оси в точке с координатой \(x_0\).

От нечего делать он начинает прыгать по точкам оси с целочисленными координатами. Прыжок из точки с координатой \(x\) на расстояние \(d\) влево перемещает кузнечика в точку с координатой \(x - d\), а вправо — в точку с координатой \(x + d\).

Кузнечик очень любит целые положительные числа, и поэтому для каждого \(i\) от \(1\) и дальше в \(i\)-ю минуту нахождения на оси совершает прыжок на расстояние ровно \(i\). Иными словами, сначала он прыгает на \(1\), потом на \(2\) и так далее.

Направление прыжка кузнечик определяет следующим образом: если точка, на которой кузнечик находится перед прыжком, имеет четную координату, кузнечик прыгает влево, иначе — вправо.

Например, находясь после \(18\) прыжков в точке с координатой \(7\), кузнечик прыгнет на расстояние \(19\) вправо, так как \(7\) — нечетное число, и окажется в точке \(7 + 19 = 26\). Так как число \(26\) четно, следующий прыжок на расстояние \(20\) кузнечик сделает влево, и окажется в точке \(26 - 20 = 6\).

Определите, в какой точке окажется кузнечик через ровно \(n\) прыжков.

Входные данные

В первой строке ввода дано целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк дано по два целых числа \(x_0\) (\(-10^{14} \leq x_0 \leq 10^{14}\)) и \(n\) (\(0 \leq n \leq 10^{14}\)) — координата начального положения кузнечика и количество прыжков.

Выходные данные

Выведите \(t\) строк. В \(i\)-й строке выведите одно целое число — ответ на \(i\)-й набор входных данных — координату точки, в которой будет находиться кузнечик, сделав \(n\) прыжков из точки \(x_0\).

Примечание

Первые два набора в примере соответствуют первым двум прыжкам из точки \(x_0 = 0\).

Поскольку \(0\) — четное число, первый прыжок длины \(1\) совершается влево, и кузнечик оказывается в точке \(0 - 1 = -1\).

Затем, так как \(-1\) — нечетное число, прыжок длины \(2\) происходит направо, приводя кузнечика в точку с координатой \(-1 + 2 = 1\).

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.

A. Найдите массив

Конструктив математика *800

Для данного числа \(n\), найдите любой массив \(a_1, a_2, \ldots, a_n\) целых чисел, такой, что выполняются все условия ниже:

  • \(1 \le a_i \le 10^9\) для каждого \(i\) от \(1\) до \(n\).

  • \(a_1 < a_2 < \ldots <a_n\)

  • Для каждого \(i\) от \(2\) до \(n\), \(a_i\) не делится на \(a_{i-1}\).

Можно показать, что при ограничениях задачи такой массив всегда существует.

Входные данные

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 1000\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^4\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — найденный массив. Если существует несколько массивов, удовлетворяющих всем условиям, выведите любой из них.

Примечание

В первом наборе входных данных массив \([1]\) удовлетворяет всем условиям.

Во втором наборе входных данных массив \([2, 3]\) удовлетворяет всем условиям, так как \(2<3\) и \(3\) не делится на \(2\).

В третьем наборе входных данных массив \([111, 1111, 11111, 111111, 1111111, 11111111, 111111111]\) удовлетворяет всем условиям, так как он возрастающий и \(a_i\) не делится на \(a_{i-1}\) для любых \(i\) от \(2\) до \(7\).

D. Домино

бпф графы Комбинаторика математика теория чисел *2400

Вам дано \(n\) домино. Каждое домино имеет левую и правую клетку. Каждая клетка может быть окрашена в черный или белый цвет. Некоторые клетки уже окрашены, а некоторые еще нет.

Раскраска считается допустимой тогда и только тогда, когда можно переставить доминошки в некотором порядке так, чтобы для каждого \(1 \le i \le n\) цвет правой клетки \(i\)-го домино отличался от цвета левой клетки \(((i \bmod n)+1)\)-го домино.

Обратите внимание, что домино нельзя вращать, поэтому левая клетка всегда остается левой, а правая — правой.

Подсчитайте количество допустимых способов раскрасить еще не раскрашенные клетки домино. Два способа считаются разными, если есть клетка, которая в одном способе окрашивается в белый цвет, а во втором — в черный. В частности, раскраски BW WB и WB BW различны (и обе недопустимы).

Поскольку это число может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество доминошек.

Следующие \(n\) строк описывают домино. Каждая строка содержит два символа, которые представляют левую и правую клетку. Символ B означает, что соответствующая клетка черная, символ W означает, что соответствующая клетка белая, а ? означает, что клетка еще не окрашена.

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

В первом примере есть только одна доминошка, и нам нужно, чтобы цвет ее правой клетки отличался от цвета ее левой клетки. Этого можно добиться только одним способом.

Во втором примере существует только \(2\) таких раскраски:

BB WW и WB WB.

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\).

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. Угадывание клетки от Anti Light

математика *900

Вы играете в игру на сетке \(n \times m\), в которой компьютер загадал некоторую клетку \((x, y)\) сетки, а вы должны определить, какую именно.

Для этого вы выберете какое-то \(k\) и какие-то \(k\) клеток \((x_1, y_1),\, (x_2, y_2), \ldots, (x_k, y_k)\), и дадите их компьютеру. В ответ вы получите \(k\) чисел \(b_1,\, b_2, \ldots b_k\), где \(b_i\) — манхэттенское расстояние от \((x_i, y_i)\) до скрытой клетки \((x, y)\) (то есть вы знаете, какое расстояние соответствует какой из \(k\) клеток).

Получив эти \(b_1,\, b_2, \ldots, b_k\), вы должны суметь определить загаданную клетку. Для какого наименьшего \(k\) всегда можно правильно угадать загаданную клетку, независимо от того, какую клетку выберет компьютер?

Напомним, что манхэттенское расстояние между клетками \((a_1, b_1)\) и \((a_2, b_2)\) равно \(|a_1-a_2|+|b_1-b_2|\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^9\)) — количество строк и количество столбцов в сетке.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное значение \(k\) для этого набора входных данных.

Примечание

В первом наборе входных данных наименьшее такое \(k\) равно \(2\), для него можно выбрать, например, клетки \((1, 1)\) и \((2, 1)\).

Обратите внимание, что для \(k = 2\) нельзя выбрать клетки \((1, 1)\) и \((2, 3)\), так как обе клетки \((1, 2)\) и \((2, 1)\) дадут \(b_1 = 1, b_2 = 2\), поэтому мы не сможем определить, какая клетка скрыта, если компьютер выберет одну из них.

Во втором наборе входных данных следует выбрать \(k = 1\), для него можно выбрать клетку \((3, 1)\) или \((1, 1)\).

D. Ни кап Ли

дп Комбинаторика математика теория чисел *2000

В последнее время Ли не мог заснуть, потому что ему снились кошмары. В одном из своих кошмаров (который был о несбалансированном глобал раунде) он решил дать отпор и предложить задачу ниже (которую вы должны решить), чтобы сбалансировать раунд, надеясь освободить его от кошмаров.

Непустой массив \(b_1, b_2, \ldots, b_m\) называется хорошим, если существует \(m\) целочисленных последовательностей, удовлетворяющих следующим свойствам:

  • \(i\)-я последовательность состоит из \(b_i\) последовательных целых чисел (например, если \(b_i = 3\), то \(i\)-я последовательность может быть \((-1, 0, 1)\) или \((-5, -4, -3)\), но не \((0, -1, 1)\) или \((1, 2, 3, 4)\)).
  • Если сумма целых чисел в \(i\)-й последовательности равна \(sum_i\), то мы хотим, чтобы \(sum_1 + sum_2 + \ldots + sum_m\) было равно \(0\).

Вам дан массив \(a_1, a_2, \ldots, a_n\). У него есть \(2^n - 1\) непустых подпоследовательностей. Найдите, сколько из них являются хорошими.

Поскольку это число может быть очень большим, выведите его по модулю \(10^9 + 7\).

Массив \(c\) является подпоследовательностью массива \(d\), если \(c\) может быть получен из \(d\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — размер массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите одно целое число — количество непустых хороших подпоследовательностей \(a\), по модулю \(10^9 + 7\).

Примечание

Для первого теста двумя примерами хороших подпоследовательностей являются \([2, 7]\) и \([2, 2, 4, 7]\):

Для \(b = [2, 7]\) мы можем использовать \((-3, -4)\) в качестве первой последовательности и \((-2, -1, \ldots, 4)\) в качестве второй. Обратите внимание, что подпоследовательность \([2, 7]\) входит дважды в \([2, 2, 4, 7]\), поэтому мы должны считать ее дважды.

Зеленые круги обозначают \((-3, -4)\), а оранжевые квадраты - \((-2, -1, \ldots, 4)\).

Для \(b = [2, 2, 4, 7]\) свойствам будут удовлетворять следующие последовательности: \((-1, 0)\), \((-3, -2)\), \((0, 1, 2, 3)\) и \((-3, -2, \ldots, 3)\).

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]\), который является хорошим.

A. Сделай чётное

Конструктив математика *800

У Поликарпа есть целое число \(n\), которое не содержит цифр '0'. С этим числом он может делать следующую операцию несколько (возможно, ноль) раз:

  • Взять префикс длины \(l\) (иными словами, левые \(l\) цифр) числа \(n\) и развернуть его. Так, самая левая цифра меняется местами с \(l\)-й цифрой слева, вторая цифра слева меняется местами с (\(l-1\))-й слева и т.д. Например, если \(n=123456789\) и \(l=5\), то новое значение \(n\) будет равно \(543216789\).

Обратите внимание, что для разных операций значения \(l\) могут быть разными. Допустимо, что число \(l\) равно длине числа \(n\) — в таком случае происходит переворот всего числа \(n\).

Поликарп любит чётные числа. Поэтому он хочет сделать так, чтобы его число было чётным. При этом, Поликарп очень нетерпелив. Он хочет, чтобы было сделано как можно меньшее количество операций.

Помогите Поликарпу. Определите минимальное количество операций, которые ему необходимо совершить с числом \(n\), чтобы сделать его чётным, или определите, что это невозможно.

Вам необходимо ответить на \(t\) независимых наборов входных данных.

Входные данные

В первой строке дано число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В следующих \(t\) строках записано по одному целому числу \(n\) (\(1 \le n < 10^9\)). Гарантируется, что данное число не содержит в своей записи цифр '0'.

Выходные данные

Выведите \(t\) строк. В каждой строке выведите одно целое число — ответ на соответствующий набор входных данных. Если сделать число чётным невозможно, выведите -1.

Примечание

В первом наборе входных данных \(n=3876\), что уже является чётным числом. Поликарпу ничего не нужно делать, поэтому ответ \(0\).

Во втором наборе входных данных \(n=387\). Поликарпу необходимо сделать \(2\) операции:

  1. Выбрать \(l=2\) и развернуть префикс \(\underline{38}7\). Число \(n\) станет равным \(837\). Это число нечётное.
  2. Выбрать \(l=3\) и развернуть префикс \(\underline{837}\). Число \(n\) станет равным \(738\). Это число чётное.

Можно показать, что \(2\) — это минимально возможное количество операций, которое необходимо сделать Поликарпу для того, чтобы его число стало чётным.

В третьем наборе входных данных \(n=4489\). Здесь Поликарп может развернуть всё число целиком (выбрать префикс длины \(l=4\)). Оно станет равным \(9844\) и это чётное число.

В четвёртом тестовом примере \(n=3\). Как бы Поликарп ни старался, но сделать чётное число у него не получится.

B. Составление команд: программисты и математики

Бинарный поиск Конструктив математика *800

Совсем скоро состоится Всеберляндский командный контест по программированию. В этом году к участию допускаются команды из четырёх человек.

В Берляндском государственном университете учится \(a\) программистов и \(b\) математиков. Сколько максимум команд возможно составить, если:

  • в каждой команде должно быть ровно \(4\) человека,
  • команды из \(4\) математиков или \(4\) программистов вряд ли хорошо выступят, поэтому принято решение не составлять такие команды.

Таким образом, в каждой команде должен быть хотя бы один программист и хотя бы один математик.

Выведите искомое максимальное количество команд. Каждый человек может быть членом не более чем одной команды.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания \(t\) наборов, по одному в строке. Каждый набор задается двумя целыми числами \(a\) и \(b\) (\(0 \le a,b \le 10^9\)).

Выходные данные

Выведите \(t\) строк. Каждая строка должна содержать ответ на соответствующий набор входных данных — искомое максимальное количество команд.

Примечание

В первом наборе входных данных примера максимум две команды могут быть составлены. Один из способов это сделать — две команды из \(2\) программистов и \(2\) математиков.

Во втором наборе входных данных примера можно составить только одну команду (\(3\) программиста и \(1\) математик в команде).

C. Бан в чате

Бинарный поиск математика *1300

Вы — совершенно обычный пользователь чата на самой известной стриминговой платформе. Конечно же, в некоторые моменты вам просто хочется отдохнуть, расслабиться и поспамить что-то в чат.

Точнее говоря, вы хотите отправить в чат треугольник из эмоутов размера \(k\). Такой треугольник состоит из \(2k-1\) сообщений. Первое сообщение состоит из одного эмоута, второе — из двух эмоутов, ..., \(k\)-е — из \(k\) эмоутов, \(k+1\)-е — из \(k-1\) эмоутов, ..., и последнее — из одного эмоута.

Например, треугольник из эмоутов для \(k=3\) состоит из \(5\) сообщений:

Конечно же, большинство каналов имеют автоматическую модерацию. Автомодератор забанит вас сразу же после того, как вы отправите хотя бы \(x\) эмоутов подряд (можете считать, что вы — единственный пользователь чата). Теперь вам интересно — как много сообщений вы успеете отправить перед тем, как вас забанят? А может быть, вас не забанят вовсе (то есть вы напишете все \(2k-1\) сообщений и успешно отправите в чат треугольник из эмоутов)? Заметьте, что если вас банят после написания какого-то сообщения, то это сообщение также учитывается.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Следующие \(t\) строк описывают сами наборы.

Единственная строка набора тестовых данных содержит два числа \(k\) и \(x\) (\(1 \le k \le 10^9; 1 \le x \le 10^{18}\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — количество сообщений, которые вы напишете перед тем, как вас забанят, для соответствующих значений \(k\) и \(x\).

Примечание

Давайте проанализируем наборы тестовых данных примера.

  1. В первом наборе тестовых данных вы пишете три сообщения, состоящие из \(1\), \(2\) и \(3\) эмоутов соответственно, и так как \(1 + 2 + 3 \ge 6\), после этого вы получаете бан.
  2. Во втором наборе тестовых данных вы пишете четыре сообщения, состоящие из \(1\), \(2\), \(3\) и \(4\) эмоутов соответственно, и так как \(1 + 2 + 3 + 4 \ge 7\), после этого вы получаете бан.
  3. В третьем наборе тестовых данных, вы пишете одно сообщение, состоящее из \(1\) эмоута. Это не приводит к бану, потому что \(1 < 2\), но вы уже закончили спам треугольника из эмоутов. Таким образом, вы успешно написали одно сообщение.
  4. В четвертом наборе тестовых данных вы пишете четыре сообщения, состоящие из \(1\), \(2\), \(3\) и \(2\) эмоутов соответственно, и так как \(1 + 2 + 3 + 2 \ge 7\), после этого вы получаете бан.
  5. В пятом наборе тестовых данных вы пишете три сообщения, состоящие из \(1\), \(2\) и \(1\) эмоутов соответственно. Это не приводит к бану, потому что \(1 + 2 + 1 < 5\), но вы уже закончили спам треугольника из эмоутов. Таким образом, вы успешно написали три сообщения.
  6. В шестом наборе тестовых данных, так как \(x = 1\), вы получаете бан сразу же после того, как напишете свое первое сообщение.
  7. Седьмой набор тестовых данных слишком большой, чтобы его анализировать, так что мы его пропустим.

D. X-магическая пара

математика теория чисел *1600

Вам дана пара целых чисел \((a, b)\) и целое число \(x\).

Вы можете изменять пару двумя различными способами:

  • присвоить \(a := |a - b|\);
  • присвоить \(b := |a - b|\),
где \(|a - b|\) — абсолютное значение разности между \(a\) и \(b\).

Пара \((a, b)\) называется \(x\)-магической, если \(x\) можно получить либо как \(a\), либо как \(b\) только при помощи заданных операций (то есть пара \((a, b)\) является \(x\)-магической, если \(a = x\) или \(b = x\) после какого-то количества примененных к ней операций). Вы можете применять операции любое количество раз (даже ноль).

Ваша задача — определить, является ли пара \((a, b)\) \(x\)-магической или нет.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Следующие \(t\) строк описывают сами наборы.

Единственная строка набора тестовых данных содержит три целых числа \(a\), \(b\) и \(x\) (\(1 \le a, b, x \le 10^{18}\)).

Выходные данные

Для \(i\)-го набора тестовых данных выведите YES, если соответствующая пара \((a, b)\) является \(x\)-магической, и NO в противном случае.

A. Длинное сравнение

математика реализация *900

Монокарп выписал на доске два числа. Оба заданы в следующем формате: положительное целое число \(x\), к концу которому приписаны \(p\) нулей.

Теперь Монокарп просит вас сравнить эти два числа. Можете ему помочь?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(x_1\) и \(p_1\) (\(1 \le x_1 \le 10^6; 0 \le p_1 \le 10^6\)) — описание первого числа.

Во второй строке каждого набора входных данных записаны два целых числа \(x_2\) и \(p_2\) (\(1 \le x_2 \le 10^6; 0 \le p_2 \le 10^6\)) — описание второго числа.

Выходные данные

На каждый набор входных данных выведите результат сравнения двух данных чисел. Если первое число меньше второго, то выведите '<'. Если первое число больше второго, то выведите '>'. Если они равны, то выведите '='.

Примечание

Сравнения в примере: \(20 > 19\), \(1000 = 1000\), \(1999 < 2000\), \(1 = 1\), \(99 < 100\).

D. MEX-последовательности

дп математика *1900

Назовем последовательность целых чисел \(x_1, x_2, \dots, x_k\) MEX-правильной, если для любого \(i\) (\(1 \le i \le k\)) выполняется \(|x_i - \operatorname{MEX}(x_1, x_2, \dots, x_i)| \le 1\). Здесь \(\operatorname{MEX}(x_1, \dots, x_k)\) — минимальное неотрицательное целое число, которое не принадлежит набору \(x_1, \dots, x_k\). Например, \(\operatorname{MEX}(1, 0, 1, 3) = 2\), а \(\operatorname{MEX}(2, 1, 5) = 0\).

Вам задан массив \(a\), состоящий из \(n\) целых неотрицательных чисел. Найдите количество непустых МЕХ-правильных подпоследовательностей заданного массива. Количество подпоследовательностей может быть очень большим, поэтому выведите его по модулю \(998244353\).

Примечание: подпоследовательность массива \(a\) — это последовательность \([a_{i_1}, a_{i_2}, \dots, a_{i_m}]\), удовлетворяющая ограничениям \(1 \le i_1 < i_2 < \dots < i_m \le n\). Если два разных способа выбрать последовательность индексов \([i_1, i_2, \dots, i_m]\) приводят к одной и той же подпоследовательности, ее следует считать дважды (т. е. две подпоследовательности различны, если различаются последовательности индексов \([i_1, i_2, \dots, i_m]\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le n\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество непустых МЕХ-правильных подпоследовательностей заданного массива, взятое по модулю \(998244353\).

Примечание

Подходящие подпоследовательности в первом примере: \([0]\), \([1]\), \([0,1]\) и \([0,2]\).

Подходящие подпоследовательности во втором примере: \([0]\) и \([1]\).

В третьем примере любая непустая подпоследовательность подходит.

C. Divan и битовые операции

битмаски дп Комбинаторика Конструктив математика *1500

Однажды Divan проанализировал последовательность \(a_1, a_2, \ldots, a_n\), состоящую из \(n\) целых неотрицательных чисел, следующим образом. Он рассмотрел все непустые подпоследовательности последовательности \(a\), вычислил побитовое исключающее ИЛИ её элементов, после чего просуммировал все полученные результаты, получив удобство последовательности \(a\).

Напомним, что последовательность \(c\) является подпоследовательностью последовательности \(d\), если \(c\) может быть получена из \(d\) путем удаления нескольких элементов (возможно, ни одного). Например, \([1, \, 2, \, 3, \, 4]\), \([2, \, 4]\) и \([2]\) являются подпоследовательностями \([1, \, 2, \, 3, \, 4]\), а \([4, \, 3]\) и \([0]\) не являются.

Divan очень гордился проведенным анализом, но теперь потерял и последовательность \(a\), и значение ее удобства! Однако Divan помнит значение побитового ИЛИ на \(m\) непрерывных подотрезках последовательности \(a\). Оказалось, что каждый элемент последовательности входит хотя бы в один из этих \(m\) отрезков.

Divan просит вас найти удобство последовательности \(a\), используя информацию, которую он помнит. Если возможны несколько значений удобства, выведите любое.

Так как ответ может быть большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество чисел в последовательности и количество отрезков, значения побитового ИЛИ которых смог запомнить Divan, соответственно.

Далее идут \(m\) строк, в которых содержатся описания отрезков по одному в строке.

Каждый отрезок задаётся тремя целыми числами \(l\), \(r\) и \(x\) (\(1 \le l \le r \le n\), \(0 \le x \le 2^{30} - 1\)) — левая и правая граница отрезка, а также значение побитового ИЛИ элементов \(a_l, a_{l + 1}, \ldots, a_r\), соответственно.

Гарантируется, что каждый элемент последовательности входит хотя бы в один из данных отрезков. Гарантируется, что существует последовательность, которая удовлетворяет всем данным ограничениям.

Гарантируется, что сумма значений \(n\), а также сумма значений \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите любое возможное удобство последовательности \(a\) по модулю \(10^9 + 7\).

Примечание

В первом примере одной из последовательностей, которая подходит под ограничения, является \([0, 2]\). Рассмотрим все её непустые подпоследовательности:

  • \([0]\): побитовое исключающее ИЛИ равно \(0\);
  • \([2]\): побитовое исключающее ИЛИ равно \(2\);
  • \([0, 2]\): побитовое исключающее ИЛИ равно \(2\).

Суммируя полученные числа, получаем \(4\), что является ответом.

Во втором примере одной из последовательностей, которая подходит под ограничения, является \([0, \, 5, \, 5]\).

В третьем примере одной из последовательностей, которая подходит под ограничения, является \([5, \, 6, \, 7, \, 0, \, 2]\).

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\).

F. ЛЕГОндарный гроссмейстер

дп Комбинаторика математика *2800

Устав играть с мелками, вы решили перейти на Лего! Сегодня у вас есть длинная полоска высоты \(1\) и длины \(n\), в некоторых ячейках которой расположены детальки Лего \(1\) на \(1\).

За одну секунду, вы можете либо убрать две последовательные детальки Лего с полоски (если таковые имеются), либо поставить две детальки Лего на последовательные позиции (если они пустые). Вы можете ставить и убирать Лего только по две штуки за раз, так как ваши пальцы слишком широкие для одной детальки.

Вам интересно узнать, сколько времени вы потратите на игру с Лего. При этом, для вас крайне важна эффективность, а потому если вы хотите получить из некоторого стартового состояния некоторое финишное, то вы всегда потратите наименьшее количество секунд. Если же из стартового состояния невозможно получить финишное, то вы просто ничего не станете делать (то есть потратите \(0\) секунд).

Проблема в том, что вы не помните, были ли детальки Лего в некоторых позициях (как в стартовом состоянии, так и в финишном). А потому вы хотите посчитать суммарное время получения финишного состояния из стартового для всех пар (стартовое состояние, финишное состояние), которые не противоречат вашей памяти. Так как время может оказаться очень большим, выведите его по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 2000\)) — размер полоски Лего.

Во второй строке каждого набора задана строка \(s\) длины \(n\), состоящая из символов 0, 1 и ? — то, что вы помните о стартовом состоянии:

  • 1 означает позицию, в которой совершенно точно стояла деталька Лего,
  • 0 означает позицию, в которой совершенно точно не было детальки Лего,
  • а ? означает позицию, про которую вы ничего не помните.

В третьей строке каждого набора задана строка \(t\) длины \(n\), состоящая из символов 0, 1 и ? — то, что вы помните о финишном состоянии, в том же формате, что и для стартового состояния.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно число — ответ на задачу по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Примечание

В первом наборе входных данных, \(00\) — единственное возможное стартовое состояние, а \(11\) — единственное возможное финишное состояние. Потребуется одна операция, чтобы превратить \(00\) в \(11\).

Во втором наборе, ниже приведены некоторые из возможных пар стартовых и финишных состояний:

  • \((000, 011)\) — потребуется \(1\) операция;
  • \((001, 100)\) — потребуется \(2\) операции;
  • \((010, 000)\) — потребуется \(0\) операций, так как невозможно получить из заданного стартового состояния заданное финишное.

C. Репрезентативные края

геометрия математика Перебор реализация *1500

Массив \(a_1, a_2, \ldots, a_n\) называется хорошим, если и только если для любого подотрезка \(1 \leq l \leq r \leq n\), выполняется следующее: \(a_l + a_{l + 1} + \ldots + a_r = \frac{1}{2}(a_l + a_r) \cdot (r - l + 1)\).

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\). За одну операцию вы можете заменить один любой элемент массива на любое вещественное число. Определите минимальное число операций, необходимое, чтобы сделать массив хорошим.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)): количество наборов входных данных.

Далее следуют описания \(t\) наборов входных данных, по две строки на набор.

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 70\)): количество чисел в массиве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-100 \leq a_i \leq 100\)): изначальный массив.

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное число элементов, которое нужно заменить, чтобы массив стал хорошим.

Примечание

В первом примере массив хороший изначально.

Во втором примере один из возможных хороших массивов — \([1, 1, \underline{1}, \underline{1}]\) (замененные элементы подчеркнуты).

В третьем примере массив хороший изначальное.

Во четвертом примере один из возможных хороших массивов — \([\underline{-2.5}, -2, \underline{-1.5}, -1, \underline{-0.5}, 0]\).

D. Следи за большим средним

дп жадные алгоритмы математика *2000

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) и целое число \(x\).

Вам нужно выбрать максимальное количество элементов массива таким образом, чтобы для любого подотрезка массива \(a_l, a_{l + 1}, \ldots, a_r\), который содержит строго больше одного элемента \((l < r)\), выполняется хотя бы одно из двух:

  • Хотя бы один элемент на этом отрезке не выбран, или
  • \(a_l + a_{l+1} + \ldots + a_r \geq x \cdot (r - l + 1)\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10\)): количество наборов входных данных.

Далее следуют описания \(t\) наборов, по три строки на набор.

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 50\,000\)): размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-100\,000 \leq a_i \leq 100\,000\)).

Третья строка содержит одно целое число \(x\) (\(-100\,000 \leq x \leq 100\,000\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальное количество элементов, которое вы можете выбрать.

Примечание

В первом примере один из корректных способов выбрать элементы следующий: \([\underline{1}, 2, \underline{3}, \underline{4}, \underline{5}]\). Все подотрезки удовлетворяют хотя бы одному критерию. Например, в подотрезоке \(l = 1\), \(r = 2\) элемент \(2\) не выбран, то есть выполнен первый критерий. А в подотрезке \(l = 3\), \(r = 5\) выполняется \(3 + 4 + 5 = 12 \ge 2 \cdot 3\), удовлетворяя второй критерий.

Выбрать все элементы нельзя, так как в этом случае для \(l = 1\), \(r = 2\) все элементы будут выбраны, и \(a_1 + a_2 = 3 < 2 \cdot 2\). Таким образом, максимальное количество выбранных элементов равно \(4\).

Во втором примере один из корректных способов выбрать элементы следующий: \([\underline{2}, \underline{4}, 2, \underline{4}, \underline{2}, \underline{4}, 2, \underline{4}, \underline{2}, \underline{4}]\).

В третьем примере один из корректных способов выбрать элементы следующий: \([\underline{-10}, -5, \underline{-10}]\).

В четвертом примере один из корректных способов выбрать элементы следующий: \([\underline{9}, \underline{9}, -3]\).

F. Трехцветные треугольники

графы математика матрицы Перебор *2900

Вам дан простой неориентированный граф из \(n\) вершин и \(m\) ребер. Ребро \(i\) имеет цвет \(c_i\), который равен \(1\), \(2\) или \(3\), или еще не покрашено (в таком случае \(c_i = -1\)).

Вам нужно покрасить все еще не покрашенные ребра так, чтобы для любых трех попарно соседних вершин \(1 \leq a < b < c \leq n\) цвета ребер \(a \leftrightarrow b\), \(b \leftrightarrow c\) и \(a \leftrightarrow c\) были либо попарно различны, либо все одинаковые. В случае, если не существует подходящей раскраски, вы должны определить это.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10\)): количество наборов входных данных.

Следующие строки содержат описания наборов входных данных.

Первая строка содержит два целых числа \(n\) и \(m\) (\(3 \leq n \leq 64\), \(0 \leq m \leq \min(256, \frac{n(n-1)}{2})\)): количество вершин и ребер в графе.

Каждая из следующих \(m\) строк содержит три целых числа \(a_i\), \(b_i\) и \(c_i\) (\(1 \leq a_i, b_i \leq n\), \(a_i \ne b_i\), \(c_i\) равно \(-1\), \(1\), \(2\) или \(3\)), означающих, что между вершинами \(a_i\) и \(b_i\) существует ребро цвета \(c_i\). Гарантируется, что любая пара вершин соединена не более чем одним ребром.

Выходные данные

Для каждого набора входных данных выведите \(m\) целых чисел \(d_1, d_2, \ldots, d_m\), где \(d_i\) — цвет \(i\)-го ребра в вашей раскраске. Если не существует подходящей раскраски, выведите \(-1\).

H. Следи за малостью XOR

битмаски дп Комбинаторика математика разделяй и властвуй Структуры данных *3000

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) и целое число \(x\).

Найдите количество непустых подмножеств индексов этого массива \(1 \leq b_1 < b_2 < \ldots < b_k \leq n\) таких, что для всех пар \((i, j)\), где \(1 \leq i < j \leq k\), выполняется неравенство \(a_{b_i} \oplus a_{b_j} \leq x\). Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 150\,000\), \(0 \leq x < 2^{30}\)). Здесь \(n\) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < 2^{30}\)) — сам массив.

Выходные данные

Выведите одно целое число: количество непустых подмножеств таких, что побитовое исключающее ИЛИ любых двух элементов не больше \(x\), по модулю \(998\,244\,353\).

B. Задача про НОД

Конструктив математика Перебор теория чисел *900

Дано целое положительное число \(n\). Найдите три различных целых положительных числа \(a\), \(b\), \(c\) таких, что \(a + b + c = n\) и \(\operatorname{gcd}(a, b) = c\), где \(\operatorname{gcd}(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит единственное целое число \(n\) (\(10 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите три различных целых положительных числа \(a\), \(b\), \(c\), удовлетворяющих требованиям. Если существует несколько решений, вы можете вывести любое. Мы можем показать, что ответ всегда существует.

Примечание

В первом наборе входных данных \(6 + 9 + 3 = 18\) и \(\operatorname{gcd}(6, 9) = 3\).

Во втором наборе входных данных \(21 + 39 + 3 = 63\) и \(\operatorname{gcd}(21, 39) = 3\).

В третьем наборе входных данных \(29 + 43 + 1 = 73\) и \(\operatorname{gcd}(29, 43) = 1\).

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\).

D2. Слишком много предателей (сложная версия)

интерактив Конструктив математика реализация *2400

Это интерактивная задача. Единственным различием между лёгкой и сложной версиями является ограничение на количество запросов.

Есть \(n\) игроков, пронумерованных \(1\) до \(n\). Гарантируется, что \(n\) кратно \(3\).

Среди них присутствуют \(k\) предателей и \(n-k\) друзей. Количество предателей \(k\) вам не дано. Гарантируется, что \(\frac{n}{3} < k < \frac{2n}{3}\).

За один запрос вы можете выбрать три различных числа \(a\), \(b\), \(c\) (\(1 \le a, b, c \le n\)) и спросить: «Среди игроков с номерами \(a\), \(b\) и \(c\) больше предателей или друзей?» В качестве ответа на запрос вам будет дан \(0\), если предателей больше, чем друзей, и \(1\) в противном случае.

Найдите количество предателей \(k\) и номера игроков, которые являются предателями, сделав не более \(n+6\) запросов.

Жюри будет отвечать адаптивно, что означает, что индексы предателей не обязательно зафиксированы заранее и могут меняться в зависимости от ваших запросов. Гарантируется, что существует хотя бы один набор предателей, который удовлетворяет ограничениям и ответам на ваши запросы в любой момент времени.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(6 \le n < 10^4\), \(n\) кратно \(3\)) — количество игроков.

Гарантируется, что сумма по \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^4\).

Протокол взаимодействия

Взаимодействие начинается со считывания \(n\).

Вам разрешено сделать не более \(n+6\) запросов следующим образом:

«? a b c» (\(1 \le a, b, c \le n\), \(a\), \(b\) и \(c\) попарно различны).

После каждого запроса вы должны считать число \(r\), которое равно \(0\), если среди игроков с номерами \(a\), \(b\) и \(c\) больше предателей, чем друзей, и равно \(1\) в противном случае.

Ответ \(-1\) вместо \(0\) или \(1\) означает, что вы сделали некорректный запрос или превысили ограничение на количество запросов. Ваша программа должна немедленно завершиться, после прочтения ответа \(-1\) и вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Когда вы нашли номера всех предателей, выведите единственную строку «! » (без кавычек), затем количество предателей \(k\), а затем \(k\) целых чисел, обозначающих номера предателей. Пожалуйста, обратите внимание, что вы должны вывести всю эту информацию на одной строке.

После вывода ответа ваша программа должна продолжить решать оставшиеся наборы входных данных или завершить работу, если все наборы входных данных были решены.

После вывода запросов не забудьте вывести символ перевода строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Вы не можете делать взломы по этой задаче.

Примечание

Пояснение к примеру взаимодействия (обратите внимание, что показанное в примере взаимодействие лишь иллюстрирует формат взаимодействия, и не демонстрирует решение задачи):

Первый набор входных данных:

Запрос «? 1 2 3» возвращает \(0\), так как среди игроков \(1\), \(2\) и \(3\) предателей больше, чем друзей.

Запрос «? 3 4 5» возвращает \(1\), так как среди игроков \(3\), \(4\) и \(5\) друзей больше, чем предателей.

Вывод «! 3 4 1 2» означает, что были найдены все предатели. Всего есть \(k = 3\) предателей. Игроки, являющиеся предателями, имеют номера \(4\), \(1\) и \(2\).

Второй набор входных данных:

Запрос «? 7 1 9» возвращает \(1\), так как среди игроков \(7\), \(1\) и \(9\) друзей больше, чем предателей.

Вывод «! 4 2 3 6 8» означает, что были найдены все предатели. Всего есть \(k = 4\) предателей. Игроки, являющиеся предателями, имеют номера \(2\), \(3\), \(6\) и \(8\).

E. Новогодние конфеты

графы Деревья дп игры кратчайшие пути математика поиск в глубину и подобное реализация теория чисел *2700

Лунный Новый год приближается, и Льдинка только что получила коробку конфет от бабушки с дедушкой! Коробка содержит \(n\) конфет. \(i\)-я конфета имеет вкус \(a_i\).

Льдинка верит, что хорошие вещи случаются парами. К сожалению, вкусы всех конфет попарно различны (все \(a_i\) различны). Льдинка хочет сделать равные вкусы хотя бы у одной пары конфет.

Поэтому она попросила бабушку с дедушкой выполнить несколько замен. Перед выполнением замен Льдинка выбирает две конфеты с номерами \(x\) и \(y\) (\(1 \le x, y \le n\), \(x \ne y\)).

За одну замену дедушка и бабушка Льдинки выбирают неотрицательное целое число \(k\) такое, что \(2^k \ge a_x\), и заменяют вкус \(x\)-й конфеты с \(a_x\) на \(2^k - a_x\) (то есть, присваивают \(a_x := 2^k - a_x\)).

Замены прекратятся только при условии, что \(a_x = a_y\). Заметьте, что другие пары равных по вкусу конфет не остановят процесс.

У Льдинки умные бабушка и дедушка, поэтому они выберут такую последовательность замен, которая минимизирует количество требуемых замен. Поскольку Льдинка любит доставлять неприятности, она хочет максимизировать минимальное требуемое количество замен, выбрав соответствующие \(x\) и \(y\). Она задаётся вопросом, как выбрать такую пару \((x, y)\), что минимальное требуемое количество замен максимально среди всех возможных пар \((x, y)\).

Так как у Льдинки не очень хорошо с математикой, она надеется, что вы поможете ей решить эту задачу.

Входные данные

Первая строка ввода содержит единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество конфет.

Вторая строка ввода содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)).

Гарантируется, что все \(a_i\) различны.

Выходные данные

Выведите три целых числа \(x\), \(y\) и \(m\).

\(x\) и \(y\) являются номерами оптимальных конфет для применения замен. Ваш ответ должен удовлетворять \(1 \le x, y \le n\), \(x \ne y\).

\(m\) является минимальным количеством замен, чтобы сделать \(a_x = a_y\). Можно показать, что \(m \le 10^9\) для любой пары конфет.

Примечание

В первом тесте минимальное количество замен, требуемое, чтобы заменить конфету со вкусом \(6\) на конфету со вкусом \(9\), является \(5\). Последовательность замен следующая: \(6 \rightarrow 2 \rightarrow 0 \rightarrow 1 \rightarrow 7 \rightarrow 9\).

Во втором тесте минимальное количество замен, требуемое, чтобы заменить конфету со вкусом \(4\) на конфету со вкусом \(8\), является \(2\). Последовательность замен следующая: \(4 \rightarrow 0 \rightarrow 8\).

A. Поликарп и суммы подпоследовательностей

математика сортировки *800

У Поликарпа был массив \(a\) из \(3\) положительных целых чисел. Он выписал суммы всех непустых подпоследовательностей этого массива, отсортировал их по неубыванию и получил массив \(b\) из \(7\) целых чисел.

Например, если \(a = \{1, 4, 3\}\), то Поликарп выписал \(1\), \(4\), \(3\), \(1 + 4 = 5\), \(1 + 3 = 4\), \(4 + 3 = 7\), \(1 + 4 + 3 = 8\). После сортировки он получил массив \(b = \{1, 3, 4, 4, 5, 7, 8\}.\)

К сожалению, Поликарп потерял массив \(a\). У него остался только массив \(b\). Помогите ему восстановить массив \(a\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, в которой заданы \(7\) целых чисел \(b_1, b_2, \dots, b_7\) (\(1 \le b_i \le 10^9\); \(b_i \le b_{i+1}\)).

Дополнительное ограничение на входные данные: существует хотя бы один массив \(a\), из которого можно получить данный массив \(b\) по условию задачи.

Выходные данные

Для каждого набора входных данных выведите \(3\) целых числа — \(a_1\), \(a_2\) и \(a_3\). Если ответов может быть несколько, выведите любой из них.

Примечание

Подпоследовательность массива \(a\) — это последовательность, которая получается из \(a\) путем удаления нуля или более его элементов.

Две подпоследовательности считаются различными, если множества индексов входящих в них элементов различны, то есть значения элементов не учитываются при сравнении подпоследовательностей. В частности, любой массив длины \(3\) имеет ровно \(7\) различных непустых подпоследовательностей.

C. Покраска массива

математика *1100

Вам дан массив \(a\) из \(n\) натуральных чисел. Вы должны выбрать натуральное число \(d\) и покрасить все элементы массива в два цвета. Те элементы, которые делятся на \(d\), будут покрашены в красный цвет, а те, которые не делятся — в синий.

Назовем раскраску красивой, если в полученном массиве нет двух соседних элементов одинакового цвета. Ваша задача — выбрать такое значение \(d\), чтобы массив оказался красивым, или сказать, что это невозможно.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(2 \le n \le 100\)) — количество элементов массива.

Во второй строке каждого набора входных данных заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{18}\)).

Выходные данные

На каждый набор входных данных выведите одно целое число. Если такого числа \(d\), при котором будет получена красивая раскраска, не существует, выведите \(0\). Иначе выведите любое подходящее целое число \(d\) (\(1 \le d \le 10^{18}\)).

D. Массив и операции

дп жадные алгоритмы математика *1300

Вам дан массив \(a\) из \(n\) целых чисел, и еще одно целое число \(k\), удовлетворяющее условию \(2k \le n\).

Вы должны выполнить ровно \(k\) операций с этим массивом. В каждой операции вы должны выбрать два элемента массива (пусть эти элементы — \(a_i\) и \(a_j\); они могут быть как одинаковыми, так и различными, но это должны быть элементы на разных позициях), удалить их из массива и прибавить \(\lfloor \frac{a_i}{a_j} \rfloor\) к своему счету, где \(\lfloor \frac{x}{y} \rfloor\) обозначает максимальное целое число, не превосходящее \(\frac{x}{y}\).

Изначально ваш счет равен \(0\). После того как вы выполните ровно \(k\) операций, значения всех оставшихся элементов будут прибавлены к вашему счету.

Посчитайте минимально возможный счет, который вы можете получить.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 100\); \(0 \le k \le \lfloor \frac{n}{2} \rfloor\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — минимально возможный счет.

Примечание

Рассмотрим пример из условия.

В первом наборе входных данных можно получить результат, равный \(2\):

  1. выберем \(a_7 = 1\) и \(a_4 = 2\); счет станет \(0 + \lfloor \frac{1}{2} \rfloor = 0\), а массив станет \([1, 1, 1, 1, 3]\);
  2. выберем \(a_1 = 1\) и \(a_5 = 3\); счет станет \(0 + \lfloor \frac{1}{3} \rfloor = 0\), а массив станет \([1, 1, 1]\);
  3. выберем \(a_1 = 1\) и \(a_2 = 1\); счет станет \(0 + \lfloor \frac{1}{1} \rfloor = 1\), а массив станет \([1]\);
  4. добавим оставшийся элемент \(1\) к счету, и он станет \(2\).

Во втором наборе входных данных вне зависимости от того, как провести операцию, итоговый счет будет равен \(16\).

В третьем наборе входных данных можно получить результат, равный \(0\):

  1. выберем \(a_1 = 1\) и \(a_2 = 3\); счет станет \(0 + \lfloor \frac{1}{3} \rfloor = 0\), а массив станет \([3, 7]\);
  2. выберем \(a_1 = 3\) и \(a_2 = 7\); счет станет \(0 + \lfloor \frac{3}{7} \rfloor = 0\), а массив станет пустым;
  3. массив пуст, поэтому счет больше не меняется.

В четвертом наборе входных данных нельзя выполнить ни одной операции, поэтому итоговый счет равен сумме элементов массива: \(4 + 2 = 6\).

E. Турне певцов

Конструктив математика *1700

\(n\) городов последовательно расположены на окружности. Города пронумерованы от \(1\) до \(n\) в порядке по часовой стрелке. В \(i\)-м городе живет певец с репертуаром на \(a_i\) минут для каждого \(i \in [1, n]\).

Каждый певец двигался по окружности в порядке по часовой стрелке и дал ровно один концерт в каждом из \(n\) городов, начиная с города, в котором он живет. Также в каждом городе \(i\)-го певца посетило вдохновение, и он придумал новую песню длительностью \(a_i\) минут. Эта песня была добавлена в его репертуар, чтобы он её исполнил в следующих городах.

Таким образом, \(i\)-й певец в \(i\)-м городе устроит концерт на \(a_i\) минут, в \((i + 1)\)-м городе он устроит концерт на \(2 \cdot a_i\) минут, ..., в \(((i + k) \bmod n + 1)\)-м городе — на \((k + 2) \cdot a_i\) минут, ..., в городе \(((i + n - 2) \bmod n + 1)\) — на \(n \cdot a_i\) минут.

Вам дан массив \(b\) из целых чисел, где \(b_i\) — суммарная длительность концертов в \(i\)-м городе. Восстановите любую подходящую последовательность положительных целых чисел \(a\) или скажите, что это невозможно.

Входные данные

В первой строке задано одно целое число \(t\) \((1 \le t \le 10^3\)) — количество наборов входных данных. Затем следуют сами наборы входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задано единственное целое число \(n\)(\(1 \le n \le 4 \cdot 10^4\)) — количество городов. Во второй строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^{9}\)) — суммарная длительность концертов в \(i\)-м городе.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

Если не существует подходящей последовательности \(a\), выведите NO. Иначе, в первой строке выведете YES, в следующей строке выведите последовательность \(a_1, a_2, \dots, a_n\) из \(n\) целых чисел, где \(a_i\) (\(1 \le a_i \le 10^{9}\)) — начальная длительность репертуара \(i\)-го певца. Если ответов несколько — выведите любой из них.

Примечание

Рассмотрим \(1\)-й набор входных данных примера:

  • \(1\)-й певец в \(1\)-м городе даст концерт на \(3\) минуты, во \(2\)-м — на \(6\) минут, в \(3\)-м — на \(9\) минут;
  • \(2\)-й певец в \(1\)-м городе даст концерт на \(3\) минуты, во \(2\)-м — на \(1\) минуту, в \(3\)-м — на \(2\) минуты;
  • \(3\)-й певец в \(1\)-м городе даст концерт на \(6\) минут, во \(2\)-м — на \(9\) минут, в \(3\)-м — на \(3\) минуты.

F. Развороты

битмаски Конструктив математика поиск в глубину и подобное реализация Строки *2000

Вам даны два целых положительных числа \(x\) и \(y\). Вы можете совершать с числом \(x\) следующую операцию: записать его в двоичном виде без ведущих нулей, приписать справа \(0\) или \(1\), затем развернуть двоичную запись и превратить ее в десятичное число, которое окажется новым значением \(x\).

Например:

  • \(34\) можно одной операцией превратить в \(81\): двоичная запись \(34\) — это \(100010\), если приписать справа \(1\), развернуть и убрать ведущие нули, можно получить \(1010001\), что является двоичной записью числа \(81\);
  • \(34\) можно одной операцией превратить в \(17\): двоичная запись \(34\) — это \(100010\), если приписать справа \(0\), развернуть и убрать ведущие нули, можно получить \(10001\), что является двоичной записью числа \(17\);
  • \(81\) можно одной операцией превратить в \(69\): двоичная запись \(81\) — это \(1010001\), если приписать справа \(0\), развернуть и убрать ведущие нули, можно получить \(1000101\), что является двоичной записью числа \(69\);
  • \(34\) можно превратить в \(69\) за две операции: сначала превратить \(34\) в \(81\), а потом превратить \(81\) в \(69\).

Ваша задача — выяснить, можно ли превратить \(x\) в \(y\) за какое-то (возможно, нулевое) число операций.

Входные данные

Единственная строка входных данных содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^{18}\)).

Выходные данные

Выведите YES, если вы можете сделать \(x\) равным \(y\), или NO, если это невозможно.

Примечание

В первом примере не надо совершать никаких действий.

Четвертый пример разобран в условии задачи.

B. Квадраты и кубы

математика реализация *800

Поликарп очень любит квадраты и кубы положительных целых чисел. Вот начало ряда чисел, которые ему нравятся: \(1\), \(4\), \(8\), \(9\), ....

Для заданного числа \(n\) посчитайте количество чисел от \(1\) до \(n\), которые нравятся Поликарпу. Иными словами, найдите количество таких \(x\), что \(x\) является квадратом натурального числа или кубом натурального числа (или и квадратом и кубом одновременно).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных в тесте.

Далее в \(t\) строках записаны наборы входных данных по одному в строке. Каждая из строк содержит одно целое число \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите искомый ответ — количество чисел от \(1\) до \(n\), которые нравятся Поликарпу.

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\)), кто должен играть за этим столом.

Если искомых расписаний несколько, то выведите любое из них. Можно показать, что искомое решение обязательно существует.

Вы можете выводить дополнительные пустые строки для разделения ответов на разные наборы входных данных.

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' так, чтобы ее получить.

C. Скрытые перестановки

интерактив математика поиск в глубину и подобное *1700

Это интерактивная задача.

Жюри загадало перестановку \(p\) длины \(n\) и предлагает Вам её угадать. Для этого жюри создало перестановку \(q\) длины \(n\). Изначально \(q\) является тождественной (\(q_i = i\) для всех \(i\)).

За один запрос Вы можете узнать \(q_i\) для любого \(i\). После каждого Вашего запроса жюри будет изменять \(q\) следующим образом:

  • Сначала жюри создаст перестановку \(q'\) длины \(n\) такую что \(q'_i = q_{p_i}\) для всех \(i\).
  • После этого жюри заменит \(q\) на \(q'\).

Вы можете сделать не более \(2n\) запросов, чтобы угадать перестановку \(p\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество тестовых случаев.

Протокол взаимодействия

Взаимодействие Вашей программы с программой жюри в каждом тестовом случае начинается со считывания числа \(n\) (\(1 \leq n \leq 10^4\)) — длины перестановок \(p\) и \(q\).

Чтобы узнать значение \(q_i\), выведите запрос в формате \(?\) \(i\) (\(1 \leq i \leq n\)). После этого, программа жюри выведет значение \(q_i\).

Вы можете сделать не более \(2n\) запросов. В ответ на некорректный запрос программа жюри выведет \(0\), и после этого Вы должны сразу завершить программу, чтобы получить вердикт Неправильный ответ.

Когда Вы будете готовы сообщить \(p\), выведите \(p\) в формате \(!\) \(p_1\) \(p_2\) \(\ldots\) \(p_n\). После этого следует приступать к обработке следующего тестового случая или завершить программу, если это был последний тестовый случай. Вывод перестановки не считается как один из \(2n\) запросов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^4\). Интерактор в этой задаче не является адаптивным.

Взломы:

Чтобы сделать взлом, используйте следующий формат:

В первой строке находится одно целое число \(t\) — количество тестовых случаев.

Описание каждого тестового случая должно состоять из двух строк. В первой строке находится число \(n\) — длина перестановок \(p\) и \(q\). Во второй строке находятся \(n\) чисел \(p_1, p_2, \ldots, p_n\) — перестановка, которую должно загадать жюри в данном тестовом случае.

Примечание

В первом тестовом случае жюри загадало перестановку \(p = [4, 2, 1, 3]\).

Перед первым Вашим запросом \(q = [1, 2, 3, 4]\), ответ на запрос будет равен \(q_3 = 3\).

Перед вторым Вашим запросом \(q = [4, 2, 1, 3]\), ответ на запрос будет равен \(q_2 = 2\).

Перед третьим Вашим запросом \(q = [3, 2, 4, 1]\), ответ на запрос будет равен \(q_4 = 1\).

Во втором тестовом случае жюри загадало перестановку \(p = [1, 3, 4, 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\) монеты. После этого Вы можете дать инструкции

  • Перемещение в следующую клетку в первой строке.
  • Перемещение в следующую клетку в первой строке.
  • Перемещение в следующую клетку во второй строке.
  • Перемещение в следующую клетку во второй строке.
  • Перемещение в следующую клетку в третьем столбце.
  • Перемещение в следующую клетку в третьем столбце.
  • Перемещение в следующую клетку в четвёртом столбце.
  • Перемещение в следующую клетку в четвёртом столбце.

Можно показать, что в результате этих инструкций ни один из друзей не замёрзнет, и что нельзя убрать сугробы меньшей суммарной стоимости.

G. Взвешенные возрастающие подпоследовательности

дп математика Структуры данных *3200

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\).

Последовательность индексов \(i_1 < i_2 < \ldots < i_k\) длины \(k\) задаёт подпоследовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) длины \(k\) последовательности \(a\).

Подпоследовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) длины \(k\) последовательности \(a\) называется возрастающей, если \(a_{i_j} < a_{i_{j+1}}\) для всех \(1 \leq j < k\).

Назовём весом возрастающей подпоследовательности \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) длины \(k\) последовательности \(a\) количество таких \(1 \leq j \leq k\), для которых существует \(i_k < x \leq n\), такой что \(a_x > a_{i_j}\).

Например, если \(a = [6, 4, 8, 6, 5]\), то последовательность индексов \(i = [2, 4]\) задаёт возрастающую подпоследовательность \([4, 6]\) последовательности \(a\). Вес этой возрастающей подпоследовательности будет равен \(1\), так как для \(j = 1\) существует \(x = 5\) для которого \(a_5 = 5 > a_{i_1} = 4\), а для \(j = 2\) такого \(x\) не существует.

Найдите сумму весов всех возрастающих подпоследовательностей \(a\) по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина последовательности \(a\).

Во второй строке дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: сумму весов всех возрастающих подпоследовательностей \(a\) по модулю \(10^9+7\).

Примечание

В первом наборе входных данных следующие возрастающие подпоследовательности \(a\) имеют ненулевой вес:

  • \([a_1] = [6]\) имеет вес \(1\).
  • \([a_2] = [4]\) имеет вес \(1\).
  • \([a_2, a_3] = [4, 8]\) имеет вес \(1\).
  • \([a_2, a_4] = [4, 6]\) имеет вес \(1\).
Сумма весов всех возрастающих подпоследовательностей равна \(4\).

Во втором тестовом случае существует \(7\) возрастающих подпоследовательностей \(a\) ненулевого веса: \(3\) веса \(1\), \(3\) веса \(2\) и \(1\) веса \(3\). Сумма весов равна \(12\).

A. Постройте прямоугольник

геометрия математика *800

Даны три палки с целочисленными длинами \(l_1, l_2\) и \(l_3\).

Требуется сломать ровно одну из них на две части так, чтобы выполнялись следующие условия:

  • у обеих частей положительная (строго больше \(0\)) целочисленная длина;
  • суммарная длина частей равна оригинальной длине палки;
  • возможно собрать прямоугольник из полученных четырех палок такой, что каждая палка используется как ровно одна из его сторон.

Квадрат тоже считается прямоугольником.

Определите, можно ли это сделать.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны три целых числа \(l_1, l_2, l_3\) (\(1 \le l_i \le 10^8\)) — длины палок.

Выходные данные

На каждый набор входных данных выведите «YES», если можно сломать одну из палок на две части с положительными целочисленными длинами так, чтобы можно было собрать прямоугольник из полученных четырех палок. В противном случае выведите «NO».

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных первую палку можно сломать на части длины \(1\) и \(5\). Из них можно собрать прямоугольник с противоположными сторонами \(1\) и \(5\).

Во втором наборе входных данных палку длины \(2\) можно разбить так, что получатся палки длин \(1, 1, 2, 5\), что нельзя сделать прямоугольником. Если сломать палку длины \(5\), то можно получить результаты \(2, 3\) или \(1, 4\), но ни один из них не образует прямоугольник.

В третьем наборе входных данных вторую палку можно разбить на части длины \(2\) и \(2\). Полученный прямоугольник имеет противоположные стороны \(2\) и \(2\) (что является квадратом).

В четвертом наборе входных данных третью палку можно разбить на части длины \(2\) и \(2\). Полученный прямоугольник имеет противоположные стороны \(2\) и \(5\).

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\).

D. Перемешивание

Комбинаторика математика *2000

Вам задана бинарная строка (строка, состоящая из символов 0 и/или 1) \(s\) длины \(n\). Вы можете выполнить следующую операцию со строкой \(s\) не более одного раза: выбрать подстроку (непрерывную подпоследовательность) строки \(s\), в которой ровно \(k\) символов 1, и перемешать ее (переставить все символы подстроки в любом порядке).

Посчитайте кол-во различных строк, которые могут быть получены из \(s\), если применить эту операцию не более одного раза.

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 5000\); \(0 \le k \le n\)).

Во второй строке задана строка \(s\) длины \(n\), состоящая из символов 0 и/или 1.

Выходные данные

Выведите одно целое число — количество различных строк, которые могут быть получены из \(s\), если применить описанную в условии операцию не более одного раза. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Примечание

Некоторые строки, которые вы можете получить в первом примере:

  • чтобы получить 0110110, вы можете выбрать подстроку с \(1\)-го символа по \(4\)-й символ. Эта подстрока — 1100, и ее перемешиванием можно получить 0110;
  • чтобы получить 1111000, вы можете выбрать подстроку с \(3\)-го символа по \(7\)-й символ. Эта подстрока — 00110, и ее перемешиванием можно получить 11000;
  • чтобы получить 1100101, вы можете выбрать подстроку с \(5\)-го символа по \(7\)-й символ. Эта подстрока —110, и ее перемешиванием можно получить 101.

Во втором примере \(k = 0\), поэтому можно выбирать только подстроки, состоящие только из символов 0. Перемешивание таких подстрок не меняет строку, поэтому единственная строка, которую можно получить — 10010.

F. Квадратное множество

Конструктив математика теория чисел хэши *2900

Назовем множество целых положительных чисел \(a_1, a_2, \dots, a_k\) квадратным, если произведение факториалов его элементов является квадратом целого числа, т. е. \(\prod\limits_{i=1}^{k} a_i! = m^2\), для некоторого целого \(m\).

Вам задано положительное целое число \(n\).

Ваша задача — для множества \(1, 2, \dots, n\) найти квадратное подмножество максимального размера. Если оптимальных ответов несколько, выведите любой из них.

Входные данные

Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Выходные данные

В первой строке выведите одно целое число — размер максимального подмножества. Во второй строке выведите само подмножество в произвольном порядке.

A. Робот-пылесос

математика Перебор реализация *800

Робот-пылесос находится на полу прямоугольной комнаты, ограниченной стенами. Пол можно представить как таблицу из \(n\) строк и \(m\) столбцов. Строки пола пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Клетка на пересечении \(r\)-й строки и \(c\)-го столбца обозначается \((r,c)\). Изначально робот находится в клетке \((r_b, c_b)\).

Каждую секунду робот двигается на \(dr\) строк и \(dc\) столбцов, то за секунду робот передвигается из клетки \((r, c)\) в \((r + dr, c + dc)\). Изначально \(dr = 1\), \(dc = 1\). Если в направлении движения робота находится вертикальная стена (левая или правая), \(dc\) отражается перед движением, новое значение \(dc\) становится \(-dc\). Также, если в направлении движения робота находится горизонтальная стена (верхняя или нижняя), \(dr\) отражается перед движением, новое значение \(dr\) становится \(-dr\).

В начале каждой секунды (в том числе перед первым движением робота) робот очищает все клетки, лежащие в той же строке или в том же столбце, что и робот. В комнате лишь одна грязная клетка \((r_d, c_d)\). Задача робота — очистить эту грязную клетку.

Иллюстрация к первому примеру. Робот обозначен голубой дугой. Красной звездой обозначена грязная клетка. Каждую секунду робот очищает строку и столбец, что показано желтыми линиями.

По данному размеру пола \(n\) и \(m\), начальной позиции робота \((r_b, c_b)\) и позиции грязной клетки \((r_d, c_d)\) найдите, через какое время робот выполнит задачу.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных описывается в одной строке шестью целыми числами \(n\), \(m\), \(r_b\), \(c_b\), \(r_d\) и \(c_d\) (\(1 \le n, m \le 100\), \(1 \le r_b, r_d \le n\), \(1 \le c_b, c_d \le m\)) — размерами комнаты, начальной позицией робота и позицией грязной клетки.

Выходные данные

Для каждого набора входных данных выведите одно целое число — время, необходимое роботу для очистки грязной клетки. Можно показать, что робот всегда очистит грязную клетку за конечное время.

Примечание

В первом примере размер пола равен \(10\times 10\). Начальная позиция робота \((6, 1)\), грязная клетка — \((2, 8)\). Иллюстрация к этому примеру находится в условии задачи.

Во втором примере пол такой же, но начальная позиция робота \((9, 9)\), а грязная клетка — \((1, 1)\). В этом примере робот дойдет точно до грязной клетки и очистит ее.

В третьем примере пол имеет размеры \(9 \times 8\). Начальная позиция робота \((5, 6)\), грязная клетка \((2, 1)\).

В четвертом примере пол имеет размеры \(6 \times 9\). Начальная позиция робота \((2, 2)\), грязная клетка \((5, 8)\).

В последнем примере робот изначально в том же столбце, что и грязная клетка, поэтому он ее сразу очистит.

D. Возвращение робота-пылесоса

математика реализация Теория вероятностей *2300

Условие задачи имеет много общего с задачей A. Отличия в задачах заключаются в том, что в этой задаче введена вероятность операции очистки, и отличаются ограничения.

Робот-пылесос находится на полу прямоугольной комнаты, ограниченной стенами. Пол можно представить как таблицу из \(n\) строк и \(m\) столбцов. Строки пола пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Клетка на пересечении \(r\)-й строки и \(c\)-го столбца обозначается \((r,c)\). Изначально робот находится в клетке \((r_b, c_b)\).

Каждую секунду робот двигается на \(dr\) строк и \(dc\) столбцов, то за секунду робот передвигается из клетки \((r, c)\) в \((r + dr, c + dc)\). Изначально \(dr = 1\), \(dc = 1\). Если в направлении движения робота находится вертикальная стена (левая или правая), \(dc\) отражается перед движением, новое значение \(dc\) становится \(-dc\). Также, если в направлении движения робота находится горизонтальная стена (верхняя или нижняя), \(dr\) отражается перед движением, новое значение \(dr\) становится \(-dr\).

В начале каждой секунды (в том числе перед первым движением робота) робот очищает все клетки, лежащие в той же строке или в том же столбце, что и робот. В комнате лишь одна грязная клетка \((r_d, c_d)\). Задача робота — очистить эту грязную клетку.

После долгого тестирования в рамках задачи A робот сломался. А именно, он чистит пол, как указано выше, но в начале каждой секунды операция очистки выполняется только с вероятностью \(\frac p {100}\), и не выполняется с вероятностью \(1 - \frac p {100}\). События выполнения или невыполнения операции очистки в начале каждой секунды независимы.

По данному размеру пола \(n\) и \(m\), начальной позиции робота \((r_b, c_b)\) и позиции грязной клетки \((r_d, c_d)\) найдите математическое ожидание времени, за которое робот выполнит свою работу.

Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac x y\), где \(x\) и \(y\) — целые числа, и \(y \not \equiv 0 \pmod{10^9 + 7} \). Выведите целое число, равное \(x \cdot y^{-1} \bmod (10^9 + 7)\). Другими словами, выведите целое число \(a\) такое, что \(0 \le a < 10^9 + 7\) и \(a \cdot y \equiv x \pmod {10^9 + 7}\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных описывается семью целыми числами \(n\), \(m\), \(r_b\), \(c_b\), \(r_d\), \(c_d\) и \(p\) (\(4 \le n \cdot m \le 10^5\), \(n, m \ge 2\), \(1 \le r_b, r_d \le n\), \(1 \le c_b, c_d \le m\), \(1 \le p \le 99\)) — размерами комнаты, начальной позицией робота, позицией грязной клетки и вероятностью выполнения операции очистки в процентах.

Выходные данные

Для каждого набора входных данных выведите одно целое число — математическое ожидание времени, через которое робот очистит грязную клетку, по модулю \(10^9 + 7\).

Примечание

В первом примере у робота есть возможности очистить грязную клетку каждую секунду. Используя геометрическое распределение, мы можем вычислить, что при вероятности успеха \(25\%\) ожидаемое количество попыток очистить грязную клетку равно \(\frac 1 {0.25} = 4\). Но так как первая попытка очистки выполняется до первого движения робота, то ответ равен \(3\).

Иллюстрация к первому примеру. Робот обозначен голубой дугой. Красной звездой обозначена грязная клетка. Каждую секунду робот с некоторое вероятностью может очистить строку и столбец, что показано желтыми линиями.

Во втором примере размеры доски и позиции другие, но робот все еще имеет возможность очистить строку и столбец каждую секунду с той же вероятность. Поэтому ответ такой же, как и в первом примере.

Иллюстрация ко второму примеру.

Третий и четвертый примеры почти одинаковые. Единственное отличие — позиции робота и грязной клетки поменяны местами. Однако движения в этих двух примерах одинаковые, поэтому результат тоже одинаковый.

A. Плюс один на подмножестве

математика *800

Поликарп получил в подарок массив целых чисел \(a[1 \dots n]\). Он хочет произвести некоторое количество операций (возможно, ноль), чтобы все элементы массива стали одинаковыми (то есть, чтобы стало \(a_1=a_2=\dots=a_n\)).

  • За одну операцию он может взять какие-то индексы в массиве и увеличить числа под этими индексами на \(1\).

Например, пусть \(a=[4,2,1,6,2]\). Он может произвести следующую операцию: выбрать индексы 1, 2 и 4 и увеличить их всех на \(1\). В итоге за одну операцию он может получить новое состояние массива \(a=[5,3,1,7,2]\).

За какое минимальное количество операций он может сделать так, что все элементы массива стали равны между собой (то есть, чтобы стало \(a_1=a_2=\dots=a_n\))?

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — длину массива \(a\).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное необходимое количество операций, чтобы сделать все элементы массива \(a\) одинаковыми.

Примечание

Первый набор входных данных:

  • \(a=[3,4,2,4,1,2]\) берём \(a_3, a_5\) и проводим на них операцию плюс один, в итоге получаем \(a=[3,4,3,4,2,2]\).
  • \(a=[3,4,3,4,2,2]\) берём \(a_1, a_5, a_6\) и проводим на них операцию плюс один, в итоге получаем \(a=[4,4,3,4,3,3]\).
  • \(a=[4,4,3,4,3,3]\) берём \(a_3, a_5, a_6\) и проводим на них операцию плюс один, в итоге получаем \(a=[4,4,4,4,4,4]\).

Существуют и другие последовательности из \(3\) операций, после применения которых все элементы станут равны.

Второй набор входных данных:

  • \(a=[1000,1002,998]\) 2 раза берём \(a_1, a_3\) и проводим на них операцию плюс один, в итоге получаем \(a=[1002,1002,1000]\).
  • \(a=[1002,1002,1000]\) также 2 раза берём \(a_3\) и проводим на нём операцию плюс один, в итоге получаем \(a=[1002,1002,1002]\).

Третий набор входных данных:

  • \(a=[12,11]\) берём \(a_2\) и проводим на нём операцию плюс один, в итоге получаем \(a=[12,12]\).

B. Сделай АП

математика реализация *900

У Поликарпа есть \(3\) положительных целых числа \(a\), \(b\) и \(c\). Он может выполнить следующую операцию ровно один раз.

  • Выбрать положительное целое число \(m\) и домножить ровно одно из чисел \(a\), \(b\) или \(c\) на число \(m\).

Может ли Поликарп сделать так, что после выполнения операции последовательность трёх чисел \(a\), \(b\), \(c\) (именно в этом порядке) образует арифметическую прогрессию? Обратите внимание, что вы не можете менять порядок следования \(a\), \(b\) и \(c\).

Формально, последовательность \(x_1, x_2, \dots, x_n\) называется арифметической прогрессией (АП), если существует такое число \(d\) (называемое «разностью прогрессии»), что \(x_{i+1}=x_i+d\) для всех \(i\) от \(1\) до \(n-1\). В этой задаче \(n=3\).

Например, следующие последовательности являются АП: \([5, 10, 15]\), \([3, 2, 1]\), \([1, 1, 1]\) и \([13, 10, 7]\). Cледующие последовательности не являются АП: \([1, 2, 4]\), \([0, 1, 0]\) и \([1, 3, 2]\).

Вам необходимо ответить на \(t\) независимых наборов входных данных.

Входные данные

В первой строке дано число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В следующих \(t\) строках дано по \(3\) целых числа \(a\), \(b\), \(c\) (\(1 \le a, b, c \le 10^8\)).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если Поликарп может выбрать положительное целое число \(m\) и домножить ровно одно из чисел \(a\), \(b\) или \(c\) на число \(m\), чтобы сделать \([a, b, c]\) арифметической прогрессией. Выведите «NO» (без кавычек) в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом и втором наборе входных данных можно выбрать число \(m=4\) и домножить второе число (\(b=5\)) на \(4\).

В первом наборе входных данных получится последовательность \([10, 20, 30]\). Это АП с разностью \(d=10\).

Во втором наборе входных данных получится последовательность \([30, 20, 10]\). Это АП с разностью \(d=-10\).

В третьем тестовом примере можно выбрать \(m=1\) и домножить любое из чисел на \(1\). Получится последовательность \([1, 2, 3]\). Это АП с разностью \(d=1\).

В четвёртом тестовом примере можно выбрать \(m=9\) и домножить первое число (\(a=1\)) на \(9\). Получится последовательность \([9, 6, 3]\). Это АП с разностью \(d=-3\).

В пятом тестовом примере сделать АП не получится никак.

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 будут распознаны как положительный ответ).

Примечание

Первый тест разобран в тексте условия задачи.

Во втором тесте получить искомый массив невозможно.

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\). Как нетрудно догадаться, близость в таком случае равна нулю.

D. Двоичные пауки

битмаски Деревья математика реализация сортировки Структуры данных *2300

На Марсе обитает необычный вид пауков — Двоичные пауки. Они плетут паутину, чтобы защищаться от врагов.

Чтобы сплести паутину, пауки объединяются в пары. При этом, если у первого паука в паре \(x\) лапок, а у второго — \(y\) лапок, то у них выходит паутина прочностью \(x \oplus y\). Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Двоичные пауки живут большими группами. Сейчас Вы наблюдаете за группой из \(n\) пауков, причем \(i\)-й паук имеет \(a_i\) лапок.

Когда группе пауков грозит опасность, то некоторые из них становятся защитниками. Защитники выбираются следующим образом. Во-первых, должно быть как минимум два паука-защитника. Во-вторых, любая пара из пауков-защитников должна уметь сплести паутину прочностью хотя бы \(k\). В-третьих, защитников должно быть как можно больше.

Ученые долго исследовали поведение Двоичных пауков и выдвинули гипотезу, что они всегда могут выбрать защитников оптимальным образом, удовлетворяя при этом условиям выше. Вам предстоит проверить эту гипотезу на группе пауков. Для этого надо понять, сколько пауков должны стать защитниками. А поскольку Вы не являетесь Двоичным пауком, то Вы решили прибегнуть к помощи компьютера и написать программу, которая решает эту непростую задачу.

Входные данные

В первой строке входных данных находится два целых числа \(n\) и \(k\) (\(2 \le n \le 3\cdot10^5\), \(0 \le k \le 2^{30} - 1\)) — количество пауков в группе и минимальная допустимая прочность паутины.

Во второй строке входных данных находится \(n\) целых чисел \(a_i\) (\(0 \le a_i \le 2^{30}-1\)) — количество лапок у \(i\)-го паука.

Выходные данные

В первой строке выведите целое число \(\ell\) (\(2 \le \ell \le n\)) — максимально возможное количество пауков-защитников.

Во второй строке выведите через пробел \(\ell\) различных целых чисел \(b_i\) (\(1 \le b_i \le n\)) — номера пауков, которые станут защитниками.

Если существует несколько способов выбрать защитников, то выведите любой из них.

Увы, может получиться и так, что собрать защитников невозможно. В таком случае требуется вывести единственное число \(-1\).

Примечание

Рассмотрим пример из условия.

В первом примере группа пауков выглядит следующим образом:

Возьмем трех пауков: с двумя, десятью и \(16\)-ю лапками. Тогда нетрудно видеть, что каждая пара сможет сплести достаточно прочную паутину, т. к. \(2 \oplus 10 = 8 \ge 8\), \(2 \oplus 16 = 18 \ge 8\) и \(10 \oplus 16 = 26 \ge 8\).

Данный вариант выбора не единственный: можно, к примеру, выбрать трех пауков с номерами \(3\), \(4\) и \(6\).

Во втором примере никакая пара пауков не сможет сплести паутину прочностью \(1024\) или больше, поэтому ответ \(-1\).

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\) участников, соответственно. В среднюю и тяжелую категории придется пригласить по одному участнику.

F. Случайный код

дп Комбинаторика математика Теория вероятностей теория чисел *2800

Дан массив целых чисел \(a_0, a_1, \dots, a_{n - 1}\) и целое число \(k\). Вы выполняете следующий код:

long long ans = 0; // 64-битная знаковая целочисленная переменная, изначально равная 0
for(int i = 1; i <= k; i++)
{
int idx = rnd.next(0, n - 1); // генерирует случайное целое число от 0 до n - 1 включительно
// каждое целое число от 0 до n - 1 выбирается с одинаковой вероятностью
ans += a[idx];
a[idx] -= (a[idx] % i);
}

Ваша задача — посчитать матожидание значения переменной ans после выполнения этого кода.

Обратите внимание, что входные данные генерируется специальным образом (подробнее в секции «Входные данные»).

Входные данные

В единственной строке заданы шесть целых чисел \(n\), \(a_0\), \(x\), \(y\), \(k\) и \(M\) (\(1 \le n \le 10^7\); \(1 \le a_0, x, y < M \le 998244353\); \(1 \le k \le 17\)).

Массив \(a\) строится следующим образом:

  • \(a_0\) задано во входных данных;
  • для каждого \(i\) от \(1\) до \(n - 1\) значение \(a_i\) считается как \(a_i = (a_{i - 1} \cdot x + y) \bmod M\).
Выходные данные

Пусть матожидание значения переменной ans после выполнения кода равно \(E\). Можно показать, что \(E \cdot n^k\) — целое число. Выведите остаток от деления этого числа на \(998244353\).

Примечание

Массив в первом примере — \([10, 35, 22]\). Во втором примере — \([15363, 1418543]\).

D. Не добавлять

дп математика Перебор теория чисел *1900

Вам дан массив \(a_1, a_2, \dots, a_n\) из \(n\) различных целых чисел. Вы можете выполнять следующую операцию:

  • Выберите два элемента \(a_i\) и \(a_j\) (\(i \ne j\)) такие, что \(\gcd(a_i, a_j)\) не встречается среди элементов массива, и добавьте \(\gcd(a_i, a_j)\) в конец массива. Здесь \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Обратите внимание, что после каждой операции массив меняется, и последующие операции выполняются с новым массивом.

Какое максимальное число раз вы можете выполнить операцию?

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^6\)). Все \(a_i\) различны.

Выходные данные

Выведите одно целое число — максимальное количество операций, которое можно выполнить с данным массивом.

Примечание

В первом примере один из способов выполнить максимальное число операций такой:

  • Выбрать \(i = 1, j= 5\) и добавить \(\gcd(a_1, a_5) = \gcd(4, 30) = 2\) к массиву.
  • Выбрать \(i = 2, j= 4\) и добавить \(\gcd(a_2, a_4) = \gcd(20, 25) = 5\) к массиву.
  • Выбрать \(i = 2, j= 5\) и добавить \(\gcd(a_2, a_5) = \gcd(20, 30) = 10\) к массиву.

Можно показать, что не существует способа выполнить больше \(3\) операций с массивом.

Во втором примере можно добавить \(3\), затем \(1\), затем \(5\) и \(2\).

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\).

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\)

D1. Игра на сумму (Легкая версия)

дп игры Комбинаторика математика *2100

Это легкая версия задачи. Разница заключается в ограничениях на \(n\), \(m\) и \(t\). Делать взломы можно только в том случае, если решены обе задачи.

Алисе и Бобу даются числа \(n\), \(m\) и \(k\), и они играют в следующую игру:

В игре есть счет, который Алиса пытается максимизировать, а Боб старается минимизировать. Первоначально счет равен \(0\). Игра состоит из \(n\) ходов. Каждый ход Алиса выбирает число от \(0\) до \(k\) (необязательно целое), которое Боб либо прибавляет, либо вычитает из счета игры. Но на протяжении всей игры Боб должен прибавить не менее \(m\) из \(n\) ходов.

Боб узнает, какое число выбрала Алиса, прежде чем решит, прибавить или вычесть это число из счета, а Алиса узнает, прибавил Боб или вычел число для предыдущего хода, прежде чем выбрать число для текущего хода (кроме первого хода, поскольку предыдущего хода не было).

Если Алиса и Боб будут играть оптимально, каков будет окончательный счет игры?

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество тестов. Описание тестовых примеров следует ниже.

Каждый тестовый пример состоит из одной строки, содержащей три целых числа: \(n\), \(m\) и \(k\) (\(1 \le m \le n \le 2000, 0 \le k < 10^9 + 7\)) — количество ходов, сколько из этих ходов Боб должен прибавить, и наибольшее число, которое Алиса может выбрать соответственно.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2000\).

Выходные данные

Для каждого тестового примера выведите одно число — результат оптимальной игры по модулю \(10^9 + 7\).

Формально пусть \(M = 10^9 + 7\). Можно показать, что ответ может быть выражен в виде неприводимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом тестовом примере вся игра имеет \(3\) хода, и, поскольку \(m = 3\), Боб должен добавить в каждый из них. Следовательно, Алиса должна каждый ход выбирать самое большое число, которое она может, а именно \(k = 2\).

В третьем тестовом примере у Алисы есть стратегия, гарантирующая оценку \(\frac{75}{8} \equiv 375000012 \pmod{10^9 + 7}\).

В четвертом тестовом примере у Алисы есть стратегия, гарантирующая оценку \(\frac{45}{2} \equiv 500000026 \pmod{10^9 + 7}\).

D2. Игра на сумму (Сложная версия)

дп игры Комбинаторика математика *2400

Это сложная версия задачи. Разница заключается в ограничениях на \(n\), \(m\) и \(t\). Делать взломы можно только в том случае, если решены обе задачи.

Алисе и Бобу даются числа \(n\), \(m\) и \(k\), и они играют в следующую игру:

В игре есть счет, который Алиса пытается максимизировать, а Боб старается минимизировать. Первоначально счет равен \(0\). Игра состоит из \(n\) ходов. Каждый ход Алиса выбирает число от \(0\) до \(k\) (необязательно целое), которое Боб либо прибавляет, либо вычитает из счета игры. Но на протяжении всей игры Боб должен прибавить не менее \(m\) из \(n\) ходов.

Боб узнает, какое число выбрала Алиса, прежде чем решит, прибавить или вычесть это число из счета, а Алиса узнает, прибавил Боб или вычел число для предыдущего хода, прежде чем выбрать число для текущего хода (кроме первого хода, поскольку предыдущего хода не было).

Если Алиса и Боб будут играть оптимально, каков будет окончательный счет игры?

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество тестов. Описание тестовых примеров следует ниже.

Каждый тестовый пример состоит из одной строки, содержащей три целых числа: \(n\), \(m\) и \(k\) (\(1 \le m \le n \le 10^6, 0 \le k < 10^9 + 7\)) — количество ходов, сколько из этих ходов Боб должен прибавить, и наибольшее число, которое Алиса может выбрать соответственно.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(10^6\).

Выходные данные

Для каждого тестового примера выведите одно число — результат оптимальной игры по модулю \(10^9 + 7\).

Формально пусть \(M = 10^9 + 7\). Можно показать, что ответ может быть выражен в виде неприводимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом тестовом примере вся игра имеет \(3\) хода, и, поскольку \(m = 3\), Боб должен добавить в каждый из них. Следовательно, Алиса должна каждый ход выбирать самое большое число, которое она может, а именно \(k = 2\).

В третьем тестовом примере у Алисы есть стратегия, гарантирующая оценку \(\frac{75}{8} \equiv 375000012 \pmod{10^9 + 7}\).

В четвертом тестовом примере у Алисы есть стратегия, гарантирующая оценку \(\frac{45}{2} \equiv 500000026 \pmod{10^9 + 7}\).

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\).

E. Ожидаемые компоненты

Комбинаторика математика Теория вероятностей теория чисел *2900

Дан кольцевой массив \(a\) размера \(n\), где \(a_i\) равно значению \(a\) в \(i\)-й позиции, значения могут повторяться. Пусть перестановка \(a\) равна другой перестановке \(a\) тогда и только тогда, когда их значения равны в каждой позиции \(i\) или можно сделать из одной перестановки другую циклическим сдвигом. Положим в качестве количества компонент циклического массива \(b\) количество компонент связности в графе, в котором вершины — это позиции \(b\), и между двумя соседними позициями \(b\) существует ребро, если значения в этих позициях равны (заметьте, что в кольцевом массиве первая и последняя позиции считаются соседними).

Найдите математическое ожидание количества компонент перестановки \(a\), если мы равновероятно выбираем ее из множества всех различных перестановок \(a\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — размер кольцевого массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел, \(i\)-е из них равно значению \(a_i\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Гарантируется, что количество различных перестановок \(a\) не делится на \(M\)

Выходные данные

Для каждого набора входных данных напечатайте одно целое число — математическое ожидание количества компонент перестановки \(a\), если мы выбираем ее равновероятно из множества всех различных перестановок \(a\) по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) – целые числа и \(q \not \equiv 0 \pmod{M}\). Напечатайте целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, напечатайте такое целое \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом наборе существует только \(1\) перестановка \(a\):

  • \([1, 1, 1, 1]\) содержит \(1\) компоненту.
  • Поэтому математическое ожидание количества компонент равно \(\frac{1}{1} = 1\)

Во втором наборе есть \(4\) способа переставить кольцевой массив \(a\), но существует только \(1\) различная перестановка \(a\):

  • \([1, 1, 1, 2]\), \([1, 1, 2, 1]\), \([1, 2, 1, 1]\) и \([2, 1, 1, 1]\) — равные перестановки, содержащие \(2\) компоненты.
  • Поэтому математическое ожидание количества компонент равно \(\frac{2}{1} = 2\)

Во третьем наборе есть \(6\) способов переставить кольцевой массив \(a\), но существует только \(2\) различные перестановки \(a\):

  • \([1, 1, 2, 2]\), \([2, 1, 1, 2]\), \([2, 2, 1, 1]\) и \([1, 2, 2, 1]\) — равные перестановки, содержащие \(2\) компоненты.
  • \([1, 2, 1, 2]\) и \([2, 1, 2, 1]\) — равные перестановки, содержащие \(4\) компоненты.
  • Поэтому математическое ожидание количества компонент равно \(\frac{2+4}{2} = \frac{6}{2} = 3\)

Во четвертом наборе есть \(120\) способов переставить кольцевой массив \(a\), но существует только \(24\) различные перестановки \(a\):

  • Любая перестановка \(a\) содержит \(5\) компонент.
  • Поэтому математическое ожидание количества компонент равно \(\frac{24\cdot 5}{24} = \frac{120}{24} = 5\)

C. Странная контрольная

Бинарный поиск битмаски дп математика Перебор *1600

Игорь учится в 11-м классе. Завтра ему предстоит написать контрольную работу по информатике у самого строгого преподавателя школы — Павла Денисовича.

Игорь заранее знает, как будет проходить контрольная: изначально преподаватель даст каждому ученику, включая Игоря, два целых положительных числа \(a\) и \(b\) (\(a < b\)). Затем ученик может неограниченное количество раз производить с числами следующие операции:

  • \(a := a + 1\) (увеличить \(a\) на \(1\)),
  • \(b := b + 1\) (увеличить \(b\) на \(1\)),
  • \(a := a \ | \ b\) (заменить \(a\) на побитовое ИЛИ \(a\) и \(b\)).

Чтобы получить максимальный балл за контрольную работу, ученику необходимо за минимальное количество операций сделать \(a\) равным \(b\).

Игорь заранее знает, какие числа даст ему учитель, и, конечно же, хочет получить максимальный балл за контрольную работу. Помогите ему понять, какое минимальное количество операций необходимо, чтобы сделать \(a\) равным \(b\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка описания каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a < b \le 10^6\)).

Гарантируется, что сумма \(b\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите единственное число — за какое минимальное количество операций можно сделать \(a\) равным \(b\).

Примечание

В первом наборе оптимально применить третью операцию.

Во втором наборе оптимально применить первую операцию три раза подряд.

В третьем наборе оптимально применить вторую операцию и потом третью операцию.

D. Новогодний концерт

Бинарный поиск жадные алгоритмы математика Структуры данных теория чисел *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]\).

C. Убийство монстра

математика Перебор *1100

Монокарп играет в компьютерную игру. В игре его персонаж сражается с разными монстрами.

Битва между персонажем и монстром происходит следующим образом. Предположим, что у персонажа изначально \(h_C\) очков здоровья и атака равная \(d_C\); у монстра изначально \(h_M\) очков здоровья и атака равная \(d_M\). Бой состоит из нескольких этапов:

  1. персонаж атакует монстра, уменьшая здоровье монстра на \(d_C\);
  2. монстр атакует персонажа, уменьшая здоровье персонажа на \(d_M\);
  3. персонаж атакует монстра, уменьшая здоровье монстра на \(d_C\);
  4. монстр атакует персонажа, уменьшая здоровье персонажа на \(d_M\);
  5. и так далее, до конца боя.

Бой заканчивается, когда чье-то здоровье становится неположительным (т.е. \(0\) или меньше). Если здоровье монстра становится неположительным, то выигрывает персонаж, в противном случае побеждает монстр.

Персонаж Монокарпа в настоящее время имеет здоровье равное \(h_C\), и атаку равную \(d_C\). Он хочет убить монстра со здоровьем равным \(h_M\), и атакой равной \(d_M\). Перед боем Монокарп может потратить до \(k\) монет на улучшение оружия и/или брони своего персонажа; каждое улучшение стоит ровно одну монету, каждое улучшение оружия увеличивает атаку персонажа на \(w\), а каждое улучшение брони увеличивает здоровье персонажа на \(a\).

Сможет ли персонаж Монокарпа убить монстра, если Монокарп оптимально потратит монеты на апгрейды?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Каждый набор входных данных состоит из трех строк:

Первая строка содержит два целых числа \(h_C\) и \(d_C\) (\(1 \le h_C \le 10^{15}\); \(1 \le d_C \le 10^9\)) — здоровье и атака персонажа;

Вторая строка содержит два целых числа \(h_M\) и \(d_M\) (\(1 \le h_M \le 10^{15}\); \(1 \le d_M \le 10^9\)) — здоровье и атака монстра;

Третья строка содержит три целых числа \(k\), \(w\) и \(a\) (\(0 \le k \le 2 \cdot 10^5\); \(0 \le w \le 10^4\); \(0 \le a \le 10^{10}\)) — максимальное количество монет, которые может потратить Монокарп, значение, добавляемое к атаке персонажа при каждом улучшении оружия, и значение, добавляемое к здоровью персонажа при каждом улучшении брони, соответственно.

Сумма \(k\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите YES, если возможно убить монстра, оптимально выбрав улучшения. В противном случае выведите NO.

Примечание

В первом примере Монокарп может потратить одну монету на улучшение оружия (урон станет равным \(5\)), тогда здоровье во время битвы будет изменяться следующим образом: \((h_C, h_M) = (25, 9) \rightarrow (25, 4) \rightarrow (5, 4) \rightarrow (5, -1)\). Битва закончилась победой Монокарпа.

Во втором примере у Монокарпа нет способа победить монстра.

В третьем примере у Монокарпа нет монет, поэтому он не может купить улучшения. Однако изначальных характеристик достаточно, чтобы Монокарп победил.

В четвертом примере у Монокарпа есть \(4\) монет. Чтобы победить монстра, ему необходимо потратить \(2\) монеты на улучшение оружия и \(2\) монеты на улучшение брони.

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\).

B. Гадание на массиве

битмаски математика *1400

Haha, try to solve this, SelectorUnlimited!
— antontrygubO_o

Ваши друзья Алиса и Боб практикуют гадания.

Гадание производится следующим образом: есть хорошо всем известный массив \(a\) из \(n\) неотрицательных целых чисел, пронумерованных от \(1\) до \(n\). Клиент выбирает некоторое неотрицательное число \(d\), а затем последовательно применяет одну из двух операций для каждого \(i = 1, 2, \ldots, n\), в возрастающем порядке \(i\). Возможные операции таковы:

  • текущее число \(d\) заменяется на \(d + a_i\)
  • текущее число \(d\) заменяется на \(d \oplus a_i\) (здесь и далее \(\oplus\) обозначает побитовое исключающее или)

Обратите внимание, что выбранная операция может быть разной для разных \(i\) и разных клиентов.

Однажды Алиса выбрала \(d = x\), а Боб выбрал \(d = x + 3\). Каждый из них сходил к гадалке и в конце концов получил какое-то число. Заметьте, что Алиса и Боб выбирают операции независимо, иначе говоря, для каких-то \(i\) они могли выбирать как одну операцию, так и разные.

Вы каким-то образом узнали, что то ли Алиса, то ли Боб в итоге получили число \(y\), но кто именно — неизвестно. Ваша задача — зная числа, с которых начали Алиса и Боб, узнать, кто же из них получил в итоге число \(y\). Гарантируется, что на тестах жюри ровно один из ваших друзей мог получить \(y\).

Взломы

Вы не можете делать взломы по этой задаче.

Входные данные

В первой строке дано число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. В следующих \(2 \cdot t\) строках даны наборы входных данных.

Первая строка набора содержит три числа \(n\), \(x\), \(y\) (\(1 \le n \le 10^5\), \(0 \le x \le 10^9\), \(0 \le y \le 10^{15}\)) — длина массива \(a\), начальное число Алисы (число Боба равно \(x+3\)) и число, которое получил один из друзей в результате.

Вторая строка набора содержит \(n\) чисел — массив \(a\) (\(0 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «Alice» или «Bob» (без кавычек) — кто из друзей мог получить из своего начального числа число \(y\).

Примечание

В первом наборе входных данных Алиса могла получить \(9\) с помощью следующих операций: \(7 + 2 = 9\).

Во втором наборе Алиса могла получить \(2\) с помощью таких операций: \((0 + 1) \oplus 3 = 2\).

В третьем наборе Боб изначально имел число \(x+3 = 0+3=3\). Тогда он мог получить \(1\) таким образом: \((((3 + 1) + 2) \oplus 3) \oplus 4 = 1\).

D. В поисках нуля

интерактив Конструктив математика *2000

Это интерактивная задача.

Мы загадали массив \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) и спрятали в нём один ноль! Более формально, среди чисел массива ровно одно значение равно нулю.

Ваша задача — найти, под каким индексом спрятан ноль, то есть найти такое \(i\), что \(a_i = 0\).

Для этого вы можете сделать некоторое количество запросов следующего вида. По трём различным индексам \(i, j, k\) вы можете узнать значение выражения \(\max(a_i, a_j, a_k) - \min(a_i, a_j, a_k)\). Другими словами, мы сообщим вам разность между максимальным и минимальным числом среди \(a_i\), \(a_j\) и \(a_k\).

Вы можете сделать не более \(2 \cdot n - 2\) таких запросов, после чего у вас будет две попытки угадать, под каким индексом спрятан ноль. Формально, вы должны сообщить нам два числа \(i\) и \(j\), и ваш ответ будет считаться правильным, если \(a_i = 0\) или \(a_j = 0\).

Сможете ли вы угадать, где мы спрятали ноль?

Обратите внимание, что в каждом тесте массив фиксирован и не изменяется во время игры. Иными словами, интерактор не адаптивен.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное число \(t\) (\(1 \le t \le 500\)). Далее следует описание наборов.

В первой и единственной строке каждого набора входных данных записано целое число \(n\) (\(4 \le n \le 1000\)) — длина загаданного массива.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(3000\).

Протокол взаимодействия

Взаимодействие начинается со считывания \(n\) в начале каждого набора входных данных.

Чтобы задать запрос, выведите «? \(i\) \(j\) \(k\)» (без кавычек, \(1 \le i, j, k \le n\), индексы должны быть различны). Затем вы должны считать ответ, который будет равен \(\max(a_i, a_j, a_k) - \min(a_i, a_j, a_k)\).

Ответ \(-1\) означает, что ваша программа сделала некорректный запрос. Ваша программа должна немедленно завершиться после прочтения ответа \(-1\), и вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока. Обратите внимание, что если запрос корректный, ответ на него никогда не будет равен \(-1\), так как \(\max(a_i, a_j, a_k) - \min(a_i, a_j, a_k) \geq 0\).

Чтобы дать ответ, выведите «! \(i\) \(j\)» (без кавычек). Вывод одного и того же индекса дважды (то есть \(i = j\)) разрешен. Заметьте, что вывод ответа не считается одним из \(2 \cdot n - 2\) запросов. После этого ваша программа должна продолжить обработку следующих наборов входных данных, либо завершиться, если наборов не осталось.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • 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 1000\)) — длину загаданного массива.

Вторая строка каждого набора должна содержать \(n\) целых чисел, разделенных пробелами — \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)). Также в этом массиве должен быть ровно один ноль.

Сумма \(n\) по всем наборам не должна превосходить \(3000\).

Примечание

Массив из теста из примера: \([1, 2, 0, 3]\).

F. Прибавления Фибоначчи

математика Перебор реализация Структуры данных хэши *2700

One of my most productive days was throwing away 1,000 lines of code.
— Ken Thompson

Прибавление Фибоначчи — это операция на массиве \(X\) целых чисел, параметризованная индексами \(l\) и \(r\). При применении этой операции к \(X_l\) прибавляется \(F_1\), к \(X_{l + 1}\) прибавляется \(F_2\), и так далее, вплоть до числа \(X_r\), которое увеличивается на \(F_{r - l + 1}\).

Здесь \(F_i\) — это \(i\)-е число Фибоначчи (\(F_1 = 1\), \(F_2 = 1\), \(F_{i} = F_{i - 1} + F_{i - 2}\) для \(i > 2\)), и все операции производятся по модулю \(MOD\).

Вам даны массивы \(A\) и \(B\) одинаковой длины. Мы просим вас применить к этим массивам несколько операций прибавления Фибоначчи с разными параметрами. После каждой операции вы должны сообщить, равны ли массивы \(A\) и \(B\) (по модулю \(MOD\)).

Входные данные

В первой строке вводится 3 числа \(n\), \(q\) и \(MOD\) (\(1 \le n, q \le 3\cdot 10^5, 1 \le MOD \le 10^9+7\)) — длина массивов, количество операций и модуль, по которому выполняются все операции.

Во второй строке находится \(n\) чисел — массив \(A\) (\(0 \le A_i < MOD\)).

В третей строке находится \(n\) чисел — массив \(B\) (\(0 \le B_i < MOD\)).

В последующих \(q\) строках находится символ \(c\) и два числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — параметры операции. Символ \(c\), равный «A», означает, что прибавление Фибоначчи нужно применить к массиву \(A\), равный «B» — к массиву \(B\).

Выходные данные

После каждой операции выведите «YES» (без кавычек), если массивы равны, и «NO» иначе. Ответ можно выводить в любом регистре.

Примечание

Пояснение к тесту из условия:

  • Изначально \(A=[2,2,1]\), \(B=[0,0,0]\).
  • После операции «A 1 3»: \(A=[0,0,0]\), \(B=[0,0,0]\) (сложение производится по модулю 3).
  • После операции «A 1 3»: \(A=[1,1,2]\), \(B=[0,0,0]\).
  • После операции «B 1 1»: \(A=[1,1,2]\), \(B=[1,0,0]\).
  • После операции «B 2 2»: \(A=[1,1,2]\), \(B=[1,1,0]\).
  • После операции «A 3 3»: \(A=[1,1,0]\), \(B=[1,1,0]\).

D. Бесконечный набор

битмаски дп математика матрицы Строки теория чисел *1800

Вам дан массив \(a\), состоящий из \(n\) различных целых положительных чисел.

Рассмотрим бесконечное множество целых чисел \(S\), содержащее все целые числа \(x\), удовлетворяющие хотя бы одному из следующих условий:

  1. \(x = a_i\) для некоторого \(1 \leq i \leq n\).
  2. \(x = 2y + 1\) и \(y\) находится в \(S\).
  3. \(x = 4y\) и \(y\) находится в \(S\).

Например, если \(a = [1,2]\), то \(10\) наименьших элементов в \(S\) будут равны \(\{1,2,3,4,5,7,8,9,11,12\}\) .

Найдите количество элементов в \(S\), строго меньших, чем \(2^p\). Так как это число может быть слишком большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(p\) \((1 \leq n, p \leq 2 \cdot 10^5)\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) \((1 \leq a_i \leq 10^9)\).

Гарантируется, что все числа в \(a\) различны.

Выходные данные

Выведите единственное целое число — количество элементов в \(S\), строго меньших \(2^p\). Не забудьте вывести его по модулю \(10^9 + 7\).

Примечание

В первом примере элементы меньше \(2^4\) равны \(\{1, 3, 4, 6, 7, 9, 12, 13, 15\}\).

Во втором примере элементы меньше \(2^7\) равны \(\{5,11,20,23,39,41,44,47,79,80,83,89,92,95\}\).

B. MEX и массив

дп жадные алгоритмы математика Перебор *1100

Пусть есть массив \(b_1, b_2, \ldots, b_k\). Пусть есть разбиение этого массива на отрезки \([l_1; r_1], [l_2; r_2], \ldots, [l_c; r_c]\), где \(l_1 = 1\), \(r_c = k\), и для любого \(2 \leq i \leq c\) выполнено \(r_{i-1} + 1 = l_i\). Иными словами, каждый элемент массива принадлежит ровно одному отрезку.

Определим стоимость разбиения как \(\)c + \sum_{i = 1}^{c} \operatorname{mex}(\{b_{l_i}, b_{l_i + 1}, \ldots, b_{r_i}\}),\(\) где \(\operatorname{mex}\) множества чисел \(S\) — это минимальное неотрицательное целое число, которое не встречается в множестве \(S\). Иными словами, стоимость разбиения равна количеству отрезков плюс сумма MEX по всем отрезкам. Определим ценность массива \(b_1, b_2, \ldots, b_k\) как максимально возможную стоимость его разбиения.

Дан массив \(a\) размера \(n\). Найдите сумму ценностей всех его подотрезков.

Массив \(x\) является подотрезком \(y\), если \(x\) может быть получен из \(y\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 30\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 100\)) — длина массива.

Во второй строке набора задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

Рассмотрим второй набор входных данных:

  • Лучшее разбиение подотрезка \([2, 0, 1]\): \([2], [0, 1]\). Стоимость такого разбиения равна \(2 + \operatorname{mex}(\{2\}) + \operatorname{mex}(\{0, 1\}) = 2 + 0 + 2 = 4\).
  • Лучшее разбиение подотрезка \([2, 0]\): \([2], [0]\). Стоимость такого разбиения равна \(2 + \operatorname{mex}(\{2\}) + \operatorname{mex}(\{0\}) = 2 + 0 + 1 = 3\)
  • Лучшее разбиение подотрезка \([2]\): \([2]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{2\}) = 1 + 0 = 1\).
  • Лучшее разбиение подотрезка \([0, 1]\): \([0, 1]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{0, 1\}) = 1 + 2 = 3\).
  • Лучшее разбиение подотрезка \([0]\): \([0]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{0\}) = 1 + 1 = 2\).
  • Лучшее разбиение подотрезка \([1]\): \([1]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{1\}) = 1 + 0 = 1\).

Суммарная ценность всех подотрезков равна \(4 + 3 + 1 + 3 + 2 + 1 = 14\).

D. Очередная задача на минимизацию

дп жадные алгоритмы математика *1800

Даны два массива \(a\) и \(b\) длины \(n\).

Вы можете любое количество раз (возможно, ноль) выполнить следующую операцию: выбрать индекс \(i\) (\(1 \leq i \leq n\)) и поменять местами \(a_i\) и \(b_i\).

Назовем стоимостью массива \(a\) величину, равную \(\sum_{i=1}^{n} \sum_{j=i + 1}^{n} (a_i + a_j)^2\). Аналогично, стоимость массива \(b\) будет равна \(\sum_{i=1}^{n} \sum_{j=i + 1}^{n} (b_i + b_j)^2\).

Вам необходимо минимизировать суммарную стоимость двух массивов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 40\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится целое число \(n\) (\(1 \leq n \leq 100\)) — длина обоих массивов.

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 100\)) — элементы первого массива.

В третей строке каждого набора входных данных содержатся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 100\)) — элементы второго массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите минимальную возможную суммарную стоимость двух массивов.

Примечание

Во втором наборе входных данных в одном из оптимальных ответов после выполнения операций \(a = [2, 6, 4, 6]\), \(b = [3, 7, 6, 1]\).

Стоимость массива \(a\) равна \((2 + 6)^2 + (2 + 4)^2 + (2 + 6)^2 + (6 + 4)^2 + (6 + 6)^2 + (4 + 6)^2 = 508\).

Стоимость массива \(b\) равна \((3 + 7)^2 + (3 + 6)^2 + (3 + 1)^2 + (7 + 6)^2 + (7 + 1)^2 + (6 + 1)^2 = 479\).

Суммарная стоимость массивов равна \(508 + 479 = 987\).

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]\).

B. Сортировка нечётными обменами

математика сортировки Структуры данных *1100

Вам дан массив \(a_1, a_2, \dots, a_n\). Вы можете выполнять операции с массивом. За одну операцию вы можете выбрать целое число \(i\) (\(1 \le i < n\)) и поменять местами \(a_i\) и \(a_{i+1}\) в массиве, если \(a_i + a_{i+1}\) нечётно.

Определите, можно ли его отсортировать в неубывающем порядке, используя эти операции любое количество раз.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится целое число \(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\).

Выходные данные

Для каждого набора входных данных выведите «Yes» или «No» в зависимости от того, можете ли вы или нет отсортировать данный массив.

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных мы можем просто поменять местами \(31\) и \(14\) (\(31 + 14 = 45\), что нечётно) и получить неубывающий массив \([1,6,14,31]\).

Во втором наборе входных данных единственным способом отсортировать массив является поменять местами \(4\) и \(2\), но это невозможно, поскольку их сумма \(4 + 2 = 6\) является чётной.

В третьем наборе входных данных мы не можем сделать последовательность неубывающей.

В четвёртом наборе входных данных массив уже является неубывающим.

C. Граф инверсий

графы математика снм Структуры данных *1300

Вам дана перестановка \(p_1, p_2, \dots, p_n\). Затем вы строите неориентированный граф следующим образом: добавляется ребро между вершинами \(i\), \(j\) такими, что \(i < j\) тогда и только тогда, когда \(p_i > p_j\). Вам нужно посчитать количество компонент связности в этом графе.

Две вершины \(u\) и \(v\) принадлежат одной компоненте связности тогда и только тогда, когда существует хотя бы один путь по рёбрам графа, соединяющий \(u\) и \(v\).

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится целое число \(n\) (\(1 \le n \le 10^5\)) — длина перестановки.

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — элементы перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(k\) — количество компонент связности.

Примечание

Каждый отдельный набор входных данных изображен на картинке ниже. Цветные квадраты представляют собой элементы перестановки. Для одной перестановки каждый цвет представляет некоторую компоненту связности. Ответом является количество различных цветов.

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)\).

E. Особые позиции

бпф Комбинаторика математика разделяй и властвуй *3300

Будучи школьником Стас очень грустил, когда рассадка в школьном автобусе не позволяла ему сесть рядом с другом, поэтому сейчас он вырос и начал писать программу, решающую эту проблему, и ему потребовалось решить такую задачу.

Дан массив \(a\) длины \(n\). Также даны \(m\) различных позиций \(p_1, p_2, \ldots, p_m\) (\(1 \leq p_i \leq n\)).

Затем равновероятно выбирается непустое подмножество этих позиций \(T\) и вычисляется \(\)\sum_{i=1}^{n} (a_i \cdot \min_{j \in T} \left|i - j\right|).\(\) Иными словами, для каждого индекса массива перемножаются \(a_i\) и расстояние до ближайшей выбранной в подмножество позиции, и эти величины суммируются.

Найдите математическое ожидание этой величины.

Это число нужно найти по модулю \(998\,244\,353\). Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) целые числа и \(q \neq 0\) (mod \(M\)). Выведите целое число, равное \(p \cdot q^{-1}\) (mod \(M\)). Другими словами, выведите такое целое число \(x\), что \(0 \leq x < M\) и \(x \cdot q = p\) (mod \(M\)).

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 10^5\)).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < 998\,244\,353\)).

В третьей строке строке находятся \(m\) различных целых чисел \(p_1, p_2, \ldots, p_m\) (\(1 \leq p_i \le n\)).

Для всех \(1 \leq i < m\) гарантируется, что \(p_i < p_{i+1}\).

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом примере:

  • Если взята только позиция \(1\), то итоговая величина равна \(1 \cdot 0 + 2 \cdot 1 + 3 \cdot 2 + 4 \cdot 3 = 20\).
  • Если взята только позиция \(4\), то итоговая величина равна \(1 \cdot 3 + 2 \cdot 2 + 3 \cdot 1 + 4 \cdot 0 = 10\).
  • Если взяты обе позиции, то итоговая величина равна \(1 \cdot 0 + 2 \cdot 1 + 3 \cdot 1 + 4 \cdot 0 = 5\).

Ответ на задачу \(\frac{20 + 10 + 5}{3} = \frac{35}{3} = 665\,496\,247\) (по модулю \(998\,244\,353\)).

D. Раскраска крестиками

математика реализация Структуры данных *1700

Представьте лист бумаги — сетку размера \(n \times m\): \(n\) строк и \(m\) столбцов с ячейками. Все ячейки изначально белые.

К листу применили \(q\) операций. \(i\)-я из них может быть описана следующим образом:

  • \(x_i\) \(y_i\) — выбирается один из \(k\) небелых цветов, и вся строка \(x_i\) и весь столбец \(y_i\) раскрашиваются в этот цвет. Новый цвет наносится на каждую клетку вне зависимости от того, была ли клетка раскрашена до операции.

Лист после применения всех \(q\) операций называется раскраской. Две раскраски различные, если существует хотя бы одна клетка, раскрашенная в разные цвета.

Сколько существует различных раскрасок? Выведите их количество по модулю \(998\,244\,353\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора записаны четыре целых числа \(n, m, k\) и \(q\) (\(1 \le n, m, k, q \le 2 \cdot 10^5\)) — размер листа, количество небелых цветов и количество операций.

В \(i\)-й из следующих \(q\) строк записана \(i\)-я операция — два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n\); \(1 \le y_i \le m\)) — строка и столбец, к которым применяется операция.

Сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — количество различных раскрасок по модулю \(998\,244\,353\).

E. Расширь маршрут

Комбинаторика математика Перебор реализация Структуры данных *1900

Задана сетка размера \(n \times n\). Строки пронумерованы сверху вниз от \(1\) до \(n\), столбцы пронумерованы слева направо от \(1\) до \(n\).

Робот расположен в клетке \((1, 1)\). Он может делать два типа ходов:

  • D — перейти на одну клетку вниз;
  • R — перейти на одну клетку вправо.

Роботу запрещено выходить за пределы поля.

Дана последовательность ходов \(s\) — изначальный маршрут робота. Этот маршрут не ведет робота за пределы поля.

Вам разрешено провести произвольное количество изменений строки (возможно, ноль). За одно изменение можно раздвоить один ход в последовательности. То есть, заменить одно вхождение D на DD или одно вхождение R на RR.

Посчитайте количество клеток таких, что существует хотя бы одна последовательность изменений, после применения которой робот посетит эту клетку на измененном маршруте и не выйдет за пределы поля.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора записаны два целых числа \(n\) (\(2 \le n \le 10^8\)) — количество строк и столбцов.

Во второй строке каждого набор записана непустая строка \(s\), состоящая только из символов D и R, — изначальный маршрут робота. Этот маршрут не ведет робота за пределы поля.

Суммарная длина строк \(s\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — количество клеток таких, что существует хотя бы одна последовательность изменений, после применения которой робот посетит эту клетку на измененном маршруте и не выйдет за пределы поля.

Примечание

В первом наборе входных данных достаточно рассмотреть следующие измененные маршруты:

  • RD \(\rightarrow\) RRD \(\rightarrow\) RRRD \(\rightarrow\) RRRDD \(\rightarrow\) RRRDDD — этот маршрут посещает клетки \((1, 1)\), \((1, 2)\), \((1, 3)\), \((1, 4)\), \((2, 4)\), \((3, 4)\) и \((4, 4)\);
  • RD \(\rightarrow\) RRD \(\rightarrow\) RRDD \(\rightarrow\) RRDDD — этот маршрут посещает клетки \((1, 1)\), \((1, 2)\), \((1, 3)\), \((2, 3)\), \((3, 3)\) и \((4, 3)\);
  • RD \(\rightarrow\) RDD \(\rightarrow\) RDDD — этот маршрут посещает клетки \((1, 1)\), \((1, 2)\), \((2, 2)\), \((3, 2)\) и \((4, 2)\).

Таким образом, клетки, которые посещены на хотя бы одном измененном маршруте: \((1, 1)\), \((1, 2)\), \((1, 3)\), \((1, 4)\), \((2, 2)\), \((2, 3)\), \((2, 4)\), \((3, 2)\), \((3, 3)\), \((3, 4)\), \((4, 2)\), \((4, 3)\) и \((4, 4)\).

Во втором примере, нет способа изменить последовательность так, чтобы робот не вышел за пределы поля. Поэтому все посещенные клетки — это те, которые посещены на маршруте DRDRDRDR.

В третьем примере клетки, которые посещены на хотя бы одном измененном маршруте: \((1, 1)\), \((2, 1)\) и \((3, 1)\).

Клетки для всех наборов:

F. Базис

бпф Комбинаторика математика теория чисел *2900

Для массива целых чисел \(a\) обозначим количество элементов в нем за \(|a|\).

Давайте введем две функции:

  • \(F(a, k)\) — функция, принимающая массив целых чисел \(a\) и натуральное число \(k\). Результат этой функции — это массив, содержащий \(|a|\) первых элементов массива, который получается заменой каждого элемента \(a\) на \(k\) копий этого элемента.

    Например, \(F([2, 2, 1, 3, 5, 6, 8], 2)\) считается следующим образом: сначала каждый элемент массива заменяется \(2\) копиями этого элемента, и получается массив \([2, 2, 2, 2, 1, 1, 3, 3, 5, 5, 6, 6, 8, 8]\). Затем от полученного массива берутся \(7\) первых элементов, поэтому результат функции — \([2, 2, 2, 2, 1, 1, 3]\).

  • \(G(a, x, y)\) — функция, которая принимает массив целых чисел \(a\) и два различных целых числа \(x\) и \(y\). Результат этой функции — массив \(a\), в котором каждое вхождение элемента \(x\) заменяется на \(y\), а каждое вхождение элемента \(y\) заменяется на \(x\).

    Например, \(G([1, 1, 2, 3, 5], 3, 1) = [3, 3, 2, 1, 5]\).

Массив \(a\)родитель массива \(b\), если:

  • либо существует положительное целое число \(k\), для которого \(F(a, k) = b\);
  • либо существуют два различных целых числа \(x\) и \(y\), для которых \(G(a, x, y) = b\).

Массив \(a\)предок массива \(b\), если существует последовательность массивов \(c_0, c_1, \dots, c_m\) (\(m \ge 0\)), в которой \(c_0\) — массив \(a\), \(c_m\) — массив \(b\), а для каждого \(i \in [1, m]\) массив \(c_{i-1}\) является родителем массива \(c_i\).

А теперь — сама задача.

Вам даны два целых числа \(n\) и \(k\). Ваша цель — построить последовательность массивов \(s_1, s_2, \dots, s_m\), удовлетворяющую следующим условиям:

  • каждый массив \(s_i\) содержит ровно \(n\) элементов, и все эти элементы — целые числа от \(1\) до \(k\);
  • для каждого массива \(a\), состоящего из ровно \(n\) целых чисел от \(1\) до \(k\), последовательность содержит хотя бы один массив \(s_i\), такой, что \(s_i\) — предок \(a\).

Выведите минимальное количество массивов в такой последовательности.

Входные данные

В единственной строке заданы два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — минимальное количество массивов в последовательности, удовлетворяющей условию задачи. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Примечание

Давайте проанализируем первый пример.

Один из возможных ответов для первого примера — последовательность \([[2, 1, 2], [1, 2, 2]]\). У каждого массива размера \(3\), элементы которого — числа от \(1\) до \(2\), есть предок в этой последовательности:

  • для массива \([1, 1, 1]\) предок — \([1, 2, 2]\): \(F([1, 2, 2], 13) = [1, 1, 1]\);
  • для массива \([1, 1, 2]\) предок — \([1, 2, 2]\): \(F([1, 2, 2], 2) = [1, 1, 2]\);
  • для массива \([1, 2, 1]\) предок — \([2, 1, 2]\): \(G([2, 1, 2], 1, 2) = [1, 2, 1]\);
  • для массива \([1, 2, 2]\) предок — \([1, 2, 2]\);
  • для массива \([2, 1, 1]\) предок — \([1, 2, 2]\): \(G([1, 2, 2], 1, 2) = [2, 1, 1]\);
  • для массива \([2, 1, 2]\) предок — \([2, 1, 2]\);
  • для массива \([2, 2, 1]\) предок — \([2, 1, 2]\): \(F([2, 1, 2], 2) = [2, 2, 1]\);
  • для массива \([2, 2, 2]\) предок — \([1, 2, 2]\): \(G(F([1, 2, 2], 4), 1, 2) = G([1, 1, 1], 1, 2) = [2, 2, 2]\).

A. Сколько квадратов?

математика *800

У Льюиса была последовательность из \(n+1\) целого числа \(a_1, a_2, \ldots, a_{n+1}\). Для каждого \(i = 1, 2, \ldots, n+1\) известно, что или \(0\leq a_i < n\), или \(a_i=n^2\). Льюис вычислил сумму всех элементов последовательности и обозначил ее за \(s\).

Льюис потерял последовательность, но он помнит значения \(n\) и \(s\). Можете определить, сколько элементов последовательности были равны \(n^2\)?

Можно показать, что при данных ограничениях ответ всегда существует и единственный.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2\cdot 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(s\) (\(1\le n< 10^6\), \(0\le s \le 10^{18}\)). Гарантируется, что значение \(s\) является суммой чисел некоторой последовательности, удовлетворяющей описанным ограничениям.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество элементов последовательности, равных \(n^2\).

Примечание

В первом наборе входных данных \(s=0\), поэтому все числа должны быть равны \(0\), и нет ни одного числа, равного \(49\).

Во втором наборе \(s=1\). Существуют две подходящие последовательности: \([0, 1]\) и \([1, 0]\). В обоих случаях число \(1\) встречается один раз.

В третьем наборе \(s=12\), что в данном случае является максимально возможным значением \(s\). Поэтому число \(4\) встречается \(3\) раза в последовательности.

C. Факториалы и степени двойки

битмаски дп Конструктив математика Перебор *1500

Число называется сильным, если оно является степенью двойки или факториалом. Другими словами, число \(m\) сильное, если существует неотрицательное целое число \(d\) такое, что \(m=2^d\) или \(m=d!\), где \(d!=1\cdot 2\cdot \ldots \cdot d\) (в частности, \(0! = 1\)). Например, \(1\), \(4\) и \(6\) являются сильными, потому что \(1=1!\), \(4=2^2\), \(6=3!\), а \(7\), \(10\) или \(18\) не являются.

Вам дано положительное число \(n\). Найдите минимальное число \(k\) такое, что \(n\) можно представить в виде суммы \(k\) различных сильных чисел, или определите, что такого \(k\) не существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Описание одного набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^{12}\)).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Если \(n\) не может быть представлено как сумма различных сильных чисел, выведите \(-1\).

Иначе выведите одно положительное число — минимально возможное число \(k\).

Примечание

В первом примере \(7\) может быть представлена как \(7=1+6\), где \(1\) и \(6\) являются сильными. Так как \(7\) не является сильным числом, мы знаем, что минимальное значение \(k\) в этом случае \(k=2\).

Во втором примере один из способов разложить \(11\) в сумму трех сильных чисел такой: \(11=1+4+6\). Можно показать, что нельзя представить \(11\) в виде суммы двух или менее сильных чисел.

В третьем примере \(240\) может быть представлено как \(240=24+32+64+120\). Обратите внимание, что \(240=120+120\) не является корректным представлением, т. к. сильные числа должны быть различны.

В четвертом примере \(17179869184=2^{34}\), поэтому \(17179869184\) является сильным числом, и минимальное \(k\) в этом случае \(k=1\).

E. Степенная таблица

дп математика Перебор теория чисел *2200

У вас есть прямоугольная таблица размера \(n\times m\) (\(n\) строк, \(m\) столбцов). \(n\) строк пронумерованы от \(1\) до \(n\) сверху вниз, а \(m\) столбцов пронумерованы от \(1\) до \(m\) слева направо.

Клетка на пересечении строки \(i\) и столбца \(j\) содержит число \(i^j\) (число \(i\), возведенное в степень \(j\)). Например, если \(n=3\) и \(m=3\), то таблица выглядит следующим образом:

Найдите количество различных чисел в таблице.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 10^6\)) — количество строк и количество столбцов.

Выходные данные

Выведите одно целое число: количество различных целых чисел в таблице.

Примечание

В условии показана таблице из первого примера. В этом случае \(7\) различных чисел: \(1\), \(2\), \(3\), \(4\), \(8\), \(9\) и \(27\).

Во втором примере таблица следующая:

В ней \(5\) различных чисел: \(1\), \(2\), \(4\), \(8\) и \(16\).

В третьем примере таблица следующая:

В ней \(6\) различных чисел: \(1\), \(2\), \(3\), \(4\), \(9\) и \(16\).

A. Мадока и отец математик

математика реализация *800

Мадока наконец-то узнала пароль от своего компьютера. Но так как ее отец известный популяризатор математики, то пароль — это ответ на следующую задачу:

Требуется узнать максимальное число, сумма цифр в десятичной записи которого равна \(n\), а также в его десятичной записи нет нулей и подряд идущих одинаковых цифр.

Так как Мадока уже устала от математики, то помогите ей решить эту задачу!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных данных задано число \(n\) (\(1 \le n \le 1000\)) — необходимая сумма цифр у числа.

Выходные данные

Для каждого набора входных данных выведите максимальное число, которое вы можете получить.

Примечание

Все числа с суммой цифр \(2\) без нулей в записи: \(2\), \(11\). Но последнее не подходит, так как в нем \(2\) единицы подряд. Поэтому ответ \(2\).

Все числа с суммой цифр \(3\) без нулей в записи: \(111\), \(12\), \(21\), \(3\). Первое не подходит, так как в нём две едицины подряд, поэтому максимальное число \(21\).

Все числа с суммой цифр \(4\) без нулей в записи: \(1111\), \(211\), \(121\), \(112\), \(13\), \(31\), \(22\), \(4\). Числа \(1111\), \(211\), \(112\), \(22\) не подходят, так как в них есть одинаковые подряд идущих цифр. А среди остальных максимальное число — \(121\).

D. Мадока и лучшая школа России

дп Конструктив математика теория чисел *1900

Мадока собирается поступить в «ЦНУС ПТУ». Но на вступительном экзамене по информатике ей попалась сложная задача:

  • Число называется хорошим, если оно кратно \(d\).
  • Число называется красивым, если оно хорошее и его нельзя представить в виде произведения двух хороших чисел.

Обратите внимание, что красивое число обязано быть хорошим.

Дано хорошее число \(x\). Требуется определить, можно ли его представить хотя бы двумя различными способами в виде произведения нескольких (возможно одного) красивых чисел. Два способа считаются различными, если в них отличаются множества используемых чисел.

Решите эту задачу за Мадоку и помогите ей поступить в лучшую школу России!

Входные данные

В первой строке дано единственное число \(t\) (\(1 \leq t \leq 100\)) — количество тестовых случаев. Ниже идет их описание.

Каждый тестовый случай состоит из двух целых чисел \(x\) и \(d\), записанных через пробел (\(2 \leq x, d \leq 10^9\)). Гарантируется, что \(x\) кратно \(d\).

Выходные данные

Для каждого набора входных данных выведите «NO», если число нельзя представить хотя бы двумя способами. Иначе, выведите «YES».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом примере \(6\) можно представить в виде \(6\), \(1 \cdot 6\), \(2 \cdot 3\). Но \(3\) и \(1\) не являются хорошими числами, поскольку не делятся на \(2\), поэтому способ только один.

Во втором примере \(12\) можно представить в виде \(6 \cdot 2\), \(12\), \(3 \cdot 4\), или \(3 \cdot 2 \cdot 2\). Первый вариант подходит. Второй — нет, так как \(12\) не является красивым (\(12 = 6 \cdot 2\)). Третий и четвертый также не подходят, поскольку \(3\) не являетcя хорошим.

В третьем примере \(36\) можно представить в виде \(18 \cdot 2\) и \(6 \cdot 6\). Поэтому его можно разложить хотя бы двумя способами.

A. Странная сумма

геометрия Комбинаторика математика матрицы сортировки Структуры данных *1400

У Егора есть табличка \(n \times m\), где строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы с \(1\) до \(m\) слева направо. Каждая клетка таблички покрашена в некоторый цвет, где цвета пронумерованы целыми числами от \(1\) до \(10^5\).

Будем обозначать клетку, которая находится на пересечении \(r\)-й строки и \(c\)-го столбца, как \((r, c)\). Определим манхэттенское расстояние между клетками \((r_1, c_1)\) и \((r_2, c_2)\) как длину кратчайшего пути между этими клетками, в котором любые две соседние клетки имеют общую сторону. Например, в таблице \(3 \times 4\) манхэттенское расстояние между клетками \((1, 2)\) и \((3, 3)\) равно \(3\), и один из кратчайших путей имеет вид \((1, 2) \to (2, 2) \to (2, 3) \to (3, 3)\). Обратите внимание, что путь может проходить по клеткам любого цвета.

У Егора возникло желание посчитать сумму манхэттенских расстояний по всем парам клеток одного цвета. Помогите Егору — вычислите эту сумму.

Входные данные

Первая строка входного файла содержит два целых числа \(n\) и \(m\) (\(1 \leq n \le m\), \(n \cdot m \leq 100\,000\)) — число строк и столбцов таблички.

Следующие \(n\) строк описывают соответствующие строки таблицы. \(i\)-я строка содержит \(m\) чисел \(c_{i1}, c_{i2}, \ldots, c_{im}\) (\(1 \le c_{ij} \le 100\,000\)) — цвета клеток в \(i\)-м ряду таблицы.

Выходные данные

Выведите одно число — искомую сумму.

Примечание

В первом примере есть три пары клеток с одинаковым цветом: в координатах \((1, 1)\) и \((2, 3)\), в координатах \((1, 2)\) и \((2, 2)\), в координатах \((1, 3)\) и \((2, 1)\). Соответствующие манхеттенские расстояния равны \(3\), \(1\) и \(3\), их сумма равна \(7\).

B. Целостный массив

Конструктив математика Перебор Структуры данных *1800

Дан массив \(a\) из \(n\) целых положительных чисел, пронумерованных от \(1\) до \(n\). Назовём массив целостным, если для любых двух, не обязательно различных, чисел \(x\) и \(y\) из этого массива, для которых \(x \ge y\), число \(\left \lfloor \frac{x}{y} \right \rfloor\) (частное от деления \(x\) на \(y\) с округлением вниз) тоже лежит в этом массиве.

Известно, что в массиве \(a\) все числа не превосходят \(c\). Ваша задача — проверить, является ли данный массив целостным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(c\) (\(1 \le n \le 10^6\), \(1 \le c \le 10^6\)) — размер массива \(a\) и ограничение на числа в массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le c\)) — элементы массива \(a\).

Пусть \(N\) обозначает сумму значений \(n\) по всем наборам входных данных, а \(C\) — сумму значений \(c\) по всем наборам входных данных. Гарантируется, что \(N \le 10^6\) и \(C \le 10^6\).

Выходные данные

Для каждого набора входных данных выведите Yes, если массив является целостным, и No иначе.

Примечание

В первом наборе входных данных нетрудно заметить, что массив является целостным:

  • \(\left \lfloor \frac{1}{1} \right \rfloor = 1\), \(a_1 = 1\), число встречается в массиве
  • \(\left \lfloor \frac{2}{2} \right \rfloor = 1\)
  • \(\left \lfloor \frac{5}{5} \right \rfloor = 1\)
  • \(\left \lfloor \frac{2}{1} \right \rfloor = 2\), \(a_2 = 2\), число встречается в массиве
  • \(\left \lfloor \frac{5}{1} \right \rfloor = 5\), \(a_3 = 5\), число встречается в массиве
  • \(\left \lfloor \frac{5}{2} \right \rfloor = 2\), \(a_2 = 2\), число встречается в массиве

Таким образом, условие выполнено, массив является целостным.

Во втором наборе входных данных достаточно заметить, что

\(\left \lfloor \frac{7}{3} \right \rfloor = \left \lfloor 2\frac{1}{3} \right \rfloor = 2\), этого числа нет в массиве \(a\), поэтому он не является целостным.

В третьем наборе входных данных \(\left \lfloor \frac{2}{2} \right \rfloor = 1\), но в массиве есть только число \(2\), поэтому он не является целостным.

C. Еще одна строковая задача

Бинарный поиск дп математика Перебор Строки *1600

Строка называется бинарной, если она состоит только из символов «0» и «1».

Строка v называется подстрокой строки w, если она имеет ненулевую длину, и ее можно прочитать, начиная с некоторой позиции, в строке w. Например, у строки «010» есть шесть подстрок: «0», «1», «0», «01», «10», «010». Две подстроки считаются различными, если их позиции вхождения различны. Другими словами, каждую подстроку нужно учитывать столько раз, сколько она встречается.

Дана бинарная строка s. Ваша задача — найти количество ее подстрок, содержащих ровно k единиц.

Входные данные

В первой строке записано единственное целое число k (0 ≤ k ≤ 106). Во второй строке записана непустая бинарная строка s. Длина s не превосходит 106 символов.

Выходные данные

Выведите одно целое число — количество подстрок данной строки, содержащих ровно k символов «1».

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

В первом примере искомые подстроки: «1», «1», «10», «01», «10», «010».

Во втором примере искомые подстроки: «101», «0101», «1010», «01010».

B. DIV + MOD

математика *900

Не так давно Влад придумал интересную функцию:

  • \(f_a(x)=\left\lfloor\frac{x}{a}\right\rfloor + x \bmod a\), где \(\left\lfloor\frac{x}{a}\right\rfloor\) — это \(\frac{x}{a}\), округлённое вниз, \(x \bmod a\) — остаток от целочисленного деления \(x\) на \(a\).

Например при \(a=3\) и \(x=11\), значение \(f_3(11) = \left\lfloor\frac{11}{3}\right\rfloor + 11 \bmod 3 = 3 + 2 = 5\).

Число \(a\) является зафиксированным и известным Владу. Помогите Владу найти максимальное значение \(f_a(x)\), если \(x\) может принять любое целочисленное значение от \(l\) до \(r\) включительно (т.е. \(l \le x \le r\)).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют \(t\) строк, каждая из которых содержит ровно три целых числа \(l_i\), \(r_i\) и \(a_i\) (\(1 \le l_i \le r_i \le 10^9, 1 \le a_i \le 10^9\)) — левая и правая границы отрезка и зафиксированное значение \(a\).

Выходные данные

Для каждого набора входных данных на отдельной строке выведите одно число — максимальное значение функции на данном отрезке при заданном \(a\).

Примечание

В первом примере:

  • \(f_3(1) = \left\lfloor\frac{1}{3}\right\rfloor + 1 \bmod 3 = 0 + 1 = 1\),
  • \(f_3(2) = \left\lfloor\frac{2}{3}\right\rfloor + 2 \bmod 3 = 0 + 2 = 2\),
  • \(f_3(3) = \left\lfloor\frac{3}{3}\right\rfloor + 3 \bmod 3 = 1 + 0 = 1\),
  • \(f_3(4) = \left\lfloor\frac{4}{3}\right\rfloor + 4 \bmod 3 = 1 + 1 = 2\)

В качестве ответа, очевидно, подходят \(f_3(2)\) и \(f_3(4)\).

D. Петя и циклические сдвиги

Конструктив математика Перебор реализация *1300

У Пети изначально был массив \(a\) целых чисел от \(1\) до \(n\), где \(a[i]=i\).

Он последовательно произвёл \(n\) операций. В итоге он получил новое состояние массива \(a\).

На \(i\)-й операции Петя выбирал первые \(i\) элементов массива и произвольное количество раз совершал их циклический сдвиг вправо (элементы с номерами \(i+1\) и больше оставались на своих местах). Один циклический сдвиг вправо — это такое преобразование, что массив \(a=[a_1, a_2, \dots, a_n]\) станет равен \(a = [a_i, a_1, a_2, \dots, a_{i-2}, a_{i-1}, a_{i+1}, a_{i+2}, \dots, a_n]\).

Например, если \(a = [5,4,2,1,3]\) и \(i=3\) (то есть это третья операция), то в результате этой операции он мог получить любой из трёх массивов:

  • \(a = [5,4,2,1,3]\) (делает \(0\) циклических сдвигов или любое количество, которое делится на \(3\));
  • \(a = [2,5,4,1,3]\) (делает \(1\) циклический сдвиг или любое количество, которое имеет остаток \(1\) при делении на \(3\));
  • \(a = [4,2,5,1,3]\) (делает \(2\) циклических сдвига или любое количество, которое имеет остаток \(2\) при делении на \(3\)).

Рассмотрим пример. Пусть \(n=6\), то есть изначально \(a=[1,2,3,4,5,6]\). Возможный вариант развития событий описан ниже.

  • \(i=1\): сколько бы циклических сдвигов Петя не производил, массив \(a\) не изменится.
  • \(i=2\): допустим Петя решил сделать \(1\) циклический сдвиг, тогда массив примет вид \(a = [\textbf{2}, \textbf{1}, 3, 4, 5, 6]\).
  • \(i=3\): допустим Петя решил сделать \(1\) циклический сдвиг, тогда массив примет вид \(a = [\textbf{3}, \textbf{2}, \textbf{1}, 4, 5, 6]\).
  • \(i=4\): допустим Петя решил сделать \(2\) циклических сдвига, тогда массив примет вид \(a = [\textbf{1}, \textbf{4}, \textbf{3}, \textbf{2}, 5, 6]\).
  • \(i=5\): допустим Петя решил сделать \(0\) циклических сдвигов, тогда массив не изменится.
  • \(i=6\): допустим Петя решил сделать \(4\) циклических сдвига, тогда массив примет вид \(a = [\textbf{3}, \textbf{2}, \textbf{5}, \textbf{6}, \textbf{1}, \textbf{4}]\).

Вам задано финальное состояние массива \(a\) после всех \(n\) операций. Определите, существует ли способ выполнения операций, который приведёт к этому результату. В случае положительного ответа найдите количество циклических сдвигов, которое могло быть сделано во время каждой из \(n\) операций.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2\cdot10^3\)) — длина массива \(a\).

В следующей строке задано финальное состояние массива \(a\): записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)). Все \(a_i\) — различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^3\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Выведите -1, если заданное финальное значение \(a\) нельзя получить, производя произвольное количество циклических сдвигов на каждой операции. Иначе выведите \(n\) неотрицательных целых чисел \(d_1, d_2, \dots, d_n\) (\(d_i \ge 0\)), где \(d_i\) обозначает, что во время \(i\)-й операции первые \(i\) элементов массива были циклически сдвинуты вправо \(d_i\) раз.

Если возможных ответов несколько выведите тот, где суммарное количество сдвигов минимально (то есть сумма значений \(d_i\) наименьшая). Если таких ответов несколько, то выведите любой из них.

Примечание

Первый набор входных данных совпадает с примером из условия.

Второй набор входных данных как видно несложный. Заметим, что ответ \([3, 2, 1]\) также даёт ту же перестановку, но так как суммарное количество сдвигов \(3+2+1\) больше \(0+0+1\), то такой ответ не является правильным.

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\).

Одно из оптимальных изменений расписаний для шестого примера:

Изначальное расписание.

Новое расписание

В седьмом примере каждый день занят экзаменами и перестроить расписание невозможно.

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\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

A. Хорошие пары

математика сортировки *800

Вам дан массив \(a_1, a_2, \ldots, a_n\) из положительных целых чисел. Хорошая пара — это пара индексов \((i, j)\) с \(1 \leq i, j \leq n\) такая, что для всех \(1 \leq k \leq n\) выполняется следующее равенство: \(\) |a_i - a_k| + |a_k - a_j| = |a_i - a_j|, \(\) где \(|x|\) обозначает модуль числа \(x\).

Найдите хорошую пару. Обратите внимание, что \(i\) может быть равно \(j\).

Входные данные

Входные данные состоят из нескольких тестовых случаев. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество тестовых случаев. Далее следует описание тестовых случаев.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)), где \(a_i\)\(i\)-й элемент массива.

Сумма \(n\) для всех тестовых случаев не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в одной строке два целых индекса \(i\) и \(j\), разделенных пробелами, которые составляют хорошую пару массива. Случай \(i=j\) допустим. Можно показать, что такая пара всегда существует. Если хороших пар несколько, выведите любую из них.

Примечание

В первом случае при \(i = 2\) и \(j = 3\) справедливо равенство для всех \(k\):

  • \(k = 1\): \(|a_2 - a_1| + |a_1 - a_3| = |2 - 5| + |5 - 7| = 5 = |2 - 7| = |a_2-a_3|\),
  • \(k = 2\): \(|a_2 - a_2| + |a_2 - a_3| = |2 - 2| + |2 - 7| = 5 = |2 - 7| = |a_2-a_3|\),
  • \(k = 3\): \(|a_2 - a_3| + |a_3 - a_3| = |2 - 7| + |7 - 7| = 5 = |2 - 7| = |a_2-a_3|\).

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\}\).

C. Сделай равным по модулю

Конструктив математика сортировки теория чисел *1200

Вам дан массив из \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\). Можно выполнить следующую операцию: выбрать целое число \(x \geq 2\) и заменить каждое число массива остатком при делении этого числа на \(x\), то есть для всех \(1 \leq i \leq n\) заменить \(a_i\) на \(a_i \bmod x\).

Определите, можно ли сделать все элементы массива равными, применяя операцию ноль или более раз.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)), где \(a_i\)\(i\)-й элемент массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите строку с «YES», если вы можете сделать все элементы списка равными, применяя операцию. В противном случае выведите «NO».

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных можно применить операцию с \(x = 3\) для получения массива \([2, 2, 0, 2]\), а затем применить операцию с \(x = 2\) для получения \([0, 0, 0, 0]\).

Во втором наборе входных данных все числа уже равны.

В четвертом наборе входных данных операция с \(x = 4\) приводит к массиву \([1, 1, 1, 1]\).

D. K-хорошие

Конструктив математика теория чисел *1900

Мы говорим, что натуральное число \(n\) является \(k\)-хорошим для некоторого положительного целого числа \(k\), если \(n\) можно представить в виде суммы \(k\) целых положительных чисел, которые дают \(k\) различных остатков при делении на \(k\).

По заданному натуральному числу \(n\) найдите такое \(k \geq 2\), что \(n\) является \(k\)-хорошим, или скажите, что такого \(k\) не существует.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки с целым числом \(n\) (\(2 \leq n \leq 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите строку со значением \(k\) таким, что \(n\) является \(k\)-хорошим (\(k \geq 2\)), или \(-1\), если \(n\) не является \(k\)-хорошим для любых \(k\). Если существует несколько допустимых значений \(k\), вы можете вывести любое из них.

Примечание

\(6\) является \(3\)-хорошим числом, поскольку его можно представить в виде суммы \(3\) чисел, которые дают разные остатки при делении на \(3\): \(6 = 1 + 2 + 3\).

\(15\) также является \(3\)-хорошим числом, поскольку \(15 = 1 + 5 + 9\), а \(1, 5, 9\) дают разные остатки при делении на \(3\).

\(20\) — это \(5\)-хорошее число, поскольку \(20 = 2 + 3 + 4 + 5 + 6\) и \(2,3,4,5,6\) дают разные остатки при делении на \(5\).

E. Одинаковые суммы деревьев

Деревья Конструктив математика поиск в глубину и подобное *2200

Вам дано неориентированное некорневое дерево — связный неориентированный граф без циклов.

Вы должны присвоить каждой вершине ненулевой целочисленный вес так, чтобы выполнялось следующее: если удалить любую вершину дерева, то все оставшиеся компоненты связности имеют одинаковую сумму весов в своих вершинах.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \leq n \leq 10^5\)) — количество вершин дерева.

Следующие \(n-1\) строк каждого случая содержат по два целых числа \(u, v\) (\(1 \leq u,v \leq n\)), обозначающих наличие ребра между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных необходимо вывести одну строку с \(n\) целыми числами \(a_1, a_2, \ldots, a_n\), разделенными пробелами, где \(a_i\) — вес, присвоенный вершине \(i\). Веса должны удовлетворять \(-10^5 \leq a_i \leq 10^5\) и \(a_i \neq 0\).

Можно показать, что всегда существует решение, удовлетворяющее этим ограничениям. Если возможных решений несколько, выведите любое из них.

Примечание

В первом случае при удалении вершины \(1\) все оставшиеся компоненты связности имеют сумму весов \(5\), а при удалении вершины \(3\) все оставшиеся компоненты связности имеют сумму весов \(2\). При удалении других вершин остается только одна компонента связности, поэтому все оставшиеся компоненты связности имеют одинаковую сумму весов.

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)\) не ограничена сверху.

G. Циклические палиндромы

графы Конструктив математика *3200

Мы говорим, что последовательность из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) является палиндромом, если для всех \(1 \leq i \leq n\) выполняется \(a_i = a_{n-i+1}\). Вам дана последовательность из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), и вы должны найти, если она существует, такую циклическую перестановку \(\sigma\), что последовательность \(a_{\sigma(1)}, a_{\sigma(2)}, \ldots, a_{\sigma(n)}\) — палиндром.

Перестановка \(1, 2, \ldots, n\) — это биективная функция из \(\{1, 2, \ldots, n\}\) в \(\{1, 2, \ldots, n\}\). Мы говорим, что перестановка \(\sigma\) является циклической перестановкой, если \(1, \sigma(1), \sigma^2(1), \ldots, \sigma^{n-1}(1)\) — попарно различные числа. Здесь \(\sigma^m(1)\) обозначает \(\underbrace{\sigma(\sigma(\ldots \sigma}_{m \text{ раз}}(1) \ldots))\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длину последовательности.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \leq a_i \leq n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку с «YES», если необходимая циклическая перестановка существует, иначе выведите одну строку с «NO».

Если ответ «YES», выведите еще одну строку с \(n\) целыми числами \(\sigma(1), \sigma(2), \ldots, \sigma(n)\) — перестановкой. Если существует более одной подходящей перестановки, вы можете вывести любую.

H. Одинаковые НОК подмножеств

математика Структуры данных теория чисел *3200

Вам даны два набора натуральных чисел \(A\) и \(B\). Необходимо найти два непустых подмножества \(S_A \subseteq A\), \(S_B \subseteq B\) такие, что наименьшее общее кратное (НОК) элементов \(S_A\) равно наименьшему общему кратному (НОК) элементов \(S_B\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных.

Для каждого набора входных данных есть одна строка, содержащая два целых числа \(n, m\) (\(1 \leq n, m \leq 1000\)) — размеры множеств \(A\) и \(B\) соответственно.

Следующая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 4 \cdot 10^{36}\)) — элементы \(A\).

Следующая строка содержит \(m\) различных целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \leq b_i \leq 4 \cdot 10^{36}\)) — элементы \(B\).

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(1000\).

Выходные данные

Для каждого набора входных данных если не существует двух подмножеств с одинаковым наименьшим общим кратным, выведите одну строку с «NO».

В противном случае выведите одну строку с «YES», а затем строку с двумя целыми числами \(|S_A|, |S_B|\) (\(1 \leq |S_A| \leq n\), \(1 \leq |S_B| \leq m\) ) — размеры подмножеств \(S_A\) и \(S_B\) соответственно.

На следующей строке выведите \(|S_A|\) целых чисел \(x_1, x_2, \ldots, x_{|S_A|}\), элементы \(S_A\), а на следующей строке выведите \(|S_B|\) целых чисел \(y_1, y_2, \ldots, y_{|S_B|}\), элементы \(S_B\).

Если существует несколько возможных пар подмножеств, вы можете вывести любую.

A. Целочисленные действия

математика Перебор *800

На координатной плоскости лежит фишка в точке с координатами \((0, 0)\). За одно действие фишку можно передвинуть из точки \((x_1, y_1)\) в точку \((x_2, y_2)\), если евклидово расстояние между двумя этими точками является целым числом (т.е. \(\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\) является целым).

Ваша задача — определить минимальное количество операций, чтобы передвинуть фишку из точки \((0, 0)\) в точку \((x, y)\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3000\)) — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(x\) и \(y\) (\(0 \le x, y \le 50\)) — координаты точки назначения.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, чтобы передвинуть фишку из точки \((0, 0)\) в точку \((x, y)\).

Примечание

В первом примере достаточно одного действия \((0, 0) \rightarrow (8, 6)\). \(\sqrt{(0-8)^2+(0-6)^2}=\sqrt{64+36}=\sqrt{100}=10\) является целым числом.

Во втором примере фишка уже находится в точке назначения.

В третьем примере фишку можно двигать следующим образом: \((0, 0) \rightarrow (5, 12) \rightarrow (9, 15)\). \(\sqrt{(0-5)^2+(0-12)^2}=\sqrt{25+144}=\sqrt{169}=13\) и \(\sqrt{(5-9)^2+(12-15)^2}=\sqrt{16+9}=\sqrt{25}=5\) являются целыми числами.

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\) монет.

Монокарп потратит меньше всего монет, если выберет второй тип воинов и возьмет одного воина этого типа.

E. Минимальная покрывающая звездочка

дп Комбинаторика математика Паросочетания *2200

В данной задаче мы рассматриваем полные неориентированные графы, состоящие из \(n\) вершин со взвешенными ребрами. Вес каждого ребра — это целое число от \(1\) до \(k\).

Неориентированный граф называется красивым, если сумма весов всех ребер, инцидентных вершине \(1\), равна весу минимального покрывающего дерева в графе. Минимальное покрывающее дерево — это дерево, состоящее из \(n-1\) ребра графа, которое соединяет все \(n\) вершин и имеет наименьшую сумму среди всех таких деревьев; его вес равен сумме весов ребер в нем.

Посчитайте количество полных красивых графов, в которых ровно \(n\) вершин и все веса ребер от \(1\) до \(k\). Так как ответ может быть большим, выведите его по модулю \(998244353\).

Входные данные

В единственной строке записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 250\); \(1 \le k \le 250\)).

Выходные данные

Выведите одно целое число — количество полных красивых графов, в которых ровно \(n\) вершин и все веса ребер от \(1\) до \(k\). Так как ответ может быть большим, выведите его по модулю \(998244353\).

A. Марин и фотосессия

Конструктив математика реализация *800

Сегодня Марин пришла на фестиваль косплея и готовится к групповому фотоснимку!

Для группового снимка косплееры выстраиваются в горизонтальный ряд. Групповой снимок считается красивым, если на каждом непрерывном отрезке, включающем хотя бы \(2\) косплееров, количество мужчин не превышает количества женщин (очевидно).

Сейчас ряд состоит из \(n\) косплееров и может быть описан бинарной строкой \(s\). \(i\)-й косплеер — мужчина, если \(s_i = 0\), а женщина, если \(s_i = 1\). Чтобы сделать ряд красивым, вы можете предложить дополнительным косплеерам (возможно, нулю) встать в любое место в ряду. Вы не можете исключать косплееров из ряда.

Марин хочет узнать минимальное количество дополнительных косплееров, которых нужно пригласить, чтобы групповой снимок получился красивым. Она не может сделать это сама, поэтому просит у вас помощи. Сможете ей помочь?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое положительное число \(n\) (\(1 \leq n \leq 100\)) — начальное количество косплееров в ряду.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\) — описание косплееров в ряду. Каждый символ строки это 0, означающий мужчину, или 1, означающий женщину.

Обратите внимание, что ограничений на сумму \(n\) по всем наборам нет.

Выходные данные

Для каждого набора входных данных выведите минимальное количество косплееров, которых нужно добавить в ряд, чтобы фото стало красивым.

Примечание

В первом примере для каждой пары подряд стоящих косплееров вы можете пригласить двух девушек-косплееров для того, чтобы они встали между ними. Тогда \(000 \rightarrow 0110110\).

В третьем наборе вы можете пригласить одну девушку-косплеера, чтобы она встала после второго косплеера. Тогда \(010 \rightarrow 0110\).

B. Марин и не взаимно простая перестановка

Комбинаторика математика теория чисел *800

Марин хочет, чтобы вы посчитали количество красивых перестановок. Красивой перестановкой длины \(n\) называется перестановка, обладающая следующим свойством: \(\) \gcd (1 \cdot p_1, \, 2 \cdot p_2, \, \dots, \, n \cdot p_n) > 1, \(\) где \(\gcd\) — это наибольший общий делитель.

Перестановка — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. К примеру, \([2,3,1,5,4]\) является перестановкой, а \([1,2,2]\) — не является (\(2\) встречается в массиве дважды), как и массив \([1,3, 4]\) (\(n=3\), но в массиве присутствует \(4\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Каждый набор входных данных состоит из единственной строки, содержащей одно целое число \(n\) (\(1 \le n \le 10^3\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество красивых перестановок. Так как ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Примечание

В первом наборе существует единственная перестановка \([1]\), но она не является красивой, так как \(\gcd(1 \cdot 1) = 1\).

Во втором наборе существует единственная красивая перестановка \([2, 1]\), так как \(\gcd(1 \cdot 2, 2 \cdot 1) = 2\).

C. Синдзю и потерянная перестановка

Конструктив математика *1700

Синдзю очень любит перестановки! Сегодня она взяла перестановку \(p\) у Дзюдзю, чтобы поиграть с ней.

\(i\)-й циклический сдвиг перестановки \(p\) — это такое преобразование, что перестановка \(p = [p_1, p_2, \ldots, p_n] \) становится равной \( p = [p_{n-i+1}, \ldots, p_n, p_1,p_2, \ldots, p_{n-i}]\).

Назовём мощностью перестановки \(p\) количество различных элементов в массиве префиксных максимумов \(b\). Массив префиксных максимумов \(b\) — это массив длины \(n\), в котором \(b_i = \max(p_1, p_2, \ldots, p_i)\). Например, мощность перестановки \([1, 2, 5, 4, 6, 3]\) равна \(4\), так как \(b=[1,2,5,5,6,6]\) и в \(b\) всего \(4\) различных элемента.

К сожалению, Синдзю потеряла перестановку \(p\)! Вся информация, которую она помнит — это массив \(c\), где \(c_i\) равно мощности \((i-1)\)-го циклического сдвига перестановки \(p\). Она не уверена, что запомнила всё правильно, теперь она хочет проверить свою память.

Задан массив \(c\), определите, существует ли такая перестановка \(p\), которая согласуется с заданным массивом \(c\). Вам не нужно находить саму перестановку \(p\).

Перестановка — это массив из \(n\) различных целых чисел от \(1\) до \(n\), которые записаны в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) перестановкой не является (\(2\) содержится дважды). Аналогично, \([1,3, 4]\) тоже не является перестановкой (\(n=3\), но массив содержит значение \(4\)).

Входные данные

Входные данные состоят из одного или нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)).

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(c_1,c_2,\ldots,c_n\) (\(1 \leq c_i \leq n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных выведите «YES», если существует перестановка \(p\), согласующаяся с заданным массивом \(c\). Выведите «NO» в противном случае.

Вы можете использовать любой регистр букв при выводе «YES» и «NO» (например, строки «yEs», «yes», «Yes» и «YES» будут расценены как положительный ответ).

Примечание

В первом наборе входных данных примера перестановка \([1]\) согласуется с заданным массивом \(c\).

Во втором наборе входных данных примера перестановка \([2,1]\) согласуется с заданным массивом \(c\).

В пятом наборе входных данных примера перестановка \([5,1,2,4,6,3]\) согласуется с заданным массивом \(c\), так как:

  • нулевой циклический сдвиг перестановки \(p\) — это \([5, 1, 2, 4, 6, 3]\). Мощность этого сдвига равна \(2\), так как \(b = [5, 5, 5, 5, 6, 6]\), в этом массиве только \(2\) различных элемента: \(5\) и \(6\).
  • первый циклический сдвиг перестановки \(p\) это \([3, 5, 1, 2, 4, 6]\). Мощность этого сдвига равна \(3\), так как \(b=[3,5,5,5,5,6]\).
  • второй циклический сдвиг перестановки \(p\) это \([6, 3, 5, 1, 2, 4]\). Мощность этого сдвига равна \(1\), так как \(b=[6,6,6,6,6,6]\).
  • третий циклический сдвиг перестановки \(p\) это \([4, 6, 3, 5, 1, 2]\). Мощность этого сдвига равна \(2\), так как \(b=[4,6,6,6,6,6]\).
  • четвёртый циклический сдвиг перестановки \(p\) это \([2, 4, 6, 3, 5, 1]\). Мощность этого сдвига равна \(3\), так как \(b = [2, 4, 6, 6, 6, 6]\).
  • пятый циклический сдвиг перестановки \(p\) это \([1, 2, 4, 6, 3, 5]\). Мощность этого сдвига равна \(4\), так как \(b = [1, 2, 4, 6, 6, 6]\).

Таким образом, для этой перестановки \(c = [2, 3, 1, 2, 3, 4]\).

В третьем, четвёртом и шестом наборах входных данных примера можно показать, что искомой перестановки, которая согласуется с \(c\), не существует.

D1. 388535 (упрощенная версия)

битмаски математика *1600

Это упрощенная версия этой задачи. Различия между ограничениями в версиях выделены красным цветом. Вы можете совершать взломы, только если решили обе версии.

Марин и Годзё играют в прятки с массивом.

Сначала Годзё выполняет следующую последовательность действий:

  • Во-первых, Годзё выбирает \(2\) целых числа \(l\) и \(r\) такие, что \(l \leq r\).
  • Затем Годзё составляет массив \(a\) длины \(r-l+1\), который является перестановкой массива \([l,l+1,\ldots,r]\).
  • Наконец, Годзё выбирает секретное целое число \(x\) и присваивает в элемент \(a_i\) значение \(a_i \oplus x\) для всех \(i\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Марин даются значения \(l,r\) и финальный массив \(a\). Её цель — найти секретное число \(x\). Можете ли вы помочь Марин?

Заметим, что значение \(x\) не всегда можно определить однозначно. В этом случае найдите любое возможное \(x\), которое приводит к заданному финальному значению массива \(a\).

Входные данные

В первой строке находится целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

В первой строке каждого набора входных данных находятся два целых числа \(l\) и \(r\) (\( \color{red}{\boldsymbol{0} \boldsymbol{=} \boldsymbol{l}} \le r < 2^{17}\)).

Вторая строка содержит \(r - l + 1\) целое число \(a_1,a_2,\ldots,a_{r-l+1}\) (\(0 \le a_i < 2^{17}\)). Гарантируется, что данный массив \(a\) может быть получен с помощью шагов, выполняемых Годзё.

Гарантируется, что сумма значений \(r - l + 1\) по всем наборам входных данных не превосходит \(2^{17}\).

Выходные данные

Для каждого набора входных данных выведите \(x\). Если ответов несколько, то выведите любой из них.

Примечание

В первом примере начальное значение массива имеет вид \([3, 2, 1, 0]\).

Во втором примере начальное значение массива имеет вид \([0, 3, 2, 1]\).

В третьем примере начальное значение массива имеет вид \([2, 1, 0]\).

D2. 388535 (усложненная версия)

битмаски математика Перебор Структуры данных *2300

Это усложненная версия этой задачи. Различия между ограничениями в версиях выделены красным цветом. Вы можете совершать взломы, только если решили обе версии.

Марин и Годзё играют в прятки с массивом.

Сначала Годзё выполняет следующую последовательность действий:

  • Во-первых, Годзё выбирает \(2\) целых числа \(l\) и \(r\) такие, что \(l \leq r\).
  • Затем Годзё составляет массив \(a\) длины \(r-l+1\), который является перестановкой массива \([l,l+1,\ldots,r]\).
  • Наконец, Годзё выбирает секретное целое число \(x\) и присваивает в элемент \(a_i\) значение \(a_i \oplus x\) для всех \(i\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Марин даются значения \(l,r\) и финальный массив \(a\). Её цель — найти секретное число \(x\). Можете ли вы помочь Марин?

Заметим, что значение \(x\) не всегда можно определить однозначно. В этом случае найдите любое возможное \(x\), которое приводит к заданному финальному значению массива \(a\).

Входные данные

В первой строке находится целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

В первой строке каждого набора входных данных находятся два целых числа \(l\) и \(r\) (\(\color{red}{\boldsymbol{0} \boldsymbol{\le} \boldsymbol{l}} \le r < 2^{17}\)).

Вторая строка содержит \(r - l + 1\) целое число \(a_1,a_2,\ldots,a_{r-l+1}\) (\(0 \le a_i < 2^{17}\)). Гарантируется, что данный массив \(a\) может быть получен с помощью шагов, выполняемых Годзё.

Гарантируется, что сумма значений \(r - l + 1\) по всем наборам входных данных не превосходит \(2^{17}\).

Выходные данные

Для каждого набора входных данных выведите \(x\). Если ответов несколько, то выведите любой из них.

Примечание

В первом примере начальное значение массива имеет вид \([7, 6, 5, 4]\).

Во втором примере начальное значение массива имеет вид \([4, 7, 6, 5]\).

В третьем примере начальное значение массива имеет вид \([3, 1, 2]\).

E. Годзё и игра на матрице

дп игры математика реализация сортировки Структуры данных теория чисел хэши *2500

Марин измоталась после долгого дня косплея, поэтому Годзё приглашает ее сыграть в игру!

Марин и Годзё по очереди кладут одну из своих фишек на таблицу размером \(n \times n\), при этом Марин ходит первой. Существуют некоторые ограничения на размещение фишек:

  • За исключением первого хода фишка, размещенная игроком, должна находиться на манхэттенском расстоянии более чем \(k\) от последней размещенной фишки. Другими словами, если игрок кладет фишку в \((x_1, y_1)\), то фишка, помещенная на следующем ходу, должна находиться в ячейке \((x_2, y_2)\), удовлетворяющей \(|x_2 - x_1| + |y_2 - y_1| > k\).
  • Помимо предыдущего ограничения, фишка может быть размещена в любом месте матрицы, включая ячейки, где уже были размещены фишки любого игрока.

Каждый раз, когда какой-либо игрок кладет фишку в ячейку \((x, y)\), этот игрок получает \(v_{x,\ y}\) очков. Все значения \(v\) в таблице различны. Очки за ячейку даются даже в случае, если какие-то фишки уже находятся в этой ячейке. Игра заканчивается, когда каждый игрок сделает \(10^{100}\) ходов.

Марин и Годзё сыграют \(n^2\) партий. Для каждой ячейки таблицы будет ровно одна партия, в которой первым ходом Марин размещает фишку в этой ячейке. Для каждой такой партии определите, у кого в итоге будет больше очков при оптимальной игре Марин и Годзё (после первого хода Марин)? Или партия закончится вничью?

Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(3 \le n \le 2000\), \(1 \leq k \leq n - 2\)). Заметьте, что при таких ограничениях всегда возможно сделать ход.

Следующие \(n\) строк содержат по \(n\) целых чисел. \(j\)-м числом в \(i\)-й строке является \(v_{i,j}\) (\(1 \le v_{i,j} \le n^2\)). Все значения в \(v\) различны.

Выходные данные

Выведите \(n\) строк. \(i\)-я строка должна содержать \(n\) символов, где \(j\)-й символ является результатом партии, в которой Марин начинает с ячейки \((i, j)\). Выведите 'M' в случае победы Марин, 'G' — в случае победы Годзё и 'D' — в случае равного количества очков. Не выводите пробелы между символами в одной строке.

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 в начале строки. Можно показать, что нельзя уменьшить это значение.

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.

E. Тетраэдр

дп математика матрицы *1500

Вам задан тетраэдр. Обозначим его вершины буквами A, B, C и D соответственно.

В вершине тетраэдра D находится муравей. Муравей очень подвижный и не любит стоять на месте. В каждый момент времени он совершает один шаг от одной вершины к другой по некоторому ребру тетраэдра, оставаться на месте он не может.

От Вас в этой задаче требуется совсем немногое: нужно посчитать каким количеством способов муравей может прийти из исходной вершины D в себя ровно за n шагов. Другими словами, Вас просят узнать количество различных циклических путей длины n из вершины D в себя. Поскольку это количество может быть достаточно большим, ответ требуется посчитать по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 107) — требуемая длина циклического пути.

Выходные данные

Выведите единственное целое число — искомое количество способов по модулю 1000000007 (109 + 7).

Примечание

Искомые пути в первом примере:

  • D - A - D
  • D - B - D
  • D - C - D

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\) бурль.

B. Влад и конфеты

математика *800

Не так давно у Влада был день рождения, на который ему подарили упаковку конфет. В ней было \(n\) различных видов конфет, \(a_i\) штук конфет вида \(i\) (\(1 \le i \le n\)).

Влад решил каждый раз съедать ровно одну конфету, выбирая любую из конфет того вида, которого в текущий момент больше всего (если таких видов несколько, он может выбрать любой из них). Чтобы получить максимальное удовольствие от поедания, Влад не хочет съедать две конфеты одного вида подряд.

Помогите ему понять, может ли он съесть все конфеты, не съев две одинаковые конфеты подряд.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следует описание \(t\) наборов входных данных, по две строки на каждый.

Первая строка набора содержит единственное число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество видов конфет в упаковке.

Вторая строка набора содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — количество конфет вида \(i\).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите «YES», если Влад может съесть конфеты как задумывал, и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом примере необходимо есть конфеты в таком порядке:

  • конфету вида \(2\), их больше всего, теперь \(a = [2, 2]\);
  • конфету вида \(1\), конфет вида \(2\) столько же, но такую мы только что съели, теперь \(a = [1, 2]\);
  • конфету вида \(2\), их больше всего, теперь \(a = [1, 1]\);
  • конфету вида \(1\), теперь \(a = [0, 1]\);
  • конфету вида \(2\), теперь \(a = [0, 0]\) и конфеты кончились.

Во втором примере все конфеты одного вида и невозможно их съесть без поедания двух одинаковых подряд.

В третьем примере в первую очередь будет съедена конфета вида \(2\), после чего этот вид останется единственным видом, которого больше всего, и придётся снова съесть конфету типа \(2\).

D. Максимальное произведение наносит ответный удар

математика Перебор реализация *1600

Дан массив \(a\), состоящий из \(n\) целых чисел. Для каждого \(i\) (\(1 \le i \le n\)) верно неравенство: \(-2 \le a_i \le 2\).

Вы можете удалить любое количество (возможно, \(0\)) элементов из начала массива и любое количество (возможно, \(0\)) элементов из конца массива. При этом разрешается удалить весь массив.

Вам нужно ответить на вопрос: сколько элементов нужно удалить из начала массива и сколько элементов нужно удалить из конца массива, чтобы в результате получился массив, произведение элементов которого максимально. Если существует более одного способа получить массив с максимальным произведением элементов, разрешается вывести любой из них.

Произведение чисел на пустом массиве (массиве длины \(0\)) следует считать равным \(1\).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

В следующей строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(|a_i| \le 2\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два неотрицательных целых числа \(x\) и \(y\) (\(0 \le x + y \le n\)) — такие, что произведение чисел массива после удаления \(x\) элементов с начала и \(y\) элементов с конца, будет максимальным.

Если есть несколько способов получения максимального произведения, разрешается вывести любой. Произведение чисел на пустом массиве считать равным \(1\).

Примечание

В первом наборе входных данных примера максимальное значение произведения равно \(2\). Таким образом, можно либо удалить три первых элемента (получим массив \([2]\)), либо два последних и один первый элементы (также получим массив \([2]\)), либо два последних (получим массив \([1, 2]\)). Таким образом, в первом наборе подходят ответы: «3 0», «1 2» или «0 2».

Во втором наборе максимальное значение произведения равно \(1\). Тогда можно удалить все элементы из массива, так как значение произведения на пустом массиве будет равно \(1\). Таким образом, подходит ответ «3 0», но есть и другие возможные ответы.

В третьем наборе можно удалить два первых элемента массива. Тогда получим массив: \([-2, 2, -1]\). Произведение элементов полученного массива равно: \((-2) \cdot 2 \cdot (-1) = 4\). Это значение является максимально возможным из тех, которые можно получить. Таким образом, для этого набора входных данных подходит ответ «2 0».

F1. Перспективные подстроки (простая версия)

математика Перебор реализация Строки *1700

Это простая версия задачи F. Единственное различие между простой и сложной версиями заключается в ограничениях.

Будем называть непустую строку сбалансированной, если она содержит одинаковое количество знаков плюс и минус. Например: строки «+--+» и «++-+--» являются сбалансированными, а строки «+--», «--» и «» не являются сбалансированными.

Будем называть строку перспективной, если строку можно сделать сбалансированной при помощи нескольких(возможно нуля) применений следующей операции:

  • заменим два соседних знака минуса на один знак плюс.

В частности, всякая сбалансированная строка является перспективной. Однако обратное неверно: не всякая перспективная строка — сбалансирована.

Например: строка «-+---» является перспективной, так как можно заменить два соседних минуса на плюс и получить сбалансированную строку «-++-», либо получить другую сбалансированную строку «-+-+».

Сколько непустых подстрок данной строки \(s\) являются перспективными? Каждая непустая перспективная подстрока должна быть учтена в ответе столько раз, сколько раз она встречается в строке \(s\).

Напомним, что подстрока — это последовательность подряд идущих символов строки. Например, для строки «+-+» её подстроками являются строки «+-», «-+», «+», «+-+» (строка является подстрокой самой себя) и некоторые другие. Но следующие строки её подстроками не являются: «--», «++», «-++».

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке дано число \(n\) (\(1 \le n \le 3000\)) — длина строки \(s\).

Во второй строке набора дана строка \(s\) длины \(n\), состоящая только из знаков «+» и «-».

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3000\).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество непустых перспективных подстрок строки \(s\). Каждая непустая перспективная подстрока должна быть учтена в ответе столько раз, сколько раз она встречается в строке \(s\).

Примечание

Ниже перечислены перспективные подстроки для первых трёх наборов входных данных примера:

  1. \(s[1 \dots 2]\)+-», \(s[2 \dots 3]\)-+»;
  2. \(s[1 \dots 2]\)-+», \(s[2 \dots 3]\)+-», \(s[1 \dots 5]\)-+---», \(s[3 \dots 5]\)---»;
  3. \(s[1 \dots 3]\)---», \(s[2 \dots 4]\)---».

F2. Перспективные подстроки (сложная версия)

математика реализация Строки Структуры данных *2100

Это сложная версия задачи F. Единственное различие между простой и сложной версиями заключается в ограничениях.

Будем называть непустую строку сбалансированной, если она содержит одинаковое количество знаков плюс и минус. Например: строки «+--+» и «++-+--» являются сбалансированными, а строки «+--», «--» и «» не являются сбалансированными.

Будем называть строку перспективной, если строку можно сделать сбалансированной при помощи нескольких(возможно нуля) применений следующей операции:

  • заменим два соседних знака минуса на один знак плюс.

В частности, всякая сбалансированная строка является перспективной. Однако обратное неверно: не всякая перспективная строка — сбалансирована.

Например: строка «-+---» является перспективной, так как можно заменить два соседних минуса на плюс и получить сбалансированную строку «-++-», либо получить другую сбалансированную строку «-+-+».

Сколько непустых подстрок данной строки \(s\) являются перспективными? Каждая непустая перспективная подстрока должна быть учтена в ответе столько раз, сколько раз она встречается в строке \(s\).

Напомним, что подстрока — это последовательность подряд идущих символов строки. Например, для строки «+-+» её подстроками являются строки «+-», «-+», «+», «+-+» (строка является подстрокой самой себя) и некоторые другие. Но следующие строки её подстроками не являются: «--», «++», «-++».

Входные данные

В первой строке входных данных записано целое число \(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\). Каждая непустая перспективная подстрока должна быть учтена в ответе столько раз, сколько раз она встречается в строке \(s\).

Примечание

Ниже перечислены перспективные подстроки для первых трёх наборов входных данных примера:

  1. \(s[1 \dots 2]\)+-», \(s[2 \dots 3]\)-+»;
  2. \(s[1 \dots 2]\)-+», \(s[2 \dots 3]\)+-», \(s[1 \dots 5]\)-+---», \(s[3 \dots 5]\)---»;
  3. \(s[1 \dots 3]\)---», \(s[2 \dots 4]\)---».

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\).

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\).

E. Узкие компоненты

Деревья дп математика Перебор снм Структуры данных *2500

Задана матрица \(a\), состоящая из \(3\) строк и \(n\) столбцов. Каждая клетка матрицы либо свободна, либо занята.

Свободная клетка \(y\) достижима из свободной клетки \(x\), если выполняется хотя бы одно из следующих условий:

  • \(x\) и \(y\) имеют общую сторону;
  • существует такая свободная клетка \(z\), что \(z\) достижима из \(x\), а \(y\) достижима из \(z\).

Компонента связности — это такой набор свободных клеток матрицы, что все клетки в нем достижимы друг из друга, а добавление любой другой свободной клетки в него нарушает это правило.

К матрице задаются \(q\) запросов. Запросы следующего вида:

  • \(l\) \(r\) — посчитайте количество компонент связности матрицы, состоящей из столбцов с \(l\) по \(r\) матрицы \(a\) включительно.

Выведите ответы на все запросы.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество столбцов матрицы \(a\).

В \(i\)-й из следующих трех строк описывается \(i\)-я строка матрицы \(a\) — строка, состоящая из \(n\) символов. Каждый символ — это либо \(1\) (обозначающий свободную клетку), либо \(0\) (обозначающий занятую клетку).

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

В \(j\)-й из следующих \(q\) строк записаны два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)) — описание \(j\)-го запроса.

Выходные данные

Выведите \(q\) целых чисел — \(j\)-е значение должно быть равно количеству компонент связности матрицы, состоящей из столбцов с \(l_j\) по \(r_j\) матрицы \(a\) включительно.

C. European Trip

графы дп математика матрицы

The map of Europe can be represented by a set of \(n\) cities, numbered from \(1\) through \(n\), which are connected by \(m\) bidirectional roads, each of which connects two distinct cities. A trip of length \(k\) is a sequence of \(k+1\) cities \(v_1, v_2, \ldots, v_{k+1}\) such that there is a road connecting each consecutive pair \(v_i\), \(v_{i+1}\) of cities, for all \(1 \le i \le k\). A special trip is a trip that does not use the same road twice in a row, i.e., a sequence of \(k+1\) cities \(v_1, v_2, \ldots, v_{k+1}\) such that it forms a trip and \(v_i \neq v_{i + 2}\), for all \(1 \le i \le k - 1\).

Given an integer \(k\), compute the number of distinct special trips of length \(k\) which begin and end in the same city. Since the answer might be large, give the answer modulo \(998\,244\,353\).

Input

The first line contains three integers \(n\), \(m\) and \(k\) (\(3 \le n \le 100\), \(1 \le m \le n(n - 1) / 2\), \(1 \le k \le 10^4\)) — the number of cities, the number of roads and the length of trips to consider.

Each of the following \(m\) lines contains a pair of distinct integers \(a\) and \(b\) (\(1 \le a, b \le n\)) — each pair represents a road connecting cities \(a\) and \(b\). It is guaranteed that the roads are distinct (i.e., each pair of cities is connected by at most one road).

Output

Print the number of special trips of length \(k\) which begin and end in the same city, modulo \(998\,244\,353\).

Note

In the first sample, we are looking for special trips of length \(2\), but since we cannot use the same road twice once we step away from a city we cannot go back, so the answer is \(0\).

In the second sample, we have the following \(12\) special trips of length \(3\) which begin and end in the same city: \((1, 2, 4, 1)\), \((1, 3, 4, 1)\), \((1, 4, 2, 1)\), \((1, 4, 3, 1)\), \((2, 1, 4, 2)\), \((2, 4, 1, 2)\), \((3, 1, 4, 3)\), \((3, 4, 1, 3)\), \((4, 1, 3, 4)\), \((4, 3, 1, 4)\), \((4, 1, 2, 4)\), and \((4, 2, 1, 4)\).

E. Round Table

математика

There are \(n\) people, numbered from \(1\) to \(n\), sitting at a round table. Person \(i+1\) is sitting to the right of person \(i\) (with person \(1\) sitting to the right of person \(n\)).

You have come up with a better seating arrangement, which is given as a permutation \(p_1, p_2, \dots, p_n\). More specifically, you want to change the seats of the people so that at the end person \(p_{i+1}\) is sitting to the right of person \(p_i\) (with person \(p_1\) sitting to the right of person \(p_n\)). Notice that for each seating arrangement there are \(n\) permutations that describe it (which can be obtained by rotations).

In order to achieve that, you can swap two people sitting at adjacent places; but there is a catch: for all \(1 \le x \le n-1\) you cannot swap person \(x\) and person \(x+1\) (notice that you can swap person \(n\) and person \(1\)). What is the minimum number of swaps necessary? It can be proven that any arrangement can be achieved.

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 a single integer \(n\) (\(3 \le n \le 200\,000\)) — the number of people sitting at the table.

The second line contains \(n\) distinct integers \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), \(p_i \ne p_j\) for \(i \ne j\)) — the desired final order of the people around the table.

The sum of the values of \(n\) over all test cases does not exceed \(200\,000\).

Output

For each test case, print the minimum number of swaps necessary to achieve the desired order.

Note

In the first test case, we can swap person \(4\) and person \(1\) (who are adjacent) in the initial configuration and get the order \([4, 2, 3, 1]\) which is equivalent to the desired one. Hence in this case a single swap is sufficient.

H. Boundary

математика Перебор

Bethany would like to tile her bathroom. The bathroom has width \(w\) centimeters and length \(l\) centimeters. If Bethany simply used the basic tiles of size \(1 \times 1\) centimeters, she would use \(w \cdot l\) of them.

However, she has something different in mind.

  • On the interior of the floor she wants to use the \(1 \times 1\) tiles. She needs exactly \((w-2) \cdot (l-2)\) of these.
  • On the floor boundary she wants to use tiles of size \(1 \times a\) for some positive integer \(a\). The tiles can also be rotated by \(90\) degrees.

For which values of \(a\) can Bethany tile the bathroom floor as described? Note that \(a\) can also be \(1\).

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.

Each test case consist of a single line, which contains two integers \(w\), \(l\) (\(3 \leq w, l \leq 10^{9}\)) — the dimensions of the bathroom.

Output

For each test case, print an integer \(k\) (\(0\le k\)) — the number of valid values of \(a\) for the given test case — followed by \(k\) integers \(a_1, a_2,\dots, a_k\) (\(1\le a_i\)) — the valid values of \(a\). The values \(a_1, a_2, \dots, a_k\) have to be sorted from smallest to largest.

It is guaranteed that under the problem constraints, the output contains at most \(200\,000\) integers.

Note

In the first test case, the bathroom is \(3\) centimeters wide and \(5\) centimeters long. There are three values of \(a\) such that Bethany can tile the floor as described in the statement, namely \(a=1\), \(a=2\) and \(a=3\). The three tilings are represented in the following pictures.

L. Il Derby della Madonnina

дп математика Структуры данных

The derby between Milan and Inter is happening soon, and you have been chosen as the assistant referee for the match, also known as linesman. Your task is to move along the touch-line, namely the side of the field, always looking very carefully at the match to check for offside positions and other offences.

Football is an extremely serious matter in Italy, and thus it is fundamental that you keep very close track of the ball for as much time as possible. This means that you want to maximise the number of kicks which you monitor closely. You are able to monitor closely a kick if, when it happens, you are in the position along the touch-line with minimum distance from the place where the kick happens.

Fortunately, expert analysts have been able to accurately predict all the kicks which will occur during the game. That is, you have been given two lists of integers, \(t_1, \ldots, t_n\) and \(a_1, \ldots, a_n\), indicating that \(t_i\) seconds after the beginning of the match the ball will be kicked and you can monitor closely such kick if you are at the position \(a_i\) along the touch-line.

At the beginning of the game you start at position \(0\) and the maximum speed at which you can walk along the touch-line is \(v\) units per second (i.e., you can change your position by at most \(v\) each second). What is the maximum number of kicks that you can monitor closely?

Input

The first line contains two integers \(n\) and \(v\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le v \le 10^6\)) — the number of kicks that will take place and your maximum speed.

The second line contains \(n\) integers \(t_1, \ldots, t_n\) (\(1 \le t_i \le 10^9\)) — the times of the kicks in the match. The sequence of times is guaranteed to be strictly increasing, i.e., \(t_1 < t_2 < \cdots < t_n\).

The third line contains \(n\) integers \(a_1, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — the positions along the touch-line where you have to be to monitor closely each kick.

Output

Print the maximum number of kicks that you can monitor closely.

Note

In the first sample, it is possible to move to the right at maximum speed for the first \(3.5\) seconds and stay at position \(7\) until the first kick happens, and then immediately move right also at maximum speed to watch the second kick at position \(17\). There is no way to monitor closely the third kick after the second kick, so at most \(2\) kicks can be seen.

N. Drone Photo

Комбинаторика математика сортировки

Today, like every year at SWERC, the \(n^2\) contestants have gathered outside the venue to take a drone photo. Jennifer, the social media manager for the event, has arranged them into an \(n\times n\) square. Being very good at her job, she knows that the contestant standing on the intersection of the \(i\)-th row with the \(j\)-th column is \(a_{i,j}\) years old. Coincidentally, she notices that no two contestants have the same age, and that everyone is between \(1\) and \(n^2\) years old.

Jennifer is planning to have some contestants hold a banner with the ICPC logo parallel to the ground, so that it is clearly visible in the aerial picture. Here are the steps that she is going to follow in order to take the perfect SWERC drone photo.

  • First of all, Jennifer is going to select four contestants standing on the vertices of an axis-aligned rectangle.
  • Then, she will have the two younger contestants hold one of the poles, while the two older contestants will hold the other pole.
  • Finally, she will unfold the banner, using the poles to support its two ends. Obviously, this can only be done if the two poles are parallel and do not cross, as shown in the pictures below.

Being very indecisive, Jennifer would like to try out all possible arrangements for the banner, but she is worried that this may cause the contestants to be late for the competition. How many different ways are there to choose the four contestants holding the poles in order to take a perfect photo? Two choices are considered different if at least one contestant is included in one but not the other.

Input

The first line contains a single integer \(n\) (\(2\le n \le 1500\)).

The next \(n\) lines describe the ages of the contestants. Specifically, the \(i\)-th line contains the integers \(a_{i,1},a_{i,2},\ldots,a_{i,n}\) (\(1\le a_{i,j}\le n^2\)).

It is guaranteed that \(a_{i,j}\neq a_{k,l}\) if \(i\neq k\) or \(j\neq l\).

Output

Print the number of ways for Jennifer to choose the four contestants holding the poles.

Note

In the first sample, there are \(4\) contestants, arranged as follows.

There is only one way to choose four contestants, with one pole held by contestants aged \(1\) and \(2\) and the other one by contestants aged \(3\) and \(4\). But then, as we can see in the picture, the poles cross.

Since there is no valid way to choose four contestants, the answer is \(0\).

In the second sample, the \(4\) contestants are arranged as follows.

Once again, there is only one way to choose four contestants, but this time the poles don't cross.

Therefore, the answer is \(1\).

In the third sample, the \(9\) contestants are arranged as follows.

There are \(6\) ways of choosing four contestants so that the poles don't cross, as shown in the following pictures.

B. Mike's Sequence

*особая задача математика разделяй и властвуй реализация

You won't find this sequence on OEIS.

Input

One integer \(r\) (\(-45 \le r \le 2999\)).

Output

One integer.

C. Pōja Verdon

*особая задача математика реализация

Aenar has an array \(a\) consisting of \(n\) integers.

Input

The first line is the integer \(n\) (\(1 \le n \le 100\)).

The second line contains \(n\) integers \(a_i\) (\(0 \le a_i \le 3979\)) — the contents of the array.

Output

Output a single number.

D. Is it rated - 3

*особая задача дп Комбинаторика математика

Input

The first line contains a string \(S\).

The second line contains an integer \(X\).

Constraints

  • \(|S|=3\)
  • \(0 \le X \le 10^9\)
  • The input is guaranteed to be valid.

A. НОД против НОК

Конструктив математика *800

Дано положительное целое число \(n\). Необходимо найти \(4\) положительных целых числа \(a, b, c, d\) такие, что

  • \(a + b + c + d = n\), а также
  • \(\gcd(a, b) = \operatorname{lcm}(c, d)\).

Из всех возможных вариантов ответа можно вывести любой. Можно показать, что при заданных ограничениях ответ всегда существует.

В данной задаче \(\gcd(a, b)\) обозначает наибольший общий делитель чисел \(a\) и \(b\), а \(\operatorname{lcm}(c, d)\) обозначает наименьшее общее кратное чисел \(c\) и \(d\)

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находится целое число \(n\) (\(4 \le n \le 10^9\)) — сумма чисел \(a\), \(b\), \(c\), \(d\).

Выходные данные

Для каждого набора входных данных выведите \(4\) положительных целых числа \(a\), \(b\), \(c\), \(d\) такие, что \(a + b + c + d = n\) и \(\gcd(a, b) = \operatorname{lcm}(c, d)\).

Примечание

В первом наборе входных данных \(\gcd(1, 1) = \operatorname{lcm}(1, 1) = 1\), \(1 + 1 + 1 + 1 = 4\).

Во втором наборе входных данных \(\gcd(2, 2) = \operatorname{lcm}(2, 1) = 2\), \(2 + 2 + 2 + 1 = 7\).

В третьем наборе входных данных \(\gcd(2, 2) = \operatorname{lcm}(2, 2) = 2\), \(2 + 2 + 2 + 2 = 8\).

В четвертом наборе входных данных \(\gcd(2, 4) = \operatorname{lcm}(2, 1) = 2\), \(2 + 4 + 2 + 1 = 9\).

В пятом наборе входных данных \(\gcd(3, 5) = \operatorname{lcm}(1, 1) = 1\), \(3 + 5 + 1 + 1 = 10\).

D. НОД-угадайка

битмаски игры интерактив китайская теорема об остатках Конструктив математика теория чисел *2000

Это интерактивная задача.

Загадано некоторое положительное целое число \(1 \le x \le 10^9\).

За один запрос вы можете выбрать два положительных целых числа \(a \neq b\). В качестве ответа на этот запрос вы получите \(\gcd(x + a, x + b)\), где \(\gcd(n, m)\) обозначает наибольший общий делитель чисел \(n\) и \(m\).

Чтобы угадать одно загаданное число \(x\), вы можете совершить не более \(30\) запросов.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Загаданное число \(x\) удовлетворяет следующим ограничениям: (\(1 \le x \le 10^9\)).

Протокол взаимодействия

Загаданное число \(x\) зафиксировано до начала взаимодействия и не зависит от ваших запросов.

Для угадывания каждого \(x\) вы можете сделать не более \(30\) запросов следующего вида:

  • «? a b» (\(1 \le a, b \le 2 \cdot 10^9\), \(a \neq b\)).

В ответ на этот запрос вы получите \(\gcd(x + a, x + b)\).

Когда вы узнаете число \(x\), выведите одну строку следующего формата:

  • «! x» (\(1 \le x \le 10^9\)).

После этого переходите к решению следующего набора входных данных.

Если вы сделаете более \(30\) запросов для одного \(x\), или запросы будут некорректными, взаимодействие будет немедленно прекращено, а ваша программа получит вердикт Неправильный ответ.

После вывода запросов не забудьте выводить символ перевода строки и сбрасывать буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взломов используйте следующий формат:

Первая строка должна содержать одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных должна содержать единственное целое число \(x\) (\(1 \le x \le 10^9\)) — число \(x\), которое нужно угадать.

Примечание

Первое загаданное число равно \(4\), поэтому ответы на запрос следующие:

«? 1 2» — \(\gcd(4 + 1, 4 + 2) = \gcd(5, 6) = 1\).

«? 12 4» — \(\gcd(4 + 12, 4 + 4) = \gcd(16, 8) = 8\).

Второе загаданное число равно \(10^9\), поэтому ответ на запрос следующий:

«? 2000000000 1999999999» — \(\gcd(3 \cdot 10^9, 3 \cdot 10^9 - 1) = 1\).

Эти запросы показаны только для лучшего понимания протокола взаимодействия, и их недостаточно, чтобы однозначно восстановить \(x\).

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\) ходов.

C. Покрытие полуферзями

Конструктив математика *2400

Дана доска, состоящая из \(n\) строк и \(n\) столбцов, пронумерованных от \(1\) до \(n\). Пересечение \(a\)-й строки и \(b\)-го столбца обозначим за \((a, b)\).

Полуферзь может атаковать клетки, стоящие в той же строке, том же столбце и на той же диагонали, что и он. Более формально, полуферзь, стоящий в \((a, b)\) может атаковать клетку \((c, d)\), если \(a=c\), или \(b=d\), или \(a-b=c-d\).

Голубые клетки находятся под атакой.

Какое минимальное количество полуферзей нужно разместить на доске, чтобы каждая клетка была атакована хотя бы одним полуферзем?

Выведите оптимальное решение.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — размер доски.

Выходные данные

В первой строке выведите одно целое число \(k\) — минимальное количество полуферзей.

В каждой из следующих \(k\) строках выведите два целых числа \(a_i\), \(b_i\) (\(1 \le a_i, b_i \le n\)) — местоположение \(i\)-го полуферзя.

Если существует несколько решений, выведите любое.

Примечание

Пример \(1\): одного полуферзя достаточно. Заметьте: полуферзь, стоящий в \((1, 1)\), атакует \((1, 1)\).

Пример \(2\): одного полуферзя также достаточно. \((1, 2)\) и \((2, 1)\) — неверные решения, поскольку полуферзь, стоящий в \((1, 2)\), не атакует клетку \((2, 1)\), и наоборот. \((2, 2)\) также верное решение.

Пример \(3\): невозможно покрыть доску одним полуферзем. Существует несколько решений для \(2\)-х полуферзей, вы можете вывести любое из них.

E. Центроидные вероятности

бпф дп Комбинаторика математика *3000

Рассмотрим все деревья (связные неориентированные ациклические графы) на \(n\) вершинах (\(n\) нечетное, вершины пронумерованы от \(1\) до \(n\)) такие, что для каждого \(2 \le i \le n\) \(i\)-я вершина смежна ровно одной вершине с меньшим номером.

Для каждого \(i\) (\(1 \le i \le n\)) найдите количество деревьев, для которых \(i\)-я вершина является центроидом. Ответ может быть очень большим, поэтому выведите его по модулю \(998\,244\,353\).

Центроидом называется вершина, после удаления которой дерево разбивается на поддеревья, каждое из которых состоит из не более чем \((n-1)/2\) вершин.

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(3 \le n < 2 \cdot 10^5\), \(n\) нечетное) — количество вершин в дереве.

Выходные данные

В одну строку выведите \(n\) целых чисел, \(i\)-е из которых должно быть равно ответу для \(i\)-й вершины (по модулю \(998\,244\,353\)).

Примечание

Пример \(1\): существует два возможных дерева: с ребрами \((1-2)\), и \((1-3)\) — здесь центроидом является вершина \(1\); и с ребрами \((1-2)\), и \((2-3)\) — здесь центроидом является вершина \(2\). Таким образом, ответ равен \(1, 1, 0\).

Пример \(2\): существует \(24\) возможных дерева. Например, подойдет дерево с ребрами \((1-2)\), \((2-3)\), \((3-4)\), и \((4-5)\). Здесь центроидом является вершина \(3\).

A. Смена направления

математика реализация *800

Дана сетка, состоящая из \(n\) строк и \(m\) столбцов. Строки и столбцы пронумерованы от \(1\) до \(n\) и от \(1\) до \(m\) соответственно. Пересечение \(a\)-й строки и \(b\)-го столбца обозначим за \((a, b)\).

Изначально вы находитесь в верхнем левом углу \((1, 1)\). Ваша цель — добраться до нижнего правого угла \((n, m)\)

Из клетки \((a, b)\) вы можете двигаться в четырех направлениях: вверх в клетку \((a-1, b)\), вниз в \((a+1, b)\), влево в \((a, b-1)\) или вправо в \((a, b+1)\)

Вам запрещается двигаться в одном направлении дважды подряд, вы не можете покидать пределы сетки. За какое минимальное количество шагов можно добраться до \((n, m)\)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^9\)) — размер сетки.

Выходные данные

Для каждого набора входных данных выведите одно целое число: \(-1\), если нельзя добраться до \((n, m)\) при заданных ограничениях, в ином случае — минимальное количество шагов.

Примечание

\(1\)-й набор входных данных: \(n=1\), \(m=1\), изначально вы находитесь в \((1, 1)\), поэтому \(0\) шагов необходимо, чтобы добраться до \((n, m) = (1, 1)\) .

\(2\)-й набор: нужно сделать один шаг вниз, чтобы достичь \((2, 1)\).

\(3\)-й набор: невозможно достичь \((1, 3)\), не сделав подряд два шага вправо или не покидая пределы сетки.

\(4\)-й набор: оптимальная последовательность шагов выглядит например так: \((1, 1) \to (1, 2) \to (2, 2) \to (2, 1) \to (3, 1) \to (3, 2) \to (4, 2)\). Можно доказать, что это оптимальное решение. Таким образом, ответ равен \(6\).

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».

E. Двухбуквенные строки

математика Строки Структуры данных *1200

Даны \(n\) строк, каждая имеет длину \(2\) и состоит из строчных латинских букв от 'a' до 'k'. Выведите количество пар индексов \((i, j)\) таких, что \(i < j\) и \(i\)-я строка с \(j\)-й строкой различаются ровно в одной позиции.

Другими словами найдите количество пар \((i, j)\) (\(i < j\)) таких, что \(i\)-я строка с \(j\)-й строкой различаются ровно в одной позиции \(p\) (\(1 \leq p \leq 2\)), то есть \({s_{i}}_{p} \neq {s_{j}}_{p}\).

Ответ может не влезать в 32-разрядный целочисленный тип, поэтому вам следует использовать 64-разрядные целые числа, такие как long long в C++, чтобы избежать переполнения целочисленного типа.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Далее идут описания наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество строк.

Далее следуют \(n\) строк, \(i\)-я из которых содержит единственную строку \(s_i\) длины \(2\), состоящую из строчных латинских букв от 'a' до 'k'.

Гарантируется что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите единственное число — количество пар \((i, j)\) (\(i < j\)) таких, что \(i\)-я строка с \(j\)-й строкой различаются ровно в одной позиции \(p\) (\(1 \leq p \leq 2\)), то есть \({s_{i}}_{p} \neq {s_{j}}_{p}\).

Пожалуйста, обратите внимание, что ответ для некоторых тестовых примеров не будет помещаться в 32-разрядный целочисленный тип, поэтому вы должны использовать по крайней мере 64-разрядный целочисленный тип в вашем языке программирования (например, long long для C++).

Примечание

В первом примере ровно в одной позиции различаются следующие пары: («ab», «cb»), («ab», «db»), («ab», «aa»), («cb», «db») and («cb», «cc»).

Во втором примере ровно в одной позиции различаются следующие пары: («aa», «ac»), («aa», «ca»), («cc», «ac»), («cc», «ca»), («ac», «aa») and («ca», «aa»).

В третьем примере нет пар, удовлетворяющих условиям.

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\).

A. Волшебники и троллейбусы

математика реализация *1600

В некоторой стране живут волшебники. Они любят ездить на троллейбусах.

В одном городе этой страны есть троллейбусное депо с n троллейбусами. Каждый день троллейбусы выезжают из депо один за другим и едут до конечной станции. Конечная станция находится на расстоянии d метров от депо. Про i-ый троллейбус известно, что он выезжает в момент времени ti секунд, может ехать со скоростью не более vi метров в секунду и ускоряться с ускорением, не превосходящем a метров в секунду за секунду. Замедляться троллейбус может сколь угодно быстро (магия!). Менять свое ускорение троллейбус может также сколь угодно быстро. Обратите внимание, что максимальное ускорение у всех троллейбусов одинаковое.

Несмотря на волшебство, троллейбусы все еще питаются от электрической цепи и не могут обгонять друг друга (во всем виноваты, конечно же, провода). Если один троллейбус догоняет другой, то они едут вплотную друг за другом, пока не приедут на конечную станцию. При этом водители едут так, чтобы приехать на конечную станцию как можно быстрее.

Вам, как главе клуба любителей троллейбусов, предстоит определить для каждого троллейбуса минимальное время, к которому он может доехать до конечной станции. Во время приезда на конечную станцию не обязательно иметь нулевую скорость. При выезде из депо скорость троллейбуса считается равной нулю. С точки зрения физики, троллейбусы можно считать материальными точками, а также следует пренебречь воздействием на скорость троллейбуса всего, кроме ускорения и замедления, обеспечиваемого двигателем.

Входные данные

В первой строке входных данных записаны три целых числа через пробел n, a, d (1 ≤ n ≤ 105, 1 ≤ a, d ≤ 106) — количество троллейбусов, максимальное ускорение троллейбусов и расстояние от депо до конечной станции, соответственно.

В следующих n строках записаны пары целых чисел ti vi (0 ≤ t1 < t2... < tn - 1 < tn ≤ 106, 1 ≤ vi ≤ 106) — время отправления из депо i-го троллейбуса и его максимальная скорость, соответственно. Числа в строках разделяются пробелами.

Выходные данные

Для каждого троллейбуса выведите время приезда на конечную станцию в отдельной строке. Времена для троллейбусов выводите в порядке задания троллейбусов во входном файле. Ответ будет засчитан, если абсолютная или относительная погрешность не превосходит 10 - 4.

Примечание

В первом примере второй троллейбус догонит первый, это произойдет на расстоянии 510.5 метров от депо. Оставшиеся 9489.5 метров они проедут вместе со скоростью 10 метров в секунду. В итоге оба троллейбуса прибудут на конечную станцию к моменту времени 1000.5 секунд. Третий троллейбус их не догонит. Он приедет на конечную станцию к моменту времени 11000.05 секунд.

B. Волшебники и здоровенный приз

дп математика Теория вероятностей *1800

Для успешного участия в соревнованиях волшебников, нужно много тренироваться, поэтому проводятся многочисленные волшебные школы и магические сборы.

Одна из таких волшебных школ состоит из n туров, за каждый из которых победителю дают здоровенный приз. Школа проводится достаточно далеко, поэтому везти домой все призы придется сразу. А в сумках, которые Вы привезли с собой, есть место не более чем для k здоровенных призов.

Помимо того, что вы хотите суметь увезти все призы, вы также хотите хорошо выступить. Вы будете считать выступление хорошим, если вы выиграете не менее l туров.

Так как организаторы заметили по прошлым годам, что у участников есть проблемы с транспортировкой здоровенных призов (заклинание уменьшения призов еще, к сожалению, не изобретено), то за некоторые туры победителю, вместо здоровенного приза, выдают сумку. Каждая сумка характеризуется числом ai — количеством здоровенных призов, которые в нее поместятся.

Так же вы уже знаете тематику всех туров, поэтому можете оценить вероятность pi того, что вы выиграете i-ый тур. Пропускать тур вы не можете ни при каких обстоятельствах.

Найдите, с какой вероятностью вы выступите на сборах хорошо, но при этом сможете увести все призы (то есть все выигранные здоровенные призы можно будет поместить в выигранные и привезенные сумки).

Входные данные

В первой строке записано три целых числа n, l, k (1 ≤ n ≤ 200, 0 ≤ l, k ≤ 200) — количество туров, минимальное количество туров, которое надо выиграть, и количество свободных мест в сумках, которые вы привезли с собой под призы, соответственно.

Во второй строке записаны n целых чисел через пробел, pi (0 ≤ pi ≤ 100) — вероятность выигрыша i-ого тура в процентах.

В третьей строке записаны n целых чисел через пробел, ai (1 ≤ ai ≤ 200) — вместимость сумки, которую выдают за i-ый тур, или же -1, если в i-ый тур выдают здоровенный приз, а не сумку.

Выходные данные

Выведите единственное вещественное число — ответ на задачу. Ответ будет засчитан, если абсолютная или относительная погрешность не превосходит 10 - 6.

Примечание

В первом примере, чтобы увезти все призы необходимо либо ничего не выиграть, либо выиграть третий тур. Вариант «ничего не выиграть» не подходит под условие хорошего выступления. Значит, надо обязательно выиграть третий тур. При этом остальные условия будут соблюдены всегда. Вероятность выиграть третий тур равна 0.3.

Во втором примере с вероятностью 1.0 мы выигрываем единственный тур, и радостно увозим большую сумку за него.

C. Волшебники и числа

игры математика *2300

В некоторой стране живут волшебники. Они любят играть с числами.

На доске записано два числа — a и b. Порядок чисел не важен. Пусть для определенности a ≤ b. Игроки по очереди могут колдовать одно из двух заклинаний.

  • Заменить b на b - ak. Число k может выбрать игрок, с ограничениями, что k > 0 и b - ak ≥ 0. Число k выбирается независимо при каждом использовании заклинания игроком, делающим ход.
  • Заменить b на b mod a.

В случае, когда a > b возможны аналогичные ходы.

Если хотя бы одно из чисел равно нулю, ход сделать нельзя, так как брать остаток по модулю ноля считается некультурным, а вычитать ноль слишком скучно. Проигрывает игрок, который не может ходить.

Чтобы успешно участвовать в волшебном тотализаторе, Вам надо научиться быстро определять, какой из волшебников выиграет, если оба играют оптимально: тот, который ходит первым, или же тот, который ходит вторым.

Входные данные

В первой строке дано одно целое число t — количество наборов входных данных (1 ≤ t ≤ 104). Далее в t строках даны по два целых числа a, b (0 ≤ a, b ≤ 1018). Числа записаны через пробел.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Для каждого из t наборов входных данных выведите «First» (без кавычек), если, при оптимальной игре, выиграет игрок, который ходит первым, и «Second» (без кавычек), если выиграет игрок, который ходит вторым. Ответы на разные наборы данных выводите в разных строках в том порядке, в котором они записаны во входных данных.

Примечание

В первом примере первому игроку следует пойти в (11,10). Тогда, после единственного хода второго игрока в (1,10), он возьмет 10 по модулю 1 и выиграет.

Во втором примере у первого игрока есть два хода в (1,10) и в (21,10). После обоих ходов второй может выиграть.

В третьем примере у первого игрока нет хода.

В четвертом примере первый игрок выигрывает за один ход, взяв 30 по модулю 10.

E. Волшебники и пари

графы математика матрицы поиск в глубину и подобное *2900

В некоторой стране живут волшебники. Они любят заключать странные пари.

Два волшебника нарисовали ациклический ориентированный граф с n вершинами и m ребрами (вершины графа пронумерованы от 1 до n). Назовем истоком вершину, в которую не входит ни одного ребра, а стоком — вершину, из которой не выходит ни одного ребра. Заметим, что вершина может быть стоком и истоком одновременно. В графе волшебников количество стоков и истоков совпадает.

Волшебники занумеровали истоки в порядке увеличения номера вершины от 1 до k. Cтоки занумерованы от 1 до k аналогичным способом.

Для заключения пари, они, как настоящие волшебники, применяют заклинание, которое выбирает набор из k путей из всех истоков в стоки, причем так, что никакие два пути не пересекаются по вершинам. В таком случае в каждый сток ведет путь из ровно одного истока. Пусть в i-ый сток ведет путь из ai истока. Тогда назовем пару (i, j) инверсией, если i < j и ai > aj. Если количество инверсий среди всевозможных пар (i, j), таких что (1 ≤ i < j ≤ k), четно, то выиграл первый волшебник (второй отдает ему 1 волшебную монету). Иначе выиграл второй волшебник (он получает 1 волшебную монету от первого).

Наших волшебников охватил безумный азарт, поэтому они выбирали новые пути снова и снова так долго, что в итоге получили ровно по одному разу все возможные наборы путей. Наборы непересекающихся по вершинам путей считаются различными, если существует ребро, принадлежащее какому-то пути одного набора и не принадлежащее никакому пути другого набора. Для проверки своих записей они просят вас посчитать суммарный выигрыш первого игрока на этих наборах путей по модулю простого числа p.

Входные данные

В первой строке входного файла записано через пробел три целых числа n, m, p (1 ≤ n ≤ 600, 0 ≤ m ≤ 105, 2 ≤ p ≤ 109 + 7). Гарантируется, что p — простое.

В следующих m строках заданы ребра графа. В каждой строке находится пара целых чисел, разделенных пробелом, ai bi — ребро из вершины ai в вершину bi. Гарантируется, что граф ациклический и что в графе одинаковое число стоков и истоков. Обратите внимание, в графе могут быть кратные ребра.

Выходные данные

Выведите ответ на задачу — суммарный выигрыш первого игрока по модулю простого числа p. Обратите внимание, что выигрыш может быть отрицательным, но остаток по модулю должен быть неотрицательным (см. пример).

Примечание

В первом примере существует ровно 1 набор путей — . Число инверсий — 0, что является четным числом. Поэтому первый волшебник получает 1 монету.

Во втором примере существует ровно 1 набор путей — . Существует ровно одна инверсия. Поэтому первый получает -1 монету. .

В третьем примере существует два набора путей, которые учитываются с разными знаками.

В четвертом примере наборов путей вообще не существует.

В пятом примере есть три истока — вершины с номерами (2, 3, 5) и три стока — вершины с номерами (1, 2, 4). Для единственного набора путей существует 2 инверсии, то есть их число четно.

C. Где пицца?

графы математика поиск в глубину и подобное реализация снм Структуры данных *1400

Хоссам в попытках найти пиццу наткнулся на две перестановки \(a\) и \(b\) длины \(n\).

Вспомним, что перестановкой называется массив из \(n\) различных чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, а \([1,2,2]\) — не перестановка (\(2\) встречается дважды), и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве есть число \(4\)).

Хоссам позабыл про пиццу и начал играть с этими перестановками. В процессе игры некоторые элементы первой перестановки смешались с элементами второй, но к удивлению Хоссама в итоге получилась тоже перестановка длины \(n\).

Более конкретно, он смешал перестановки, получив массив \(c\) следующим образом.

  • Для всех \(i\) (\(1\le i\le n\)), он сделал \(c_i=a_i\) или \(c_i=b_i\).
  • Массив \(c\) является перестановкой.

Вы знаете две перестановки \(a\) и \(b\) и значения на некоторых позициях в \(c\). Пожалуйста, посчитайте количество различных перестановок \(c\), не противоречащих описанному процессу и известным значениям. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Гарантируется, что существует хотя бы одна перестановка \(c\), удовлетворяющая всем ограничениям.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^5\)) — длину перестановок.

Следующая строка содержит \(n\) различных чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le n\)) — первую перестановку.

Следующая строка содержит \(n\) различных чисел \(b_1,b_2,\ldots,b_n\) (\(1\le b_i\le n\)) — вторую перестановку.

Следующая строка содержит \(n\) целых чисел \(d_1,d_2,\ldots,d_n\) (\(d_i\) равно \(0\), \(a_i\), или \(b_i\)) — описание известных значений \(c\). Если \(d_i=0\), то про значение \(c_i\) ничего не известно. Иначе \(c_i=d_i\).

Гарантируется, что существует хотя бы одна перестановка \(c\), удовлетворяющая всем ограничениям.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество различных перестановок \(c\) по модулю \(10^9+7\).

Примечание

В первом наборе входных данных подходят \(4\) перестановки: \([2,3,1,4,5,6,7]\), \([2,3,1,7,6,5,4]\), \([2,3,1,4,6,5,7]\), \([2,3,1,7,5,6,4]\).

Во втором наборе входных данных подходит только одна перестановка: \([1]\).

В третьем наборе входных данных подходят \(2\) перестановки: \([6,5,2,1,4,3]\), \([6,5,3,1,4,2]\).

В четвертом наборе входных данных подходят \(2\) перестановки: \([1,2,8,7,4,3,6,5]\), \([1,6,4,7,2,3,8,5]\).

В пятом наборе входных данных подходит только одна перестановка: \([1,9,2,3,4,10,8,6,7,5]\).

D. Очень подозрительно

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация *1700

Хоссам и его друзья владеют плоскостью, разбитой бесконечной сеткой на правильные шестиугольники, как показано на рисунке ниже. Им нравятся равносторонние треугольники, поэтому они хотят создать на плоскости \(n\) равносторонних треугольников, добавив несколько прямых. Считаться будут только треугольники, внутри которых ничего нет (то есть внутри которых не проходит ни одна прямая и ни одна сторона шестиугольника).

Вы можете добавлять прямые, параллельные сторонам шестиугольников. Вам дано число \(n\), какое минимальное число прямых нужно добавить, чтобы создать хотя бы \(n\) равносторонних треугольников?

Добавление двух красных прямых создает два желтых треугольника.
Входные данные

Первая строка содержит одно цело число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одного целого числа \(n\) (\(1 \le n \le 10^{9}\)) — требуемого количества треугольников.

Выходные данные

Для каждого набора выведите минимальное количество прямых, необходимое для создания \(n\) или больше равносторонних треугольников.

Примечание

В первом и втором примере нужны две прямые. После добавления первой не будет ни одного трекгольника независимо от места создания. После добавления второй можно одновременно создать два треугольника.

В третьем наборе входных данных нужно минимум три прямых, как показано ниже.

B. Отрезок последовательных точек

математика Перебор сортировки *1000

Вам задано \(n\) точек с целочисленными координатами на координатной оси \(OX\). Координата \(i\)-й точки равна \(x_i\). Все координаты точек различны и заданы в строго возрастающем порядке.

Для каждой точки \(i\) вы можете не более одного раза сделать следующую операцию: взять эту точку и подвинуть ее на \(1\) влево или вправо (то есть вы можете изменить ее координату \(x_i\) на \(x_i - 1\) или на \(x_i + 1\)). Другими словами, вы можете выбрать для каждой точки по отдельности ее новую координату. Для \(i\)-й точки новой координатой может быть \(x_i - 1\), \(x_i\) или \(x_i + 1\).

Ваша задача — определить, сможете ли вы подвинуть точки описанным выше способом так, чтобы новое множество точек образовывало последовательный отрезок целых чисел, то есть для какого-то целого числа \(l\) координаты точек будут равны \(l, l + 1, \ldots, l + n - 1\).

Заметьте, что результирующее множество также должно состоять из точек с различными координатами.

Вам предстоит ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество точек в множестве \(x\).

Вторая строка набора тестовых данных содержит \(n\) целых чисел \(x_1 < x_2 < \ldots < x_n\) (\(1 \le x_i \le 10^6\)), где \(x_i\) — координата \(i\)-й точки.

Гарантируется, что точки заданы в строго возрастающем порядке (это также значит, что все координаты различны). Также гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — если множество точек из набора может быть сдвинуто таким образом, чтобы образовывать последовательный отрезок целых чисел, выведите YES, иначе выведите NO.

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\) пачек.

F. Подсчет перестановок

бпф дп Комбинаторика математика Перебор *2700

Посчитайте количество таких перестановок \(p\) размера \(n\), в которых ровно \(k\) инверсий (пар индексов \((i, j)\), для которых \(i < j\) и \(p_i > p_j\)) и ровно \(x\) индексов \(i\), для которых \(p_i > p_{i+1}\).

Да, это вся задача. Удачи!

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей три числа \(n\), \(k\) и \(x\) (\(1 \le n \le 998244352\); \(1 \le k \le 11\); \(1 \le x \le 11\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество перестановок, описанных в условии задачи. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

A. Рубка бревен

игры математика реализация *800

Есть \(n\) бревен, длина \(i\)-го бревна составляет \(a_i\) метров. Поскольку рубить бревна  — утомительная работа, errorgorn и maomao90 решили сыграть в игру.

errorgorn и maomao90 будут по очереди рубить бревна, причем errorgorn рубит первым. В свой ход игрок выбирает бревно и рубит его на \(2\) части. Если длина выбранного бревна \(x\), а длины получившихся кусков \(y\) и \(z\), то должно выполняться условие \(x=y+z\), а \(y\) и \(z\) должны быть целыми положительными числами. Например, бревно длиной \(3\) можно разрубить на бревна с длинами \(2\) и \(1\), но не на бревна с длинами \(3\) и \(0\), \(2\) и \(2\), или \(1.5\) и \(1.5\).

Игрок, который не сможет выбрать бревно и разрубить его, проиграет. Кто победит, если и errorgorn, и maomao90 играют оптимально?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 50\))  — количество бревен.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2, \ldots, a_n\) (\(1 \leq a_i \leq 50\))  — длины бревен.

Обратите внимание, что ограничения на сумму \(n\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите «errorgorn», если победил errorgorn, или «maomao90», если победил maomao90. (Выводите без кавычек).

Примечание

В первом наборе входных данных победителем будет errorgorn. Оптимальным ходом будет разрезать бревно длиной \(4\) на \(2\) бревна длиной \(2\). После этого останется только \(4\) бревен длины \(2\) и \(1\) бревен длины \(1\).

После этого единственный ход, который может сделать любой игрок, это разрубить любое бревно длиной \(2\) на \(2\) бревна длиной \(1\). После \(4\) ходов наступит очередь maomao90, и он не сможет сделать ход. Поэтому победителем будет errorgorn.

Во втором наборе входных данных errorgorn не сможет сделать ход в свой первый ход и сразу же проиграет, в результате чего победителем станет maomao90.

G. Крестовый ксор

графы Конструктив математика матрицы *3200

Дана таблица с \(r\) строк и \(c\) столбцов, где в клетке на пересечении \(i\)-й строки и \(j\)-го столбца записано целое число \(a_{i, j}\). Изначально все элементы равны \(0\). Мы можем выполнять следующую операцию:

  • Выберем индексы \(1 \le i \le r\) и \(1 \le j \le c\), затем заменим все значения в той же строке или столбце, что и \((i, j)\), значением xor \(1\). Другими словами, для всех \(a_{x, y}\), где хотя бы одно из \(x=i\) и \(y=j\) верно, мы заменим \(a_{x, y}\) на \(a_{x, y}\) xor \(1\).

Вы хотите получить таблицу \(b\), проделав вышеописанные операции конечное число раз. Однако, некоторые элементы \(b\) отсутствуют и заменены на '?'.

Пусть \(k\)  — количество символов '?'. Среди всех \(2^k\) способов заполнения таблицы \(b\) путем замены каждого '?' на '0' или '1', подсчитайте количество таблиц, которые могут быть получены путем выполнения этой операции конечное число раз, начиная с таблицы, заполненной \(0\). Поскольку это число может быть большим, выведите его по модулю \(998244353\).

Входные данные

Первая строка содержит два целых числа \(r\) и \(c\) (\(1 \le r, c \le 2000\))  — количество строк и столбцов таблицы соответственно.

\(i\)-я из следующих \(r\) строк содержит \(c\) символов \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, c}\) (\(b_{i, j} \in \{0, 1, ?\}\)).

Выходные данные

Выведите одно целое число, представляющее количество способов заполнения таблицы \(b\) по модулю \(998244353\).

Примечание

В первом примере единственный способ заполнить \(\texttt{?}\)  — это заполнить так:

010
111
010

Этого можно добиться, выполнив одну операцию, выбрав \((i,j)=(2,2)\).

Во втором примере можно показать, что не существует последовательности операций, которые могут создать такую таблицу.

C. Палиндромный базис

дп математика Перебор теория чисел *1500

Вам дано положительное целое число \(n\). Назовём некоторое положительное целое число \(a\) без лидирующих нулей палиндромным, если оно остаётся таким же после переворота порядка его цифр. Найдите количество способов представить \(n\) как сумму положительных палиндромных чисел. Два способа считаются различными, если количества вхождений хотя бы одного палиндромного числа в них различаются. Например, \(5=4+1\) и \(5=3+1+1\) считаются различными, но \(5=3+1+1\) и \(5=1+3+1\) считаются одинаковыми.

Формально, вам нужно найти количество различных мультимножеств положительных палиндромных чисел, сумма которых равна \(n\).

Поскольку ответ может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит единственное целое число \(n\) (\(1\leq n\leq 4\cdot 10^4\)) — требуемую сумму палиндромных чисел.

Выходные данные

Для каждого набора входных данных выведите единственное целое число, обозначающее требуемый ответ по модулю \(10^9+7\).

Примечание

Для первого набора входных данных существует \(7\) способов представить \(5\) как сумму положительных палиндромных чисел:

  • \(5=1+1+1+1+1\)
  • \(5=1+1+1+2\)
  • \(5=1+2+2\)
  • \(5=1+1+3\)
  • \(5=2+3\)
  • \(5=1+4\)
  • \(5=5\)

Во втором наборе входных данных существует всего \(77\) способов представить \(12\) как сумму положительных целых чисел, но среди них представления \(12=2+10\), \(12=1+1+10\) и \(12=12\) не являются корректными представлениями \(12\) как сумму положительных палиндромных чисел, поскольку \(10\) и \(12\) не являются палиндромными числами. Таким образом, существует \(74\) способа представить \(12\) как сумму положительных палиндромных чисел.

D. Потерянная арифметическая прогрессия

Комбинаторика математика теория чисел *1900

Очень давно вы придумали две конечные арифметические прогрессии \(A\) и \(B\). Затем вы нашли другую последовательность \(C\), состоящую из всех элементов, принадлежащих одновременно и \(A\), и \(B\). Нетрудно заметить, что \(C\) также является конечной арифметической прогрессией. За долгие годы вы забыли \(A\), но помните \(B\) и \(C\). Вы по какой-то причине очень хотите найти эту забытую арифметическую прогрессию. Прежде чем начать этот поиск, вы хотите узнать, сколько существует различных конечных арифметических прогрессий, которые могут быть вашей забытой арифметической прогрессией \(A\).

Две арифметические прогрессии считаются различными, если у них различается первый член, разность или количество членов.

Возможно, существует бесконечно много таких арифметических прогрессий, в этом случае вы даже не будете пытаться их искать! Выведите \(-1\) в таком случае.

Даже если существует конечное число таких арифметических прогрессий, ответ может быть очень большим. Поэтому вас интересует ответ по модулю \(10^9+7\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1\leq t\leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(b\), \(q\) и \(y\) (\(-10^9\leq b\leq 10^9\), \(1\leq q\leq 10^9\), \(2\leq y\leq 10^9\)) — первый член, разность и количество членов \(B\) соответственно.

Вторая строка каждого набора входных данных содержит три целых числа \(c\), \(r\) and \(z\) (\(-10^9\leq c\leq 10^9\), \(1\leq r\leq 10^9\), \(2\leq z\leq 10^9\)) — первый член, разность и количество членов \(C\) соответственно.

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую единственное число.

Если существует бесконечно много конечных арифметических прогрессий, которые могут быть потерянной прогрессией \(A\), выведите \(-1\).

Иначе, выведите количество конечных арифметических прогрессий, которые могут быть потерянной прогрессией \(A\), по модулю \(10^9+7\). В частности, если не существует таких арифметических прогрессий, выведите \(0\).

Примечание

В первом наборе входных данных \(B=\{-3,-2,-1,0,1,2,3\}\) и \(C=\{-1,1,3,5\}\). Не существует таких арифметических прогрессий, которые могли быть равны \(A\), поскольку \(5\) не находится в \(B\), и для любого \(A\), \(5\) не может находиться в \(C\) также.

Во втором наборе входных данных \(B=\{-9,-6,-3,0,3,6,9,12,15,18,21\}\) и \(C=\{0,6,12\}\). Существует \(10\) возможных арифметических прогрессий, которые могут быть равны \(A\):

  • \(\{0,6,12\}\)
  • \(\{0,2,4,6,8,10,12\}\)
  • \(\{0,2,4,6,8,10,12,14\}\)
  • \(\{0,2,4,6,8,10,12,14,16\}\)
  • \(\{-2,0,2,4,6,8,10,12\}\)
  • \(\{-2,0,2,4,6,8,10,12,14\}\)
  • \(\{-2,0,2,4,6,8,10,12,14,16\}\)
  • \(\{-4,-2,0,2,4,6,8,10,12\}\)
  • \(\{-4,-2,0,2,4,6,8,10,12,14\}\)
  • \(\{-4,-2,0,2,4,6,8,10,12,14,16\}\)

В третьем наборе входных данных \(B=\{2,7,12,17,22\}\) и \(C=\{7,12,17,22\}\). Существует бесконечно много конечных арифметических прогрессий, которые могут быть равны \(A\):

  • \(\{7,12,17,22\}\)
  • \(\{7,12,17,22,27\}\)
  • \(\{7,12,17,22,27,32\}\)
  • \(\{7,12,17,22,27,32,37\}\)
  • \(\{7,12,17,22,27,32,37,42\}\)
  • \(\ldots\)

E. Power или XOR?

битмаски Комбинаторика математика теория чисел *2500

Символ \(\wedge\) довольно неоднозначный, особенно когда используется без контекста. Иногда используется для обозначения возведения в степень (\(a\wedge b = a^b\)), а иногда используется для обозначения операции побитового исключающего ИЛИ (\(a\wedge b=a\oplus b\)).

У вас неоднозначное выражение \(E=A_1\wedge A_2\wedge A_3\wedge\ldots\wedge A_n\). Вы можете заменить каждый \(\wedge\) символ на \(\texttt{Power}\) (возведение в степень) или на \(\texttt{XOR}\) (исключающее ИЛИ), чтобы получить однозначное выражение \(E'\).

Значение выражения \(E'\) определяется по следующим правилам:

  • Все \(\texttt{Power}\) операции выполняются перед всеми \(\texttt{XOR}\) операциями. Иными словами, \(\texttt{Power}\) операция имеет приоритет перед \(\texttt{XOR}\) операциями. Например, \(4\;\texttt{XOR}\;6\;\texttt{Power}\;2=4\oplus (6^2)=4\oplus 36=32\).
  • Последовательные возведения в степень выполняются слева направо. Например, \(2\;\texttt{Power}\;3 \;\texttt{Power}\;4 = (2^3)^4 = 8^4 = 4096\).

Вам дан массив \(B\) длины \(n\) и целое число \(k\). Массив \(A\) получается как \(A_i=2^{B_i}\) и выражение \(E\) получается как \(E=A_1\wedge A_2\wedge A_3\wedge\ldots\wedge A_n\). Вам нужно найти XOR значений всех возможных однозначных выражений \(E'\), которые могут быть получены из \(E\) и имеют хотя бы \(k\) \(\wedge\) символов, используемых как \(\texttt{XOR}\) операции. Поскольку ответ может быть очень большим, вам нужно найти его по модулю \(2^{2^{20}}\). Поскольку это число также может быть очень большим, вам нужно вывести его двоичное представление без лидирующих нулей. Если ответ равен \(0\), выведите \(0\).

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) \((1\leq n\leq 2^{20}, 0\leq k < n)\).

Вторая строка входных данных содержит \(n\) целых чисел \(B_1,B_2,\ldots,B_n\) \((1\leq B_i < 2^{20})\).

Выходные данные

Выведите единственную строку, содержащую двоичную строку без лидирующих нулей, обозначающую ответ на задачу. Если ответ равен \(0\), выведите \(0\).

Примечание

Для всех примеров с \(1\) до \(3\), \(A = \{2^3,2^1,2^2\} = \{8,2,4\}\) и \(E=8\wedge 2\wedge 4\).

В первом примере существует только одно возможное подходящее однозначное выражение \(E' = 8\oplus 2\oplus 4 = 14 = (1110)_2\).

Во втором примере существуют три возможные подходящие однозначные выражения \(E'\):

  • \(8\oplus 2\oplus 4 = 14\)
  • \(8^2\oplus 4 = 64\oplus 4= 68\)
  • \(8\oplus 2^4 = 8\oplus 16= 24\)
XOR всех их значений равен \(14\oplus 68\oplus 24 = 82 = (1010010)_2\).

Во третьем примере существуют четыре возможные подходящие однозначные выражения \(E'\):

  • \(8\oplus 2\oplus 4 = 14\)
  • \(8^2\oplus 4 = 64\oplus 4= 68\)
  • \(8\oplus 2^4 = 8\oplus 16= 24\)
  • \((8^2)^4 = 64^4 = 2^{24} = 16777216\)
XOR всех их значений равен \(14\oplus 68\oplus 24\oplus 16777216 = 16777298 = (1000000000000000001010010)_2\).

В четвёртом примере \(A=\{2,2\}\) и \(E=2\wedge 2\). Единственное возможное подходящее однозначное выражение \(E' = 2\oplus 2 = 0 = (0)_2\).

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\).

A. Преобразование числа

Конструктив математика *800

Вам даны два целых числа \(x\) и \(y\). Вы хотите выбрать два строго положительных (больших нуля) целых числа \(a\) и \(b\), а затем применить следующую операцию к \(x\) ровно \(a\) раз: заменить \(x\) на \(b \cdot x\).

Вам нужно найти два целых числа \(a\) и \(b\), при которых \(x\) станет равным \(y\) после этого процесса. Если таких пар чисел несколько, выведите одну из них. Если такой пары чисел нет, сообщите об этом.

Например:

  • если \(x = 3\) и \(y = 75\), можно выбрать \(a = 2\) и \(b = 5\), тогда \(x\) станет равным \(3 \cdot 5 \cdot 5 = 75\);
  • если \(x = 100\) и \(y = 100\), можно выбрать \(a = 3\) и \(b = 1\), тогда \(x\) станет равным \(100 \cdot 1 \cdot 1 \cdot 1 = 100\);
  • если \(x = 42\) и \(y = 13\), ответа нет, так как нельзя уменьшить \(x\) заданными операциями.
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(x\) и \(y\) (\(1 \le x, y \le 100\)).

Выходные данные

Если можно выбрать пару целых чисел \(a\) и \(b\), при которой \(x\) станет равным \(y\) после описанного процесса, выведите эти два числа. Числа, которые вы выводите, должны быть не меньше \(1\) и не больше \(10^9\) (можно показать, что если ответ существует, то существует пара чисел \(a\) и \(b\), соответствующая этим ограничениям). Если существует несколько таких пар, выведите любую из них.

Если невозможно выбрать такую пару чисел \(a\) и \(b\) так, что \(x\) станет равным \(y\), выведите целое число \(0\) два раза.

B. Словарь

Комбинаторика математика *800

Берляндский язык состоит из слов, образованных ровно двумя буквами. Более того, первая буква в слове отличается от второй буквы. Любое сочетание двух различных берляндских букв (которые, кстати, такие же, как и строчные буквы латинского алфавита) — это корректное слово в берляндском языке.

В берляндском словаре записаны все слова этого языка. Слова упорядочены так же, как и обычно в словарях. Формально, слово \(a\) идет до слова \(b\) в словаре, если выполняется одно из следующих условий:

  • первая буква слова \(a\) меньше первой буквы слова \(b\);
  • первые буквы в словах \(a\) и \(b\) одинаковые, а вторая буква слова \(a\) меньше второй буквы слова \(b\).

Поэтому словарь выглядит так:

  • Слово \(1\): ab
  • Слово \(2\): ac
  • ...
  • Слово \(25\): az
  • Слово \(26\): ba
  • Слово \(27\): bc
  • ...
  • Слово \(649\): zx
  • Слово \(650\): zy

Дано слово \(s\) из берляндского языка. Ваша задача — найти его позицию в словаре.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 650\)) — количество наборов входных данных.

Каждый набор содержит одну строку \(s\), состоящую из ровно двух различных строчных латинских букв (т. е. являющуюся валидным словом берляндского языка).

Выходные данные

На каждый набор входных данных выведите одно целое число — позицию слова \(s\) в словаре.

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\)-я секции.

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. Равенство конфет

жадные алгоритмы математика сортировки *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\).

B. Tokitsukaze и собрание

математика реализация Структуры данных *1700

Tokitsukaze устраивает собрание. В зале собрания \(n\) рядов и \(m\) столбцов сидений.

На собрании присутствует ровно \(n \cdot m\) студентов, в том числе несколько непослушных студентов и несколько серьезных студентов. Студенты нумеруются от \(1\) до \(n\cdot m\). Студенты входят в зал по порядку. Когда \(i\)-й студент войдет в зал, он сядет в \(1\)-й столбец \(1\)-го ряда, а уже сидящие студенты отодвинутся на одно место назад. В частности, студент, сидящий в \(j\)-м (\(1\leq j \leq m-1\)) столбце \(i\)-го ряда, переместится в \((j+1)\)-й столбец \(i\)-го ряда, а ученик, сидящий в \(m\)-м столбце \(i\)-го ряда, переместится в \(1\)-й столбец \((i+1)\)-го ряда.

Например, есть конференц-зал с \(2\) рядами и \(2\) столбцами мест, как показано ниже:

В зал войдут \(4\) студента по порядку, представленному в виде двоичной строки «1100», из которых '0' представляет непослушных студентов, а '1' представляет серьезных. Порядок смены мест в зале собрания:

Обозначим ряд или столбец как хорошие тогда и только тогда, когда в этом ряду или столбце есть хотя бы один серьезный студент. Пожалуйста, предскажите количество хороших рядов и столбцов сразу после того, как \(i\)-й студент войдет в зал, для всех \(i\).

Входные данные

Первая строка содержит единственное положительное целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных.

Для каждого набора входных данных в первой строке записаны два целых числа \(n\), \(m\) (\(1 \leq n,m \leq 10^6\); \(1 \leq n \cdot m \leq 10^6\)), обозначающие наличие \(n\) рядов и \(m\) столбцов мест в зале.

Вторая строка содержит двоичную строку \(s\) длины \(n \cdot m\), состоящую только из нулей и единиц. Если \(s_i\) равно '0', то \(i\)-й студент является непослушным, а если \(s_i\) равно '1', то \(i\)-й студен является серьезным.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите в одной строке \(n \cdot m\) целых чисел — количество хороших рядов и столбцов сразу после того, как \(i\)-й студент войдет в конференц-зал.

Примечание

Первый набор входных данных показан в условии.

После того, как \(1\)-й студент входит в зал, остается \(2\) хороших ряда и столбца: \(1\)-й ряд и \(1\)-й столбец.

После того, как \(2\)-й студент входит в зал, остается \(3\) хороших ряда и столбца: \(1\)-й ряд, \(1\)-й столбец и \(2\)-й столбец.

После того, как \(3\)-й студент входит в зал, все \(4\) ряда и столбца хорошие.

После того, как \(4\)-й студент входит в зал, остается \(3\) хороших ряда и столбца: \(2\)-й ряд, \(1\)-й столбец и \(2\)-й столбец.

D. Tokitsukaze и перестановки

дп математика *2500

У Tokitsukaze есть перестановка \(p\). Она выполнила следующую операцию над \(p\) ровно \(k\) раз: за одну операцию для каждого \(i\) от \(1\) до \(n - 1\) по порядку, если \(p_i\) > \(p_{i+1}\), поменять местами \(p_i\), \(p_{i+1}\). Сделав ровно \(k\) таких операций, Tokitsukaze получила новую последовательность \(a\), очевидно, что последовательность \(a\) также является перестановкой.

После этого Tokitsukaze записала на бумаге последовательность значений \(v\) над \(a\). Обозначим последовательность значений \(v\) перестановки \(a\) длины \(n\), как \(v_i=\sum_{j=1}^{i-1}[a_i < a_j]\), где значение \([a_i < a_j]\) определяется как \(1\), если \(a_i < a_j\), иначе \(0\) (другими словами, \(v_i\) равно количеству элементов больших \(a_i\), которые находятся левее позиции \(i\)). Затем Tokitsukaze ушла на работу.

В доме Tokitsukaze живут три непослушных кота. Придя домой, она обнаружила, что бумага со значениями последовательности \(v\) прогрызена кошками в нескольких местах, и значения в этих местах неясно и может быть любым. Она забыла, какой была исходная перестановка \(p\). Она хочет знать, сколько существует различных перестановок \(p\), для которых последовательность значений \(v\) новой перестановки \(a\) после ровно \(k\) операций имеют ту же последовательность значений, что и последовательность \(v\), написанная на бумаге (не принимая во внимание испорченные позиции).

Поскольку ответ может быть слишком большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Каждый набор входных данных состоит из двух строк.

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^6\); \(0 \leq k \leq n-1\)) — длина перестановки и точное количество операций.

Вторая строка содержит \(n\) целых чисел \(v_1, v_2, \dots, v_n\) (\(-1 \leq v_i \leq i-1\)) — последовательность значений \(v\). \(v_i = -1\) означает, что \(i\)-я позиция \(v\) испорчена и может принимать любое значение.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных перестановок по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных только перестановка \(p=[5,4,3,2,1]\) удовлетворяет условию.

Во втором наборе входных данных имеется \(6\) перестановок, удовлетворяющих условию ограничения, а именно:

  • \([3,4,5,2,1]\) \(\rightarrow\) \([3,4,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([3,5,4,2,1]\) \(\rightarrow\) \([3,4,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([4,3,5,2,1]\) \(\rightarrow\) \([3,4,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([4,5,3,2,1]\) \(\rightarrow\) \([4,3,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([5,3,4,2,1]\) \(\rightarrow\) \([3,4,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([5,4,3,2,1]\) \(\rightarrow\) \([4,3,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\).

Таким образом, ровно через \(2\) операции все они станут \(a=[3,2,1,4,5]\), чья последовательность значений равна \(v=[0,1,2,0,0]\).

F. Tokitsukaze и драгоценные камни

дп математика *3500

У Tokitsukaze есть последовательность длины \(n\). Она очень любит драгоценные камни. Есть \(n\) видов драгоценных камней. Камни \(i\)-го вида находятся на \(i\)-й позиции, и на этой позиции есть \(a_i\) камней этого типа. Определим \(G(l,r)\) как мультимножество, содержащее все драгоценные камни на отрезке \([l,r]\).

Мультимножество драгоценных камней может быть представлено в виде \(S=[s_1,s_2,\ldots,s_n]\), которое представляет собой неотрицательную целочисленную последовательность длины \(n\) и означает, что \(S\) содержит \(s_i\) драгоценных камней \(i\)-го вида в мультимножестве. Мультимножество \(T=[t_1,t_2,\ldots,t_n]\) является мультиподмножеством \(S=[s_1,s_2,\ldots,s_n]\) тогда и только тогда, когда \(t_i\le s_i\) для любого \(i\), удовлетворяющего \(1\le i\le n\).

Теперь, учитывая два положительных целых числа \(k\) и \(p\), вам нужно вычислить результат

\(\)\sum_{l=1}^n \sum_{r=l}^n\sum\limits_{[t_1,t_2,\cdots,t_n] \subseteq G(l,r)}\left(\left(\sum_{i=1}^n p^{t_i}t_i^k\right)\left(\sum_{i=1}^n[t_i>0]\right)\right),\(\)

где \([t_i>0]=1\), если \(t_i>0\) и \([t_i>0]=0\), если \(t_i=0\).

Так как ответ может быть довольно большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит три целых числа \(n\), \(k\) и \(p\) (\(1\le n \le 10^5\); \(1\le k\le 10^5\); \(2\le p\le 998\,244\,351\)) — длина последовательности, числа \(k\) и \(p\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1\le a_i\le 998\,244\,351\)) — количество камней на \(i\)-й позиции .

Выходные данные

Выведите одно целое число — результат по модулю \(998\,244\,353\).

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\).

F. Формализм ради формализма

битмаски дп математика *2600

Юра, будучи математиком, уже настолько преисполнился в своем познании, что он уже сто триллионов миллиардов лет решает формальные задачи, в которых нет ни капли легенды. Эта задача именно такая!

Рассмотрим все целые неотрицательные числа из промежутка \([0, 10^{n})\). Для удобства дополним все числа ведущими нулями таким образом, чтобы любое число из данного промежутка состояло ровно из \(n\) десятичных цифр.

Пусть имеется также некоторый набор пар \((u_i, v_i)\), где \(u_i\) и \(v_i\) — различные цифры от \(0\) до \(9\).

Рассмотрим число \(x\), состоящее из \(n\) цифр. Пронумеруем цифры слева направо и обозначим их как \(d_1, d_2, \ldots, d_n\). За одну операцию разрешается поменять местами цифры \(d_i\) и \(d_{i + 1}\) тогда и только тогда, когда существует такая пара \((u_j, v_j)\), что верно хотя бы одно из условий:

  1. \(d_i = u_j\) и \(d_{i + 1} = v_j\),
  2. \(d_i = v_j\) и \(d_{i + 1} = u_j\).

Назовем числа \(x\) и \(y\), состоящие из \(n\) цифр, эквивалентными, если из числа \(x\) можно получить число \(y\), пользуясь только операциями, описанными выше. В частности, любое число считается эквивалентным самому себе.

Дано число \(n\) и набор из \(m\) пар цифр \((u_i, v_i)\). Найдите максимальное \(k\), такое что существует множество чисел \(x_1, x_2, \ldots, x_k\) (\(0 \le x_i < 10^{n}\)), для которого верно, что для любых \(1 \le i < j \le k\) число \(x_i\) не эквивалентно числу \(x_j\).

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 50\,000\)) — количество цифр в рассматриваемых числах.

Вторая строка содержит целое число \(m\) (\(0 \le m \le 45\)) — количество пар цифр.

Каждая из следующих \(m\) строк содержит две цифры \(u_i\) и \(v_i\), записанные через пробел (\(0 \le u_i < v_i \le 9\)).

Гарантируется, что все пары цифр различны.

Выходные данные

Выведите одно число — максимальное число \(k\), такое что существует множество чисел \(x_1, x_2, \ldots, x_k\) (\(0 \le x_i < 10^{n}\)), для которого верно, что для любых \(1 \le i < j \le k\) число \(x_i\) не эквивалентно числу \(x_j\).

Так как ответ может быть достаточно большим, выведите остаток от деления числа \(k\) на \(998\,244\,353\).

Примечание

В первом примере можно составить множество, состоящее из всех чисел от \(0\) до \(9\), так как никакие два числа не являются эквивалентными друг другу.

Во втором примере существует единственная пара эквивалентных чисел: \(01\) и \(10\). В качестве ответа можно, например, взять множество всех чисел от \(0\) до \(99\), кроме числа \(1\).

A. Волшебники и митинг

математика реализация *900

В некоторой стране живут волшебники. Они хотят организовать митинг.

В городе живет n человек. Из них x — волшебники, которые обязательно придут на митинг. Остальные жители города (n - x человек) не поддерживают волшебников и не собираются идти на митинг. Известно, что руководство города примет во внимание митинг, только если на него придут не менее y процентов людей от жителей города. Не долго думая, волшебники решили создать управляемых клонов, которые заменят жителей города на митинге.

В конечном итоге, на митинг придут только волшебники и созданные ими клоны. Руководство города не заметит подмены, поэтому, при подсчете процентов, руководство будет думать, что в городе живет только n человек и нет никаких клонов.

Помогите волшебникам, найдите минимальное количество клонов, которое придется создать, чтобы на митинге было не менее y процентов людей от жителей города.

Входные данные

В первой строке через пробел записаны три целых числа, n, x, y (1 ≤ n, x, y ≤ 104, x ≤ n) — количество жителей в городе, количество волшебников и требуемый руководством процент, соответственно.

Обратите внимание, что y может быть больше 100 процентов, то есть руководство хочет видеть на митинге больше людей, чем живут в городе ( > n).

Выходные данные

Выведите единственное число — ответ на задачу, минимальное количество клонов, которое придется создать, чтобы на митинге было не менее y процентов людей от числа n (числа настоящих жителей города).

Примечание

В первом примере необходимо чтобы на митинг пришло 14% от 10 людей. Так как количество людей должно быть целым, то должно прийти хотя бы 2 человека. В городе живет только один волшебник, который пойдет на митинг. Этого не достаточно, поэтому надо создать одного клона.

Во втором примере на митинг должно прийти 10 человек. В городе живет 10 волшебников. Они все пойдут на митинг, поэтому клонов создавать не надо.

A. Минимумы и максимумы

математика Перебор *800

Массив называется красивым, если выполняются следующие два условия:

  • есть не меньше \(l_1\) и не больше \(r_1\) элементов в массиве, равных его минимуму;
  • есть не меньше \(l_2\) и не больше \(r_2\) элементов в массиве, равных его максимуму.

Например, в массиве \([2, 3, 2, 4, 4, 3, 2]\) \(3\) элемента, равные его минимуму (\(1\)-й, \(3\)-й и \(7\)-й), и \(2\) элемента, равные его максимуму (\(4\)-й и \(5\)-й).

Другой пример: в массиве \([42, 42, 42]\) \(3\) элемента, равные его минимуму, и \(3\) элемента, равные его максимуму.

Ваша задача — найти наименьшее возможное количество элементов в красивом массиве.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей четыре целых числа \(l_1\), \(r_1\), \(l_2\) и \(r_2\) (\(1 \le l_1 \le r_1 \le 50\); \(1 \le l_2 \le r_2 \le 50\)).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее возможное количество элементов в красивом массиве.

Примечание

Оптимальные массивы в примере:

  1. \([1, 1, 1, 1]\), в нем \(4\) минимума и \(4\) максимума;
  2. \([4, 4, 4, 4, 4]\), в нем \(5\) минимумов и \(5\) максимумов;
  3. \([1, 2, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2]\), в нем \(3\) минимума и \(10\) максимумов;
  4. \([8, 8, 8]\), в нем \(3\) минимума и \(3\) максимума;
  5. \([4, 6, 6]\), в нем \(1\) минимум и \(2\) максимума;
  6. \([3, 4, 3]\), в нем \(2\) минимума и \(1\) максимум;
  7. \([5, 5, 5, 5, 5, 5]\), в нем \(6\) минимумов и \(6\) максимумов.

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\) в конце прогулки.

B. Карточный фокус

математика реализация *800

Монокарп только что выучил новый карточный фокус, и ему не терпится его вам показать. Он показывает вам всю колоду из \(n\) карт. Вы видите, что значения на картах от самой верхней к самой нижней — это целые числа \(a_1, a_2, \dots, a_n\), и все значения различны.

Затем он просит вас перемешать колоду \(m\) раз. На \(j\)-м перемешивании вы должны взять \(b_j\) карт сверху колоды и переместить их под оставшиеся \((n - b_j)\) карт, не меняя порядка ни в одной из частей.

Затем с помощью какой-то магии Монокарп называет вам карту на вершине колоды. Однако, вы не очень-то верите в его магию. Вы утверждаете, что знаете карту на вершине колоды и сами. Можете ли вы удивить Монокарпа и назвать ему карту на вершине колоды до того, как он покажет ее вам?

Входные данные

В первой строке записано одно целое число \(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\)) — значения на картах.

В третьей строке записано одно целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество перемешиваний.

В четвертой строке записаны \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_j \le n - 1\)) — количество карт, которые перемещаются в \(j\)-м перемешивании.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — значение карты на вершине колоды после \(m\) перемешиваний.

Примечание

В первом наборе входных данных каждое перемешивание по факту меняет местами две карты. После трех перемешиваний колода примет вид \([2, 1]\).

Во втором наборе входных данных второе перемешивание отменяет действие первого. Сначала три верхние карты перемещаются под последнюю карту, затем эта карта перемещается обратно под оставшиеся три карты. Поэтому колода остается неизменна от начальной — на ее вершине карта со значением \(3\).

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]\).

A. Много цифр

игры Конструктив математика Строки *800

У самых истоков CrowdForces, ещё совсем давно, стояла именно Тётя Люсине. За это время она заработала много денег, даже забыла все цифры и теперь просто платит. Но совершенно неожиданно ей на ревью попалась задача как раз на цифры! Тётя Люсине не может решить даже on-ramp задачу. Помогите ей, ведь судьба вашего аккаунта в её руках!

Дано целое число \(n\) без нулей в десятичной записи. Алиса и Боб играют в игру с этим числом. Алиса начинает первой. Они делают ходы по очереди.

В своем ходу Алиса должна поменять местами любые две цифры в числе, стоящие на разных позициях. Боб в свой ход всегда удаляет последнюю цифру числа. Игра заканчивается, когда остаётся ровно одна цифра.

Вам необходимо найти минимальное число, которое Алиса может получить в результате игры.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находится одно целое число \(n\) (\(10 \le n \le 10^9\)) — число, с которым ведётся игра. \(n\) не содержит нулей в десятичной записи.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное число, которое Алиса может получить в результате игры.

Примечание

В первом наборе входных данных Алиса должна поменять местами \(1\) и \(2\). После этого Боб удаляет последнюю цифру, т. е. \(1\), поэтому ответ \(2\).

Во втором наборе входных данных Алиса может поменять местами \(3\) и \(1\): \(312\). После этого Боб удаляет последнюю цифру: \(31\). Потом Алиса меняет местами \(3\) и \(1\): \(13\) и Боб удаляет \(3\), поэтому ответ \(1\).

B. Z mod X = C

Конструктив математика *800

Как известно, на CrowdForces можно делать по 10 ревью за одну сданную задачу. Если выполнять все ревью, то можно очень утомиться и принять ZXC культуру. Именно такая участь настигла Тётю Люсине, которая слишком хотела подзаработать. Став ZXC Люсине, она очень увлеклась остатком при делении (не взятием по модулю, это сказка), и придумала задачу, которую вам и предстоит решить.

Она дала вам три целых положительных числа \(a\), \(b\), \(c\) (\(a < b < c\)). Вам нужно найти три положительных целых числа \(x\), \(y\), \(z\) таких, чтобы выполнялись следующие условия:

\(\)x \bmod y = a,\(\) \(\)y \bmod z = b,\(\) \(\)z \bmod x = c.\(\)

Здесь \(p \bmod q\) обозначает остаток при делении числа \(p\) на число \(q\). Можно доказать, что при данных ограничениях ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится единственное целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных содержатся три целых числа \(a\), \(b\), \(c\) (\(1 \le a < b < c \le 10^8\)).

Выходные данные

Для каждого набора входных данных выведите три целых числа \(x\), \(y\), \(z\) (\(1 \le x, y, z \le 10^{18}\)) — такие, что \(x \bmod y = a\), \(y \bmod z = b\), \(z \bmod x = c\).

Вы можете вывести любой из правильных ответов.

Примечание

В первом наборе входных данных

\(\)x \bmod y = 12 \bmod 11 = 1;\(\)

\(\)y \bmod z = 11 \bmod 4 = 3;\(\)

\(\)z \bmod x = 4 \bmod 12 = 4.\(\)

G. Алгоритм Люсине

Конструктив математика Паросочетания Потоки теория чисел *2800

Принято считать, что самый известный алгоритм нахождения наибольшего общего делителя двух чисел придумал Евклид, однако на самом деле этот алгоритм придумала именно Тётя Люсине. Вы, должно быть, уже не удивились, ведь она — величайший ум человечества. И теперь она решила модернизировать этот алгоритм, привнеся в него немного креатива. А в вас есть эта жилка креатива?

Рассмотрим алгоритм Люсине для нахождения наибольшего общего делителя, где \(t\) это некоторый список:


function Euclid(a, b):
if a < b:
swap(a, b)

if b == 0:
return a

r = остаток от деления a на b
if r > 0:
добавить r в конец t

return Euclid(b, r)

Существует массив \(p\) пар положительных целых чисел, каждое из них не больше \(m\). Изначально список \(t\) пустой. Описанная выше функция запускается на каждой паре из массива \(p\). После этого вам даётся перестановка элементов \(t\).

Вам необходимо найти массив \(p\) любого размера не больше \(2 \cdot 10^4\) такой, что по описанному алгоритму из него получится массив \(t\), или сказать, что это невозможно.

Входные данные

В первой строке содержатся два целых числа \(n\), \(m\) (\(1 \le n \le 10^3\), \(1 \le m \le 10^9\)) — длина массива \(t\) и ограничение на числа в парах.

Во второй строке содержатся \(n\) целых чисел \(t_1, t_2, \ldots, t_n\) (\(1 \le t_i \le m\)) — элементы массива \(t\).

Выходные данные
  • Если ответа не существует, выведите \(-1\).
  • Если ответ существует, в первой строке выведите \(k\) (\(1 \le k \le 2 \cdot 10^4\)) — размер массива \(p\), т. е. количество пар в вашем ответе. \(i\)-я из следующих \(k\) строк должна содержать два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le m\)) — \(i\)-я пара массива \(p\).

Если существуют несколько решений, вы можете вывести любой из них.

Примечание

В первом тесте рассмотрим массив \(t\) для каждой из пар:

  • \((19,\, 11)\): \(t = [8, 3, 2, 1]\);
  • \((15,\, 9)\): \(t = [6, 3]\);
  • \((3,\, 7)\): \(t = [1]\).

Тогда в итоге \(t = [8, 3, 2, 1, 6, 3, 1]\), что совпадает с входным массивом \(t\) с точностью до перестановки.

Во втором тесте невозможно найти такой массив пар \(p\), в котором все числа не превосходят \(10\) и \(t = [7, 1]\).

В третьем тесте для пары \((15,\, 8)\) массив \(t\) будет \([7, 1]\).

H. Сложный разрез

Конструктив математика поиск в глубину и подобное разделяй и властвуй *3400

Главный секрет киноиндустрии заключается в том, что известный фильм «Люси» основан на реальных событиях, а в главных ролях была именно Тётя Люсине. Спойлер: в конце фильма Люси(не) превращается в компьютер. Причём компьютер необычный, в нём есть информация про все секреты вселенной, но в виде бинарной строки. Эту бинарную строку вам и нужно расшифровать самым-самым естественным образом.

Дана бинарная строка \(s\). Необходимо разбить её на произвольное количество непересекающихся подстрок так, чтобы сумма двоичных чисел, образованных этими подстроками, была точной степенью двойки, либо сказать, что это невозможно. Каждый символ \(s\) должен принадлежать ровно одной подстроке из разбиения.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных данных вводится бинарная строка \(s\) (\(1 \le |s| \le 10^6\)).

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите ответ на задачу следующим образом:

  • Если ответа не существует, выведите \(-1\).
  • Если ответ существует, то сначала выведите число \(k\) — количество подстрок в разбиении. После этого выведите \(k\) непересекающихся подстрок, для \(i\)-й подстроки выведите два целых числа \(l_i, r_i\) (\(1 \le l_i, r_i \le |s|\)) — описание \(i\)-й подстроки.
Если существует несколько возможных разбиений, выведите любое.
Примечание

В первом наборе входных данных невозможно разбить строку так, чтобы получить степень двойки.

Во втором наборе входных данных возможно следующее разбиение:

  • \(011_2 = 3_{10}\),
  • \(0_2 = 0_{10}\),
  • \(1_2 = 1_{10}\),
\(3 + 0 + 1 = 4\), \(4\) является степенью двойки.

D. Милые числа

Бинарный поиск математика Перебор реализация снм Структуры данных *2900

Ran Yakumo симпатичная девочка, которая любит решать милые математические задачи.

Пусть \(f(x)\) будет минимальным квадратом строго большим, чем \(x\), и \(g(x)\) будет максимальным квадратом, не строго меньшим, чем \(x\). Например, \(f(1)=f(2)=g(4)=g(8)=4\).

Натуральное целое число \(x\) называется милым, если \(x-g(x)<f(x)-x\). Например, \(1,5,11\) это милые целые числа, а \(3,8,15\) нет.

Ran Yakumo дает вам массив \(a\) длины \(n\). Она хочет, чтобы вы нашли минимальное неотрицательное целое число \(k\), такое что \(a_i + k\) является милым числом для любого элемента массива \(a\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — длина \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_1 \leq a_2 \leq \ldots \leq a_n \leq 2\cdot 10^6\)) — массив \(a\).

Выходные данные

Выведите одно целое число \(k\) — ответ на задачу.

Примечание

В первом тесте \(3\) не является красивым целым числом, поэтому \(k\ne 0\).

\(2,4,9,11\) являются милыми целыми числами, поэтому \(k=1\).

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\).

F. Неосознанная перестановка Koishi

бпф математика *3500

Koishi бессознательно переставляет \(n\) чисел: \(1, 2, \ldots, n\).

Она считает перестановку \(p\) красивой, если \(s=\sum\limits_{i=1}^{n-1} [p_i+1=p_{i+1}]\). \([x]\) равно \(1\), если выполняется \(x\), или \(0\) в противном случае.

Для каждого \(k\in[0,n-1]\) она хочет знать количество красивых перестановок длины \(n\), удовлетворяющих \(k=\sum\limits_{i=1}^{n-1}[p_i<p_{i+1}]\).

Входные данные

Есть одна строка, содержащая два целых числа \(n\) (\(1 \leq n \leq 250\,000\)) и \(s\) (\(0 \leq s < n\)).

Выходные данные

Выведите одну строку с \(n\) целыми числами. \(i\)-е число представляет собой ответ для \(k=i-1\) по модулю \(998244353\).

Примечание

Пусть \(f(p)=\sum\limits_{i=1}^{n-1}[p_i<p_{i+1}]\).

В первом наборе входных данных \([2,1]\) — единственная красивая перестановка. И \(f([2,1])=0\).

Во втором наборе входных данных красивые перестановки:

\([1,2,4,3]\), \([1,3,4,2]\), \([1,4,2,3]\), \([2,1,3,4]\), \([2,3,1,4]\), \([3,1,2,4]\), \([3,4,2,1]\), \([4,2,3,1]\), \([4,3,1,2]\). Первые шесть из них удовлетворяют \(f(p)=2\), а остальные удовлетворяют \(f(p)=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\).

F. Движущаяся строка

графы математика Строки теория чисел *1700

Поликарп нашёл строку \(s\) и перестановку \(p\). Их длины оказались одинаковы и равны \(n\).

Перестановка из \(n\) элементов — это массив длины \(n\), в котором каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1, 2, 3]\) и \([4, 3, 5, 1, 2]\) — это перестановки, но \([1, 2, 4]\), \([4, 3, 2, 1, 2]\) и \([0, 1, 2]\) — это не перестановки.

За одну операцию он может умножить \(s\) на \(p\), то есть заменить строку \(s\) на строку \(new\), в которой для каждого \(i\) от \(1\) до \(n\) верно, что \(new_i = s_{p_i}\). Например, при \(s=wmbe\) и \(p = [3, 1, 4, 2]\), после применения операции строка превратится в \(s=s_3 s_1 s_4 s_2=bwem\).

Поликарпу стало интересно, через сколько операций строка впервые вернётся к своему первоначальному виду. Так как это может занять слишком много времени, он просит вашей помощи в этом вопросе.

Можно доказать, что искомое количество операций всегда существует. Оно может оказаться очень большим, используйте 64-битный целочисленный тип.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 200\)) — длину строки и перестановки.

Вторая строка каждого набора содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Третья строка каждого набора содержит \(n\) целых чисел — перестановку \(p\) (\(1 \le p_i \le n\)), все \(p_i\) различны.

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите единственное число — минимальное количество операций, после которого строка \(s\) станет такой же, какой была до их применения.

Примечание

В первом наборе входных данных применение операции не изменяет строку, поэтому она станет равной самой себе после \(1\) операции.

Во втором наборе входных данных строка будет меняться следующим образом:

  • \(s\) = babaa
  • \(s\) = abaab
  • \(s\) = baaba
  • \(s\) = abbaa
  • \(s\) = baaab
  • \(s\) = ababa

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\) элемент, чтобы удовлетворить условию.

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\).

F. Дерево и k-подмножества

Деревья дп Комбинаторика математика поиск в глубину и подобное *2500

Вам дано дерево \(G\) из \(n\) вершин, а также целое число \(k\). Вершины дерева пронумерованы от \(1\) до \(n\).

Для некоторой вершины \(r\) и подмножества \(S\) вершин дерева \(G\) такого, что \(|S| = k\), определим \(f(r, S)\) как размер наименьшего корневого поддерева, содержащего все вершины \(S\) при условии, что корнем дерева является вершина \(r\). Множество вершин \(T\) называется корневым поддеревом, если все вершины в \(T\) связны и для любой вершины в \(T\) все ее потомки тоже принадлежат \(T\).

Вам нужно вычислить сумму \(f(r, S)\) по всем различным комбинациям вершины \(r\) и подмножества \(S\), где \(|S| = k\). Формально, вычислите следующее: \(\)\sum_{r \in V} \sum_{S \subseteq V, |S| = k} f(r, S),\(\) где \(V\) — множество вершин дерева \(G\).

Выведите ответ по модулю \(10^9 + 7\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(3 \le n \le 2 \cdot 10^5\), \(1 \le k \le n\)).

Каждая из следующих \(n - 1\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)), обозначающих ребро между вершинами \(x\) и \(y\).

Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите ответ по модулю \(10^9 + 7\).

Примечание

Дерево во втором примере показано ниже:

Всего в этом дереве \(21\) подмножество вершин размера \(2\). А именно, \(\)S \in \left\{\{1, 2\}, \{1, 3\}, \{1, 4\}, \{1, 5\}, \{1, 6\}, \{1, 7\}, \{2, 3\}, \{2, 4\}, \{2, 5\}, \{2, 6\}, \{2, 7\}, \{3, 4\}, \{3, 5\}, \{3, 6\}, \{3, 7\}, \{4, 5\}, \{4, 6\}, \{4, 7\}, \{5, 6\}, \{5, 7\}, \{6, 7\} \right\}.\(\) Так как в дереве \(7\) вершин, \(1 \le r \le 7\). Нужно найти сумму \(f(r, S)\) по всем парам \(r\) и \(S\).

Ниже перечислены значения \(f(r, S)\) для некоторых комбинаций \(r\) и \(S\).

  • \(r = 1\), \(S = \{3, 7\}\). Значение \(f(r, S)\) равно \(5\), а соответствующее поддерево равно \(\{2, 3, 4, 6, 7\}\).
  • \(r = 1\), \(S = \{5, 4\}\). Значение \(f(r, S)\) равно \(7\), а соответствующее поддерево равно \(\{1, 2, 3, 4, 5, 6, 7\}\).
  • \(r = 1\), \(S = \{4, 6\}\). Значение \(f(r, S)\) равно \(3\), а соответствующее поддерево равно \(\{4, 6, 7\}\).

F. 3-Сумма

математика Перебор *1300

Вам дан массив \(a\), состоящий из \(n\) положительных целых чисел. Cуществуют ли три различных индекса \(i\), \(j\), \(k\) таких, чтобы сумма \(a_i + a_j + a_k\) заканчивается цифрой \(3\)?

Входные данные

Первая строка содержит единственное число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(3 \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\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор данных. Выведите «YES», если в массиве существуют три различных индекса \(i\), \(j\), \(k\), удовлетворяющих ограничениям описанным в условиях, или «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, вывод «yEs», «yes», «Yes» и «YES» всё ещё будет считаться корректным).

Примечание

В первом наборе Вы можете выбрать \(i=1\), \(j=4\), \(k=3\). Тогда \(a_1 + a_4 + a_3 = 20 + 84 + 19 = 123\), эта сумма заканчивается цифрой \(3\).

Во втором наборе Вы можете выбрать \(i=1\), \(j=2\), \(k=3\). Тогда \(a_1 + a_2 + a_3 = 1 + 11 + 1 = 13\), эта сумма заканчивается цифрой \(3\).

Можно доказать, что в третьем наборе не существует таких \(i\), \(j\), \(k\), удовлетворяющих условиям. Отметьте что \(i=4\), \(j=4\), \(k=4\) не является корректным решением, несмотря на то, что \(a_4 + a_4 + a_4 = 1111 + 1111 + 1111 = 3333\), т.е. заканчивается цифрой \(3\), индексы должны быть различны.

Можно доказать, что в четвертом наборе не существует \(i\), \(j\), \(k\), удовлетворяющих условиям.

В пятом наборе Вы можете выбрать \(i=4\), \(j=3\), \(k=1\). Тогда \(a_4 + a_3 + a_1 = 4 + 8 + 1 = 13\), а их сумма заканчивается цифрой \(3\).

В шестом наборе Вы можете выбрать \(i=1\), \(j=2\), \(k=6\). Тогда \(a_1 + a_2 + a_6 = 16 + 38 + 99 = 153\), а их сумма заканчивается цифрой \(3\).

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\) будет приемлемым.

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}]\).

E. Размещение кукол

Комбинаторика математика *2000

Будем говорить, что бесконечная последовательность \(a_{0}, a_{1}, a_2, \ldots\) является невозрастающей, если и только если \(a_i \ge a_{i+1}\) для всех \(i\ge 0\).

Дано бесконечное вправо и вниз клетчатое поле. Верхняя левая клетка имеет координаты \((0,0)\). Строки пронумерованы от \(0\) до бесконечности сверху вниз, столбцы пронумерованы от \(0\) до бесконечности слева направо.

Также дана невозрастающая бесконечная последовательность \(a_{0}, a_{1}, a_2, \ldots\). Вам заданы \(a_0\), \(a_1\), \(\ldots\), \(a_n\). Также известно, что \(a_i=0\) для всех \(i>n\). Для любой пары \(x\), \(y\) клетка с координатами \((x,y)\) (расположенная на пересечении \(x\)-й строки и \(y\)-го столбца) покрашена в белый цвет, если \(y<a_x\), а иначе покрашена в чёрный.

Изначально на всём поле есть лишь одна кукла, расположенная в клетке \((0,0)\). Вы можете выполнять следующую операцию.

  • Выбрать одну куклу в клетке \((x,y)\). Затем удалить её и добавить по кукле в клетки \((x,y+1)\) и \((x+1,y)\).

Обратите внимание, что в одной клетке одновременно может находиться несколько кукол; за одну операцию вы удаляете только одну куклу. Ваша цель — сделать так, чтобы во всех белых клетках было ровно \(0\) кукол.

Чему равно минимальное число операций, за которое можно достичь этой цели? Выведите ответ по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)).

Вторая строка содержит \(n+1\) целых чисел: \(a_0,a_1,\ldots,a_n\) (\(0\le a_i\le 2\cdot 10^5\)).

Гарантируется, что последовательность \(a\) является невозрастающей.

Выходные данные

Выведите одно число — ответ на задачу по модулю \(10^9+7\).

Примечание

Рассмотрим первый пример. На данном поле клетки \((0,0),(0,1),(1,0),(1,1)\) являются белыми, а все остальные — чёрными. Для описания поля будем использовать тройки: тройка \((x,y,z)\) означает, что в клетке \((x,y)\) расположено \(z\) кукол. Изначальное состояние поля: \((0,0,1)\).

Одной из оптимальных последовательностей операций является следующая:

  • Выполнить операцию для \((0,0)\). Состояние поля станет таким: \((1,0,1),(0,1,1)\).
  • Выполнить операцию для \((0,1)\). Состояние поля станет таким: \((1,0,1),(1,1,1),(0,2,1)\).
  • Выполнить операцию для \((1,0)\). Состояние поля станет таким: \((1,1,2),(0,2,1),(2,0,1)\).
  • Выполнить операцию для \((1,1)\). Состояние поля станет таким: \((1,1,1),(0,2,1),(2,0,1),(1,2,1),(2,1,1)\).
  • Выполнить операцию для \((1,1)\). Состояние поля станет таким: \((0,2,1),(2,0,1),(1,2,2),(2,1,2)\).

После этого все белые клетки содержат по \(0\) кукол, так что цель достигнута за \(5\) операций.

G. Fishingprince снова играет с массивом

геометрия математика Перебор Структуры данных *3300

Пусть дана последовательность неотрицательных целых чисел \(a\) длины \(n\) в 1-индексации. Также даны два целых числа \(x\), \(y\). В течение отрезка времени в \(t\) секунд (\(t\) может быть любым положительным вещественным числом) можно выполнить одну из следующих операций:

  • Выбрать \(1\le i<n\), уменьшить \(a_i\) на \(x\cdot t\) и уменьшить \(a_{i+1}\) на \(y\cdot t\).
  • Выбрать \(1\le i<n\), уменьшить \(a_i\) на \(y\cdot t\) и уменьшить \(a_{i+1}\) by \(x\cdot t\).

Определим \(f(a)\) как минимальное количество времени (может быть вещественным числом), необходимое для того, чтобы сделать все элементы последовательности неположительными (меньше или равными \(0\)).

Например, если \(x=1\), \(y=2\), то массив \([3,1,1,3]\) можно обработать за \(3\) секунды. Для этого нужно:

  • В течение первых \(1.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(1.5\) секунд выполнять первую операцию с параметром \(i=3\).

Можно доказать, что в этом случае невозможно сделать все элементы меньше или равными \(0\) меньше чем за \(3\) секунды, поэтому \(f([3,1,1,3])=3\).

Вам дана последовательность положительных целых чисел \(b\) длины \(n\) в 1-индексации. Также даны положительные целые числа \(x\), \(y\). Обработайте \(q\) запросов следующих двух типов:

  • 1 k v: изменить значение \(b_k\) на \(v\).
  • 2 l r: вывести \(f([b_l,b_{l+1},\dots,b_r])\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2\le n\le 2\cdot 10^5\), \(1\le q\le 2\cdot 10^5\)).

Вторая строка содержит два целых числа \(x\) и \(y\) (\(1\le x,y\le 10^6\)).

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1\le b_i\le 10^6\)).

Далее следует \(q\) строк. Каждая из этих \(q\) строк содержит по три целых числа. Первое число \(op\) равно \(1\) или \(2\).

  • Если оно равно \(1\), далее следуют два целых числа \(k\) и \(v\) (\(1\le k\le n\), \(1\le v\le 10^6\)). Такой запрос означает, что нужно изменить значение \(b_k\) на \(v\).
  • Если оно равно \(2\), далее следуют два целых числа \(l\) и \(r\) (\(1\le l<r\le n\)). Такой запрос означает, что нужно вывести значение \(f([b_l,b_{l+1},\dots,b_r])\).
Выходные данные

Для каждого запроса типа \(2\) выведите одно вещественное число — ответ на этот запрос. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-9}\).

Примечание

Разберём тестовый пример.

В первом запросе требуется вычислить \(f([3,1,1,4])\). Ответ равен \(3.5\). Одной из оптимальных последовательностей операций является следующая:

  • В течение первых \(1.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(2\) секунд выполнять первую операцию с параметром \(i=3\).

В третьем запросе требуется вычислить \(f([1,1,1])\). Ответ равен \(1\). Одной из оптимальных последовательностей операций является следующая:

  • В течение первых \(0.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(0.5\) секунд выполнять первую операцию с параметром \(i=2\).

H. Максимальное произведение?

дп жадные алгоритмы Комбинаторика математика Перебор реализация *3500

Вам дано положительное целое число \(k\). Для мультимножества целых чисел \(S\) определим \(f(S)\) следующим образом:

  • Если количество элементов в \(S\) меньше чем \(k\), то \(f(S)=0\).
  • Иначе определим \(f(S)\) как максимально возможное произведение при выборе ровно \(k\) элементов из \(S\).

Более формально, пусть \(|S|\) означает число элементов в \(S\). Тогда,

  • Если \(|S|<k\), то \(f(S)=0\).
  • Иначе \(f(S)=\max\limits_{T\subseteq S,|T|=k}\left(\prod\limits_{i\in T}i\right)\).

Вам дано мультимножество целых чисел \(A\). Вычислите \(\sum\limits_{B\subseteq A} f(B)\) по модулю \(10^9+7\).

Обратите внимание, что в этой задаче элементы считаются различными, если они имеют различные индексы, но необязательно различные значения. То есть мультимножество, состоящее из \(n\) элементов, всегда содержит \(2^n\) различных подмножеств вне зависимости от того, равны ли в нём какие-то элементы или нет.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\), где \(n\) — количество элементов в \(A\) (\(1\le k\le n\le 600\)).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\), задающих элементы \(A\) (\(-10^9\le a_i\le 10^9\)).

Выходные данные

Выведите \(\sum\limits_{B\subseteq A} f(B)\) по модулю \(10^9+7\).

Примечание

Рассмотрим первый тестовый пример. Из определения,

  • \(f(\varnothing)=0\)
  • \(f(\{-1\})=0\)
  • \(f(\{2\})=0\)
  • \(f(\{4\})=0\)
  • \(f(\{-1,2\})=-2\)
  • \(f(\{-1,4\})=-4\)
  • \(f(\{2,4\})=8\)
  • \(f(\{-1,2,4\})=8\)

Таким образом, вывести необходимо \((0+0+0+0-2-4+8+8)\bmod (10^9+7)=10\).

Во втором тестовом примере мультимножество, хоть и состоит из трёх равных элементов, содержит \(8\) различных подмножеств: \(\varnothing,\{1\},\{1\},\{1\},\{1,1\},\{1,1\},\{1,1\},\{1,1,1\}\).

E. Раскраска

геометрия графы дп жадные алгоритмы Комбинаторика Конструктив математика Перебор реализация *2400

Заданы \(n\) точек на плоскости, координаты \(i\)-й из них — \((x_i, y_i)\). Ни у каких двух точек не совпадают координаты.

Расстояние между точками \(i\) и \(j\) определено как \(d(i,j) = |x_i - x_j| + |y_i - y_j|\).

Для каждой точки необходимо выбрать цвет — целое число от \(1\) до \(n\). Для каждой упорядоченной тройки различных точек \((a,b,c)\) должны выполняться следующие условия:

  • если \(a\), \(b\) и \(c\) покрашены в одинаковый цвет, то \(d(a,b) = d(a,c) = d(b,c)\);
  • если \(a\) и \(b\) покрашены в одинаковый цвет, а цвет \(c\) отличен от цвета \(a\), то \(d(a,b) < d(a,c)\) и \(d(a,b) < d(b,c)\).

Посчитайте количество различных способов выбрать цвета, чтобы удовлетворить данные условия.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\)) — количество точек.

Затем следуют \(n\) строк. В \(i\)-й из них записаны два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i, y_i \le 10^8\)).

Ни у каких двух точек не совпадают координаты (т. ею если \(i \ne j\), то либо \(x_i \ne x_j\), либо \(y_i \ne y_j\)).

Выходные данные

Выведите одно целое число — количество различных способов выбрать цвета точек. Так как оно может быть довольно велико, выведите его остаток от деления на \(998244353\).

Примечание

В первом тесте подходят следующие способы выбрать цвета:

  • \([1, 1, 1]\);
  • \([2, 2, 2]\);
  • \([3, 3, 3]\);
  • \([1, 2, 3]\);
  • \([1, 3, 2]\);
  • \([2, 1, 3]\);
  • \([2, 3, 1]\);
  • \([3, 1, 2]\);
  • \([3, 2, 1]\).

F. Равный разворот

графы Конструктив математика реализация *2800

У вас есть массив \(a\) длины \(n\). Вы можете выполнять с ним следующую операцию:

  • Выберите два индекса \(l\) и \(r\) такие, что \(1 \le l \le r \le n\) и \(a_l = a_r\). После этого разверните подотрезок с \(l\)-го по \(r\)-й элемент, то есть замените \([a_l, a_{l + 1}, \ldots, a_{r - 1}, a_r]\) на \([a_r, a_{r-1}, \ldots, a_{l+1}, a_l]\).

Вам также дан массив \(b\) длины \(n\), который является перестановкой \(a\). Найдите последовательность из не более чем \(n^2\) операций, которая превращает массив \(a\) в \(b\), или определите, что такого массива не существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 500\)) — длину массивов \(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\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите «NO» (без кавычек), если невозможно превратить \(a\) в \(b\), используя не более \(n^2\) операций.

Иначе выведите «YES» (без кавычек). Затем выведите целое число \(k\) (\(0 \leq k \leq n^2\)) — число операций, которое вы сделаете. Обратите внимание, что вам не нужно минимизировать число операций.

Затем выведите \(k\) строк. В \(i\)-й строке выведите два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)) — индексы для \(i\)-й операции.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут считаться положительным ответом).

Если существуют несколько решений, выведите любое из них.

Примечание

В первом примере можно выполнить следующие операции: \(\)[1,2,4,3,1,2,1,1] \xrightarrow[l=5,\,r=8]{} [1,2,4,3,1,1,2,1] \xrightarrow[l=1,\,r=6]{} [1,1,3,4,2,1,2,1].\(\)

Во втором примере можно выполнить следующие операции: \(\)[1,2,3,1,3,2,3] \xrightarrow[l=1,\,r=4]{} [1,3,2,1,3,2,3] \xrightarrow[l=3,\,r=6]{} [1,3,2,3,1,2,3].\(\)

Можно показать, что в третьем и четвертом примерах нельзя превратить \(a\) в \(b\).

G. Длинная бинарная строка

meet-in-the-middle битмаски математика матрицы теория чисел *2900

У вас есть бинарная строка \(t\) длины \(10^{100}\), и изначально все биты в строке равны \(\texttt{0}\). Вам также дана бинарная строка \(s\), и вы можете выполнять следующую операцию:

  • Выберите некоторую подстроку \(t\) и замените ее на побитовое исключающее ИЛИ этой подстроки со строкой \(s\).\(^\dagger\)
После некоторого количества операций в строке \(t\) ровно два бита должны быть равны \(\texttt{1}\); иными словами, должны существовать ровно два различных индекса \(p\) и \(q\) такие, что \(p\)-й и \(q\)-й биты строки \(t\) равны \(\texttt{1}\), а остальные биты равны \(\texttt{0}\).

Найдите лексикографически максимальную \(^\ddagger\) строку \(t\), которая может получиться при выполнении этого условия, или определите, что таких строк получиться не может.

\(^\dagger\) Формально, выберите индекс \(i\) такой, что \(0 \leq i \leq 10^{100}-|s|\). Для всех \(1 \leq j \leq |s|\), если \(s_j = \texttt{1}\), измените значение \(t_{i+j}\). То есть если \(t_{i+j}=\texttt{0}\), положите \(t_{i+j}=\texttt{1}\). Иначе, если \(t_{i+j}=\texttt{1}\), положите \(t_{i+j}=\texttt{0}\).

\(^\ddagger\) Бинарная строка \(a\) лексикографически больше бинарной строки \(b\) такой же длины, если в первой позиции, где \(a\) и \(b\) различаются, строка \(a\) содержит \(\texttt{1}\), а строка \(b\) — \(\texttt{0}\).

Входные данные

Единственная строка содержит бинарную строку \(s\) (\(1 \leq |s| \leq 35\)).

Выходные данные

Если нельзя получить подходящую под условие строку \(t\), выведите -1. Иначе выведите два целых числа \(p\) и \(q\) (\(1 \leq p < q \leq 10^{100}\)) такие, что в лексикографически максимальной \(t\) \(p\)-й и \(q\)-й биты равны \(\texttt{1}\).

Примечание

В первом примере можно выполнить следующие операции. \(\)\texttt{00000}\ldots \to \color{red}{\texttt{1}}\texttt{0000}\ldots \to \texttt{1}\color{red}{\texttt{1}}\texttt{000}\ldots\(\)

Во втором примере можно выполнить следующие операции. \(\)\texttt{00000}\ldots \to \color{red}{\texttt{001}}\texttt{00}\ldots \to \texttt{0}\color{red}{\texttt{011}}\texttt{0}\ldots\(\)

В третьем примере можно выполнить следующие операции. \(\)\texttt{00000}\ldots \to \color{red}{\texttt{1111}}\texttt{0}\ldots \to \texttt{1}\color{red}{\texttt{0001}}\ldots\(\)

Можно показать, что показанные выше строки \(t\) лексикографически максимальны.

В четвертом примере нельзя сделать ни один бит равным \(\texttt{1}\), поэтому задача невыполнима.

A. Третья задача о трёх числах

Конструктив математика *800

Вам дано целое положительное целое число \(n\). Вам нужно найти любые три целые числа \(a\), \(b\) и \(c\) (\(0 \le a, b, c \le 10^9\)), для которых \((a\oplus b)+(b\oplus c)+(a\oplus c)=n\), или определить, что таких чисел не существует.

Здесь \(a \oplus b\) обозначает побитовое исключающее ИЛИ чисел \(a\) и \(b\). Например, \(2 \oplus 4 = 6\), а \(3 \oplus 1=2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите любые три целых числа \(a\), \(b\) и \(c\) (\(0 \le a, b, c \le 10^9\)), для которых \((a\oplus b)+(b\oplus c)+(a\oplus c)=n\). Если таких чисел не существует, выведите \(-1\).

Примечание

В первом наборе входных данных \(a=3\), \(b=3\), \(c=1\), поэтому \((3 \oplus 3)+(3 \oplus 1) + (3 \oplus 1)=0+2+2=4\).

Во втором наборе входных данных решения не существует.

В третьем наборе входных данных \((2 \oplus 4)+(4 \oplus 6) + (2 \oplus 6)=6+2+4=12\).

C. Третья задача

Комбинаторика Конструктив математика *1700

Вам дана перестановка \(a_1,a_2,\ldots,a_n\) чисел от \(0\) до \(n - 1\). Вам нужно посчитать количество перестановок \(b_1,b_2,\ldots,b_n\), похожих на перестановку \(a\).

Две перестановки \(a\) и \(b\) размера \(n\) называются похожими, если для всех отрезков \([l,r]\) (\(1 \le l \le r \le n\)) выполняется следующее условие: \(\)\operatorname{MEX}([a_l,a_{l+1},\ldots,a_r])=\operatorname{MEX}([b_l,b_{l+1},\ldots,b_r]),\(\) где \(\operatorname{MEX}\) набора чисел \(c_1,c_2,\ldots,c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\). Например, \(\operatorname{MEX}([1,2,3,4,5])=0\), а \(\operatorname{MEX}([0,1,2,4,5])=3\).

Так как количество таких перестановок может быть очень большим, вам нужно вывести его остаток по модулю \(10^9+7\).

В этой задаче перестановкой размера \(n\) является массив, состоящий из \(n\) различных целых чисел от \(0\) до \(n-1\) в произвольном порядке. Например, \([1,0,2,4,3]\) является перестановкой, а \([0,1,1]\) не является, так как \(1\) встречается в массиве дважды. \([0,1,3]\) также не является перестановкой, так как \(n=3\) и в массиве есть число \(3\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(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 \lt n\)) — элементы перестановки \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество перестановок, похожих на перестановку \(a\), взятое по модулю \(10^9+7\).

Примечание

В первом наборе входных данных единственными перестановками, похожими на \(a=[4,0,3,2,1]\), являются \([4,0,3,2,1]\) и \([4,0,2,3,1]\).

Во втором и третьем наборах входных данных только данные перестановки похожи на себя.

В четвёртом наборе входных данных есть \(4\) перестановки, похожие на \(a=[1,2,4,0,5,3]\):

  • \([1,2,4,0,5,3]\);
  • \([1,2,5,0,4,3]\);
  • \([1,4,2,0,5,3]\);
  • \([1,5,2,0,4,3]\).

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\).

A. Проблема Нольдбаха

математика Перебор теория чисел *1000

Никита интересовался простыми числами, и однажды прочитал о проблеме Гольдбаха. Она гласит, что любое четное число большее 2 можно представить в виде суммы двух простых чисел. Никита заинтересовался этим и решил придумать себе на голову проблему, и назвал он её проблемой Нольдбаха. Так как он интересовался исключительно простыми числами, проблема Нольдбаха гласила, что по крайней мере k простых чисел от 2 до n включительно представимо в виде суммы трех чисел: двух соседних простых чисел и 1. Например, 19 = 7 + 11 + 1, или 13 = 5 + 7 + 1.

Два простых числа называются соседними, если между ними не существует других простых чисел.

Вам предстоит помочь Никите, и сказать, прав он или ошибается.

Входные данные

В первой и единственной строке входных данных содержится два целых числа n (2 ≤ n ≤ 1000) и k (0 ≤ k ≤ 1000).

Выходные данные

В единственной строке выходных данных выведите слово YES, если не менее k простых чисел в промежутке от 2 до n представимы в виде описанном выше. В противном случае, выведите слово NO.

Примечание

В первом примере ответ YES, так как чисел, которые можно представить в описанном виде не меньше двух (например, 13 и 19). Во втором примере ответ NO так как нельзя представить в искомом виде 7 простых чисел от 2 до 45.

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)\). Оба пути проходят по всем клеткам таблицы.

B. Палиндромные числа

Конструктив математика реализация *1100

Однажды во время прогулки Алина увидела длинное число, которое кто-то написал на асфальте. Алина захотела найти положительное число такой же длины без ведущих нулей, чтобы сумма этих двух чисел была палиндромом.

Число называется палиндромом, если оно читается одинаково справа налево и слева направо. Например, числа \(121, 66, 98989\) являются палиндромами, а \(103, 239, 1241\) — нет.

После некоторых размышлений Алина поняла, что такое число всегда можно найти. Помогите Алине найти подходящее число!

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных вводится одно целое число \(n\) (\(2 \leq n \leq 100\,000\)) — длина числа, которое увидела Алина.

Во второй строке каждого набора входных данных вводится одно положительное целое число длины \(n\). Гарантируется, что оно не содержит ведущих нулей.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(100\,000\).

Выходные данные

Выведите ответ на каждый из \(t\) наборов входных — для каждого набора выведите положительное целое число без ведущих нулей длины \(n\), такое, что его сумма с числом из входных данных будет палиндромом.

Можно показать, что решение всегда существует. Если таких чисел несколько, вы можете вывести любое из них.

Примечание

В первом примере из условия \(99 + 32 = 131\) — палиндром. Число \(12\) также будет являться ответом, так как \(99 + 12 = 111\).

Во втором примере из условия \(1023 + 8646 = 9669\).

В третьем примере из условия \(385 + 604 = 989\).

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\).

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\). Если таких перестановок несколько — выведите любую.

F. Точки

Комбинаторика математика матрицы реализация Структуры данных *2500

Тройка точек \(i\), \(j\) и \(k\) на координатной прямой считается красивой, если \(i < j < k\) и \(k - i \le d\).

Вам задано множество точек на координатной прямой, изначально пустое. Вам нужно обрабатывать запросы трех типов:

  • добавить точку в множество;
  • удалить точку из множества;
  • посчитать количество красивых троек из точек, принадлежащих множеству.
Входные данные

В первой строке заданы два целых числа \(q\) и \(d\) (\(1 \le q, d \le 2 \cdot 10^5\)) — количество запросов и параметр, по которому определяется, является ли тройка красивой.

Во второй строке заданы \(q\) целых чисел \(a_1, a_2, \dots, a_q\) (\(1 \le a_i \le 2 \cdot 10^5\)). Число \(a_i\) обозначает \(i\)-й запрос следующим образом:

  • если точка \(a_i\) входит в множество, удалить ее; иначе добавить ее;
  • после удаления или добавления точки надо вывести количество красивых троек.
Выходные данные

Для каждого запроса выведите одно целое число — количество красивых троек после обработки запроса.

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\}\).

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\) монет. Можно доказать, что получить больше монет невозможно.

D. Специальный массив

Конструктив математика реализация хэши *1900

У Эрика есть массив \(b\) длины \(m\), затем он генерирует \(n\) дополнительных массивов \(c_1, c_2, \dots, c_n\), каждый длиной \(m\), из массива \(b\), следующим образом:

Изначально \(c_i = b\) для каждого \(1 \le i \le n\). Эрик тайно выбирает целое число \(k\) \((1 \le k \le n)\) и выбирает \(c_k\) в качестве специального массива.

Есть две операции, которые Эрик может выполнять над массивом \(c_t\):

  • Операция 1: Выберите два целых числа \(i\) и \(j\) (\(2 \leq i < j \leq m-1\)), вычтите \(1\) из \(c_t[i]\) и \(c_t[j]\) и добавьте \(1\) к \(c_t[i-1]\) и \(c_t[j+1]\). Эту операцию можно использовать только с неспециальным массивом, то есть когда \(t \neq k\).;
  • Операция 2: Выберите два целых числа \(i\) и \(j\) (\(2 \leq i < j \leq m-2\)), вычтите \(1\) из \(c_t[i]\) и \(c_t[j]\) и добавьте \(1\) к \(c_t[i-1]\) и \(c_t[j+2]\). Эту операцию можно использовать только для специального массива, то есть когда \(t = k\).

    Обратите внимание, что Эрик не может выполнить операцию, если какой-либо элемент массива после этой операции станет меньше \(0\).

Теперь Эрик делает следующее:

  • Для каждого неспециального массива \(c_i\) (\(i \neq k\)) Эрик использует только операцию 1 над ним по крайней мере один раз.
  • Для специального массива \(c_k\) Эрик использует над ним только операцию 2 по крайней мере один раз.

Наконец, Эрик отбрасывает массив \(b\).

По заданным массивам \(c_1, c_2, \dots, c_n\) ваша задача найти специальный массив, т.е. значение \(k\). Кроме того, вам нужно найти, сколько раз на нем использовалась операция \(2\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(3 \leq n \leq 10^5\), \(7 \leq m \leq 3 \cdot 10^5\)) — количество массивов данных вам, и длина каждого массива.

Следующие \(n\) строк содержат по \(m\) целых чисел, \(c_{i,1}, c_{i,2}, \dots , c_{i,m}\).

Гарантируется, что каждый элемент изначального массива \(b\) находится в диапазоне \([0,10^6]\), поэтому \(0 \leq c_{i,j} \leq 3 \cdot 10^{11}\) для всех возможных пар \((i,j)\).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Гарантируется, что входные данные генерируется в соответствии с описанной выше процедурой.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую два целых числа — индекс специального массива и количество раз, которое над ним выполнялась Операция 2. Можно показать, что при заданных в задаче ограничениях это значение уникально и не превышает \(10^{18}\), поэтому его можно представить в виде \(64\)-битного целого числа. Также можно показать, что индекс специального массива определяется однозначно.

В этой задаче взломы отключены.

Примечание

В первом наборе входных данных секретный массив \(b\) равен \([0, 1, 1, 1, 1, 1, 1, 1, 0]\). Массив \(c_1\) и массив \(c_2\) генерируются с использованием операции 1. Массив \(c_3\) генерируется с использованием операции 2.

Для массива \(c_1\) вы можете выбрать \(i=4\) и \(j=5\) и выполнить Операцию 1 один раз, чтобы сгенерировать его. Для массива \(c_2\) вы можете выбрать \(i=6\) и \(j=7\) и выполнить Операцию 1 один раз, чтобы сгенерировать его. Для массива \(c_3\) вы можете выбрать \(i=4\) и \(j=5\) и выполнить Операцию 2 один раз, чтобы сгенерировать его.

Во втором наборе входных данных секретный массив \(b\) равен \([20, 20, 20, 20, 20, 20, 20]\). Вы также можете обнаружить, что массив \(c_1\) и массив \(c_2\) генерируются с помощью Операции 1. Массив \(c_3\) создается с помощью Операции 2.

В третьем наборе входных данных секретный массив \(b\) равен \([20, 20, 20, 20, 20, 20, 20, 20, 20]\). Вы также можете обнаружить, что массив \(c_1\) и массив \(c_2\) генерируются с помощью Операции 1. Массив \(c_3\) создается с помощью Операции 2.

E. Посчитать секунды

графы дп Конструктив математика Перебор реализация *2200

У Cirno есть ориентированный ациклический граф с \(n\) вершинами и \(m\) ребрами. В графе ровно одна вершина, не имеющая исходящих ребер. На \(i\)-й вершине написано целое число \(a_i\).

Каждую секунду происходит следующее:

  • Пусть \(S\) — множество вершин \(x\), у которых \(a_x > 0\).
  • Для всех \(x \in S\) из \(a_x\) вычитается \(1\), а затем для каждой вершины \(y\) такой, что существует ребро из \(x\) в \(y\), \(1\) прибавляется к \(a_y\).

Найдите первый момент времени, когда все \(a_i\) станут равны \(0\). Так как ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \leq n, m \leq 1000\)) — количество вершин и ребер в графе.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — числа, записанные в вершинах.

Следующие \(m\) строк содержит два целых числа \(x, y\) (\(1 \leq x, y \leq n\)), обозначающих ориентированное ребро из \(x\) в \(y\). Гарантируется, что граф является ориентированным ациклическим, без кратных ребер, и ровно одна вершина не имеет исходящих ребер.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных меньше или равны \(10\,000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число — первый момент времени, когда все \(a_i\) станут \(0\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

  • В момент времени \(0\) значения узлов равны \([1, 1, 1]\).
  • В момент времени \(1\) значения узлов равны \([0, 1, 1]\).
  • В момент времени \(2\) значения узлов равны \([0, 0, 1]\).
  • В момент времени \(3\) значения узлов равны \([0, 0, 0]\).
Так что ответ равен \(3\).

Во втором наборе входных данных:

  • В момент времени \(0\) значения узлов равны \([1, 0, 0, 0, 0]\).
  • В момент времени \(1\) значения узлов равны \([0, 1, 0, 0, 1]\).
  • В момент времени \(2\) значения узлов равны \([0, 0, 1, 0, 0]\).
  • В момент времени \(3\) значения узлов равны \([0, 0, 0, 1, 0]\).
  • В момент времени \(4\) значения узлов равны \([0, 0, 0, 0, 1]\).
  • В момент времени \(5\) значения узлов равны \([0, 0, 0, 0, 0]\).
Итак, ответ равен \(5\).

В третьем наборе входных данных:

Первый момент времени, когда все \(a_i\) становятся \(0\), равен \(6\cdot 998244353 + 4\).

G. Mio и счастливый массив

бпф Конструктив математика Строки *3500

У Mio есть массив \(a\), состоящий из \(n\) целых чисел, и массив \(b\), состоящий из \(m\) целых чисел.

Mio может выполнить следующую операцию над \(a\):

  • Выберите целое число \(i\) (\(1 \leq i \leq n\)), которое не было выбрано ранее, затем прибавьте \(1\) к \(a_i\), вычтите \(2\) из \(a_{i+1}\) , добавьте \(3\) к \(a_{i+2}\) и так далее. Формально операция состоит в добавлении \((-1)^{j-i} \cdot (j-i+1) \) к \(a_j\) для \(i \leq j \leq n\).

Mio хочет преобразовать \(a\) так, чтобы он содержал \(b\) как подмассив. Не могли бы вы ответить на ее вопрос и указать последовательность операций для этого, если это возможно?

Массив \(b\) является подмассивом массива \(a\), если \(b\) получается из \(a\) удалением нескольких (возможно, нуля или всех) элементов с начала и нескольких (возможно, нуля или всех) элементов с конца.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \cdots, a_n\) (\(-10^5 \leq a_i \leq 10^5\)), где \(a_i\)\(i\)-й элемент \(a\).

Третья строка набора входных данных содержит одно целое число \(m\) (\(2 \leq m \leq n\)) — количество элементов в \(b\).

Четвертая строка набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \cdots, b_m\) (\(-10^{12} \leq b_i \leq 10^{12}\)), где \(b_i\)\(i\)-й элемент \(b\).

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Если невозможно преобразовать \(a\) так, чтобы он содержал \(b\) в качестве подмассива, выведите \(-1\).

В противном случае первая строка вывода должна содержать целое число \(k\) (\(0 \leq k \leq n\)), количество операций, которые необходимо выполнить.

Вторая строка должна содержать \(k\) различных целых чисел, представляющих операции, выполняемые по порядку.

Если решений несколько, можно вывести любое.

Обратите внимание, что вам не нужно минимизировать количество операций.

Примечание

В первом наборе входных данных последовательность \(a\) = \([1,2,3,4,5]\). Одним из возможных решений является выполнение одной операции при \(i = 1\) (прибавьте \(1\) к \(a_1\), вычтите \(2\) из \(a_2\), прибавьте \(3\) к \(a_3\), вычтите \(4\) из \(a_4\), прибавьте \(5\) до \(a_5\)). Затем массив \(a\) преобразуется в \(a\) = \([2,0,6,0,10]\), который содержит \(b\) = \([2, 0, 6, 0, 10]\) в качестве подмассива.

Во втором наборе входных данных последовательность \(a\) = \([1,2,3,4,5]\). Одно из возможных решений — сделать одну операцию при \(i = 4\) (прибавить \(1\) к \(a_4\), вычесть \(2\) из \(a_5\)). Затем массив \(a\) преобразуется в \(a\) = \([1,2,3,5,3]\), который содержит \(b\) = \([3,5,3]\) в качестве подмассива.

В третьем наборе входных данных последовательность \(a\) = \([-3, 2, -3, -4, 4, 0, 1, -2]\). Одним из возможных решений является следующее.

  • Выберите целое число \(i=8\) для выполнения операции. Затем массив \(a\) преобразуется в \(a\) = \([-3, 2, -3, -4, 4, 0, 1, -1]\).
  • Выберите целое число \(i=6\), чтобы выполнить операцию. Затем массив \(a\) преобразуется в \(a\) = \([-3, 2, -3, -4, 4, 1, -1, 2]\).
  • Выберите целое число \(i=4\) для выполнения операции. Затем массив \(a\) преобразуется в \(a\) = \([-3, 2, -3, -3, 2, 4, -5, 7]\).
  • Выберите целое число \(i=3\) для выполнения операции. Затем массив \(a\) преобразуется в \(a\) = \([-3, 2, -2, -5, 5, 0, 0, 1]\).
  • Выберите целое число \(i=1\) для выполнения операции. Затем массив \(a\) преобразуется в \(a\) = \([-2, 0, 1, -9, 10, -6, 7, -7]\).

В результате \(a\) равно \([-2, 0, 1, -9, 10, -6, 7, -7]\), что содержит \(b\) = \([10, -6, 7, -7]\) в качестве подмассива.

В четвертом наборе входных данных невозможно преобразовать \(a\) так, чтобы он содержал \(b\) в качестве подмассива.

В пятом наборе входных данных невозможно преобразовать \(a\) так, чтобы он содержал \(b\) в качестве подмассива.

H1. Игра ИИ (простая версия)

бпф дп Комбинаторика Конструктив математика *3200

Это упрощенная версия задачи. Разница между легкой и сложной версиями заключается в ограничении на \(k\) и ограничении по времени. Кроме того, в этой версии задачи вам нужно вычислить ответ только при \(n=k\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Cirno играет в военный симулятор с \(n\) башнями (пронумерованными от \(1\) до \(n\)) и \(n\) ботами (пронумерованными от \(1\) до \(n\)). Первоначально \(i\)-я башня занята \(i\)-м ботом для всех \(1 \le i \le n\).

Перед игрой Cirno сначала выбирает перестановку \(p = [p_1, p_2, \ldots, p_n]\) длины \(n\) (перестановкой длины \(n\) называется массив длины \(n\), где каждое целое число между \(1\) и \(n\) встречаются ровно один раз). После этого она может выбрать последовательность \(a = [a_1, a_2, \ldots, a_n]\) (\(1 \le a_i \le n\) и \(a_i \ne i\) для всех \(1 \le i \le n\) ).

В игре есть \(n\) раундов-атак. В \(i\)-м раунде, если \(p_i\)-й бот все еще находится в игре, он начнет свою атаку, в результате чего \(a_{p_i}\)-я башня будет занята \(p_i\)-м ботом; бот, который ранее занимал \(a_{p_i}\)-ю башню, больше не будет ее занимать. Если \(p_i\)-го бота нет в игре, в этом раунде ничего не произойдет.

После каждого раунда, если бот не занимает ни одной башни, он будет уничтожен и покинет игру. Обратите внимание, что ни одна башня не может быть занята более чем одним ботом, но один бот может занимать более одной башни во время игры.

В конце игры Cirno запишет результат в виде последовательности \(b = [b_1, b_2, \ldots, b_n]\), где \(b_i\) — номер бота, занимающего \(i\)-ю башня в конце игры.

Однако, как мастер математики, она хочет, чтобы вы решили следующую задачу на счет вместо того, чтобы играть в игры:

Подсчитайте количество различных пар последовательностей \(a\) и \(b\), которые могут получиться из всех возможных выборов последовательности \(a\) и перестановки \(p\).

Так как это число может быть большим, выведите его по модулю \(M\).

Входные данные

Единственная строка содержит два натуральных числа \(k\) и \(M\) (\(1\le k\le 5000\), \(2\le M\le 10^9\) ). Гарантируется, что \(2^{18}\) — делитель \(M-1\), а \(M\) — простое число.

Вам нужно вывести ответ для \(n=k\).

Выходные данные

Выведите одно целое число — количество различных пар последовательностей для \(n=k\) по модулю \(M\).

Примечание

Для \(n=1\) допустимой последовательности \(a\) не существует. Мы рассматриваем ответ как \(0\).

При \(n=2\) возможен только один массив \(a\): \([2, 1]\).

  • Для массива \(a\) равного \([2, 1]\) и перестановки \(p\) равной \([1, 2]\), последовательность \(b\) будет \([1, 1]\) после всех раундов. Детали для каждого раунда:
    • В первом раунде первый бот начнет атаку и успешно захватит башню \(2\). После этого раунда второй бот будет уничтожен и покинет игру, так как все его башни заняты другими ботами.
    • Во втором раунде второго бота нет в игре.
  • Для массива \(a\) равного \([2, 1]\) и перестановки \(p\) равной \([2, 1]\), последовательность \(b\) будет \([2, 2]\) после всех раундов. Детали для каждого раунда:
    • В первом раунде второй бот начнет атаку и успешно захватит башню \(1\). После этого раунда первый бот будет уничтожен и покинет игру, так как все его башни заняты другими ботами.
    • Во втором раунде первого бота нет в игре.

Таким образом, количество различных пар последовательностей \((a,b)\) равно \(2\) (\([2, 1]\), \([1, 1]\) и \([2, 1]\), \([2, 2]\)) при \(n=2\).

H2. Игра ИИ (сложная версия)

бпф Комбинаторика математика *3500

Это сложная версия этой задачи. Разница между легкой и сложной версиями заключается в ограничении на \(k\) и ограничении по времени. Кроме того, в этой версии вам нужно вычислить ответ для всех положительных целых чисел \(n \in [1,k]\) в этой версии. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Cirno играет в военный симулятор с \(n\) башнями (пронумерованными от \(1\) до \(n\)) и \(n\) ботами (пронумерованными от \(1\) до \(n\)). Первоначально \(i\)-я башня занята \(i\)-м ботом для всех \(1 \le i \le n\).

Перед игрой Cirno сначала выбирает перестановку \(p = [p_1, p_2, \ldots, p_n]\) длины \(n\) (перестановкой длины \(n\) называется массив длины \(n\), где каждое целое число между \(1\) и \(n\) встречаются ровно один раз). После этого она может выбрать последовательность \(a = [a_1, a_2, \ldots, a_n]\) (\(1 \le a_i \le n\) и \(a_i \ne i\) для всех \(1 \le i \le n\) ).

В игре есть \(n\) раундов-атак. В \(i\)-м раунде, если \(p_i\)-й бот все еще находится в игре, он начнет свою атаку, в результате чего \(a_{p_i}\)-я башня будет занята \(p_i\)-м ботом; бот, который ранее занимал \(a_{p_i}\)-ю башню, больше не будет ее занимать. Если \(p_i\)-го бота нет в игре, в этом раунде ничего не произойдет.

После каждого раунда, если бот не занимает ни одной башни, он будет уничтожен и покинет игру. Обратите внимание, что ни одна башня не может быть занята более чем одним ботом, но один бот может занимать более одной башни во время игры.

В конце игры Cirno запишет результат в виде последовательности \(b = [b_1, b_2, \ldots, b_n]\), где \(b_i\) — номер бота, занимающего \(i\)-ю башня в конце игры.

Однако, как мастер математики, она хочет, чтобы вы решили следующую задачу на счет вместо того, чтобы играть в игры:

Подсчитайте количество различных пар последовательностей \(a\) и \(b\), которые могут получиться при всех возможных выборах последовательности \(a\) и перестановки \(p\).

Вычислите ответ для всех значений \(n\) таких, что \(1 \le n \le k\). Так как эти числа могут быть большими, выведите их по модулю \(M\).

Входные данные

Единственная строка содержит два натуральных числа \(k\) и \(M\) (\(1\le k\le 10^5\), \(2\le M\le 10^9\) ). Гарантируется, что \(2^{18}\) — делитель \(M-1\), а \(M\) — простое число.

Выходные данные

Выведите \(k\) строк, где \(i\)-я строка содержит неотрицательное целое число, являющееся ответом для \(n=i\) по модулю \(M\).

Примечание

Для \(n=1\) допустимой последовательности \(a\) не существует. Мы рассматриваем ответ как \(0\).

При \(n=2\) возможен только один массив \(a\): \([2, 1]\).

  • Для массива \(a\) равного \([2, 1]\) и перестановки \(p\) равной \([1, 2]\), последовательность \(b\) будет \([1, 1]\) после всех раундов. Детали для каждого раунда:
    • В первом раунде первый бот начнет атаку и успешно захватит башню \(2\). После этого раунда второй бот будет уничтожен и покинет игру, так как все его башни заняты другими ботами.
    • Во втором раунде второго бота нет в игре.
  • Для массива \(a\) равного \([2, 1]\) и перестановки \(p\) равной \([2, 1]\), последовательность \(b\) будет \([2, 2]\) после всех раундов. Детали для каждого раунда:
    • В первом раунде второй бот начнет атаку и успешно захватит башню \(1\). После этого раунда первый бот будет уничтожен и покинет игру, так как все его башни заняты другими ботами.
    • Во втором раунде первого бота нет в игре.

Таким образом, количество различных пар последовательностей \((a,b)\) равно \(2\) (\([2, 1]\), \([1, 1]\) и \([2, 1]\), \([2, 2]\)) при \(n=2\).

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}\).

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\).

D2. Нарезка морковки (cложная версия)

дп жадные алгоритмы Конструктив математика Перебор Структуры данных теория чисел *2400

Это сложная версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(n\), \(k\), \(a_i\) и сумму \(n\) по всем наборам входных данных. Вы можете делать взломы, только если обе версии задачи решены.

Обратите внимание на нестандартное ограничение по памяти.

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и целое число \(k\).

Стоимость массива целых чисел \(p_1, p_2, \ldots, p_n\) длины \(n\) равна \(\)\max\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right) - \min\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right).\(\)

Здесь \(\lfloor \frac{x}{y} \rfloor\) обозначает целую часть от деления \(x\) на \(y\). Найдите минимальную возможную стоимость массива \(p\), такого что \(1 \le p_i \le k\) для всех \(1 \le i \le n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(k\) (\(1 \le n, k \le 10^5\)).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(p\), удовлетворяющего требованию выше.

Примечание

В первом наборе входных данных оптимальный массив \(p = [1, 1, 1, 2, 2]\). Массив значений \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равен \([4, 5, 6, 4, 5]\). Стоимость \(p\) равна \(\max\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) - \min\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) = 6 - 4 = 2\). Можно показать, что не существует массива (удовлетворяющего требованию из условия) с меньшей стоимостью.

Во втором наборе входных данных один из оптимальных массивов \(p = [12, 12, 12, 12, 12]\). Все значения \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равны \(0\).

В третьем наборе входных данных единственный возможный массив \(p = [1, 1, 1]\).

D. Частичные виртуальные деревья

Деревья дп Комбинаторика математика поиск в глубину и подобное *3000

Каваширо Нитори — девушка, которой нравится спортивное программирование. Однажды она нашла корневое дерево из \(n\) вершин. Корень дерева был в вершине с номером \(1\). Как продвинутый автор, она сразу придумала задачу.

У Каваширо Нитори есть множество вершин \(U=\{1,2,\ldots,n\}\). За одну операцию она будет выбирать множество вершин \(T\), где \(T\) является частичным виртуальным деревом множества \(U\), и заменять множество \(U\) на \(T\).

Множество вершин \(S_1\) называется частичным виртуальным деревом множества вершин \(S_2\), если \(S_1\) — подмножество \(S_2\), \(S_1 \neq S_2\) и для любых пар вершин \(i\) и \(j\) из \(S_1\) \(\operatorname{LCA}(i,j)\) лежит внутри \(S_1\), где \(\operatorname{LCA}(x,y)\) обозначает наименьшего общего предка вершин \(x\) и \(y\) в дереве. Обратите внимание, что множество вершин может иметь много различных частичных виртуальных деревьев.

Каваширо Нитори хочет узнать для каждого возможного \(k\), если применить операцию строго \(k\) раз, сколькими способами она может получить \(U=\{1\}\) в конце? Два способа считаются различными, если существует целое число \(z\) (\(1 \le z \le k\)) такое, что после \(z\) операций множества \(U\) различаются.

Так как ответ может быть большим, найдите его по модулю \(p\). Гарантируется, что \(p\) — простое число.

Входные данные

Первая строка содержит два целых числа \(n\) и \(p\) (\(2 \le n \le 2000\), \(10^8 + 7 \le p \le 10^9+9\)). Гарантируется, что \(p\) — простое число.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\)), обозначающих ребро между \(u_i\) и \(v_i\).

Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите единственную строку, состоящую из \(n-1\) целых чисел — ответ по модулю \(p\) для всех \(k=1,2,\ldots,n-1\).

Примечание

В первом примере при \(k=1\) единственный возможный способ следующий:

  1. \(\{1,2,3,4\} \to \{1\}\).

При \(k=2\) существуют \(6\) способов:

  1. \(\{1,2,3,4\} \to \{1,2\} \to \{1\}\);
  2. \(\{1,2,3,4\} \to \{1,2,3\} \to \{1\}\);
  3. \(\{1,2,3,4\} \to \{1,2,4\} \to \{1\}\);
  4. \(\{1,2,3,4\} \to \{1,3\} \to \{1\}\);
  5. \(\{1,2,3,4\} \to \{1,3,4\} \to \{1\}\);
  6. \(\{1,2,3,4\} \to \{1,4\} \to \{1\}\).

При \(k=3\) существуют \(6\) возможных способов:

  1. \(\{1,2,3,4\} \to \{1,2,3\} \to \{1,2\} \to \{1\}\);
  2. \(\{1,2,3,4\} \to \{1,2,3\} \to \{1,3\} \to \{1\}\);
  3. \(\{1,2,3,4\} \to \{1,2,4\} \to \{1,2\} \to \{1\}\);
  4. \(\{1,2,3,4\} \to \{1,2,4\} \to \{1,4\} \to \{1\}\);
  5. \(\{1,2,3,4\} \to \{1,3,4\} \to \{1,3\} \to \{1\}\);
  6. \(\{1,2,3,4\} \to \{1,3,4\} \to \{1,4\} \to \{1\}\).

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\).

B. Различие НОДов

Конструктив математика *1100

Даны три целых числа \(n\), \(l\), и \(r\). Необходимо построить массив \(a_1,a_2,\dots,a_n\) (\(l\le a_i\le r\)) такой, что значения \(\gcd(i,a_i)\) все различны, либо сообщить, что решения не существует.

Здесь \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

Первая строка входных данных содержит одно целое число \(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\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите «NO» (без кавычек), если решения не существует. Вы можете выводить буквы в любом регистре (верхнем или нижнем).

В противном случае выведите «YES» (без кавычек). В следующей строке выведите \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) — построенный вами массив.

Если существуют несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, \(\gcd(1,a_1),\gcd(2,a_2),\ldots,\gcd(5,a_5)\) равны \(1\), \(2\), \(3\), \(4\), \(5\) соответственно.

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».

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».

F. Мультимножество строк

meet-in-the-middle битмаски бпф графы Деревья дп математика Перебор Потоки *2500

Вам даны три целых числа \(n\), \(k\) и \(f\).

Рассмотрим все бинарные строки (то есть все строки, состоящие из символов \(0\) и/или \(1\)) длины от \(1\) до \(n\). Для каждой такой строки \(s\) вы должны выбрать целое число \(c_s\) от \(0\) до \(k\).

Мультимножество из бинарных строк длины ровно \(n\) считается красивым, если для каждой бинарной строки \(s\) длины от \(1\) до \(n\) выполняется следующее: количество строк в мультимножестве, для которых \(s\) является префиксом, не превосходит \(c_s\).

Например, пусть \(n = 2\), \(c_{0} = 3\), \(c_{00} = 1\), \(c_{01} = 2\), \(c_{1} = 1\), \(c_{10} = 2\) и \(c_{11} = 3\). Мультимножество строк \(\{11, 01, 00, 01\}\) является красивым, так как:

  • для строки \(0\) существует \(3\) строки из мультимножества, для которых \(0\) — префикс, и \(3 \le c_0\);
  • для строки \(00\) существует одна строка из мультимножества, для которой \(00\) — префикс, и \(1 \le c_{00}\);
  • для строки \(01\) существует \(2\) строки из мультимножества, для которых \(01\) — префикс, и \(2 \le c_{01}\);
  • для строки \(1\) существует одна строка из мультимножества, для которой \(1\) — префикс, и \(1 \le c_1\);
  • для строки \(10\) существует \(0\) строк из мультимножества, для которых \(10\) — префикс, и \(0 \le c_{10}\);
  • для строки \(11\) существует одна строка из мультимножества, для которой \(11\) — префикс, и \(1 \le c_{11}\).

А теперь — сама задача. Вы должны посчитать количество способов выбрать числа \(c_s\) для всех бинарных строк \(s\) длины от \(1\) до \(n\) таким образом, чтобы максимальный возможный размер красивого мультимножества был равен ровно \(f\).

Входные данные

В единственной строке заданы три целых числа \(n\), \(k\) и \(f\) (\(1 \le n \le 15\); \(1 \le k, f \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — количество способов выбрать числа \(c_s\) для всех бинарных строк \(s\) длины от \(1\) до \(n\) таким образом, чтобы максимальный возможный размер красивого мультимножества был равен ровно \(f\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Примечание

В первом примере есть три способа выбрать значения \(c_s\):

  • \(c_0 = 0\), \(c_1 = 2\), тогда максимальное красивое мультимножество — \(\{1, 1\}\);
  • \(c_0 = 1\), \(c_1 = 1\), тогда максимальное красивое мультимножество — \(\{0, 1\}\);
  • \(c_0 = 2\), \(c_1 = 0\), тогда максимальное красивое мультимножество — \(\{0, 0\}\).

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\).

E1. Сумма НОК (простая версия)

Бинарный поиск Комбинаторика математика Перебор теория чисел *2300

We are sum for we are many
Some Number

Это простая версия задачи. Разница между простой и сложной версиями задачи заключается только в ограничении на \(t\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых положительных числа \(l\) и \(r\).

Посчитайте количество уникальных троек целых чисел \((i, j, k)\) таких, что \(l \le i < j < k \le r\) и \(\operatorname{lcm}(i,j,k) \ge i + j + k\).

Здесь \(\operatorname{lcm}(i, j, k)\) означает наименьшее общее кратное (НОК) целых чисел \(i\), \(j\), и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(\bf{1 \le t \le 5}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 2 \cdot 10^5\), \(l + 2 \le r\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество уникальных троек целых чисел, подходящих под условия задачи.

Примечание

В первом наборе входных данных существует \(3\) подходящих тройки:

  • \((1,2,3)\),
  • \((1,3,4)\),
  • \((2,3,4)\).

Во втором наборе входных данных существует только \(1\) подходящая тройка:

  • \((3,4,5)\).

E2. Сумма НОК (сложная версия)

математика Перебор Структуры данных теория чисел *2500

We are sum for we are many
Some Number

Это сложная версия задачи. Разница между простой и сложной версиями задачи заключается только в ограничении на \(t\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны два целых положительных числа \(l\) и \(r\).

Посчитайте количество уникальных троек целых чисел \((i, j, k)\) таких, что \(l \le i < j < k \le r\) и \(\operatorname{lcm}(i,j,k) \ge i + j + k\).

Здесь \(\operatorname{lcm}(i, j, k)\) означает наименьшее общее кратное (НОК) целых чисел \(i\), \(j\), и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(\bf{1 \le t \le 10^5}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 2 \cdot 10^5\), \(l + 2 \le r\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество уникальных троек целых чисел, подходящих под условия задачи.

Примечание

В первом наборе входных данных существует \(3\) подходящих тройки:

  • \((1,2,3)\),
  • \((1,3,4)\),
  • \((2,3,4)\).

Во втором наборе входных данных существует только \(1\) подходящая тройка:

  • \((3,4,5)\).

C. Постройте перестановку

дп Конструктив математика *1200

Массив \(a\) длины \(n\), пронумерованный с \(\mathbf{0}\), называется хорошим, если для всех корректных индексов \(i\) (\(0 \le i \le n-1\)) значение \(a_i + i\) является полным квадратом\(^\dagger\).

Дано целое число \(n\). Найдите перестановку\(^\ddagger\) \(p\) массива \([0,1,2,\ldots,n-1]\), являющуюся хорошим массивом, или определите, что такой перестановки не существует.

\(^\dagger\) Целое число \(x\) называется полным квадратом, если существует целое число \(y\) такое, что \(x = y^2\).

\(^\ddagger\) Массив \(b\) является перестановкой массива \(a\), если \(b\) состоит из элементов массива \(a\) в произвольном порядке. Например, \([4,2,3,4]\) является перестановкой \([3,2,4,4]\), а \([1,2,2]\) не является перестановкой \([1,2,3]\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину перестановки \(p\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) различных чисел \(p_0, p_1, \dots, p_{n-1}\) (\(0 \le p_i \le n-1\)) — перестановку \(p\) — если ответ существует, и \(-1\) иначе.

Примечание

В первом наборе входных данных \(n=3\). Массив \(p = [1, 0, 2]\) хороший, т. к. \(1 + 0 = 1^2\), \(0 + 1 = 1^2\) и \(2 + 2 = 2^2\)

Во втором наборе \(n=4\). Массив \(p = [0, 3, 2, 1]\) хороший, т. к. \(0 + 0 = 0^2\), \(3 + 1 = 2^2\), \(2+2 = 2^2\) и \(1+3 = 2^2\).

F. Потерянный массив

битмаски дп Комбинаторика Конструктив математика *2900

Мои orz-дети, мы можем оптимизировать эту задачу с \(O(S^3)\) до \(O\left(T^\frac{5}{9}\right)\)!
— Spyofgame, основатель религии Orz

Давным-давно Spyofgame изобрел известный массив \(a\) (элементы которого нумеруются с \(1\)) длины \(n\), который содержал знания о мире и о жизни. После этого он превратил его в матрицу \(b\) (элементы которой нумеруются с \(0\)) размера \((n + 1) \times (n + 1)\), которая содержала знания о мире, о жизни, и о том, что за их пределами.

Spyofgame превратил \(a\) в \(b\) по следующим правилам.

  • \(b_{i,0} = 0\) при \(0 \leq i \leq n\);
  • \(b_{0,i} = a_{i}\) при \(1 \leq i \leq n\);
  • \(b_{i,j} = b_{i,j-1} \oplus b_{i-1,j}\) при \(1 \leq i, j \leq n\).

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

В наши дни археологи нашли знаменитую матрицу \(b\). Однако многие ее элементы утеряны. Удалось прочесть лишь значения \(b_{i,n}\) для всех \(1 \leq i \leq n\) (обратите внимание, это некоторые элементы последнего столбца, а не строки).

Археологи хотят восстановить возможный массив \(a\). Можете помочь им найти любой массив, который может быть массивом \(a\)?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(b_{1,n}, b_{2,n}, \ldots, b_{n,n}\) (\(0 \leq b_{i,n} < 2^{30}\)).

Выходные данные

Если какой-то массив \(a\) подходит под данную информацию, выведите строку, содержащую \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Если существуют несколько решений, выведите любое из них.

Если решения не существует, выведите одно целое число \(-1\).

Примечание

Если \(a = [1,2,3]\), то \(b\) будет следующей:

\(\bf{0}\)\(\bf{1}\)\(\bf{2}\)\(\bf{3}\)
\(\bf{0}\)\(1\)\(3\)\(0\)
\(\bf{0}\)\(1\)\(2\)\(2\)
\(\bf{0}\)\(1\)\(3\)\(1\)

Значения \(b_{1,n}, b_{2,n}, \ldots, b_{n,n}\) равны \([0,2,1]\), что соответствует найденной археологами информации.

A. Все любят спать

математика реализация *900

Влад, как и все, очень любит спать.

Ежедневно Влад должен сделать \(n\) дел, каждое в определённое время. Для каждого из этих дел у него установлен будильник, \(i\)-й из них срабатывает в \(h_i\) часов \(m_i\) минут каждый день (\(0 \le h_i < 24, 0 \le m_i < 60\)). Влад использует \(24\)-часовой формат времени, поэтому после \(h=12, m=59\) наступает \(h=13, m=0\), а после \(h=23, m=59\) наступает \(h=0, m=0\).

В этот раз Влад лёг спать в \(H\) часов \(M\) минут (\(0 \le H < 24, 0 \le M < 60\)) и просит вас ответить: сколько ему удастся поспать до ближайшего следующего будильника.

Если какой-либо будильник зазвонит в момент времени, когда он лёг спать, то спать он будет отрезок времени длины \(0\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте.

Первая строка набора содержит три целых числа \(n\), \(H\) и \(M\) (\(1 \le n \le 10, 0 \le H < 24, 0 \le M < 60\)) — количество будильников и время, в которое Влад лёг спать.

Следующие \(n\) строк содержат по два числа \(h_i\) и \(m_i\) (\(0 \le h_i < 24, 0 \le m_i < 60\)) — время срабатывания \(i\)-го будильника. Допустимо, что два или больше будильника сработают в один момент времени.

Числа, описывающие время не содержат ведущих нулей.

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите два числа — количество часов и минут, которые поспит Влад, соответственно. Если какой-либо будильник зазвонит в момент времени, когда он лёг спать, то ответ будет равен 0 0.

E. Прибавление по модулю 10

математика Перебор теория чисел *1400

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \dots, a_n\)

Вы можете неограниченное количество раз применять следующую операцию:

  • выбрать индекс \(i\) (\(1 \le i \le n\)) и заменить значение элемента \(a_i\) на значение \(a_i + (a_i \bmod 10)\), где \(a_i \bmod 10\) — остаток от целочисленного деления \(a_i\) на \(10\).

Для одного индекса (значения \(i\)) эту операцию можно применять многократно. Если операция применяется повторно к одному и тому же индексу, то каждый раз учитывается текущее значение \(a_i\). Например, если \(a_i=47\), то после первого применения операции получим \(a_i=47+7=54\), а после второго получим \(a_i=54+4=58\).

Проверьте, можно ли сделать все элементы массива равными в результате применения нескольких (возможно, нуля) операций.

Например, у вас есть массив \([6, 11]\).

  • Применим данную операцию к первому элементу массива. Заменим \(a_1 = 6\) на \(a_1 + (a_1 \bmod 10) = 6 + (6 \bmod 10) = 6 + 6 = 12\). Получим массив \([12, 11]\).
  • Затем применим данную операцию ко второму элементу массива. Заменим \(a_2 = 11\) на \(a_2 + (a_2 \bmod 10) = 11 + (11 \bmod 10) = 11 + 1 = 12\). Получим массив \([12, 12]\).

Таким образом, при помощи применения \(2\) операций можно сделать все элементы массива равными.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание каждого набора.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_i\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • YES, если можно сделать все элементы массива равными;
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных невозможно сделать все элементы массива равными.

В третьем наборе входных данных нужно применить данную операцию по одному разу ко всем равным \(5\) элементам.

В четвёртом наборе входных данных нужно применять данную операцию ко всем элементам, пока они не станут равными \(8\).

В пятом наборе входных данных невозможно сделать все элементы массива равными.

В шестом наборе нужно применять данную операцию ко всем элементам, пока они не станут равными \(102\).

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\).

C. Моноблок

Комбинаторика математика реализация Структуры данных *1700

Сережа решил срочно купить новый моноблок. Сейчас он использует VPN и поэтому, чтобы попасть на сайт, надо решить вот такую капчу.

Крутостью массива назовем минимальное количество блоков подряд идущих одинаковых чисел, на которые он разбивается.

Например, крутость массива

  • \([1, 1, 1]\) это \(1\);
  • \([5, 7]\) это \(2\), ведь его можно разбить на два блока: \([5]\) и \([7]\);
  • \([1, 7, 7, 7, 7, 7, 7, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9]\) это 3, потому что его можно разбить на блоки \([1]\), \([7, 7, 7, 7, 7, 7, 7]\) и \([9, 9, 9, 9, 9, 9, 9, 9, 9]\).

Вам дан массив \(a\) длины \(n\), а также \(m\) запросов, состоящих из двух целых чисел \(i\) и \(x\). Запрос \(i\), \(x\) означает, что теперь \(i\)-й элемент массива \(a\) равен \(x\).

После каждого запроса выведите сумму крутостей всех непустых подотрезков массива \(a\). Другими словами, после каждого запроса вам надо вычислять \(\)\sum\limits_{l = 1}^n \sum\limits_{r = l}^n g(l, r),\(\) где \(g(l, r)\) это крутость массива \(b = [a_l, a_{l + 1}, \ldots, a_r]\).

Входные данные

В первой строке вводятся \(n\) и \(m\) (\(1 \leq n, m \leq 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

В каждой из следующих \(m\) строк вам дает описание запросов. Каждая строка содержит два целых числа \(i\) и \(x\) (\(1 \leq i \leq n\), \(1 \leq x \leq 10^9\)).

Выходные данные

После каждого запроса выведите ответ на задачу в отдельной строке.

Примечание

После первого запроса массив \(a\) равен \([1, 2, 2, 4, 5]\), ответ равен \(29\), потому что подрезки массива можно разбить на блоки:

  1. \([1; 1]\): \([1]\), 1 блок;
  2. \([1; 2]\): \([1] + [2]\), 2 блока;
  3. \([1; 3]\): \([1] + [2, 2]\), 2 блока;
  4. \([1; 4]\): \([1] + [2, 2] + [4]\), 3 блока;
  5. \([1; 5]\): \([1] + [2, 2] + [4] + [5]\), 4 блока;
  6. \([2; 2]\): \([2]\), 1 блок;
  7. \([2; 3]\): \([2, 2]\), 1 блок;
  8. \([2; 4]\): \([2, 2] + [4]\), 2 блока;
  9. \([2; 5]\): \([2, 2] + [4] + [5]\), 3 блока;
  10. \([3; 3]\): \([2]\), 1 блок;
  11. \([3; 4]\): \([2] + [4]\), 2 блока;
  12. \([3; 5]\): \([2] + [4] + [5]\), 3 блока;
  13. \([4; 4]\): \([4]\), 1 блок;
  14. \([4; 5]\): \([4] + [5]\), 2 блока;
  15. \([5; 5]\): \([5]\), 1 блок;
что в сумме равняется \(1 + 2 + 2 + 3 + 4 + 1 + 1 + 2 + 3 + 1 + 2 + 3 + 1 + 2 + 1 = 29\).

F. Квадраты на полях

геометрия интерактив Конструктив математика *2700

Это интерактивная задача.

Фермер Сережа выращивает кукурузу на прямоугольном поле \( n \times m \) метров c углами в точках с координатами \((0, 0)\), \((0, m)\), \((n, 0)\), \((n, m)\). В этом году урожай был обилен и кукуруза покрыла все поле.

Но в ночь перед сбором урожая прилетели инопланетяне и отравили кукурузу на поле в одном квадрате \(1 \times 1\) метр со сторонами, параллельными границам поля. Кукурузу, попавшую внутрь квадрата, ни в коем случае нельзя есть, но отличить ее от обычной невооруженным взглядом невозможно. Можно только собрать пробу кукурузы с любого многоугольника и отдать в лабораторию, где ее проанализируют и скажут, сколько кукурузы было отравлено. Так как урожай скоро испортится, можно провести такое исследование не более \(5\) раз.

Более формально, разрешено сделать не более \(5\) запросов, каждым из которых можно узнать площадь пересечения любого выбранного многоугольника с инопланетянами квадратом. Необходимо узнать координаты левого нижнего угла квадрата отравленной кукурузы (вершину квадрата с наименьшими \(x\) и \(y\) координатами).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)) — размеры поля.

Протокол взаимодействия

Для того, чтобы узнать площадь пересечения многоугольника с \(k\) (\(3 \le k \le 1000\)) вершинами в точках с координатами \((x_1, y_1),\; \dots ,\;(x_k, y_k)\) с квадратом отравленной кукурузы выведите \(k+1\) строку. В первой из этих строк выведите «? k». В \(i\)-й из следующих \(k\) строк выведите два вещественных числа \(x_i\) и \(y_i\) (\(|x_i|, |y_i| \le 10^4\)) с не более \(15\) знаками после запятой.

Многоугольник должен иметь строго положительную площадь и не иметь самопересечений.

В ответ на данный запрос вы получите действительное число \(s\) (\(0 \le s \le 1\)) с \(15\) знаками после запятой — площадь пересечения квадрата с заданным многоугольником. Если многоугольник некорректен, корректный ответ не гарантируется.

Когда вы определили отравленный квадрат, выведите в отдельной строке «! x y», где \(x\) и \(y\) — вещественные числа с не более \(15\) знаками после запятой, описывающие координаты его левого нижнего угла (\(0 \le x \le n - 1\), \(0 \le y \le m - 1\)) , и после этого ваша программа должна немедленно завершиться.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка по обеим координатам не превосходит \(10^{-6}\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a-b|}{max(1,|b|)} \le 10^{-6}\).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «Решение зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в С++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома задачи используйте следующий формат теста.

В первой строке входных данных должны содержаться два целых числа \(n\) и \(m\) (\(1 \le n,m \le 100\)) — размеры поля.

Во второй строке должны содержаться два вещественных числа \(x\) и \(y\) (\(0 \le x \le n - 1\), \(0 \le y \le m - 1\)) — координаты левого нижнего угла отравленного квадрата.

Примечание

В первом тесте из условия инопланетяне отравили квадрат с вершинами в точках с координатами \((1.5, 0.5)\), \((1.5, 1.5)\), \((2.5, 1.5)\), \((2.5, 0.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\) в соответствующем наборе тестовых данных.

B. Цепочка перестановок

Конструктив математика *800

Перестановка длины \(n\) — это последовательность целых чисел от \(1\) до \(n\) такая, что каждое число встречается в ней ровно один раз.

Назовем неподвижностью перестановки \(p\) количество неподвижных точек в ней — количество позиций \(j\) таких, что \(p_j = j\), где \(p_j\)\(j\)-й элемент перестановки \(p\).

От вас требуется построить последовательность перестановок \(a_1, a_2, \dots\), начав с тождественной перестановки (перестановки \(a_1 = [1, 2, \dots, n]\)). Назовем это цепочкой перестановок. Таким образом, каждое \(a_i\)\(i\)-я перестановка длины \(n\).

Для каждого \(i\) от \(2\) и дальше перестановка \(a_i\) должна быть получена из перестановки \(a_{i-1}\) обменом двух элементов местами (не обязательно соседних). Неподвижность перестановки \(a_i\) должна быть строго меньше неподвижности перестановки \(a_{i-1}\).

Рассмотрим некоторые цепочки для \(n = 3\):

  • \(a_1 = [1, 2, 3]\), \(a_2 = [1, 3, 2]\) — это валидная цепочка длины \(2\). От \(a_1\) к \(a_2\) элементы на позициях \(2\) и \(3\) меняются местами, неподвижность уменьшается с \(3\) до \(1\).
  • \(a_1 = [2, 1, 3]\), \(a_2 = [3, 1, 2]\) — это не валидная цепочка. Первая перестановка всегда должна быть \([1, 2, 3]\) для \(n = 3\).
  • \(a_1 = [1, 2, 3]\), \(a_2 = [1, 3, 2]\), \(a_3 = [1, 2, 3]\) — это не валидная цепочка. От \(a_2\) к \(a_3\) элементы на позициях \(2\) и \(3\) меняются местами, но неподвижность увеличивается с \(1\) до \(3\).
  • \(a_1 = [1, 2, 3]\), \(a_2 = [3, 2, 1]\), \(a_3 = [3, 1, 2]\) — это валидная цепочка длины \(3\). От \(a_1\) к \(a_2\) элементы на позициях \(1\) и \(3\) меняются местами, неподвижность уменьшается с \(3\) до \(1\). От \(a_2\) к \(a_3\) элементы на позициях \(2\) и \(3\) меняются местами, неподвижность уменьшается с \(1\) до \(0\).

Найдите самую длинную цепочку перестановок. Если есть несколько самых длинных ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 99\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 100\)) — необходимая длина перестановок в цепочке.

Выходные данные

На каждый набор входных данных сначала выведите длину цепочки перестановок \(k\).

Затем выведите \(k\) перестановок \(a_1, a_2, \dots, a_k\). \(a_1\) должна быть тождественной перестановкой длины \(n\) (\([1, 2, \dots, n]\)). Для каждого \(i\) от \(2\) до \(k\), \(a_i\) должно быть получено обменом двух элементов в \(a_{i-1}\) местами и должно иметь строго меньшее значение, чем \(a_{i-1}\).

D. Перемещение фишки

дп математика Перебор *2000

На координатной прямой лежит фишка. Изначально фишка находится в точке \(0\). Вы можете переместить фишку любое количество раз; каждый раз при перемещении ее координата увеличивается на некоторое целое положительное число (будем его называть длиной перемещения). При этом длина первого перемещения должна делиться на \(k\), длина второго — на \(k+1\), длина третьего — на \(k+2\), и так далее.

Например, если \(k=2\), то последовательность перемещений может выглядеть следующим образом: \(0 \rightarrow 4 \rightarrow 7 \rightarrow 19 \rightarrow 44\), т.  к. \(4 - 0 = 4\) делится на \(2 = k\), \(7 - 4 = 3\) делится на \(3 = k + 1\), \(19 - 7 = 12\) делится на \(4 = k + 2\), \(44 - 19 = 25\) делится на \(5 = k + 3\).

Вам дано два целых положительных числа \(n\) и \(k\). Ваша задача — посчитать количество способов попасть в точку \(x\), начиная из точки \(0\), для всех \(x \in [1, n]\). Количество способов может быть очень большим, поэтому выведите его по модулю \(998244353\). Два способа считаются различными, если они отличаются как наборы посещенных позиций.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)).

Выходные данные

Выведите \(n\) целых чисел — количество способов попасть из \(0\) в точку \(x\) для всех \(x \in [1, n]\), взятое по модулю \(998244353\).

Примечание

Рассмотрим способы в первом примере:

Способы попасть в точку \(1\): \([0, 1]\);

Способы попасть в точку \(2\): \([0, 2]\);

Способы попасть в точку \(3\): \([0, 1, 3]\), \([0, 3]\);

Способы попасть в точку \(4\): \([0, 2, 4]\), \([0, 4]\);

Способы попасть в точку \(5\): \([0, 1, 5]\), \([0, 3, 5]\), \([0, 5]\);

Способы попасть в точку \(6\): \([0, 1, 3, 6]\), \([0, 2, 6]\), \([0, 4, 6]\), \([0, 6]\);

Способы попасть в точку \(7\): \([0, 2, 4, 7]\), \([0, 1, 7]\), \([0, 3, 7]\), \([0, 5, 7]\), \([0, 7]\);

Способы попасть в точку \(8\): \([0, 3, 5, 8]\), \([0, 1, 5, 8]\), \([0, 2, 8]\), \([0, 4, 8]\), \([0, 6, 8]\), \([0, 8]\).

F. Мешки с шарами

дп Комбинаторика математика теория чисел *2500

Есть \(n\) мешков, в каждом лежат \(m\) шаров с числами от \(1\) до \(m\). В каждом мешке ровно один шар с числом \(i\) для каждого \(i \in [1, m]\).

Из каждого мешка берется по одному шару (все мешки различные, так что, например, взять шар \(1\) из первого мешка и шар \(2\) из второго мешка — это не то же самое, что и взять шар \(2\) из первого мешка и шар \(1\) из второго мешка). После этого считается количество шаров с нечетными числами среди тех, которые достали. Пусть это количество будет равно \(F\).

Ваша задача — посчитать сумму \(F^k\) по всем способам выбрать \(n\) шаров, по одному из каждого мешка.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, в которой записаны три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 998244352\); \(1 \le k \le 2000\)).

Выходные данные

На каждый набор входных данных выведите одно целое число — сумму \(F^k\) по всем способам выбрать \(n\) шаров, по одному из каждого мешка. Так как это значение может быть достаточно велико, выведите его по модулю \(998244353\).

A. Мадока и странные мысли

математика теория чисел *800

Мадока очень странная девочка, и поэтому ей внезапно стало интересно, сколько существует пар целых чисел \((a, b)\), где \(1 \leq a, b \leq n\), для которых выполнено \(\frac{\operatorname{lcm}(a, b)}{\operatorname{gcd}(a, b)} \leq 3\).

В данной задаче \(\operatorname{gcd}(a, b)\) обозначает наибольший общий делитель чисел \(a\) и \(b\), а \(\operatorname{lcm}(a, b)\) обозначает наименьшее общее кратное чисел \(a\) и \(b\).

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке описания каждого набора входных данных находится одно целое число \(n\) (\(1 \le n \le 10^8\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар чисел, удовлетворяющих условию задачи.

Примечание

Для \(n = 1\) существует ровно одна пара чисел — \((1, 1)\), и она подходит.

Для \(n = 2\) существует всего \(4\) пары — \((1, 1)\), \((1, 2)\), \((2, 1)\), \((2, 2)\), и все они подходят.

Для \(n = 3\) подходят все \(9\) пар, кроме \((2, 3)\) и \((3, 2)\), так как их \(\operatorname{lcm}\) равен \(6\), а \(\operatorname{gcd}\) равен \(1\), что не подходит под условие.

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\).

Схема турнира из второго примера изображена на картинке в условии.

E. Мадока и лучший университет

математика теория чисел *2200

Мадока хочет поступить в «Новосибирский Государственный Университет», но на вступительном экзамене ей попалась очень сложная задача:

Дано число \(n\), требуется вывести \(\sum{\operatorname{lcm}(c, \gcd(a, b))}\), для всех троек положительных целых чисел \((a, b, c)\), где \(a + b + c = n\).

В данной задаче \(\gcd(x, y)\) обозначает наибольший общий делитель чисел \(x\) и \(y\), а \(\operatorname{lcm}(x, y)\) обозначает наименьшее общее кратное чисел \(x\) и \(y\).

Решите эту задачу за Мадоку и помогите ей поступить в лучший университет!

Входные данные

Первая и единственная строка содержит единственное целое число \(n\) (\(3 \le n \le 10^5\)).

Выходные данные

Выведите ровно одно число — \(\sum{\operatorname{lcm}(c, \gcd(a, b))}\). Так как ответ может быть очень большим, то выведите его по модулю \(10^9 + 7\).

Примечание

В первом примере есть только одна подходящая тройка \((1, 1, 1)\). Поэтому ответ равен \(\operatorname{lcm}(1, \gcd(1, 1)) = \operatorname{lcm}(1, 1) = 1\).

Во втором примере, \(\operatorname{lcm}(1, \gcd(3, 1)) + \operatorname{lcm}(1, \gcd(2, 2)) + \operatorname{lcm}(1, \gcd(1, 3)) + \operatorname{lcm}(2, \gcd(2, 1)) + \operatorname{lcm}(2, \gcd(1, 2)) + \operatorname{lcm}(3, \gcd(1, 1)) = \operatorname{lcm}(1, 1) + \operatorname{lcm}(1, 2) + \operatorname{lcm}(1, 1) + \operatorname{lcm}(2, 1) + \operatorname{lcm}(2, 1) + \operatorname{lcm}(3, 1) = 1 + 2 + 1 + 2 + 2 + 3 = 11\)

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\) ответа не существует.

E. Импрессионизм

графы Конструктив математика реализация *3500

У Бурёнки есть две картины \(a\) и \(b\), представляющие собой таблицы одинакового размера \(n \times m\). Каждая клетка каждой картины имеет цвет — число от \(0\) до \(2 \cdot 10^5\), при этом ни в какой строке и никаком столбце каждой из двух картин нет повторяющихся цветов, за исключением цвета \(0\).

Бурёнка хочет получить из картины \(a\) картину \(b\). Для достижения своей цели Бурёнка может сделать одну из \(2\) операций: поменять местами две любые строки картины \(a\) или любые два её столбца. Сообщите Бурёнке, может ли она исполнить желаемое и если да, то подскажите ей последовательность действий.

Нумерация строк — от \(1\) до \(n\) сверху вниз, столбцов — от \(1\) до \(m\) слева направо.

Входные данные

В первой строке содержатся два целых числа \(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}\) (\(0 \leq a_{i,j} \leq 2 \cdot 10^5\)) — цвета в \(i\)-й строке рисунка \(a\). Гарантируется, что нет одинаковых чисел в одной строке или одном столбце, за исключением числа \(0\).

В \(i\)-й из следующих \(n\) строк записаны \(m\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, m}\) (\(0 \leq b_{i,j} \leq 2 \cdot 10^5\)) — цвета в \(i\)-й строке рисунка \(b\). Гарантируется, что нет одинаковых чисел в одной строке или одном столбце, за исключением числа \(0\).

Выходные данные

В первой строке выведите число \(-1\), если добиться желаемого невозможно, иначе выведите число действий в вашем решении \(k\) (\(0 \le k \le 2 \cdot 10^5\)). Можно доказать, что если решение существует, то существует решение, где \(k \le 2 \cdot 10^5\).

В следующих \(k\) строках выведите операции. Сначала выведите тип операции (\(1\) — поменять местами строки, \(2\) — столбцы), а потом два номера строк или столбцов, к которым применяется операция.

Обратите внимание, что вам не нужно минимизировать число операций.

F. Бурёнка, массив и запросы

математика Структуры данных теория чисел *3300

Женя подарил Бурёнке на день рождения массив \(a\) длины \(n\) из чисел от \(1\) до \(m\). Бурёнка знает, что Жене очень нравятся взаимно простые числа (числа \(x\) и \(y\) называются взаимно простыми, если у них отсутствуют общие делители, большие \(1\)), поэтому она хочет задать Жене \(q\) вопросов про свой подарок.

Каждый раз она будет выбирать какой-то подотрезок \(a_l, a_{l + 1}, \ldots, a_r\) массива \(a\) и вычислять произведение этих чисел \(p = a_l \cdot a_{l + 1} \cdot \ldots \cdot a_r\). Затем она спросит у Жени, сколько целых чисел от \(1\) до \(C\) взаимно просты с числом \(p\).

Помогите Жене ответить на вопросы!

Входные данные

В первой строке ввода находятся четыре числа \(n\), \(m\), \(C\), \(q\) (\(1 \leq n, q \leq 10^5\), \(1 \leq m \leq 2\cdot 10^4\), \(1 \leq C \leq 10^5\)) — длина массива \(a\), верхнее ограничения на \(a_{i}\), значение \(C\) и количество запросов.

Во второй строке ввода находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_{i} \leq m\)) — массив \(a\).

В следующих \(q\) строках находятся запросы, каждый из которых состоит из двух целых чисел \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)).

Выходные данные

Выведите \(q\) чисел — ответы на вопросы Бурёнки.

Примечание

Рассмотрим запросы из примера:

  1. в первом вопросе произведение чисел на первом отрезке равно \(1\), оно взаимно просто с числами \(1,2,3,4,5\).
  2. во втором вопросе произведение чисел на втором отрезке равно \(12\), оно взаимно просто с числами \(1\) и \(5\).
  3. в третьем вопросе произведение чисел на третьем отрезке равно \(10\), оно взаимно просто с числами \(1\) и \(3\).

A. Игра с фишкой

игры математика *800

Бурёнка и Тоня играют в старинную бурятскую игру с фишкой на поле \(n \times m\) клеток.

В начале игры фишка находится в левом нижнем углу доски. Одним ходом игрок может сдвинуть фишку вправо или вверх на любое нечётное число клеток (но нельзя двигать фишку и вправо, и вверх за один ход). Проигрывает тот, кто не может сделать ход.

Первый ход делает Бурёнка, игроки ходят по очереди. Бурёнка очень хочет победить в игре, но ей лень придумывать стратегию, поэтому нелёгкую задачу её нахождения предложено решить Вам. Назовите имя победителя игры (считается, что Бурёнка и Тоня — мастера игр с фишками, поэтому они всегда ходят оптимальным образом).

Стартовая клетка фишки имеет зелёный цвет, единственная клетка, из которой нельзя сделать ход — красный. Если фишка находится в жёлтой клетке, то голубые клетки — это все варианты того, куда её можно сдвинуть за один ход.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^9\)) — размеры игровой доски.

Выходные данные

Для каждого набора входных данных выведите единственную строку — имя победителя игры («Burenka» или «Tonya»).

Примечание

В первом наборе входных данных у Бурёнки нет хода, поэтому выигрывает Тоня.

Во втором наборе входных данных Бурёнка может сходить на \(3\) клетки вправо, после этого у Тони не будет возможности сделать ход, значит, выигрывает Бурёнка.

В третьем наборе входных данных Бурёнка может сходить на \(5\) клеток вправо. Тогда можно считать, что игра происходит на поле \(1 \times 5\), а первый ход делает Тоня. В игре на таком поле побеждает второй игрок, поэтому в исходной игре победит Бурёнка.

B. Математический цирк

Конструктив математика *800

В Бурятии появилось новое развлечение — математический цирк! Фокусник показывает зрителям два числа — \(n\) и \(k\), где \(n\) — чётное. Далее он берёт все числа от \(1\) до \(n\) и разбивает их все на пары \((a, b)\) (каждое число должно оказаться ровно в одной паре) так, чтобы для каждой пары число \((a + k) \cdot b\) делилось на \(4\) (обратите внимание, что порядок чисел в паре имеет значение), или сообщает, что, к сожалению для зрителей, такое разбиение невозможно.

Бурёнке очень нравятся такие представления, поэтому она попросила своего друга Тоню побыть фокусником, а также дала ему числа \(n\) и \(k\).

Тоня — волк, а как известно, волки в цирке не выступают, даже в математическом. Поэтому он просит вас помочь ему. Сообщите, возможно ли подходящее разбиение на пары, и если возможно, то сообщите его.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq k \leq 10^9\), \(n\) — чётное) — количество чисел и прибавляемое число \(k\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите строку «YES», если разбиение на пары существует, и «NO», если его нет.

Если разбиение существует, то в следующих \(\frac{n}{2}\) строках выведите пары разбиения, в каждой строке по \(2\) числа — сначала очередное число \(a\), потом число \(b\).

Примечание

В первом наборе входных данных разбиение на пары \((1, 2)\) и \((3, 4)\) подходит, как и разбиение \((1, 4)\) и \((3, 2)\).

Во втором наборе входных данных \((1 + 0) \cdot 2 = 1 \cdot (2 + 0) = 2\) не делится на \(4\), поэтому разбиения нет.

A. Бурёнка играет с дробями

математика теория чисел *900

Бурёнка пришла в детский сад. Этот детский сад очень странный, поэтому в нём каждому ребёнку дают две дроби (\(\frac{a}{b}\) и \(\frac{c}{d}\)), числители и знаменатели которых являются целыми числами, и заставляют играть с ними.

Бурёнка — умный ребёнок, поэтому она заметила, что за один хлопок в ладоши она может умножить числитель или знаменатель любой из двух своих дробей на любое целое число (но нельзя умножать знаменатели на \(0\)). Теперь она хочет сделать две дроби равными по значению за минимальное число хлопков. Помогите ей и сообщите это число!

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре целых числа \(a\), \(b\), \(c\) и \(d\) (\(0 \leq a, c \leq 10^9\), \(1 \leq b, d \leq 10^9\)) — числители и знаменатели дробей.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное число хлопков в ладоши, которое Бурёнке придётся сделать для того, чтобы сделать две дроби равными.

Примечание

В первом тестовом случае можно умножить \(c\) на \(2\), после этого дроби станут равными.

Во втором тестовом случае дроби уже равны.

В третьем тестовом случае можно умножить \(a\) на \(4\), а затем \(b\) на \(3\). Тогда дроби станут равны: \(\frac{1 \cdot 4}{2 \cdot 3} = \frac{2}{3}\).

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\).

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. Accumulation of Dominoes

математика *800

Pak Chanek has a grid that has \(N\) rows and \(M\) columns. Each row is numbered from \(1\) to \(N\) from top to bottom. Each column is numbered from \(1\) to \(M\) from left to right.

Each tile in the grid contains a number. The numbers are arranged as follows:

  • Row \(1\) contains integers from \(1\) to \(M\) from left to right.
  • Row \(2\) contains integers from \(M+1\) to \(2 \times M\) from left to right.
  • Row \(3\) contains integers from \(2 \times M+1\) to \(3 \times M\) from left to right.
  • And so on until row \(N\).

A domino is defined as two different tiles in the grid that touch by their sides. A domino is said to be tight if and only if the two numbers in the domino have a difference of exactly \(1\). Count the number of distinct tight dominoes in the grid.

Two dominoes are said to be distinct if and only if there exists at least one tile that is in one domino, but not in the other.

Input

The only line contains two integers \(N\) and \(M\) (\(1 \leq N, M \leq 10^9\)) — the number of rows and columns in the grid.

Output

An integer representing the number of distinct tight dominoes in the grid.

Note

The picture below is the grid that Pak Chanek has in the first example.

The picture below is an example of a tight domino in the grid.

A. Accumulation of Dominoes

математика *800

Pak Chanek has a grid that has \(N\) rows and \(M\) columns. Each row is numbered from \(1\) to \(N\) from top to bottom. Each column is numbered from \(1\) to \(M\) from left to right.

Each tile in the grid contains a number. The numbers are arranged as follows:

  • Row \(1\) contains integers from \(1\) to \(M\) from left to right.
  • Row \(2\) contains integers from \(M+1\) to \(2 \times M\) from left to right.
  • Row \(3\) contains integers from \(2 \times M+1\) to \(3 \times M\) from left to right.
  • And so on until row \(N\).

A domino is defined as two different tiles in the grid that touch by their sides. A domino is said to be tight if and only if the two numbers in the domino have a difference of exactly \(1\). Count the number of distinct tight dominoes in the grid.

Two dominoes are said to be distinct if and only if there exists at least one tile that is in one domino, but not in the other.

Input

The only line contains two integers \(N\) and \(M\) (\(1 \leq N, M \leq 10^9\)) — the number of rows and columns in the grid.

Output

An integer representing the number of distinct tight dominoes in the grid.

Note

The picture below is the grid that Pak Chanek has in the first example.

The picture below is an example of a tight domino in the grid.

A. Accumulation of Dominoes

математика *800

Pak Chanek has a grid that has \(N\) rows and \(M\) columns. Each row is numbered from \(1\) to \(N\) from top to bottom. Each column is numbered from \(1\) to \(M\) from left to right.

Each tile in the grid contains a number. The numbers are arranged as follows:

  • Row \(1\) contains integers from \(1\) to \(M\) from left to right.
  • Row \(2\) contains integers from \(M+1\) to \(2 \times M\) from left to right.
  • Row \(3\) contains integers from \(2 \times M+1\) to \(3 \times M\) from left to right.
  • And so on until row \(N\).

A domino is defined as two different tiles in the grid that touch by their sides. A domino is said to be tight if and only if the two numbers in the domino have a difference of exactly \(1\). Count the number of distinct tight dominoes in the grid.

Two dominoes are said to be distinct if and only if there exists at least one tile that is in one domino, but not in the other.

Input

The only line contains two integers \(N\) and \(M\) (\(1 \leq N, M \leq 10^9\)) — the number of rows and columns in the grid.

Output

An integer representing the number of distinct tight dominoes in the grid.

Note

The picture below is the grid that Pak Chanek has in the first example.

The picture below is an example of a tight domino in the grid.

A. Accumulation of Dominoes

математика *800

Pak Chanek has a grid that has \(N\) rows and \(M\) columns. Each row is numbered from \(1\) to \(N\) from top to bottom. Each column is numbered from \(1\) to \(M\) from left to right.

Each tile in the grid contains a number. The numbers are arranged as follows:

  • Row \(1\) contains integers from \(1\) to \(M\) from left to right.
  • Row \(2\) contains integers from \(M+1\) to \(2 \times M\) from left to right.
  • Row \(3\) contains integers from \(2 \times M+1\) to \(3 \times M\) from left to right.
  • And so on until row \(N\).

A domino is defined as two different tiles in the grid that touch by their sides. A domino is said to be tight if and only if the two numbers in the domino have a difference of exactly \(1\). Count the number of distinct tight dominoes in the grid.

Two dominoes are said to be distinct if and only if there exists at least one tile that is in one domino, but not in the other.

Input

The only line contains two integers \(N\) and \(M\) (\(1 \leq N, M \leq 10^9\)) — the number of rows and columns in the grid.

Output

An integer representing the number of distinct tight dominoes in the grid.

Note

The picture below is the grid that Pak Chanek has in the first example.

The picture below is an example of a tight domino in the grid.

C. Circular Mirror

Бинарный поиск геометрия Комбинаторика математика *2000

Pak Chanek has a mirror in the shape of a circle. There are \(N\) lamps on the circumference numbered from \(1\) to \(N\) in clockwise order. The length of the arc from lamp \(i\) to lamp \(i+1\) is \(D_i\) for \(1 \leq i \leq N-1\). Meanwhile, the length of the arc between lamp \(N\) and lamp \(1\) is \(D_N\).

Pak Chanek wants to colour the lamps with \(M\) different colours. Each lamp can be coloured with one of the \(M\) colours. However, there cannot be three different lamps such that the colours of the three lamps are the same and the triangle made by considering the three lamps as vertices is a right triangle (triangle with one of its angles being exactly \(90\) degrees).

The following are examples of lamp colouring configurations on the circular mirror.

Figure 1. an example of an incorrect colouring because lamps \(1\), \(2\), and \(3\) form a right triangleFigure 2. an example of a correct colouringFigure 3. an example of a correct colouring

Before colouring the lamps, Pak Chanek wants to know the number of distinct colouring configurations he can make. Count the number of distinct possible lamp colouring configurations, modulo \(998\,244\,353\).

Input

The first line contains two integers \(N\) and \(M\) (\(1 \le N \le 3 \cdot 10^5\), \(2 \le M \le 3 \cdot 10^5\)) — the number of lamps in the mirror and the number of different colours used.

The second line contains \(N\) integers \(D_1, D_2, \ldots, D_N\) (\(1 \le D_i \le 10^9\)) — the lengths of the arcs between the lamps in the mirror.

Output

An integer representing the number of possible lamp colouring configurations, modulo \(998\,244\,353\).

Note

In the first example, all correct lamp colouring configurations are \([1, 1, 2, 1]\), \([1, 1, 2, 2]\), \([1, 2, 1, 2]\), \([1, 2, 2, 1]\), \([1, 2, 2, 2]\), \([2, 1, 1, 1]\), \([2, 1, 1, 2]\), \([2, 1, 2, 1]\), \([2, 2, 1, 1]\), and \([2, 2, 1, 2]\).

D. Deducing Sortability

Бинарный поиск битмаски математика *2900

Let's say Pak Chanek has an array \(A\) consisting of \(N\) positive integers. Pak Chanek will do a number of operations. In each operation, Pak Chanek will do the following:

  1. Choose an index \(p\) (\(1 \leq p \leq N\)).
  2. Let \(c\) be the number of operations that have been done on index \(p\) before this operation.
  3. Decrease the value of \(A_p\) by \(2^c\).
  4. Multiply the value of \(A_p\) by \(2\).

After each operation, all elements of \(A\) must be positive integers.

An array \(A\) is said to be sortable if and only if Pak Chanek can do zero or more operations so that \(A_1 < A_2 < A_3 < A_4 < \ldots < A_N\).

Pak Chanek must find an array \(A\) that is sortable with length \(N\) such that \(A_1 + A_2 + A_3 + A_4 + \ldots + A_N\) is the minimum possible. If there are more than one possibilities, Pak Chanek must choose the array that is lexicographically minimum among them.

Pak Chanek must solve the following things:

  • Pak Chanek must print the value of \(A_1 + A_2 + A_3 + A_4 + \ldots + A_N\) for that array.
  • \(Q\) questions will be given. For the \(i\)-th question, an integer \(P_i\) is given. Pak Chanek must print the value of \(A_{P_i}\).

Help Pak Chanek solve the problem.

Note: an array \(B\) of size \(N\) is said to be lexicographically smaller than an array \(C\) that is also of size \(N\) if and only if there exists an index \(i\) such that \(B_i < C_i\) and for each \(j < i\), \(B_j = C_j\).

Input

The first line contains two integers \(N\) and \(Q\) (\(1 \leq N \leq 10^9\), \(0 \leq Q \leq \min(N, 10^5)\)) — the required length of array \(A\) and the number of questions.

The \(i\)-th of the next \(Q\) lines contains a single integer \(P_i\) (\(1 \leq P_1 < P_2 < \ldots < P_Q \leq N\)) — the index asked in the \(i\)-th question.

Output

Print \(Q+1\) lines. The \(1\)-st line contains an integer representing \(A_1 + A_2 + A_3 + A_4 + \ldots + A_N\). For each \(1 \leq i \leq Q\), the \((i+1)\)-th line contains an integer representing \(A_{P_i}\).

Note

In the first example, the array \(A\) obtained is \([1, 2, 3, 3, 4, 4]\). We can see that the array is sortable by doing the following operations:

  • Choose index \(5\), then \(A = [1, 2, 3, 3, 6, 4]\).
  • Choose index \(6\), then \(A = [1, 2, 3, 3, 6, 6]\).
  • Choose index \(4\), then \(A = [1, 2, 3, 4, 6, 6]\).
  • Choose index \(6\), then \(A = [1, 2, 3, 4, 6, 8]\).

E. Electrical Efficiency

Деревья дп Комбинаторика математика Структуры данных теория чисел *2500

In the country of Dengkleknesia, there are \(N\) factories numbered from \(1\) to \(N\). Factory \(i\) has an electrical coefficient of \(A_i\). There are also \(N-1\) power lines with the \(j\)-th power line connecting factory \(U_j\) and factory \(V_j\). It can be guaranteed that each factory in Dengkleknesia is connected to all other factories in Dengkleknesia through one or more power lines. In other words, the collection of factories forms a tree. Each pair of different factories in Dengkleknesia can use one or more existing power lines to transfer electricity to each other. However, each power line needs to be turned on first so that electricity can pass through it.

Define \(f(x, y, z)\) as the minimum number of power lines that need to be turned on so that factory \(x\) can make electrical transfers to factory \(y\) and factory \(z\). Also define \(g(x, y, z)\) as the number of distinct prime factors of \(\text{GCD}(A_x, A_y, A_z)\).

To measure the electrical efficiency, you must find the sum of \(f(x, y, z) \times g(x, y, z)\) for all combinations of \((x, y, z)\) such that \(1 \leq x < y < z \leq N\). Because the answer can be very large, you just need to output the answer modulo \(998\,244\,353\).

Note: \(\text{GCD}(k_1, k_2, k_3)\) is the greatest common divisor of \(k_1\), \(k_2\), and \(k_3\), which is the biggest integer that simultaneously divides \(k_1\), \(k_2\), and \(k_3\).

Input

The first line contains a single integer \(N\) (\(1 \le N \le 2 \cdot 10^5\)) — the number of factories in Dengkleknesia.

The second line contains \(N\) integers \(A_1, A_2, \dots, A_N\) (\(1 \leq A_i \leq 2 \cdot 10^5\)) — the electrical coefficients of the factories.

The \(j\)-th of the next \(N-1\) lines contains two integers \(U_j\) and \(V_j\) (\(1 \le U_j, V_j \le N\)) — a power line that connects cities \(U_j\) and \(V_j\). The collection of factories forms a tree.

Output

An integer representing the sum of \(f(x, y, z) \times g(x, y, z)\) for all combinations of \((x, y, z)\) such that \(1 \leq x < y < z \leq N\), modulo \(998\,244\,353\)

Note

In the first example, the only \((x, y, z)\) possible is \((1, 2, 3)\). Because \(\text{GCD}(A_1, A_2, A_3) = \text{GCD}(1, 2, 3) = 1\) has \(0\) distinct prime factors, therefore \(f(x, y, z) \times g(x, y, z) = 2 \times 0 = 0\).

In the second example, all triples \((x, y, z)\) that satisfy the condition are as follows:

  • \((1, 2, 3) \rightarrow f(1, 2, 3) \times g(1, 2, 3) = 2 \times 1 = 2\)
  • \((1, 2, 4) \rightarrow f(1, 2, 4) \times g(1, 2, 4) = 2 \times 1 = 2\)
  • \((1, 3, 4) \rightarrow f(1, 3, 4) \times g(1, 3, 4) = 3 \times 2 = 6\)
  • \((2, 3, 4) \rightarrow f(2, 3, 4) \times g(2, 3, 4) = 2 \times 1 = 2\)

So the electrical efficiency is \(2 + 2 + 6 + 2 = 12\).

G. Garage

Бинарный поиск геометрия математика *1500

Pak Chanek plans to build a garage. He wants the garage to consist of a square and a right triangle that are arranged like the following illustration.

Define \(a\) and \(b\) as the lengths of two of the sides in the right triangle as shown in the illustration. An integer \(x\) is suitable if and only if we can construct a garage with assigning positive integer values for the lengths \(a\) and \(b\) (\(a<b\)) so that the area of the square at the bottom is exactly \(x\). As a good friend of Pak Chanek, you are asked to help him find the \(N\)-th smallest suitable number.

Input

The only line contains a single integer \(N\) (\(1 \leq N \leq 10^9\)).

Output

An integer that represents the \(N\)-th smallest suitable number.

Note

The \(3\)-rd smallest suitable number is \(7\). A square area of \(7\) can be obtained by assigning \(a=3\) and \(b=4\).

H. Hot Black Hot White

Конструктив математика *1800

One day, you are accepted as being Dr. Chanek's assistant. The first task given by Dr. Chanek to you is to take care and store his magical stones.

Dr. Chanek has \(N\) magical stones with \(N\) being an even number. Those magical stones are numbered from \(1\) to \(N\). Magical stone \(i\) has a strength of \(A_i\). A magical stone can be painted with two colours, namely the colour black or the colour white. You are tasked to paint the magical stones with the colour black or white and store the magical stones into a magic box with a magic coefficient \(Z\) (\(0 \leq Z \leq 2\)). The painting of the magical stones must be done in a way such that there are \(\frac{N}{2}\) black magical stones and \(\frac{N}{2}\) white magical stones.

Define \(\text{concat}(x, y)\) for two integers \(x\) and \(y\) as the result of concatenating the digits of \(x\) to the left of \(y\) in their decimal representation without changing the order. As an example, \(\text{concat}(10, 24)\) will result in \(1024\).

For a magic box with a magic coefficient \(Z\), magical stone \(i\) will react with magical stone \(j\) if the colours of both stones are different and \(\text{concat}(A_i, A_j) \times \text{concat}(A_j, A_i) + A_i \times A_j \equiv Z \mod 3\). A magical stone that is reacting will be very hot and dangerous. Because of that, you must colour the magical stones and determine the magic coefficient \(Z\) of the magic box in a way such that there is no magical stone that reacts, or report if it is impossible.

Input

The first line contains a single even integer \(N\) (\(2 \le N \le 10^5\)) — the number of magical stones Dr. Chanek has.

The second line contains \(N\) integer \(A_1, A_2, \ldots, A_N\) (\(1 \leq A_i \leq 10^9\)) — the strengths of all magical stones.

Output

If it is not possible to satisfy the condition of the problem, output \(-1\).

Otherwise, output two lines. The first line contains an integer \(Z\) denoting the magic coefficient of the magic box. The second line contains a string \(S\) of length \(N\). \(S_i\) is \(0\) if magical stone \(i\) is coloured black or \(1\) if magical stone \(i\) is coloured white. If there are more than one possibilities of colouring and choosing the magic coefficient \(Z\), output any of them.

Note

By giving the above colouring, it can be seen that:

  • \(i=1, j=2 \longrightarrow \text{concat}(4, 10) \times \text{concat}(10, 4) + 10 \times 4 = 410 \times 104 + 40 = 42680 \equiv 2 \mod 3\)
  • \(i=1, j=3 \longrightarrow \text{concat}(4, 9) \times \text{concat}(9, 4) + 4 \times 9 = 49 \times 94 + 36 = 4642 \equiv 1 \mod 3\)
  • \(i=4, j=2 \longrightarrow \text{concat}(14, 10) \times \text{concat}(10, 14) + 10 \times 14 = 1410 \times 1014 + 140 = 1429880 \equiv 2 \mod 3\)
  • \(i=4, j=3 \longrightarrow \text{concat}(14, 9) \times \text{concat}(9, 14) + 14 \times 9 = 149 \times 914 + 126 = 136312 \equiv 1 \mod 3\)

Because of that, by choosing \(Z = 0\), it can be guaranteed that there is no magical stone that reacts.

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\).

B. Mainak и интересная последовательность

битмаски Конструктив математика *1100

У Mainak есть два положительных целых числа \(n\) и \(m\).

Mainak считает, что последовательность \(a_1, a_2, \ldots, a_n\) из \(n\) положительных целых чисел интересная, если для всех целых \(i\) (\(1 \le i \le n\)), побитовое исключающее ИЛИ всех элементов в \(a\), которые строго меньше \(a_i\), равно \(0\). Формально, \(p_i\) равно побитовому исключающему ИЛИ всех элементов в \(a\), которые строго меньше \(a_i\), тогда \(a\) является интересной последовательностью, если \(p_1 = p_2 = \ldots = p_n = 0\).

Например, последовательность \([1,3,2,3,1,2,3]\), \([4,4,4,4]\), \([25]\) являются интересными, тогда как \([1,2,3,4]\) (\(p_2 = 1 \ne 0\)), \([4,1,1,2,4]\) (\(p_1 = 1 \oplus 1 \oplus 2 = 2 \ne 0\)), \([29,30,30]\) (\(p_2 = 29 \ne 0\)) не являются интересными.

Здесь \(a \oplus b\) обозначает побитовое исключающее ИЛИ чисел \(a\) и \(b\).

Найдите любую интересную последовательность \(a_1, a_2, \ldots, a_n\) такую, что сумма элементов в последовательности \(a\) равна \(m\), т.е. \(a_1 + a_2 \ldots + a_n = m\), или же сообщите, что не существует такой последовательности

Заметьте, что побитовое исключающее ИЛИ пустой последовательности считается равным \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5\), \(1 \le m \le 10^9\)) — длину последовательности и сумму её элементов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если существует некоторая интересная последовательность, выведите «Yes» в первой строке, иначе выведите «No». Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Если ответ «Yes», выведите \(n\) положительных целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i \ge 1\)), образующих интересную последовательность такую, что \(a_1 + a_2 \ldots + a_n = m\). Если существует несколько решений, выведите любое.

Примечание
  • В первом наборе входных данных \([3]\) является единственной интересной последовательностью длины \(1\), имеющей сумму \(3\).
  • В третьем наборе входных данных не существует последовательности длины \(2\), имеющей сумму элементов \(1\), поэтому такой интересной последовательности тоже не существует.
  • В четвёртом наборе входных данных \(p_1 = p_2 = p_3 = 0\), потому что побитовое исключающее ИЛИ пустой последовательности равно \(0\).

E. Почти идеально

бпф Комбинаторика математика *2400

Перестановка \(p\) длины \(n\) называется почти идеальной, если для всех целых \(1 \leq i \leq n\), выполняется условие \(\lvert p_i - p^{-1}_i \rvert \le 1\), где \(p^{-1}\) является перестановкой обратной \(p\) (т.е. \(p^{-1}_{k_1} = k_2\) тогда и только тогда, когда \(p_{k_2} = k_1\)).

Посчитайте количество почти идеальных перестановок длины \(n\) по модулю \(998244353\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание каждого набора входных данных.

Первая и единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — длина перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество почти идеальных перестановок длины \(n\) по модулю \(998244353\).

Примечание

Для \(n = 2\), обе перестановки \([1, 2]\) и \([2, 1]\) являются почти идеальными.

Для \(n = 3\), есть только \(6\) перестановок. Взглянув на все из них, мы получаем:

  • \([1, 2, 3]\) является почти идеальной перестановкой.
  • \([1, 3, 2]\) является почти идеальной перестановкой.
  • \([2, 1, 3]\) является почти идеальной перестановкой.
  • \([2, 3, 1]\) НЕ является почти идеальной перестановкой (\(\lvert p_2 - p^{-1}_2 \rvert = \lvert 3 - 1 \rvert = 2\)).
  • \([3, 1, 2]\) НЕ является почти идеальной перестановкой (\(\lvert p_2 - p^{-1}_2 \rvert = \lvert 1 - 3 \rvert = 2\)).
  • \([3, 2, 1]\) является почти идеальной перестановкой.

Поэтому мы получаем \(4\) почти идеальные перестановки.

H. Mainak и кровоточащий многоугольник

Бинарный поиск геометрия математика реализация *3500

У Mainak есть выпуклый многоугольник \(\mathcal P\) с \(n\) вершинами, пронумерованными как \(A_1, A_2, \ldots, A_n\) против часовой стрелки. Координаты \(i\)-й точки \(A_i\) даны как \((x_i, y_i)\), где \(x_i\) и \(y_i\) являются целыми числами.

Кроме того, известно, что внутренний угол при \(A_i\) является либо прямым углом, либо правильным тупым углом. Формально, известно, что:

  • \(90 ^ \circ \le \angle A_{i - 1}A_{i}A_{i + 1} < 180 ^ \circ\), \(\forall i \in \{1, 2, \ldots, n\}\), где мы условно считаем \(A_0 = A_n\) и \(A_{n + 1} = A_1\).

Друг Mainak настаивал на том, чтобы все точки \(Q\) такие, что существует хорда многоугольника \(\mathcal P\), проходящая через \(Q\), длины не больше \(1\), должны быть покрашены в \(\color{red}{\text{красный}}\).

Mainak хочет, чтобы вы нашли площадь цветной области, образованной \(\color{red}{\text{красными}}\) точками.

Формально, определите площадь области \(\mathcal S = \{Q \in \mathcal{P}\) | \(Q \text{ покрашено в } \color{red}{\text{красный}}\}\).

Напомним, что хордой многоугольника называется отрезок между двумя точками, лежащими на границе (т.е. вершинами или точками на сторонах) многоугольника.

Входные данные

Первая строка содержит целое число \(n\) (\(4 \le n \le 5000\)) — количество вершин многоугольника \(\mathcal P\).

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты точки \(A_i\).

Гарантируется, что вершины образуют выпуклый многоугольник и перечислены в порядке против часовой стрелки. Также гарантируется, что все внутренние углы лежат в полуинтервале \([90 ^ \circ; 180 ^ \circ)\).

Выходные данные

Выведите площадь многоугольника, покрашенную в \(\color{red}{\text{красный}}\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-4}\).

Формально, пусть ваш ответ равен \(a\), и ответ жюри равен \(b\). Ваш ответ будет принят тогда и только тогда, когда \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-4}\).

Примечание

В первом примере многоугольник \(\mathcal P\) можно представить на декартовой плоскости как:

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\).

G. Освещение

Бинарный поиск битмаски дп Комбинаторика математика Перебор *2700

Рассмотрим отрезок \([0, d]\) координатной прямой. В этом отрезке \(n\) фонарей и \(m\) интересных точек.

Для каждого фонаря вы должны выбрать его мощность — целое число от \(0\) до \(d\) (включительно). Фонарь с координатой \(x\) освещает интересную точку с координатой \(y\), если \(|x - y|\) меньше либо равно мощности фонаря.

Способ выбрать мощности для всех фонарей является корректным, если каждая интересная точка освещена хотя бы одним фонарем.

Вам нужно обработать \(q\) запросов. Каждый запрос обозначается одним целым числом \(f_i\). Чтобы ответить на \(i\)-й запрос, вам нужно:

  • добавить фонарь в точку \(f_i\);
  • посчитать количество корректных способов назначить мощность каждому фонарю, и вывести это количество по модулю \(998244353\);
  • удалить только что добавленный фонарь.
Входные данные

В первой строке заданы три целых числа \(d\), \(n\) и \(m\) (\(4 \le d \le 3 \cdot 10^5\); \(1 \le n \le 2 \cdot 10^5\); \(1 \le m \le 16\)) — размер отрезка, количество фонарей и количество интересных точек, соответственно.

Во второй строке заданы \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \le l_i \le d - 1\)), где \(l_i\) — координата \(i\)-го фонаря.

В третьей строке заданы \(m\) целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_i \le d - 1\)), где \(p_i\) — координата \(i\)-й интересной точки.

В четвертой строке задано одно целое число \(q\) (\(1 \le q \le 5 \cdot 10^5\)) — количество запросов.

В пятой строке заданы \(q\) целых чисел \(f_1, f_2, \dots, f_q\) (\(1 \le f_i \le d - 1\)), где \(f_i\) — число, соответствующее \(i\)-му запросу.

Дополнительное ограничение на входные данные: при обработке каждого запроса ни в какой точке отрезка нету двух или более объектов (то есть не может быть ни двух фонарей с одинаковой координатой, ни двух интересных точек с одинаковой координатой, ни фонаря и интересной точки с одинаковой координатой).

Выходные данные

Для каждого запроса выведите ответ на него по модулю \(998244353\).

A. Два лифта

математика *800

Влад зашел в свой подъезд, сейчас он находится на \(1\)-м этаже. Он собрался вызвать лифт, чтобы подняться в свою квартиру.

В его подъезде всего два лифта. Владу точно известно, что:

  • первый лифт сейчас стоит на этаже \(a\) (он в настоящий момент неподвижен),
  • второй лифт находится на этаже \(b\) и едет на этаж \(c\) (\(b \ne c\)). Обратите внимание, если \(b=1\), то лифт уже уезжает с этажа \(1\) и Влад не успевает в него зайти пока тот не уехал.

Если вызвать первый лифт, то он сразу поедет на этаж \(1\). Если вызвать второй, то сначала он доедет до этажа \(c\) и уже потом поедет на этаж \(1\). На перемещение от этажа \(x\) к этажу \(y\) у каждого лифта уходит \(|x - y|\) секунд.

Влад хочет вызвать лифт, который приедет к нему быстрее. Помогите ему выбрать такой лифт.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют \(t\) строк, по три целых числа \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 10^8\), \(b \ne c\)) — номера этажей, описанных в условии.

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите:

  • \(1\), если лучше вызвать первый лифт;
  • \(2\), если лучше вызвать второй;
  • \(3\), если не важно какой лифт вызвать (оба лифта приедут за одинаковое время).
Примечание

В первом примере первый лифт уже стоит на этаже \(1\).

Во втором примере при вызове лифты перемещались бы следующим образом:

  • На момент вызова первый лифт находится на этаже \(3\), а второй на этаже \(1\), но уже едет на другой этаж;
  • через \(1\) секунду после вызова первый лифт оказался бы на этаже \(2\), второй тоже достиг бы этажа \(2\) и теперь может ехать на этаж \(1\);
  • через \(2\) секунды любой лифт доехал бы до этажа \(1\).

В третьем примере первый лифт приедет за \(2\) секунды, а второй за \(1\).

F. Кирей и линейная функция

математика хэши *1900

Задана строка \(s\) из десятичных цифр (0-9) длины \(n\).

Подстрока — это последовательность подряд идущих символов строки. Подстрока этой строки определяется парой индексов — своим левым и правым концами. Таким образом, каждой паре индексов (\(l, r\)), где \(1 \le l \le r \le n\), соответствует подстрока строки \(s\). Будем обозначать как \(v(l,r)\) числовое значение соответствующей подстроки (в ней допускаются лидирующие нули).

Например, если \(n=7\), \(s=\)«1003004», то \(v(1,3)=100\), \(v(2,3)=0\) и \(v(2,7)=3004\).

Вам заданы \(n\), \(s\) и целое число \(w\) (\(1 \le w < n\)).

Вам необходимо обработать \(m\) запросов, каждый из которых характеризуется \(3\) числами \(l_i, r_i, k_i\) (\(1 \le l_i \le r_i \le n; 0 \le k_i \le 8\)).

Ответом на \(i\)-й запрос является такая пара подстрок длины \(w\), что если обозначить их как \((L_1, L_1+w-1)\) и \((L_2, L_2+w-1)\), то:

  • \(L_1 \ne L_2\), то есть подстроки различны;
  • остаток при делении числа \(v(L_1, L_1+w-1) \cdot v(l_i, r_i) + v(L_2, L_2 + w - 1)\) на \(9\) равен \(k_i\).

Если существует много подходящих пар подстрок, то найдите такую пару, где \(L_1\) как можно меньше. Если и в этом случае существует много подходящих пар, то минимизируйте \(L_2\).

Обратите внимание, что ответа может не существовать.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первой строкой набора входных данных является \(s\), которая содержит только символы 0-9 и имеет длину \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит два целых числа \(w, m\) (\(1 \le w < n, 1 \le m \le 2 \cdot 10^5\)), где \(n\) — это длина заданной строки \(s\). Число \(w\) обозначает длины искомых подстрок, а \(m\) – количество запросов для обработки.

Следующие \(m\) строк содержат целые числа \(l_i, r_i, k_i\) (\(1 \le l_i \le r_i \le n\), \(0 \le k_i \le 8\)) — параметры запроса \(i\).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\). Также гарантируется, что сумма \(m\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса в отдельной строке выведите:

  • левые границы искомых подстрок: \(L_1\) и \(L_2\);
  • -1 -1 в противном случае, если решения не существует.

Если решений несколько, минимизируйте в первую очередь \(L_1\), и во вторую очередь минимизируйте \(L_2\).

Примечание

Рассмотрим первый набор входных данных примера. В этом наборе \(n=7\), \(s=\)«1003004», \(w=4\) и один запрос \(l_1=1\), \(r_1=2\), \(k_1=1\). Заметим, что \(v(1,2)=10\). Надо найти такую пару подстрок длины \(4\), что \(v(L_1, L_1+3)\cdot10+v(L_2,L_2+3)\) имеет остаток \(k_1=1\) при делении на \(9\). Значения \(L_1=2, L_2=4\) в самом деле удовлетворяют всем требованиям: \(v(L_1, L_1+w-1)=v(2,5)=30\), \(v(L_2, L_2+w-1)=v(4,7)=3004\). Действительно, \(30\cdot10+3004=3304\), что имеет остаток \(1\) при делении на \(9\). Можно показать, что \(L_1=2\) — минимальное возможное значение, а \(L_2=4\) — минимальное возможное при \(L_1=2\).

A. Шишки

математика реализация *1300

Никифор и Поликарп играют в игру камень-ножницы-бумага на щелбаны.

Напомним вам правила этой игры. В игру камень-ножницы-бумага играют двое. В каждом раунде игроки независимо друг от друга выбирают один из трех знаков, который изображают при помощи кисти руки: камень, ножницы или бумагу. Победитель определяется по следующим правилам: камень побеждает ножницы, ножницы побеждают бумагу, а бумага побеждает камень. Если игроки выбрали одинаковые знаки, то в данном раунде объявляется ничья.

Никифор и Поликарп уже сыграли ровно n раундов. При этом в каждом из раундов победитель щелкал по лбу проигравшему противнику, от чего у того на лбу появлялась шишка. В случае ничейного раунда игроки ничего не делали и продолжали играть дальше.

Оказалось, что Никифор действовал по следующей стратегии: перед началом игры он выбрал себе некоторую последовательность знаков A = (a1, a2, ..., am), после чего циклически показывал знаки из этой последовательности, начиная с первого из них. Циклически означает, что Никифор показывает знаки в следующем порядке a1, a2, ..., am, a1, a2, ..., am, a1, ... и так далее. Поликарп действовал по аналогичной стратегии, только, в качестве последовательности для выбора знаков, он выбрал свою последовательность B = (b1, b2, ..., bk).

Определите количество шишек на лбах обоих игроков после n раундов игры. Можно считать, что в начале игры шишек на лбах игроков не было.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 2·109) — количество раундов игры.

Во второй строке записана последовательность A в виде строки из m символов, а в третьей — последовательность B в виде строки из k символов (1 ≤ m, k ≤ 1000). Заданные строки состоят только из символов «R», «S» и «P». Символ «R» (от английского rock) означает знак камня, символ «S» (scissors) — ножниц, «P» (paper) — бумаги.

Выходные данные

Выведите два целых числа, разделяя их пробелом — количество шишек на лбу Никифора и количество шишек на лбу Поликарпа.

Примечание

В первом примере игра шла следующим образом:

  • R - R. Ничья.
  • P - S. Никифор проигрывает.
  • S - P. Поликарп проигрывает.
  • R - P. Никифор проигрывает.
  • P - R. Поликарп проигрывает.
  • S - S. Ничья.
  • R - P. Никифор проигрывает.

Итого у Никифора 3 поражения (3 шишки), а у Поликарпа только 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\).

C. Четные подмассивы

битмаски математика Перебор теория чисел хэши *1700

Вам задан целочисленный массив \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Определите количество подмассивов \(a\), у которых \(\operatorname{XOR}\) имеет четное количество делителей. Другими словами, определите количество пар индексов \((i, j)\) (\(i \le j\)) таких, что \(a_i \oplus a_{i + 1} \oplus \dots \oplus a_j\) имеет четное количество делителей.

Например, числа \(2\), \(3\), \(5\) или \(6\) имеют четное количество делителей, а \(1\) и \(4\) — нечетное. Считайте, что для данной задачи \(0\) имеет нечетное количество делителей.

Здесь \(\operatorname{XOR}\) (или \(\oplus\)) обозначает операцию побитового исключающего ИЛИ.

Выведите количество подмассивов, но умноженное на 2022... Так, давайте закончим. Просто выведите сам ответ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Гарантируется, что сумма \(n\) по всем набора входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество подмассивов, \(\operatorname{XOR}\) которых имеет четное количество делителей.

Примечание

В первом наборе входных данных есть \(4\) подмассива, \(\operatorname{XOR}\) которых имеет четное количество делителей: \([3]\), \([3,1]\), \([1,2]\), \([2]\).

Во втором наборе есть \(11\) подмассивов, \(\operatorname{XOR}\) которых имеет четное количество делителей: \([4,2]\), \([4,2,1]\), \([4,2,1,5]\), \([2]\), \([2,1]\), \([2,1,5]\), \([2,1,5,3]\), \([1,5,3]\), \([5]\), \([5,3]\), \([3]\).

В третьем наборе нет подмассивов, \(\operatorname{XOR}\) которых имеет четное количество делителей, так как \(\operatorname{XOR}\) любого подмассива равен либо \(4\), либо \(0\).

E. Стоимость графа

дп жадные алгоритмы математика теория чисел *2000

Вам задан первоначально пустой неориентированный граф из \(n\) вершин, пронумерованных от \(1\) по \(n\) (т. е. \(n\) вершин и \(0\) ребер). Вы хотите добавить в него \(m\) ребер так, чтобы граф не содержал петель и кратных ребер.

Если будет добавлено ребро, соединяющее две вершины \(u\) и \(v\), его вес должен быть равен наибольшему общему делителю \(u\) и \(v\), т. е. \(\gcd(u, v)\).

Для того чтобы добавлять ребра в граф, вы можете повторять следующую операцию произвольное количество раз (возможно, ни разу):

  • выбираете целое число \(k \ge 1\);
  • добавляете ровно \(k\) ребер в граф, каждое веса \(k + 1\). Добавление этих \(k\) ребер суммарно стоит \(k + 1\).
Заметим, что вы не можете создавать петли или кратные ребра. А потому, если вы не можете добавить \(k\) ребер веса \(k + 1\), вы не можете выбрать такое \(k\).

Например, если вы можете добавить еще \(5\) ребер веса \(6\), вы можете их добавить в граф, и добавление будет стоить \(6\) за всю группу из \(5\) ребер. Однако если вы можете добавить только \(4\) ребра веса \(6\) в граф, вы не можете выполнить данную операцию для \(k = 5\).

Для заданных \(n\) и \(m\), посчитайте минимальную суммарную стоимость создания графа из \(n\) вершин и ровно \(m\) ребер, используя описанную выше операцию. Если построить такой граф нельзя, выведите \(-1\).

Заметим, что результирующий граф может состоять из нескольких компонент связности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой и единственной строке заданы два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^6\); \(1 \leq m \leq \frac{n(n-1)}{2}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите наименьшую стоимость построения графа или \(-1\), если такой граф построить нельзя.

Примечание

В первом наборе входных данных, мы можем добавить одно ребро между вершинами \(2\) и \(4\) с \(\gcd = 2\). Это единственный способ добавить \(1\) ребро, и он будет стоить \(2\).

Во втором наборе, невозможно добавить \(10\) ребер, а потому ответ \(-1\).

В третьем наборе, мы можем добавить следующие ребра:

  • \(k = 1\): ребро веса \(2\) между вершинами \(2\) и \(4\) (\(\gcd(2, 4) = 2\)). Стоимость: \(2\);
  • \(k = 1\): ребро веса \(2\) между вершинами \(4\) и \(6\) (\(\gcd(4, 6) = 2\)). Стоимость: \(2\);
  • \(k = 2\): ребра веса \(3\): \((3, 6)\) и \((3, 9)\) (\(\gcd(3, 6) = \gcd(3, 9) = 3\)). Стоимость: \(3\).
В результате мы добавили \(1 + 1 + 2 = 4\) ребра с общей стоимостью \(2 + 2 + 3 = 7\), что является оптимальным ответом.

F. Сумма функций

бпф дп Комбинаторика математика Перебор *2500

Предположим, вам задан целочисленный массив \(a_1, a_2, \dots, a_n\).

Пусть \(\operatorname{lsl}(i)\) равно количеству индексов \(j\) (\(1 \le j < i\)) таких, что \(a_j < a_i\).

Аналогично, пусть \(\operatorname{grr}(i)\) равно количеству индексов \(j\) (\(i < j \le n\)) таких, что \(a_j > a_i\).

Назовем позицию \(i\) в массиве \(a\) хорошей, если \(\operatorname{lsl}(i) < \operatorname{grr}(i)\).

Наконец, определим функцию \(f\) на массиве \(a\) \(f(a)\) как сумму всех \(a_i\) таких, что \(i\) — хорошая в \(a\).

Для заданных целых чисел \(n\) и \(k\), посчитайте сумму \(f(a)\) по всем массивам \(a\) размера \(n\) таких, что \(1 \leq a_i \leq k\) для всех \(1 \leq i \leq n\), по модулю \(998\,244\,353\).

Входные данные

В первой и единственной строке заданы два целых числа \(n\) и \(k\) (\(1 \leq n \leq 50\); \(2 \leq k < 998\,244\,353\)).

Выходные данные

Выведите единственное число — сумму \(f\) по всем массивам \(a\) размера \(n\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

\(f([1,1,1]) = 0\)\(f([2,2,3]) = 2 + 2 = 4\)
\(f([1,1,2]) = 1 + 1 = 2\)\(f([2,3,1]) = 2\)
\(f([1,1,3]) = 1 + 1 = 2\)\(f([2,3,2]) = 2\)
\(f([1,2,1]) = 1\)\(f([2,3,3]) = 2\)
\(f([1,2,2]) = 1\)\(f([3,1,1]) = 0\)
\(f([1,2,3]) = 1\)\(f([3,1,2]) = 1\)
\(f([1,3,1]) = 1\)\(f([3,1,3]) = 1\)
\(f([1,3,2]) = 1\)\(f([3,2,1]) = 0\)
\(f([1,3,3]) = 1\)\(f([3,2,2]) = 0\)
\(f([2,1,1]) = 0\)\(f([3,2,3]) = 2\)
\(f([2,1,2]) = 1\)\(f([3,3,1]) = 0\)
\(f([2,1,3]) = 2 + 1 = 3\)\(f([3,3,2]) = 0\)
\(f([2,2,1]) = 0\)\(f([3,3,3]) = 0\)
\(f([2,2,2]) = 0\)

Сложив все значения, получаем ответ, равный \(28\).

A. Bestie

Комбинаторика Конструктив математика Перебор реализация теория чисел *1000

Вам дан массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Друзья попросили вас сделать наибольший общий делитель (НОД) всех элементов массива равным \(1\). За одну операцию вы можете сделать следующее:

  • Выбрать произвольный индекс в массиве \(1 \leq i \leq n\);
  • Сделать \(a_i = \gcd(a_i, i)\), где \(\gcd(x, y)\) обозначает НОД чисел \(x\) и \(y\). Стоимость такой операции равна \(n - i + 1\).

Вам нужно найти минимальную суммарную стоимость операций, которые нужно сделать, чтобы НОД всех элементов массива стал равен \(1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 5\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 20\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальную суммарную стоимость операций, которые нужно сделать, чтобы НОД всех элементов массива стал равен \(1\).

Можно показать, что это всегда можно сделать.

Примечание

В первом наборе входных данных НОД всего массива уже равен \(1\), поэтому операции применять не нужно.

Во втором наборе входных данных можно выбрать \(i = 1\). После этой операции \(a_1 = \gcd(2, 1) = 1\). Стоимость этой операции равна \(1\).

В третьем наборе входных данных можно выбрать \(i = 1\), после этого массив \(a\) будет равен \([1, 4]\). НОД этого массива равен \(1\), а суммарная стоимость равна \(2\).

В четвертом наборе входных данных можно выбрать \(i = 2\), после этого массив \(a\) будет равен \([3, 2, 9]\). НОД этого массива равен \(1\), а суммарная стоимость равна \(2\).

В шестом наборе входных данных можно выбрать \(i = 4\) и \(i = 5\), после этого массив \(a\) будет равен \([120, 60, 80, 4, 5]\). НОД этого массива равен \(1\), а суммарная стоимость равна \(3\).

E. Локация

дп математика Структуры данных теория чисел *2800

Вам даны два массива целых чисел \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\). Вам нужно обработать \(q\) запросов двух типов:

  • \(1\) \(l\) \(r\) \(x\): присвоить \(a_i := x\) для всех \(l \leq i \leq r\);
  • \(2\) \(l\) \(r\): найти минимальное значение следующего выражения по всем \(l \leq i \leq r\): \(\)\frac{\operatorname{lcm}(a_i, b_i)}{\gcd(a_i, b_i)}.\(\)

В данной задаче \(\gcd(x, y)\) обозначает наибольший общий делитель чисел \(x\) и \(y\), а \(\operatorname{lcm}(x, y)\) обозначает наименьшее общее кратное чисел \(x\) и \(y\)

Входные данные

В первой строке находятся два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 5 \cdot 10^4\)) — количество чисел в массивах \(a\) и \(b\) и количество запросов.

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 5 \cdot 10^4\)) — элементы массива \(a\).

В третьей строке находятся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 5 \cdot 10^4\)) — элементы массива \(b\).

Далее следует \(q\) строк, \(j\)-я из которых начинается с целого числа \(t_j\) (\(1 \leq t_j \leq 2\)) и означает, что \(j\)-й запрос имеет тип \(t_j\).

Если \(t_j = 1\), то остальная часть строки содержит целые числа \(l_j\), \(r_j\) и \(x_j\) (\(1 \leq l_j \leq r_j \leq n\), \(1 \leq x_j \leq 5 \cdot 10^4\)).

Если \(t_j = 2\), то остальная часть строки содержит целые числа \(l_j\) и \(r_j\) (\(1 \leq l_j \leq r_j \leq n\)).

Гарантируется, что есть хотя бы один запрос типа \(2\).

Выходные данные

Для каждого запроса второго типа выведите ответ на задачу.

Примечание

В первом примере:

  • Для первого запроса мы можем выбрать \(i = 4\). Тогда значение равно \(\frac{\operatorname{lcm}(4, 4)}{\gcd(4, 4)} = \frac{4}{4} = 1\).
  • После второго запроса массив \(a = [6, 10, 15, 4, 9, 25, 9, 9, 9, 9]\).
  • Для третьего запроса мы можем выбрать \(i = 9\). Тогда значение равно \(\frac{\operatorname{lcm}(9, 18)}{\gcd(9, 18)} = \frac{18}{9} = 2\).

Во втором примере:

  • Для первого запроса мы можем выбрать \(i = 4\). Тогда значение равно \(\frac{\operatorname{lcm}(1, 5)}{\gcd(1, 5)} = \frac{5}{1} = 5\).
  • После второго запроса массив \(a = [10, 18, 18, 5]\).
  • После третьего запроса массив \(a = [10, 10, 18, 5]\).
  • Для четвёртого запроса мы можем выбрать \(i = 2\). Тогда значение равно \(\frac{\operatorname{lcm}(10, 12)}{\gcd(10, 12)} = \frac{60}{2} = 30\).

B. Правило лиги

Конструктив математика *900

Есть чемпионат по бадминтону, в котором принимают участие \(n\) игроков. Игроки пронумерованы от \(1\) до \(n\).

Чемпионата проходит следующим образом: игрок \(1\) и игрок \(2\) играют игру, потом победитель и игрок \(3\) играют игру, потом победитель и игрок \(4\) играют игру и так далее. В итоге будет сыграно \(n-1\) игр, и победитель последней игры становится чемпионом. В играх нет ничьих.

Вы хотите узнать результат чемпионата. В настоящее время вы знаете только следующую информацию:

  • Каждый игрок выиграл \(x\) игр или \(y\) игр в чемпионате.

По данным \(n\), \(x\) и \(y\), выясните, есть ли результат, соответствующий этой информации.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(x\), \(y\) (\(2 \le n \le 10^5\), \(0 \le x, y < n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите ответ для каждого набора входных данных, по одному в строке. Если нет результата, соответствующего заданной информации о \(n\), \(x\), \(y\), выведите \(-1\). В противном случае выведите \(n-1\) целое число через пробел, где \(i\)-е число означает номер игрока победителя \(i\)-й игры.

Если допустимых результатов несколько, выведите любой.

Примечание

В первом примере игрок \(1\) и игрок \(4\) выиграли \(x\) раз, игрок \(2\) и игрок \(3\) выиграли \(y\) раз.

Во втором, третьем и пятый примерах не существует допустимого результата.

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\).

В четвертом примере строки изначально равны, поэтому оптимально не выполнять никаких операции.

E. Конвейер

дп Конструктив математика *2700

Есть конвейер со \(120\) строками и \(120\) столбцами. Каждая строка и столбец пронумерованы от \(0\) до \(119\), а ячейка в \(i\)-й строке и \(j\)-й столбце обозначена как \((i, j)\). Самая верхняя левая ячейка обозначается \((0, 0)\). Каждая ячейка имеет маленькую конвейерную ленту, и изначально лента в каждой ячейке направлена вправо.

Изначально в ячейке \((0, 0)\) находится слайм, а остальные ячейки пусты. Каждую секунду состояние конвейера меняется следующим образом.

  • Все шарики слизи на конвейере одновременно перемещаются на одну клетку в направлении ленты конвейера в текущей ячейке. Если новая позиция находится снаружи конвейера, слайм выпадает с конвейера, а если два слайма перемещаются в одну и ту же ячейку, они сливаются в один.
  • Все клетки, в которых в предыдущую секунды были слаймы, меняю направление конвейерной ленты: ленты, обращенные вправо, становятся обращенными вниз, и наоборот.
  • На ячейку \((0, 0)\) помещается новый слайм.

Даны \(q\) запросов, каждый состоит из трех целых чисел \(t\), \(x\) и \(y\). Вы должны определить, есть ли слайм в клетке \((x, y)\) спустя \(t\) секунд после начала. Сможете ли вы сделать это?

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество запросов.

Единственная строка каждого запроса содержит три целых числа \(t\), \(x\) и \(y\) (\(0 \le t \le 10^{18}\), \(0 \le x, y < 120\)).

Выходные данные

Выведите ответ для каждого запроса по одному в строке. Если в ячейке \((x, y)\) через \(t\) секунд после исходного состояния находится слайм, выведите «YES». В противном случае выведите «NO».

Примечание

Состояние конвейера при \(t = 0\). Красная стрелка представляет направление каждой ленты, а синие отметки показывают положения слаймов.

Состояние конвейера при \(t = 1\).

Состояние конвейера при \(t = 2\).

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\).

F. Нули и единицы

битмаски дп математика разделяй и властвуй *2500

Пусть \(S\) — это строка Туэ-Морса. Другими словами, \(S\) — это пронумерованная с \(0\) бинарная строка бесконечной длины, построенная следующим образом:

  • Изначально \(S\) равна «0».
  • Затем мы повторяем следующую операцию бесконечно много раз: конкатенируем \(S\) с ее копией, в которой все биты заменены на противоположные по значению.

    Например, ниже показаны первые четыре операции:

    Номер операции\(S\) до операции\(S\) до операции с заменой битСконкатенированная \(S\)
    10101
    201100110
    30110100101101001
    401101001100101100110100110010110
    \(\ldots\)\(\ldots\)\(\ldots\)\(\ldots\)

Вам даны два положительных числа \(n\) и \(m\). Найдите количество позиций, в которых отличаются строки \(S_0 S_1 \ldots S_{m-1}\) и \(S_n S_{n + 1} \ldots S_{n + m - 1}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора содержит два положительных числа \(n\) и \(m\) (\(1 \leq n,m \leq 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество позиций, в которых отличаются данные строки.

Примечание

Строка \(S\) равна 0110100110010110....

В первом примере \(S_0\) это «0», а \(S_1\) это «1». Эти строки отличаются в \(1\) позиции.

Во втором примере \(S_0 S_1 \ldots S_9\) это «0110100110», а \(S_5 S_6 \ldots S_{14}\) это «0011001011». Эти строки отличаются в \(6\) позициях.

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\) действия, можно показать, что это минимальное количество действий.

D. Мета-cет

Комбинаторика математика Перебор Структуры данных хэши *1700

Вы любите настольную карточную игру «Сет». Каждая карта содержит \(k\) характеристик, каждая из которых может принимать значения из набора \(\{0, 1, 2\}\). В колоде содержатся все возможные варианты карт по одному разу, то есть всего \(3^k\) различных карт.

Для тройки карт характеристика является хорошей, если она совпадает у всех трех карт, либо у всех трех попарно различается. Тройка карт называется сетом, если все \(k\) характеристик для них являются хорошими.

Например, карты \((0, 0, 0)\), \((0, 2, 1)\) и \((0, 1, 2)\) образуют сет, а карты \((0, 2, 2)\), \((2, 1, 2)\) и \((1, 2, 0)\) — нет, так как, например, последняя характеристика не является хорошей.

Группа из пяти карт называется мета-сетом, если среди этих карт строго больше одного сета. Сколько существует мета-сетов среди данных \(n\) различных карт?

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^3\), \(1 \le k \le 20\)) — количество карт на столе и количество характеристик у каждой карты. Далее следуют \(n\) строк, описывающие характеристики карт перед вами.

Каждая строка, описывающая карту, содержит \(k\) целых чисел \(c_{i, 1}, c_{i, 2}, \ldots, c_{i, k}\) (\(0 \le c_{i, j} \le 2\)) — характеристики карты. Гарантируется, что все карты различны.

Выходные данные

Выведите одно число — количество мета-сетов.

Примечание

Будем изображать карты из примеров, указывая первые четыре характеристики. Первая характеристика будет обозначать количество объектов на карте: \(1\), \(2\), \(3\). Вторая характеристика — цвет: красный, зеленый, фиолетовый. Третья — форму: овал, ромб, волну. Четвертая — заполнение: контур, штрихованная, закрашенная.

Ниже нарисованы первые три теста. Для первых двух тестов выделены пятерки карт, которые являются мета-сетами.

В первом тесте мета-сетом является пятерка карт \((0000,\ 0001,\ 0002,\ 0010,\ 0020)\). Сетами в нем являются тройки: \((0000,\ 0001,\ 0002)\) и \((0000,\ 0010,\ 0020)\). Также сетом является тройка \((0100,\ 1000,\ 2200)\), которая не принадлежит ни одному мета-сету.

Во втором тесте мета-сетами являются пятерки: \((0000,\ 0001,\ 0002,\ 0010,\ 0020)\), \((0000,\ 0001,\ 0002,\ 0100,\ 0200)\), \((0000,\ 0010,\ 0020,\ 0100,\ 0200)\).

В третьем тесте \(54\) мета-сета.

B. Играем с НОД

математика теория чисел *1200

Вам дан массив целых чисел \(a\) длины \(n\).

Существует ли массив \(b\) из \(n+1\) положительного целого числа такой, что \(a_i=\gcd (b_i,b_{i+1})\) для всех \(i\) (\(1 \leq i \leq n\))?

Здесь \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^4\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует подходящий массив \(b\), иначе выведите «NO». Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом примере можно взять \(b=[343,343]\).

Во втором примере один из подходящих массивов \(b\) это \(b=[12,8,6]\).

В третьем примере можно показать, что не существует массива \(b\), удовлетворяющего условиям.

B. Фитнес Элы и роскошные числа

Бинарный поиск математика реализация *1300

Работая в DTL, Эла тщательно следит за своим физическим и психическим здоровьем. Она начала заниматься различными видами спорта, такими как стрельба из лука, йога и футбол.

С тех пор, как Эла начала заниматься спортом, Эла переключается на новый вид спорта в те дни, которые она считает «роскошными». Пусть очередной день является \(x\)-м по порядку с начала занятий (дни нумеруются с единицы, то есть начальный день занятий является \(1\)-м). Этот день является «роскошным», если \(x\) нацело делится на \({\lfloor \sqrt{x} \rfloor}\)

Здесь \(\lfloor r \rfloor\) обозначает округление вниз действительного числа \(r\). Другими словами, это наибольшее целое число, не превышающее \(r\). \(x\)

Например: \(8\)-й, \(56\)-й, \(100\)-й дни — «роскошные», так как \(8\) делится на \(\lfloor \sqrt{8} \rfloor = \lfloor 2.8284 \rfloor = 2\), \(56\) делится на \(\lfloor \sqrt{56} \rfloor = \lfloor 7.4833 \rfloor = 7\) и \(100\) делится на \(\lfloor \sqrt{100} \rfloor = \lfloor 10 \rfloor = 10\). С другой стороны, \(5\)-й или \(40\)-й дни не являются таковыми, поскольку \(5\) не делится на \(\lfloor \sqrt{5} \rfloor = \lfloor 2.2361 \rfloor = 2\), а \(40\) не делится на \(\lfloor \sqrt{40} \rfloor = \lfloor 6.3246 \rfloor = 6\).

Будучи другом Элы, вы хотите заниматься с ней этими фитнес-мероприятиями, чтобы держать ее и себя в тонусе (и, конечно, повеселиться вместе). Ответьте на несколько вопросов, сколько раз Эла меняет вид спорта с \(l\) по \(r\) дни включительно?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\ 000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 10^{18}\)) — границы интервала, на котором вам нужно узнать, сколько раз Эла поменяет вид спорта.

Выходные данные

Для каждого набора входных данных выведите ответ на задачу.

Примечание

В первом наборе входных данных есть \(5\) «роскошных» чисел на интервале \([8, 19]\): \(8, 9, 12, 15, 16\).

C. Эла и сверчки

игры Конструктив математика реализация *1500

Эла очень любит шахматы. Во время перерывов на работе она обычно вызывает своего коллегу по DTL на шахматные дуэли. Она не эксперт в классических шахматах, но ее очень интересуют разные нестандартные варианты шахмат, где нужно адаптироваться к новым правилам и проверить свое тактическое мышление, чтобы выиграть партию.

Задача, которая включает в себя нестандартный тип шахматных фигур, описанный ниже, гласит: даны \(3\) белых сверчка на доске \(n \cdot n\), расположенных в форме буквы «L» рядом друг с другом. Других фигур на доске нет. Эла хочет знать, может ли она за конечное количество ходов поставить какого-либо белого сверчка на клетку на горизонтали \(x\) и на вертикали \(y\)?

Расположение фигур в форме буквы «L» может быть только одним из следующих:

Для простоты опишем правила для сверчков на доске, где находятся только три белых сверчка. Он может перемещаться по горизонтали, вертикали или диагонали, но только перепрыгнув через ровно одного другого сверчка на клетку сразу за ним. Если поле сразу за сверчком, через которого он перепрыгивает, не занято, сверчок займет это поле. В противном случае (когда оно уже занято другим сверчком или отсутствует) сверчок не может сделать такой ход.

Для лучшего понимания, смотрите примеры ходов сверчка в описании к примеру.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 10^5\)) — размер шахматной доски.

Вторая строка каждого набора входных данных содержит шесть чисел: \(r_1\), \(c_1\), \(r_2\), \(c_2\), \(r_3\), \(c_3\) (\(1 \le r_1, c_1, r_2, c_2, r_3, c_3 \le n\)) — координаты сверчков. Ввод гарантирует, что три сверчка расположены в форме буквы «L», одним из способов, которые показаны в условии.

Третья строка каждого набора входных данных содержит 2 числа: \(x\), \(y\) (\(1 \le x, y \le n\)) — координаты клетки, куда надо поставить сверчка.

Выходные данные

Для каждого набора входных данных выведите «YES», если Эла может поставить сверчка на требуемую клетку, и «NO» иначе

Примечание

Решение для первого примера. Сверчка нужно поставить в красную клетку. Обратите внимание, что в шахматах горизонтали нумеруются снизу вверх, как и на этой картинке.

E. Эла идет в поход

дп Комбинаторика математика Теория вероятностей *2500

Эла любит ходить в походы. Она любит природу и исследует различных животных. Однажды она увидела муравьев странного вида с каннибальскими наклонностями. В частности, муравей такого вида съест любого меньшего муравья, которого он увидит.

Заинтересовавшись этой особенностью, Эла решила провести эксперимент.

Она посадила \(n\) муравьев-каннибалов в ряд на длинной деревянной палке. Изначально все муравьи имеют одинаковый вес \(1\). Расстояние между любыми двумя соседними муравьями одинаково. Расстояния между первым муравьем в цепочке до левого конца палки и последним муравьем в цепочке до правого конца палки также одинаковы и равны расстоянию между двумя соседними муравьями. В какой-то момент каждый муравей начинает двигаться влево либо вправо равновероятно случайным образом с одной и той же постоянной для всех муравьев скоростью на протяжении всего эксперимента. Муравьи поворачиваются в обратную сторону сразу же, как только достигнут конца палки. Вскоре Эле удалось выяснить поведение муравьев в случае встречи.

  • Если два муравья разного веса встретятся, более тяжелый мгновенно съест более легкого и увеличит свой вес на вес более легкого. После этого он продолжит идти в том же направлении. Например, если более тяжелый муравей имеет вес \(x\) и идет вправо, а более легкий имеет вес \(y\) и идет влево (\(x > y\)), то после встречи более легкий будет съеден, а более тяжелый будет иметь вес \(x + y\) и продолжит идти вправо.
  • Если два муравья одного веса встретятся, то тот, кто идет влево, мгновенно съест того, кто идет вправо, а затем продолжит идти в том же направлении. Другими словами, если один муравей веса \(x\), идущий влево, встретится с другим муравьем веса \(x\), идущим вправо, то муравей, идущий вправо, будет съеден, а идущий влево будет весить \(2x\) и продолжит двигаться влево.

Заметьте, что два муравья могут встретиться, только если идут в разные стороны

Можно доказать, что через определенное время останется только один муравей. Изначально каждый муравей будет случайным образом равновероятно двигаться влево или вправо, что порождает \(2^n\) различных случаев начального движения. Для каждого муравья вычислите вероятность того, что он в итоге выживет. Выведите ее по модулю \(10^9 + 7\).

Формально, пусть \(M = 10^9 + 7\). Можно показать, что ответ можно представить в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, а \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество муравьев в эксперименте.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого теста выведите \(n\) строк. В \(i\)-й строке выведите единственное число, обозначающее вероятность выживания \(i\)-го муравья в строке по модулю \(10^9 + 7\).

Примечание

В примере на ветке находятся \(6\) муравьев. Движение муравья будет обозначаться для удобства либо символом \(L\), либо \(R\). Пусть муравьи на ветке будут двигаться как \(RLRRLR\). Вот как они ведут себя после этого:

Первоначально муравьи располагаются, как указано выше.

Через некоторое время муравей с индексом \(2\) (идущий влево) встретится с муравьем с индексом \(1\) (идущий вправо). Два муравья имеют одинаковый вес, поэтому муравей \(2\) съест муравья \(1\) и будет иметь вес \(2\). То же самое произойдет с муравьем \(5\) и муравьем \(4\).

Муравей \(6\) дойдет до конца палки, тем самым изменив свое направление.

После этого муравей с индексом \(5\) встретится с муравьем с индексом \(3\). Поскольку муравей \(5\) тяжелее (вес \(2\)), чем муравей \(3\) (вес \(1\)), муравей \(5\) съест муравья \(3\) и будет иметь вес \(3\).

Муравей \(2\) дойдет до конца палки, тем самым изменив свое направление.

После этого муравей с индексом \(5\) встретится с муравьем с индексом \(2\). Поскольку муравей \(5\) тяжелее (вес \(3\)), чем муравей \(2\) (вес \(2\)), муравей \(5\) съест муравья \(2\) и наберет вес \(5\).

Наконец, после того, как муравей \(5\) дойдет до конца ветки и изменит направление, муравей \(5\) съест муравья \(6\) и останется последним оставшимся муравьем.

F. Эла и GCD и простые числа

Конструктив математика теория чисел *3300

После долгого, тяжелого, но плодотворного дня в DTL Эла счастливая возвращается домой. Она отдыхает, решая задачи по соревновательному программированию. Сейчас она предпочитает короткие условия, потому что на работе уже прочитала слишком много кода и документации.

Вам дано целое число \(c\). Предположим, что \(c\) имеет \(n\) делителей. Вам нужно найти последовательность из \(n - 1\) целого числа \([a_1, a_2, ... a_{n - 1}]\), удовлетворяющую следующим условиям:

  • Каждый элемент последовательности строго больше \(1\).
  • Каждый элемент последовательности является делителем \(c\).
  • Все элементы последовательности различны.
  • Для всех \(1 \le i < n - 1\) \(\gcd(a_i, a_{i + 1})\) является простым числом.

В этой задаче, так как число \(c\) может быть слишком большим, задано не само число \(c\), а его факторизация.

\(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) целых чисел \(x\) и \(y\), а простое число — это натуральное число, имеющее ровно \(2\) делителя.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке каждого набора входных данных дано одно целое число \(m\) (\(1 \le m \le 16\)) — количество простых множителей \(c\).

Вторая строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i < 2^{20}\))  — показатели степени входящих в \(c\) простых чисел, так что \(c = p_1^{b_1} \cdot p_2^{b_2} \cdot \ldots \cdot p_m^{b_m}\) и \(n = (b_1 + 1)(b_2 + 1) \ldots (b_m + 1)\). \(p_i\)\(i\)-е наименьшее простое число.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2^{20}\).

Выходные данные

Выведите ответ для каждого теста, по одному в строке. Если искомой последовательности для данного \(c\) не существует, выведите \(-1\).

В противном случае, выведите \(n - 1\) строк. В \(i\)-й строке выведите через пробел \(m\) целых чисел. \(j\)-е целое число \(i\)-й строки равно показателю степени \(j\)-го простого числа для \(a_i\).

Если ответов несколько, выведите любой из них.

Примечание

В наборах входных данных значения \(c\) равны \(6\), \(2\), \(30\), \(16\) и \(12\) в указанном порядке.

В первом наборе входных данных \(1\), \(2\), \(3\), \(6\) являются делителями числа \(6\). Подходящие последовательности — \([2, 6, 3]\) и \([3, 6, 2]\). Например, перестановка \([3, 2, 6]\) не подходит, поскольку \(\gcd(a_1, a_2) = 1\) не является простым числом.

В четвертом наборе входных данных \(1\), \(2\), \(4\), \(8\), \(16\) являются делителями числа \(16\). Среди перестановок последовательности \([2, 4, 8, 16]\) не существует ответа.

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» (без кавычек) в противном случае.

Примечание

В первом примере Алиса всегда выбирает два нечетных числа, Таким образом, сумма выбранных ей чисел всегда четна, а значит она побеждает.

В третьем примере у Боба есть выигрышная стратегия, заключающаяся в том, что он всегда выбирает число той же четности, что и Алиса в свой последний ход. Следовательно, Боб всегда выигрывает.

В четвертом примере Алиса всегда выбирает два четных числа, Таким образом, сумма выбранных ей чисел всегда четна, а значит она побеждает.

E. Упоротый баланс

дп Комбинаторика математика *2300

Дана последовательность \(a_1, a_2, \dots, a_n\) длины \(n\), ваша задача посчитать число, по модулю \(998244353\), способов разбить ее на несколько не пустых непрерывных подпоследовательностей так, что сумма элементов в подпоследовательностях является сбалансированной последовательностью.

Последовательность \(s_1, s_2, \dots, s_k\) длины \(k\) является сбалансированной, если \(s_{i} = s_{k-i+1}\) для всех \(1 \leq i \leq k\). Например, \([1, 2, 3, 2, 1]\) и \([1,3,3,1]\) сбалансированный, а \([1,5,15]\) нет.

Формально, каждое разбиение может быть описано последовательностью индексов \(i_1, i_2, \dots, i_k\) длины \(k\) и \(1 = i_1 < i_2 < \dots < i_k \leq n\) такое, что

  1. \(k\) является числом непустых непрерывных подпоследовательностей в разделении;
  2. Для каждого \(1 \leq j \leq k\), \(j\)-я непрерывная подпоследовательность начинается в \(a_{i_j}\), и заканчивается перед \(a_{i_{j+1}}\), где \(i_{k+1} = n + 1\). Значит, что \(j\)-я подпоследовательность это \(a_{i_j}, a_{i_j+1}, \dots, a_{i_{j+1}-1}\).
Всего \(2^{n-1}\) различных разбиений.

Пусть \(s_1, s_2, \dots, s_k\) означает суммы элементов в подпоследовательностях относительно разбиения \(i_1, i_2, \dots, i_k\). Формально, для каждого \(1 \leq j \leq k\), \(\) s_j = \sum_{i=i_{j}}^{i_{j+1}-1} a_i = a_{i_j} + a_{i_j+1} + \dots + a_{i_{j+1}-1}. \(\) Например, разбиение \([1\,|\,2,3\,|\,4,5,6]\) последовательности \([1,2,3,4,5,6]\) задается последовательностью индексов \([1,2,4]\), и суммы элементов разбиения будут равны \([1,5,15]\).

Два разбиения \(i_1, i_2, \dots, i_k\) и \(i'_1, i'_2, \dots, i'_{k'}\) (описанные последовательностью индексов) являются разными, если выполнено хотя бы одно из следующих условий.

  • \(k \neq k'\),
  • \(i_j \neq i'_j\) для некоторого \(1 \leq j \leq \min\left\{ k, k' \right\}\).
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)), означающее длину последовательности \(a\).

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \leq a_i \leq 10^9\)), означающие элементы последовательности \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого тестового примера выведите количество разделений, в которых сумма элементов в каждой подпоследовательности сбалансирована по модулю \(998244353\).

Примечание

В первом примере существует только один способ разделить последовательность длины \(1\), который, разумеется, сбалансированный.

Для второго теста существует \(2\) способа разделить последовательность:

  • Сама последовательность \([1, 1]\) тогда \(s = [2]\) сбалансирована;
  • Разделить на две последовательности \([1\,|\,1]\), тогда \(s = [1, 1]\) сбалансирована.

В третьем тесте существует \(3\) способа разделить последовательность:

  • Сама последовательность \([0, 0, 1, 0]\), тогда \(s = [1]\) сбалансирована;
  • \([0 \,|\, 0, 1 \,|\, 0]\), тогда \(s = [0, 1, 0]\) сбалансирована;
  • \([0, 0 \,|\, 1 \,|\, 0]\), тогда \(s = [0, 1, 0]\) сбалансирована.

В четвертом примере существует \(4\) способа разделить последовательность:

  • Сама последовательность \([1, 2, 3, 2, 1]\), тогда \(s = [9]\) сбалансирована;
  • \([1, 2 \,|\, 3 \,|\, 2, 1]\), тогда \(s = [3, 3, 3]\) сбалансирована;
  • \([1 \,|\, 2, 3, 2 \,|\, 1]\), тогда \(s = [1, 7, 1]\) сбалансирована;
  • \([1 \,|\, 2 \,|\, 3 \,|\, 2 \,|\, 1]\), тогда \(s = [1, 2, 3, 2, 1]\) сбалансирована.

В пятом примере существует \(2\) способа разделить последовательность:

  • Сама последовательность \([1, 3, 5, 7, 9]\), тогда \(s = [25]\) сбалансирована;
  • \([1, 3, 5 \,|\, 7 \,|\, 9]\), тогда \(s = [9, 7, 9]\) сбалансирована.

Для шестого примера любое разбиение подходит. Значит, ответ равен \(2^{32-1} \equiv 150994942 \pmod {998244353}\).

G. Упоротое противодействие увеличению

дп жадные алгоритмы Конструктив математика *2900

Вам дана таблица \(n \times n\).

Обозначим за \((i, j)\) клетку из \(i\)-й строки и \(j\)-го столбца. Для каждой клетки известно, можно ее удалить или нет.

Дано целое число \(k\), вам необходимо удалить ровно \((n-k+1)^2\) клеток из таблицы так, чтобы выполнялось следующее условие.

  • Нельзя найти \(k\) неудаленных клеток \((x_1, y_1), (x_2, y_2), \dots, (x_k, y_k)\) которые строго возрастают, т.е. \(x_i < x_{i+1}\) и \(y_i < y_{i+1}\) для всех \(1 \leq i < k\).
Ваша задача найти любое решение, или сказать, что его нет.
Входные данные

В первой строк содержится целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборо входных данных.

Первая строка набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq k \leq n \leq 1000\)).

Далее следуют \(n\) строк. \(i\)-я строка содержит бинарную строку \(s_i\) длины \(n\). \(j\)-й символ \(s_i\) это 1 если вы можете удалить клетку \((i, j)\), и 0 в противном случае.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных, если не существует способа удалить ровно \((n-k+1)^2\) клеток, чтобы выполнить условие, выведите «NO» (без кавычек).

В противном случае выведите «YES» (без кавычек). Затем, выведите \(n\) строк. \(i\)-я строка должна содержать бинарную строку \(t_i\) длины \(n\). \(j\)-й символ \(t_i\) это 0 если клетка \((i, j)\) удалена, и 1 в противном случае.

Если существуют несколько решений, выведите любое из них.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом примере достаточно удалить клетку \((1, 1)\).

Во втором примере можно выбрать для удаления клетки \((1,1)\), \((1,2)\), \((4,3)\) и \((4,4)\).

Для третьего примера нет решения, потому что клетки по диагонали всегда будут образовывать строго возрастающую последовательность длины \(5\).

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]\).

A. Задача на равенство

математика *1100

Компания из n веселых программистов отмечает день рождения Роберта Флойда. Поликарпу досталась почетная обязанность — разливать Бер-Колу. Очень важно разлить Бер-Колу поровну, то есть так, чтобы объем напитка в каждой из n кружек оказался одинаков.

Поликарп уже начал процесс, частично опустошив бутылку Бер-Колы. Сейчас в первой кружке a1 миллилитров напитка, во второй — a2 миллилитра и т.д. В бутылке осталось b миллилитров, которые Поликарп собирается распределить между кружками так, чтобы выполнялось заветное равенство.

Напишите программу, которая определит объем напитка, который надо долить в каждую из кружек, чтобы следующие два условия выполнялись одновременно:

  • суммарно было разлито b миллилитров, то есть чтобы бутылка была опустошена;
  • после окончания процесса объемы напитка в кружках должны быть равны.
Входные данные

В первой строке записана пара целых чисел n, b (2 ≤ n ≤ 100, 1 ≤ b ≤ 100), где n — общее число друзей в компании, а b — текущий объем напитка в бутылке. Вторая строка содержит последовательность целых чисел a1, a2, ..., an (0 ≤ ai ≤ 100), где ai — текущий объем напитка в i-ой кружке.

Выходные данные

Выведите единственное число «-1» (без кавычек), если решения не существует. В противном случае выведите n вещественных чисел c1, c2, ..., cn, где ci — объем напитка, который надо долить в i-ую кружку. Числа выводите не менее чем с 6 знаками после десятичной точки, каждое ci выводите на отдельной строке. Поликарп доказал, что если решение существует, то оно единственно.

На тестирующем компьютере по умолчанию установлена русская локаль. Убедитесь, что ваше решение выводит точку для отделения целой части вещественного числа от дробной, а не запятую.

F. Ограниченное смешивание

дп Комбинаторика математика *2600

Паку Чанаку дан массив \(a\) из \(n\) целых чисел. Для каждого \(i\) (\(1 \leq i \leq n\)) Пак Чанак пишет на доске одноэлементное множество \(\{a_i\}\).

После этого за одну операцию Пак Чанак может сделать следующее:

  1. Выбрать два различных множества \(S\) и \(T\) на доске таких, что \(S \cap T = \varnothing\) (\(S\) и \(T\) не имеют общих элементов).
  2. Стереть \(S\) и \(T\) с доски и записать \(S \cup T\) (объединение \(S\) и \(T\)) на доску.

Выполнив ноль или более операций, Пак Чанак построит мультимножество \(M\), содержащее размеры всех множеств, написанных на доске. Другими словами, каждый элемент в \(M\) соответствует размеру некоторого множества после операций.

Сколько различных\(^\dagger\) мультимножеств \(M\) может быть получено таким процессом? Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).

\(^\dagger\) Мультимножества \(B\) и \(C\) различны тогда и только тогда, когда существует значение \(k\) такое, что количество элементов со значением \(k\) в \(B\) отличается от количества элементов со значением \(k\) в \(C\).

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 2000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите количество различных мультимножеств \(M\) по модулю \(998\,244\,353\).

Примечание

В первом примере возможные мультимножества \(M\) таковы: \(\{1,1,1,1,1,1\}\), \(\{1,1,1,1,2\}\), \(\{1,1,1,3\}\), \(\{1,1,2,2\}\), \(\{1,1,4\}\), \(\{1,2,3\}\) и \(\{2,2,2\}\).

В качестве примера рассмотрим возможную последовательность операций.

  1. Вначале множества имеют вид \(\{1\}\), \(\{1\}\), \(\{2\}\), \(\{1\}\), \(\{4\}\) и \(\{3\}\).
  2. Применяем операцию ко множествам \(\{1\}\) и \(\{3\}\). Теперь множества на доске имеют вид \(\{1\}\), \(\{1\}\), \(\{2\}\), \(\{4\}\) и \(\{1,3\}\).
  3. Применяем операцию ко множествам \(\{2\}\) and \(\{4\}\). Теперь множества на доске имеют вид \(\{1\}\), \(\{1\}\), \(\{1,3\}\) и \(\{2,4\}\).
  4. Применяем операцию ко множествам \(\{1,3\}\) and \(\{2,4\}\). Теперь множества на доске имеют вид \(\{1\}\), \(\{1\}\) и \(\{1,2,3,4\}\).
  5. Полученное мультимножество \(M\) имеет вид \(\{1,1,4\}\).

B. Смешная перестановка

Конструктив математика *800

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(1\) до \(n\) ровно по одному разу. Например, последовательности \([3, 1, 4, 2]\), [\(1\)] и \([2,1]\) являются перестановками, а \([1,2,1]\), \([0,1]\) и \([1,3,4]\) — нет.

Для заданного числа \(n\) вам необходимо составить перестановку \(p\) такую, что одновременно выполняются два требования:

  • Для каждого элемента \(p_i\) хотя бы один его сосед имеет значение, которое отличается от значения \(p_i\) на единицу. То есть, для каждого элемента \(p_i\) (\(1 \le i \le n\)) хотя бы один из его соседних элементов (стоящих справа или слева от \(p_i\)) должен быть равен \(p_i + 1\), либо \(p_i - 1\).
  • Перестановка не должна иметь неподвижных точек. То есть, для каждого \(i\) (\(1 \le i \le n\)) должно быть выполнено \(p_i \neq i\).

Назовем перестановку, удовлетворяющую данным требованиям, смешной.

Например, пусть \(n = 4\). Тогда смешная перестановка может иметь вид [\(4, 3, 1, 2\)], так как:

  • справа от \(p_1=4\) расположено значение \(p_2=p_1-1=4-1=3\);
  • слева от \(p_2=3\) расположено значение \(p_1=p_2+1=3+1=4\);
  • справа от \(p_3=1\) расположено значение \(p_4=p_3+1=1+1=2\);
  • слева от числа \(p_4=2\) расположено значение \(p_3=p_4-1=2-1=1\).
  • для всех \(i\) выполняется \(p_i \ne i\).

Для заданного положительного целого числа \(n\) выведите любую смешную перестановку длины \(n\), либо выведите -1, если смешной перестановки длины \(n\) не существует.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В единственной строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке:

  • любую смешную перестановку \(p\) длины \(n\);
  • или число -1, если искомой перестановки не существует.
Примечание

Первый набор входных данных разобран в условии задачи.

Во втором наборе входных данных составить искомую перестановку невозможно: перестановки \([1, 2, 3]\), \([1, 3, 2]\), \([2, 1, 3]\), \([3, 2, 1]\) имеют неподвижные точки, а в \([2, 3, 1]\) и \([3, 1, 2]\) не для всех позиций выполняется первое условие.

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]\).

F. Разноцветные отрезки

Бинарный поиск математика сортировки Структуры данных *2000

У Дмитрия есть \(n\) разноцветных отрезков на координатной прямой \(Ox\). Каждый отрезок характеризуется тремя целыми числами \(l_i\), \(r_i\) и \(c_i\) (\(1 \le l_i \le r_i \le 10^9, 1 \le c_i \le n\)), где \(l_i\) и \(r_i\) — координаты концов \(i\)-го отрезка, а \(c_i\) — его цвет.

Дмитрий любит находить минимальные расстояния между отрезками. Однако он считает неинтересными пары отрезков одного цвета. Поэтому он хочет для каждого отрезка узнать расстояние от этого отрезка до ближайшего отрезка другого цвета.

Расстояние между двумя отрезками — это минимальное из расстояний между точкой первого отрезка и точкой второго отрезка. В частности, если отрезки пересекаются, то расстояние между ними равно \(0\).

Например, у Дмитрия есть \(5\) отрезков:

  • Первый отрезок пересекается со вторым (и это отрезки разных цветов), поэтому ответы для них равны \(0\).
  • Для \(3\)-го отрезка ближайший к нему отрезок другого цвета — это \(2\)-й, расстояние до которого равно \(2\).
  • Для \(4\)-го отрезка ближайший к нему отрезок другого цвета — это \(5\)-й, расстояние до которого равно \(1\).
  • \(5\)-й отрезок лежит внутри \(2\)-го (и это отрезки разных цветов), поэтому ответы для них равны \(0\).
Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество отрезков.

Следующие \(n\) строк содержат описания отрезков. Каждый отрезок описывается тремя целыми числами \(l_i\), \(r_i\) и \(c_i\) (\(1 \le l_i \le r_i \le 10^9, 1 \le c_i \le n\)) — координаты левого и правого концов \(i\)-го отрезка, а также цвет этого отрезка. Гарантируется, что есть хотя бы \(2\) отрезка разного цвета.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(n\) целых чисел, где \(i\)-е число равно расстоянию от \(i\)-го отрезка до ближайшего отрезка другого цвета.

Примечание

В первом наборе входных данных первого примера есть только один отрезок цвета \(2\), а все остальные отрезки имеют цвет \(1\). Поэтому для отрезков цвета \(1\) ответ равен расстоянию до \(3\)-го отрезка, а для \(3\)-го ответ равен минимальному из расстояний до отрезков цвета \(1\).

Во втором наборе входных данных первого примера есть только \(2\) отрезка, и для них обоих ответ равен расстоянию между ними.

В третьем наборе входных данных первого примера каждый отрезок пересекается хотя бы одним своим концом с отрезком другого цвета, поэтому все ответы равны \(0\).

Четвёртый набор входных данных первого примера разобран в условии.

В пятом наборе входных данных первого примера один отрезок полностью лежит внутри другого, и для них обоих ответ равен \(0\).

В шестом наборе входных данных первого примера все отрезки являются точками разного цвета.

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\) метров.
В первом вопросе второго тестового примера у Тимура нет ног, поэтому он не может подняться даже на одну ступеньку. :(

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.

A. Пароль

Комбинаторика математика Перебор реализация *800

Монокарп забыл пароль от своего телефона. Пароль состоит ровно из \(4\) цифр от \(0\) до \(9\) (обратите внимание, что пароль может начинаться с цифры \(0\)).

Монокарп помнит, что в его пароле были ровно две различные цифры, причем каждая из этих цифр встречалась в пароле ровно по два раза. Также Монокарп помнит, какие цифры точно не могли быть в его пароле.

Посчитайте количество последовательностей из \(4\) цифр, которые могли бы быть паролем Монокарпа (то есть которые подходят под все описанные условия).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 8\)) — количество цифр, которых точно нет в пароле Монокарпа.

Во второй строке записаны \(n\) целых различных чисел \(a_1, a_2, \dots a_n\) (\(0 \le a_i \le 9\)) — цифры, которых точно нет в пароле Монокарпа. Обратите внимание, что числа \(a_1, a_2, \dots, a_n\) заданы в порядке возрастания.

Выходные данные

На каждый набор входных данных выведите одно целое число — количество последовательностей из \(4\) цифр, которые подходят под все описанные условия.

Примечание

Возможные пароли в первом наборе входных данных: «3377», «3737», «3773», «7337», «7373», «7733».

G. Антифибоначчиевый разрез

битмаски дп Комбинаторика Конструктив математика Структуры данных хэши *3000

Обратите внимание на нестандартное ограничение памяти.

Введем последовательность строк Фибоначчи следующим образом: \(f_0\) — строка 0, \(f_1\) — строка 1, \(f_i\) строится по формуле \(f_{i-1} + f_{i-2}\) при \(i>1\) (\(+\) обозначает конкатенацию строк). Например, \(f_2\)10, \(f_3\)101, \(f_4\)10110.

Для строки \(s\) обозначим за \(g(s)\) количество способов разрезать эту строку на строки, из которых ни одна не является строкой Фибоначчи. Например, если \(s\)10110101, \(g(s) = 3\), так как существуют три способа разрезать строку:

  • 101101 \(+\) 01;
  • 1011 \(+\) 0101;
  • 1011 \(+\) 01 \(+\) 01.

Вам дана последовательность строк \(s_1, s_2, \dots, s_n\). Посчитайте \(g(s_1), g(s_1 + s_2), \dots, g(s_1 + s_2 + \ldots + s_n)\). Так как эти значения могут быть очень большими, выведите их по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^3\)).

Затем следуют \(n\) строк. В \(i\)-й из них задана \(s_i\) (\(1 \le |s_i| \le 10^3\)), состоящая из символов 0 и/или 1.

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из которых равно \(g(s_1 + s_2 + \ldots + s_i) \bmod 998244353\).

B. Чётно-нечётные прибавления

математика реализация *800

Вам даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Обработайте \(q\) запросов двух типов:

  • запрос вида «0 \(x_j\)» — ко всем чётным элементам массива \(a\) прибавить число \(x_j\),
  • запрос вида «1 \(x_j\)» — ко всем нечётным элементам массива \(a\) прибавить число \(x_j\).

Обратите внимание, что при обработке запроса мы смотрим именно на чётность/нечётность значения \(a_i\), а не на его индекс.

После обработки каждого запроса выведите сумму элементов массива \(a\).

Обратите внимание, что для некоторых наборов входных данных ответ не будет помещаться в 32-х битных целочисленный тип, вы должны использовать 64-битный целочисленный тип вашего языка (например, long long в C++).

Входные данные

В первой строке входных данных задано целое число \(t\) \((1 \leq t \leq 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных содержится два целых числа \(n\) и \(q\) (\(1 \leq n\), \(q \leq 10^5\)) — длина массива \(a\) и количество запросов.

Во второй строке каждого набора входных данных содержится ровно \(n\) целых чисел: \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

В следующих \(q\) строках содержатся запросы в виде двух целых чисел \(type_j\) и \(x_j\) \((0 \leq type_j \leq 1\), \(1 \leq x_j \leq 10^4\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\). Аналогично, сумма значений \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) чисел — сумму элементов массива \(a\) после обработки каждого запроса.

Примечание

В первом наборе входных данных массив \(a = [2]\) после первого запроса.

В третьем наборе входных данных массив \(a\) изменяется следующим образом: \([1, 3, 2, 4, 10, 48]\) \(\rightarrow\) \([7, 9, 2, 4, 10, 48]\) \(\rightarrow\) \([7, 9, 7, 9, 15, 53]\) \(\rightarrow\) \([7, 9, 7, 9, 15, 53]\) \(\rightarrow\) \([10, 12, 10, 12, 18, 56]\) \(\rightarrow\) \([22, 24, 22, 24, 30, 68]\) \(\rightarrow\) \([23, 25, 23, 25, 31, 69]\).

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\).

E1. Делимые числа (простая версия)

математика Перебор теория чисел *1500

Это простая версия задачи. Единственное различие простой и сложной версии в ограничении на значения \(a\), \(b\), \(c\) и \(d\).

Вам даны \(4\) положительных целых числа \(a\), \(b\), \(c\), \(d\), при этом \(a < c\) и \(b < d\). Найдите любую пару чисел \(x\) и \(y\), для которой выполняются следующие условия:

  • \(a < x \leq c\), \(b < y \leq d\),
  • \(x \cdot y\) делится на \(a \cdot b\).

Обратите внимание, что искомые \(x\) и \(y\) могут не существовать.

Входные данные

В первой строке входных данных дано единственное целое число \(t\) \((1 \leq t \leq 10\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В единственной строке каждого набора входных данных содержится четыре целых числа \(a\), \(b\), \(c\) и \(d\) (\(1 \leq a < c \leq 10^5\), \(1 \leq b < d \leq 10^5\)).

Выходные данные

Для каждого набора входных данных выведите пару чисел \(a < x \leq c\) и \(b < y \leq d\), для которой \(x \cdot y\) делится на \(a \cdot b\). Если есть несколько вариантов ответа, то выведите любой из них. Если такой пары чисел не существует, то выведите -1 -1.

E2. Делимые числа (сложная версия)

математика Перебор теория чисел *1900

Это сложная версия задачи. Единственное различие простой и сложной версии в ограничении на значения \(a\), \(b\), \(c\) и \(d\).

Вам даны \(4\) положительных целых числа \(a\), \(b\), \(c\), \(d\), при этом \(a < c\) и \(b < d\). Найдите любую пару чисел \(x\) и \(y\), для которой выполняются следующие условия:

  • \(a < x \leq c\), \(b < y \leq d\),
  • \(x \cdot y\) делится на \(a \cdot b\).

Обратите внимание, что искомые \(x\) и \(y\) могут не существовать.

Входные данные

В первой строке входных данных дано единственное целое число \(t\) \((1 \leq t \leq 10\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В единственной строке каждого набора входных данных содержится четыре целых числа \(a\), \(b\), \(c\) и \(d\) (\(1 \leq a < c \leq 10^9\), \(1 \leq b < d \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите пару чисел \(a < x \leq c\) и \(b < y \leq d\), для которой \(x \cdot y\) делится на \(a \cdot b\). Если есть несколько вариантов ответа, то выведите любой из них. Если такой пары чисел не существует, то выведите -1 -1.

F. MEX против MED

математика *2000

Вам дана перестановка \(p_1, p_2, \ldots, p_n\) длины \(n\) чисел \(0, \ldots, n - 1\). Посчитайте количество подотрезков \(1 \leq l \leq r \leq n\) этой перестановки, таких что \(mex(p_l, p_{l+1}, \ldots, p_r) > med(p_l, p_{l+1}, \ldots, p_r)\).

\(mex\) множества чисел \(S\) — это минимальное неотрицательное целое число, которое не встречается в множестве \(S\). Например:

  • \(mex({0, 1, 2, 3}) = 4\)
  • \(mex({0, 4, 1, 3}) = 2\)
  • \(mex({5, 4, 0, 1, 2}) = 3\)

\(med\) множества чисел \(S\) — это медиана множества, то есть элемент, который после сортировки элементов по неубыванию будет стоять на позиции номер \(\left \lfloor{ \frac{|S| + 1}{2} } \right \rfloor\) (элементы массива нумеруются начиная с \(1\) и здесь \(\left \lfloor{v} \right \rfloor\) обозначает округление вниз до наибольшего целого числа, не большего \(v\)). Например:

  • \(med({0, 1, 2, 3}) = 1\)
  • \(med({0, 4, 1, 3}) = 1\)
  • \(med({5, 4, 0, 1, 2}) = 2\)

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(0\) до \(n - 1\) ровно по одному разу.

Входные данные

В первой строке входных данных дано единственное целое число \(t\) \((1 \leq t \leq 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина перестановки \(p\).

Во второй строке каждого набора входных данных содержится ровно \(n\) целых чисел: \(p_1, p_2, \ldots, p_n\) (\(0 \leq p_i \leq n - 1\)) — элементы перестановки \(p\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в единственной строке ответ — количество подотрезков \(1 \leq l \leq r \leq n\) этой перестановки, таких что \(mex(p_l, p_{l+1}, \ldots, p_r) > med(p_l, p_{l+1}, \ldots, p_r)\).

Примечание

В первом наборе входных данных есть один ровно один подотрезок и на нем \(mex({0}) = 1 > med({0}) = 0\).

В третьем наборе входных данных на данных подотрезках \([1, 0]\), \([0]\), \([1, 0, 2]\) и \([0, 2]\) \(mex\) большем чем \(med\).

В четвертом наборе входных данных на данных подотрезках \([0, 2]\), \([0]\), \([0, 2, 1]\) и \([0, 2, 1, 3]\) \(mex\) большем чем \(med\).

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\) будет иметь ноль инверсий.

E. Генерация списков

дп Комбинаторика математика *2900

Для заданных целых чисел \(n\) и \(m\) назовем пару массивов \(a\) и \(b\) целых чисел хорошей, если они удовлетворяют следующим условиям:

  • \(a\) и \(b\) имеют одинаковую длину, пусть их длина равна \(k\).
  • \(k \ge 2\) и \(a_1 = 0, a_k = n, b_1 = 0, b_k = m\).
  • Для каждого \(1 < i \le k\) имеет место следующее: \(a_i \geq a_{i - 1}\), \(b_i \geq b_{i - 1}\), и \(a_i + b_i \neq a_{i - 1} + b_{i - 1}\).

Найдите сумму \(|a|\) по всем хорошим парам массивов \((a,b)\). Поскольку ответ может быть очень большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t (1 \leq t \leq 10^4)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) \((1 \leq n, m \leq 5 \cdot 10^6)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5 \cdot 10^6\), а сумма \(m\) по всем наборам входных данных не превышает \(5 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — сумму \(|a|\) по всем хорошим парам массивов \((a,b)\) по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных, хорошими парами массивов являются

  • \(([0, 1], [0, 1])\), длина = \(2\).
  • \(([0, 1, 1], [0, 0, 1])\), длина = \(3\).
  • \(([0, 0, 1], [0, 1, 1])\), длина = \(3\).

Следовательно, сумма длин будет \({2 + 3 + 3} = 8\).

A. Огромный квадрат

математика *800

У вас есть \(n\) прямоугольных деревянных блоков, пронумерованных целыми числами от \(1\) до \(n\). Высота и длина \(i\)-го из них равны \(1\) и \(\lceil \frac{i}{2} \rceil\) соответственно.

Здесь \(\lceil \frac{x}{2} \rceil\) обозначает результат деления \(x\) на \(2\), округлённый вверх. Например, \(\lceil \frac{4}{2} \rceil = 2\) и \(\lceil \frac{5}{2} \rceil = \lceil 2.5 \rceil = 3\).

Например, если \(n=5\), то у вас если блоки размеров \(1 \times 1\), \(1 \times 1\), \(1 \times 2\), \(1 \times 2\) и \(1 \times 3\).

Доступные блоки при \(n=5\)

Вы хотите создать большой квадрат, используя эти блоки и не поворачивая их. Какая максимальная длина стороны может быть у такого квадрата? Обратите внимание, что вы не обязаны использовать все блоки.

Один из способов создать квадрат \(3 \times 3\), используя блоки с номерами от \(1\) до \(5\)
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \le n \le 10^9\)) — количество блоков.

Выходные данные

Для каждого набора входных данных выведите одно число: максимальную длину стороны квадрата, такого что его возможно собрать из имеющихся блоков.

Примечание

В первом наборе входных данных достаточно использовать один блок, чтобы создать квадрат \(1 \times 1\).

Один из способов создать квадрат \(3 \times 3\) во втором наборе входных данных приведён в условии. Можно показать, что невозможно создать квадрат \(4 \times 4\) или больших размеров, поэтому ответ равен \(3\).

D. ConstructOR

битмаски китайская теорема об остатках Комбинаторика Конструктив математика теория чисел *2100

Вам даны три целых числа \(a\), \(b\), \(d\). Найдите целое число \(x\), удовлетворяющее следующим требованиям, или сообщите, что такого числа не существует:

  • \(0 \le x \lt 2^{60}\);
  • \(a|x\) делится на \(d\);
  • \(b|x\) делится на \(d\).

Здесь \(|\) обозначает операцию побитового ИЛИ.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны три числа \(a\), \(b\) и \(d\) (\(1 \le a,b,d \lt 2^{30}\)).

Выходные данные

Для каждого набора входных данных выведите одно число:

  • если существует число \(x\), удовлетворяющее требованиям из условия, выведите \(x\);
  • иначе, выведите \(-1\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных одно из возможных решений \(x=18\). Оно корректно, так как \(39|18=55\) и \(12|18=30\) делятся на \(d=5\).

Во втором наборе входных данных одно из возможных решений \(x=14\). Оно корректно, так как \(8|14=6|14=14\) делится на \(d=14\).

Можно показать, что в третьем и четвёртом наборах входных данных решений не существует.

E. Очередная задача на подсчёт массивов

Бинарный поиск Деревья дп математика Потоки разделяй и властвуй Структуры данных *2300

Позиция первого максимума на отрезке \([l; r]\) массива \(x = [x_1, x_2, \ldots, x_n]\) это наименьшее целое число \(i\), такое что \(l \le i \le r\) и \(x_i = \max(x_l, x_{l+1}, \ldots, x_r)\).

Вам дан массив \(a = [a_1, a_2, \ldots, a_n]\) длины \(n\). Найдите количество массивов \(b = [b_1, b_2, \ldots, b_n]\) длины \(n\), удовлетворяющих следующим требованиям:

  • \(1 \le b_i \le m\) для всех \(1 \le i \le n\);
  • для всех пар \(1 \le l \le r \le n\), позиция первого максимума на отрезке \([l; r]\) массива \(b\) равна позиции первого максимума на отрезке \([l; r]\) массива \(a\).

Так как это количество может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(m\) (\(2 \le n,m \le 2 \cdot 10^5\), \(n \cdot m \le 10^6\)).

Во второй строке даны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le m\)) — массив \(a\).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно число: количество массивов \(b\), удовлетворяющих требованиям выше, по модулю \(10^9+7\).

Примечание

В первом наборе входных данных следующие \(8\) массивов удовлетворяют требованиям из условия:

  • \([1,2,1]\);
  • \([1,2,2]\);
  • \([1,3,1]\);
  • \([1,3,2]\);
  • \([1,3,3]\);
  • \([2,3,1]\);
  • \([2,3,2]\);
  • \([2,3,3]\).

Во втором наборе входных данных следующие \(5\) массивов удовлетворяют требованиям из условия:

  • \([1,1,1,1]\);
  • \([2,1,1,1]\);
  • \([2,2,1,1]\);
  • \([2,2,2,1]\);
  • \([2,2,2,2]\).

D. Подсчет массивов

дп Комбинаторика математика теория чисел *1900

Рассмотрим массив \(a\) длины \(n\), элементы которого пронумерованы от \(1\) до \(n\). Можно удалить \(i\)-й элемент из \(a\), если \(gcd(a_i, i) = 1\), где \(gcd\) обозначает наибольший общий делитель. После того, как элемент удаляется, те элементы, которые были справа от него, сдвигаются на одну позицию влево.

Массив \(b\) из \(n\) элементов, для которых выполняется \(1 \le b_i \le n - i + 1\), называется последовательностью удалений для массива \(a\), если можно удалить все элементы \(a\) в следующем порядке: сначала удалить \(b_1\)-й элемент, затем \(b_2\)-й, ..., затем \(b_n\)-й. Например, пусть \(a = [42, 314]\):

  • \([1, 1]\) — последовательность удалений: когда вы удаляете \(1\)-й элемент массива, условие \(gcd(42, 1) = 1\) соблюдаются, и массив становится \([314]\); когда вы снова удаляете \(1\)-й элемент, условие \(gcd(314, 1) = 1\) соблюдается, и массив становится пустым.
  • \([2, 1]\) не является последовательностью удалений: когда вы пытаетесь удалить \(2\)-й элемент, условие \(gcd(314, 2) = 1\) не выполняется.

Назовем массив неоднозначным, если у него хотя бы две последовательности удалений. Например, массив \([1, 2, 5]\) — неоднозначный: у него есть последовательности удалений \([3, 1, 1]\) и \([1, 2, 1]\). Массив \([42, 314]\) не является неоднозначным: единственная последовательность удалений для него — это \([1, 1]\).

Вам даны два числа \(n\) и \(m\). Посчитайте количество неоднозначных массивов \(a\), таких, что длина \(a\) от \(1\) до \(n\), а элементы \(a_i\) — целые числа от \(1\) до \(m\).

Входные данные

В единственной строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le m \le 10^{12}\)).

Выходные данные

Выведите одно целое число — количество неоднозначных массивов \(a\), таких, что длина \(a\) от \(1\) до \(n\), а элементы \(a_i\) — целые числа от \(1\) до \(m\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

D. Plane of Tanks: Duel

дп математика Перебор Теория вероятностей *2400

Вася играет в Plane of Tanks.

В этой игре танки описываются следующими характеристиками:

  • количество очков жизни;
  • интервал между двумя выстрелами орудия (время необходимое для перезарядки орудия после выстрела);
  • вероятность того, что выстрел орудия не пробьет броню вражеского танка;
  • урон, наносимый орудием вражескому танку.

Урон орудия задается отрезком [l, r], где l и r — целые числа. При выстреле потенциальный урон x выбирается равновероятно среди всех целых чисел отрезка [l, r]. Если данный выстрел пробивает броню вражеского танка, то количество очков жизни врага уменьшается на x единиц. Если при этом количество очков жизни стало неположительным, то считается, что танк уничтожен.

В игре возможны непробития снарядом танка, в этом случае количество очков жизни врага не изменяется. Вероятность непробития брони врага снарядом считается характеристикой стреляющего танка и не зависит от поведения игрока.

Победа уже близка, остался всего один вражеский танк. Вася полностью готов к поединку — еще одна битва добра со злом неизбежна! Два противника увидели друг друга и одновременно сделали по выстрелу... Так началась завершающая битва! Помогите Васе определить, какова вероятность того, что он одержит в ней победу, уничтожив вражеский танк?

Считается, что если оба танка были уничтожены в результате битвы (после одновременных выстрелов), то Васе также засчитывается победа. Можно считать, что каждый игрок производит очередной выстрел сразу же после перезарядки его орудия, а в каждом танке имеется бесконечное число снарядов.

Входные данные

В первой строке даны пять целых чисел через пробел, описывающих характеристики танка Васи: количество очков жизни hp (10 ≤ hp ≤ 200), интервал между двумя выстрелами dt (1 ≤ dt ≤ 30), диапазон урона орудия l и r (10 ≤ l ≤ r ≤ 100), вероятность непробития танка врага p (0 ≤ p ≤ 100)(в процентах).

Во второй строке описаны характеристики танка врага Васи в таком же формате.

Выходные данные

Необходимо вывести единственное число с абсолютной или относительной погрешностью не более 10 - 4 — вероятность победы Васи.

Примечание

В первом примере оба танка одновременно умирают после второго выстрела, вероятность уничтожения вражеского танка, соответственно, равна 1.

Во втором примере враг Васи успеет сделать второй выстрел раньше Васи, но не успеет сделать третий. Для того, чтобы уничтожить Васю раньше, необходимо произвести два выстрела с уроном 50. Вероятность этого события = . В противном случае Вася побеждает.

В третьем примере враг Васи успеет сделать три выстрела с вероятностью пробития 0.5. Для уничтожения Васи ему необходимо, чтобы хотя бы 2 из 3 выстрелов пробили броню Васиного танка. Вероятность этого события равна 0.5.

A. Косвенная сортировка

Конструктив математика реализация *800

Вам дана перестановка \(a_1, a_2, \ldots, a_n\) размера \(n\), где каждое целое число от \(1\) до \(n\) встречается ровно один раз.

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выбрать любые три индекса \(i, j, k\) (\(1 \le i < j < k \le n\)).
  • Если \(a_i > a_k\), заменить \(a_i\) на \(a_i + a_j\). В противном случае поменять местами \(a_j\) и \(a_k\).

Определите, можно ли отсортировать массив \(a\) в порядке неубывания.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(1 \le a_i \le n\), \(a_i \neq a_j\), если \(i \neq j\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если массив можно отсортировать в неубывающем порядке, и «No» (без кавычек) в противном случае.

Вы можете вывести «Yes» и «No» в любом регистре (например, строки «YES», «yEs» и «yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных массив \([1,2,3]\) уже отсортирован в порядке неубывания.

Во втором наборе входных данных мы можем выбрать \(i = 1,j = 2,k = 3\). Так как \(a_1 \le a_3\), поменяем местами \(a_2\) и \(a_3\), тогда массив станет \([1,2,3]\), который отсортирован в порядке неубывания.

В седьмом наборе входных данных мы можем последовательно выполнять следующие операции:

  • Выберем \(i = 5,j = 6,k = 7\). Поскольку \(a_5 \le a_7\), поменяем местами \(a_6\) и \(a_7\), тогда массив станет \([1,2,6,7,4,5,3]\).
  • Выберем \(i = 5,j = 6,k = 7\). Поскольку \(a_5 > a_7\), заменим \(a_5\) на \(a_5+a_6=9\), тогда массив станет \([1,2,6,7,9,5,3]\).
  • Выберем \(i = 2,j = 5,k = 7\). Поскольку \(a_2 \le a_7\), поменяем местами \(a_5\) и \(a_7\), тогда массив станет \([1,2,6,7,3,5,9]\).
  • Выберем \(i = 2,j = 4,k = 6\). Поскольку \(a_2 \le a_6\), поменяем местами \(a_4\) и \(a_6\), тогда массив станет \([1,2,6,5,3,7,9]\).
  • Выберем \(i = 1,j = 3,k = 5\). Поскольку \(a_1 \le a_5\), поменяем местами \(a_3\) и \(a_5\), тогда массив станет \([1,2,3,5,6,7,9]\), который отсортирован в порядке неубывания.

В третьем, четвертом, пятом и шестом наборах входных данных можно показать, что массив нельзя отсортировать в порядке неубывания.

D. Посчитайте НОД

Комбинаторика математика теория чисел *1800

Вам даны два целых числа \(n\) и \(m\) и массив \(a\) из \(n\) целых чисел. Для каждого \(1 \le i \le n\) верно, что \(1 \le a_i \le m\).

Ваша задача — посчитать количество различных массивов \(b\) длины \(n\) таких, что:

  • \(1 \le b_i \le m\) для каждого \(1 \le i \le n\), и при этом
  • \(\gcd(b_1,b_2,b_3,...,b_i) = a_i\) для каждого \(1 \le i \le n\).

Здесь \(\gcd(a_1,a_2,\dots,a_i)\) обозначает наибольший общий делитель (НОД) целых чисел \(a_1,a_2,\ldots,a_i\).

Так как это число может быть слишком большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 10^9\)) — длину массива \(a\) и максимально возможное значение элемента.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le m\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество различных массивов, удовлетворяющих приведенным выше условиям. Так как это число может быть большим, выведите его по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных допустимыми массивами \(b\) являются:

  • \([4,2,1]\);
  • \([4,2,3]\);
  • \([4,2,5]\).

Во втором наборе входных данных единственным массивом, удовлетворяющим требованиям, является \([1,1]\).

В третьем наборе входных данных можно доказать, что такого массива не существует.

В третьем и четвертом тестовых примерах есть красивые объяснения, но, к сожалению, они слишком длинные, чтобы их писать, поэтому мы просим вас поверить нам.

F. Большинство

дп Комбинаторика математика Строки *2700

Ибти пытался придумать историю, которая придала бы смысл этой задаче. Он решил вставить грустную историю.

Все были счастливы программировать, пока внезапно не случился перебой в электроснабжении, и лучший сайт спортивного программирования не вышел из строя. К счастью, системный администратор недавно купил новое оборудование, в том числе несколько ИБП. Таким образом, есть несколько серверов, которые всё ещё находятся в сети, но нам нужно, чтобы они все работали, чтобы раунд остался рейтинговым.

Представьте, что серверы представляют собой бинарную строку \(s\) длины \(n\). Если \(i\)-й сервер находится онлайн, то \(s_i = 1\), иначе \(s_i = 0\).

Системный администратор может выполнить следующую операцию под названием распределение электроэнергии, которая состоит из следующих этапов:

  • Выберите два сервера в позициях \(1 \le i < j \le n\) так, чтобы оба были подключены к сети (т. е. \(s_i=s_j=1\)). Распределение начинается только с онлайн-серверов.
  • Проверьте, достаточно ли мощности для распространения. Мы считаем, что мощности достаточно, если количество включенных серверов в диапазоне \([i, j]\) не меньше количества выключенных серверов в диапазоне \([i, j]\). Более формально, проверьте, что \(2 \cdot (s_i + s_{i+1} + \ldots + s_j) \ge j - i + 1\).
  • Если условие выше выполнено, включите все серверы в оффлайне в диапазоне \([i, j]\). Более формально, присвоить \(s_k := 1\) для всех \(k\) от \(i\) до \(j\).

Мы называем бинарную строку \(s\) длины \(n\) рейтинговой, если мы можем включить все серверы (т.е. сделать \(s_i = 1\) для \(1 \le i \le n\)) с помощью операции распределения электроэнергии произвольное количество раз (возможно, \(0\)). Ваша задача — найти количество рейтинговых строк длины \(n\) по модулю \(m\).

Входные данные

Первая и единственная строка содержится два целых числа \(n\) и \(m\) (\(1 \le n \le 5000\), \(10 \le m \le 10^9\)) — длина строки и требуемый модуль.

Выходные данные

Выведите единственное целое число — количество рейтинговых бинарных строк длины \(n\). Так как это число может быть большим, выведите его по модулю \(m\).

Примечание

В первом примере единственной рейтинговой строкой является 11. Таким образом, ответ \(1\).

Во втором примере рейтинговыми строками являются:

  • 111;
  • 101, потому что мы можем выполнить операцию с \(i = 1\) и \(j = 3\).
Таким образом, ответ равен \(2\).

В третьем примере рейтинговые строки:

  • 1001;
  • 1111;
  • 1011;
  • 1101.
Таким образом, ответ \(4\).

G. Допинг

дп Комбинаторика математика *3300

Мы называем массив \(a\) длины \(n\) изысканным, если для каждого \(1 < i \le n\) верно, что \(a_i = a_{i-1} + 1\).

Назовем \(f(p)\), применяемую к перестановке\(^\dagger\) длины \(n\), как минимальное количество подмассивов, на которые можно разбить перестановку так, чтобы каждый из них был изысканным. Например, \(f([1,2,3]) = 1\), а \(f([3,1,2]) = 2\) и \(f([3,2,1]) = 3\).

Учитывая \(n\) и перестановку \(p\) длины \(n\), мы определяем перестановку \(p'\) длины \(n\) как \(k\)-специальную тогда и только тогда, когда:

  • \(p'\) лексикографически меньше\(^\ddagger\), чем \(p\), и
  • \(f(p') = k\).

Ваша задача — посчитать для каждого \(1 \le k \le n\) количество \(k\)-специальных перестановок по модулю \(m\).

\(^\dagger\) Перестановка — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — это перестановка, но \([1,2,2]\) — не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве есть \(4\)).

\(^\ddagger\) Перестановка \(a\) длины \(n\) лексикографически меньше перестановки \(b\) длины \(n\) тогда и только тогда, когда выполняется следующее: в первой позиции, где \(a\) и \(b\) различаются, перестановка \(a\) имеет меньший элемент, чем соответствующий элемент в \(b\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2000\), \(10 \le m \le 10^9\)) — длина перестановки и требуемый модуль.

Вторая строка содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — перестановка \(p\).

Выходные данные

Выведите \(n\) целых чисел, где \(k\)-е число — это количество \(k\)-специальных перестановок по модулю \(m\).

Примечание

В первом примере перестановки, лексикографически меньшие, чем \([1,3,4,2]\), следующие:

  • \([1,2,3,4]\), \(f([1,2,3,4])=1\);
  • \([1,2,4,3]\), \(f([1,2,4,3])=3\);
  • \([1,3,2,4]\), \(f([1,3,2,4])=4\).

Таким образом, наш ответ \([1,0,1,1]\).

Во втором примере перестановки, лексикографически меньшие, чем \([3,2,1]\), следующие:

  • \([1,2,3]\), \(f([1,2,3])=1\);
  • \([1,3,2]\), \(f([1,3,2])=3\);
  • \([2,1,3]\), \(f([2,1,3])=3\);
  • \([2,3,1]\), \(f([2,3,1])=2\);
  • \([3,1,2]\), \(f([3,1,2])=2\).

Таким образом, наш ответ равен \([1,2,2]\).

B. Факториальная делимость

математика теория чисел *1600

Вам дано число \(x\) и массив целых чисел \(a_1, a_2, \ldots, a_n\). Нужно определить, делится ли нацело число \(a_1! + a_2! + \ldots + a_n!\) на число \(x!\).

За \(k!\) мы обозначили факториал числа \(k\) — произведение всех натуральных чисел, меньших либо равных \(k\). Например \(3! = 1 \cdot 2 \cdot 3 = 6\), а \(5! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 = 120\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 500\,000\), \(1 \le x \le 500\,000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le x\)) — элементы массива.

Выходные данные

В единственной строке выведите «Yes» (без кавычек), если \(a_1! + a_2! + \ldots + a_n!\) делится нацело на \(x!\), и «No» (без кавычек) в противном случае.

Примечание

В первом примере из условия \(3! + 2! + 2! + 2! + 3! + 3! = 6 + 2 + 2 + 2 + 6 + 6 = 24\). Число \(24\) делится на \(4! = 24\).

Во втором примере из условия \(3! + 2! + 2! + 2! + 2! + 2! + 1! + 1! = 18\), что делится на \(3! = 6\).

В третьем примере из условия \(7! + 7! + 7! + 7! + 7! + 7! + 7! = 7 \cdot 7!\). Нетрудно доказать, что это число не делится на \(8!\).

C. Знал бы я, как сортировать массив...

дп математика Теория вероятностей *2000

Вам дан бинарный массив \(a\) (массив содержит только числа \(0\) и \(1\)) длины \(n\). Вы хотите отсортировать этот массив, но, к сожалению, преподаватель алгоритмов, лекции которого вы слушаете, еще не научил вас алгоритмам сортировки. Поэтому вы решили применять следующие операции до тех пор, пока массив \(a\) не будет отсортирован:

  1. Выбрать два случайных индекса \(i\) и \(j\), таких что \(i < j\). Индексы выбираются равновероятно среди всех пар индексов \((i, j)\), таких что \(1 \le i < j \le n\).
  2. Если \(a_i > a_j\), то поменять местами элементы \(a_i\) и \(a_j\).

Каково математическое ожидание количества операций, которые вам придется сделать, прежде чем массив будет отсортирован?

Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{998\,244\,353}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod 998\,244\,353\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < 998\,244\,353\) и \(x \cdot q \equiv p \pmod{998\,244\,353}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 200\,000\)) — количество элементов в бинарном массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i \in \{0, 1\}\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(p \cdot q^{-1} \bmod 998\,244\,353\).

Примечание

Рассмотрим первый набор входных данных. Если будет выбрана пара индексов \((2, 3)\), то эти элементы поменяются местами, и массив будет отсортирован. В противном случае, если будет выбрана пара индексов \((1, 2)\) или \((1, 3)\), то ничего не произойдет. Таким образом, с вероятностью \(\frac{1}{3}\) массив будет отсортирован за одну операцию, с вероятностью \(\frac{2}{3} \cdot \frac{1}{3}\) массив будет отсортирован за две операции, с вероятностью \(\frac{2}{3} \cdot \frac{2}{3} \cdot \frac{1}{3}\) — за три операции, и так далее. Математическое ожидание количества операций равно \(\sum \limits_{i=1}^{\infty} \left(\frac{2}{3} \right)^{i - 1} \cdot \frac{1}{3} \cdot i = 3\).

Во втором наборе входных данных массив уже отсортирован, поэтому математическое ожидание количества операций равно нулю.

В третьем наборе входных данных математическое ожидание количества операций равно \(\frac{75}{4}\), поэтому ответ равен \(75 \cdot 4^{-1} \equiv 249\,561\,107 \pmod {998\,244\,353}\).

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\).

D. Интервал = √Суммы

Бинарный поиск Конструктив математика Перебор *1800

Вам дано целое число \(n\). Найдите последовательность из \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) такую, что \(1 \leq a_i \leq 10^9\) для всех \(i\), и \(\)\max(a_1, a_2, \dots, a_n) - \min(a_1, a_2, \dots, a_n)= \sqrt{a_1 + a_2 + \dots + a_n}.\(\)

Можно показать, что существует последовательность различных целых чисел, удовлетворяющая всем условиям выше.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длину последовательности, которую вам нужно найти.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\), удовлетворяющих условиям.

Если существуют несколько решений, выведите любое из них. Обратите внимание, числа должны быть различными!

Примечание

В первом примере максимум равен \(3\), минимум \(1\), сумма \(4\), и \(3 - 1 = \sqrt{4}\).

Во втором примере максимум равен \(29\), минимум \(18\), сумма \(121\), и \(29-18 = \sqrt{121}\).

В каждом случае все числа различны.

B. Потерянная перестановка

математика *800

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(1\) до \(n\) ровно по одному разу. Например, последовательности [\(3, 1, 4, 2\)], [\(1\)] и [\(2,1\)] являются перестановками, а [\(1,2,1\)], [\(0,1\)] и [\(1,3,4\)] — нет.

Поликарп потерял свою любимую перестановку и нашёл только некоторые её элементы — числа \(b_1, b_2, \dots b_m\). Он уверен, что сумма потерянных элементов равна \(s\).

Определите, можно ли к заданной последовательности \(b_1, b_2, \dots b_m\) дописать одно или более чисел так, что сумма дописанных чисел равна \(s\), а полученный новый массив является перестановкой?

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит два целых числа \(m\) и \(s\) (\(1 \le m \le 50\), \(1 \le s \le 1000\)) — количество найденных чисел и сумма забытых элементов.

Вторая строка каждого набора содержит \(m\) различных целых чисел \(b_1, b_2 \dots b_m\) (\(1 \le b_i \le 50\)) — числа, которые Поликарпу удалось найти.

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите «YES», если к массиву \(b\) можно дописать несколько элементов, что их сумма равна \(s\) и в результате получится перестановка. Выведите «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных примера \(m=3, s=13, b=[3,1,4]\). Вы можете дописать к \(b\) числа \(6,2,5\), сумма которых равна \(6+2+5=13\). Обратите внимание, что итоговый массив станет равен \([3,1,4,6,2,5]\), что является перестановкой.

Во втором наборе входных данных \(m=1, s=1, b=[1]\). Вы не можете дописать к \([1]\) одно или более чисел так, что их сумма равна \(1\) и в результате получится перестановка.

В третьем наборе входных данных примера \(m=3, s=3, b=[1,4,2]\). Вы можете дописать к \(b\) число \(3\). Обратите внимание, что итоговый массив станет равен \([1,4,2,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, если искомой перестановки не существует.
Примечание

Первый набор входных данных разобран в условии задачи.

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\) инверсий, что является максимально возможным.

D. Битовые переносы

Комбинаторика математика *2100

Пусть \(f(x,y)\)  — число переносов при двоичном сложении \(x+y\) (т. е. \(f(x,y)=g(x)+g(y)-g(x+y)\), где \(g(x)\)  — количество единиц в двоичном представлении \(x\)).

Для данных двух целых чисел \(n\) и \(k\), найдите количество упорядоченных пар \((a,b)\) таких, что \(0 \leq a,b < 2^n\), а \(f(a,b)\) равно \(k\). Обратите внимание, что для \(a\ne b\), \((a,b)\) и \((b,a)\) считаются как две разные пары.

Поскольку это число может быть большим, выведите его по модулю \(10^9+7\).

Входные данные

Единственная строка каждого теста содержит два целых числа \(n\) и \(k\) (\(0\leq k<n\leq 10^6\)).

Выходные данные

Выведите одно целое число  — ответ по модулю \(10^9+7\).

Примечание

Вот несколько примеров для понимания переносов:

\(\) \begin{aligned} &\begin{array}{r} 1_{\ \ }1_{\ \ }1\\ +\ _{1}1_{\ \ }0_{\ \ }0\\ \hline \ 1_{\ \ }0_{\ \ }1_{\ \ }1 \end{array} &\begin{array}{r} \ 1_{\ \ }0_{\ \ }1\\ +\ _{\ \ }0_{\ \ }0_{1}1\\ \hline \ 0_{\ \ }1_{\ \ }1_{\ \ }0 \end{array} & &\begin{array}{r} \ 1_{\ \ }0_{\ \ }1\\ +\ _{1}0_{1}1_{1}1\\ \hline \ 1_{\ \ }0_{\ \ }0_{\ \ }0 \end{array} \end{aligned} \(\)

Итак, \(f(7,4)=1\), \(f(5,1)=1\) и \(f(5,3)=3\).

В первом примере все пары, удовлетворяющие ограничениям, это \((1,1),(1,5),(2,2),(2,3),(3,2),(4,4),(4,5),(4,6),(4,7),(5,1),(5,4),(5,6),(6,4),(6,5),(7,4)\).

F1. Анти-медианный (простая версия)

дп математика *3100

Это простая версия задачи. Единственное различие между двумя версиями  — ограничение на \(n\). Вы можете делать взломы, только если все версии задачи решены.

Назовем массив \(a\) нечетной длины \(2m+1\) (при \(m \ge 1\)) плохим, если элемент \(a_{m+1}\) равен медиане этого массива. Другими словами, массив является плохим, если после его сортировки элемент на \(m+1\)-й позиции остается неизменным.

Назовем перестановку \(p\) целых чисел от \(1\) до \(n\) анти-медианной, если каждый ее подмассив нечетной длины \(\ge 3\) не является плохим.

Вам уже даны значения некоторых элементов перестановки. Найдите количество способов задать неизвестные значения, чтобы получить анти-медианную перестановку. Поскольку это число может быть очень большим, найдите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \le n \le 1000)\)  — длину перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), или \(p_i = -1\))  — элементы перестановки. Если \(p_i \neq -1\), то он задан, иначе он неизвестен. Гарантируется, что если для некоторых \(i \neq j\) имеет место \(p_i \neq -1, p_j \neq -1\), то \(p_i \neq p_j\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого наборам входных данных выведите одно целое число  — количество способов установить неизвестные значения для получения анти-медианной перестановки, по модулю \(10^9+7\).

Примечание

В первом наборе входных данных анти-медианными являются как \([1, 2]\), так и \([2, 1]\).

Во втором наборе входных данных перестановки \([1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2]\) являются анти-медианными. Оставшиеся две перестановки, \([1, 2, 3]\), \([3, 2, 1]\), сами по себе являются плохими массивами, так как их медиана, \(2\), находится в их середине.

В третьем наборе входных данных \([1, 2, 3, 4]\) не является анти-медианным, поскольку содержит плохой подмассив \([1, 2, 3]\).

В четвертом наборе входных данных единственный анти-медианный массив, который можно получить, это \([5, 6, 3, 4, 1, 2]\).

F2. Анти-медианный (сложная версия)

дп Комбинаторика математика *3500

Это сложная версия задачи. Единственное различие между двумя версиями  — ограничение на \(n\). Вы можете делать взломы, только если все версии задачи решены.

Назовем массив \(a\) нечетной длины \(2m+1\) (при \(m \ge 1\)) плохим, если элемент \(a_{m+1}\) равен медиане этого массива. Другими словами, массив является плохим, если после его сортировки элемент на \(m+1\)-й позиции остается неизменным.

Назовем перестановку \(p\) целых чисел от \(1\) до \(n\) анти-медианной, если каждый ее подмассив нечетной длины \(\ge 3\) не является плохим.

Вам уже даны значения некоторых элементов перестановки. Найдите количество способов задать неизвестные значения, чтобы получить анти-медианную перестановку. Поскольку это число может быть очень большим, найдите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \le n \le 10^6)\)  — длину перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), или \(p_i = -1\))  — элементы перестановки. Если \(p_i \neq -1\), то он задан, иначе он неизвестен. Гарантируется, что если для некоторых \(i \neq j\) имеет место \(p_i \neq -1, p_j \neq -1\), то \(p_i \neq p_j\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого наборам входных данных выведите одно целое число  — количество способов установить неизвестные значения для получения анти-медианной перестановки, по модулю \(10^9+7\).

Примечание

В первом наборе входных данных анти-медианными являются как \([1, 2]\), так и \([2, 1]\).

Во втором наборе входных данных перестановки \([1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2]\) являются анти-медианными. Оставшиеся две перестановки, \([1, 2, 3]\), \([3, 2, 1]\), сами по себе являются плохими массивами, так как их медиана, \(2\), находится в их середине.

В третьем наборе входных данных \([1, 2, 3, 4]\) не является анти-медианным, поскольку содержит плохой подмассив \([1, 2, 3]\).

В четвертом наборе входных данных единственный анти-медианный массив, который можно получить, это \([5, 6, 3, 4, 1, 2]\).

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\) хорошим за меньшее число операций.

C. Бинарные строки это весело

Комбинаторика математика *1400

Бинарная строка\(^\dagger\) \(b\) нечетной длины \(m\) называется хорошей, если \(b_i\) — медиана\(^\ddagger\) строки \(b[1,i]^\S\) для всех нечетных индексов \(i\) (\(1 \leq i \leq m\)).

Для бинарной строки \(a\) длины \(k\), бинарная строка \(b\) длины \(2k-1\) называется расширением \(a\), если \(b_{2i-1}=a_i\) для всех \(i\) таких, что \(1 \leq i \leq k\). Например, 1001011 и 1101001 являются расширениями строки 1001. строка \(x=\)1011011 не является расширением \(y=\)1001, так как \(x_3 \neq y_2\). Обратите внимание, что всего существует \(2^{k-1}\) различных расширений \(a\).

Вам дана бинарная строка \(s\) длины \(n\). Найдите сумму количеств хороших расширений по всем префиксам \(s\). Другими словами, найдите \(\sum_{i=1}^{n} f(s[1,i])\), где \(f(x)\) — число хороших расширений строки \(x\). Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).

\(^\dagger\) Бинарной строкой называется строка, состоящая только из символов \(\mathtt{0}\) и \(\mathtt{1}\).

\(^\ddagger\) Для бинарной строки \(a\) длины \(2m-1\) медианой \(a\) называется (единственный) символ, который встречается не меньше \(m\) раз в \(a\).

\(^\S\) \(a[l,r]\) обозначает строку длины \(r-l+1\), которая получается конкатенацией символов \(a_l,a_{l+1},\ldots,a_r\) в заданном порядке.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)), где \(n\) — длина бинарной строки \(s\).

Вторая строка каждого набора содержит бинарную строку \(s\) длины \(n\), состоящую только из символов 0 и 1.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ по модулю \(998\,244\,353\).

Примечание

В первом и во втором примерах \(f(s[1,1])=1\).

В третьем примере ответ равен \(f(s[1,1])+f(s[1,2])=1+2=3\).

В четвертом примере ответ равен \(f(s[1,1])+f(s[1,2])+f(s[1,3])=1+1+1=3\).

\(f(\mathtt{11})=2\), так как существуют два хороших расширения: 101 и 111.

\(f(\mathtt{01})=1\), так как существует только одно хорошее расширение: 011.

E. Сумма на дереве

Деревья Комбинаторика математика *2600

Назовем реберно-взвешенное дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\), хорошим, если вес каждого ребра равен либо \(1\), либо \(-1\), и для каждой вершины \(i\) произведение весов ребер, смежных с вершиной \(i\), равно \(-1\).

Вам дано положительное целое число \(n\). Всего существует \(n^{n-2} \cdot 2^{n-1}\) различных\(^\dagger\) реберно-взвешенных деревьев на \(n\) вершинах, пронумерованных от \(1\) до \(n\), таких, что вес каждого ребра равен либо \(1\), либо \(-1\). Ваша задача — найти сумму \(d(1,n)^\ddagger\) по всем таким деревьям, которые являются хорошими. Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).

\(^\dagger\) Два дерева называются различными, если:

  • существуют две вершины такие, что в одном дереве между ними есть ребро, а в другом нет; или
  • существуют две вершины такие, что в обоих деревьях между ними есть ребро, но вес этого ребра в одном дереве отличается от веса этого ребра в другом дереве.

Обратите внимание, что по формуле Кэли число деревьев с \(n\) пронумерованными вершинами равно \(n^{n-2}\). Так как у нас \(n-1\) ребро, то для каждого дерева существует \(2^{n-1}\) способ выбрать веса ребер (которые могут быть либо \(1\), либо \(-1\)). Поэтому общее число различных реберно-взвешенных деревьев равно \(n^{n-2} \cdot 2^{n-1}\).

\(^\ddagger\) \(d(u,v)\) обозначает сумму весов ребер на единственном простом пути от \(u\) до \(v\).

Входные данные

Единственная строка содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — ответ по модулю \(998\,244\,353\).

Примечание

В первом примере есть только \(1\) различное хорошее дерево. Значение \(d(1,2)\) для этого дерева равно \(-1\), что равно \(998\,244\,352\) по модулю \(998\,244\,353\).

Во втором примере значение \(d(1,1)\) для любого дерева равно \(0\), поэтому ответ равен \(0\).

В третьем примере \(16\) различных хороших деревьев. Значение \(d(1,4)\) равно:

  • \(-2\) для \(2\) деревьев;
  • \(-1\) для \(8\) деревьев;
  • \(0\) для \(4\) деревьев;
  • \(1\) для \(2\) деревьев.

Сумма \(d(1,4)\) по всем деревьям равна \(2 \cdot (-2) + 8 \cdot (-1) + 4 \cdot (0) + 2 \cdot (1) = -10\), что равно \(998\,244\,343\) по модулю \(998\,244\,353\).

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\).

B. Испепеление

Бинарный поиск математика Перебор реализация сортировки Структуры данных *1200

Для уничтожения человечества, Ассоциация Монстров отправила \(n\) монстров на Землю. \(i\)-й монстр имеет здоровье \(h_i\) и силу \(p_i\).

С его одной атакой, настоящей спиральной испепеляющей пушкой, Генос может нанести \(k\) урона всем живым монстрам. Другими словами, Генос может уменьшить здоровье всех монстров на \(k\) (если \(k > 0\)) одной атакой.

Однако после каждой атаки Геноса монстры продвигаются вперед. Совместными усилиями они уменьшают урон от атаки Геноса на силу \(^\dagger\)самого слабого монстра \(^\ddagger\)оставшегося в живых. Иными словами, минимальное значение \(p_i\) по всем живым в текущий момент монстрам вычитается из \(k\) после каждой атаки.

\(^\dagger\)Самый слабый монстр — это тот, у кого наименьшая сила.

\(^\ddagger\)Монстр жив, если его здоровье строго больше \(0\).

Удастся ли Геносу убить всех монстров?

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Описания данных следуют далее.

Первая строка каждого набора входных данных содержит два целых числа, \(n\) и \(k\) (\(1 \le n, k \le 10^5\)) — количество монстров и начальный урон от атаки Геноса. Затем следуют две строки, каждая из которых содержит \(n\) целых чисел, описывающих массивы \(h\) и \(p\) (\(1 \le h_i, p_i \le 10^9\)).

Гарантируется, что сумма \(n\)по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ — «YES» (без кавычек) если Генос может убить всех монстров и «NO» в противном случае.

Примечание

В первом примере, после первой атаки Геноса, \(h\) и \(k\) станут:

  • \(h: [11,0,6,2,3,0]\)
  • \(k: 7-1 = 6\)
После второй атаки:
  • \(h: [5,0,0,0,0,0]\)
  • \(k: 6-2 = 4\)
После третьей атаки:
  • \(h: [1,0,0,0,0,0]\)
  • \(k: 4-2 = 2\)
После четвертой атаки:
  • \(h: [0,0,0,0,0,0]\)
Поскольку Генос может убить всех монстров, ответ YES.

D. Допустимые битонические перестановки

дп Комбинаторика математика реализация теория чисел *2200

Вам дано пять целых чисел \(n\), \(i\), \(j\), \(x\), и \(y\). Найдите количество битонических перестановок \(B\), чисел от \(1\) до \(n\), таких, что \(B_i=x\), и \(B_j=y\). Так как ответ может быть очень большим, выведите его по модулю \(10^9+7\).

Битоническая перестановка — это перестановка чисел, такая, что элементы перестановки сначала увеличиваются до определенного индекса \(k\), \(2 \le k \le n-1\), а затем уменьшайте до конца. Обратитесь к примечаниям для получения дополнительных разъяснений.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) —количество наборов входных данных.

В единственной строке набора входных данных содержатся целые числа, \(n\), \(i\), \(j\), \(x\), и \(y\) (\(3 \le n \le 100\) и \(1 \le i,j,x,y \le n\)).

Гарантируется, что \(i < j\) и \(x \ne y\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую количество битонических перестановок, удовлетворяющих вышеуказанным условиям по модулю \(10^9+7\).

Примечание

Перестановка — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в любом порядке. Например, \([2,3,1,5,4]\) это перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но \(4\) встречается в массиве).

Массив из \(n \ge 3\) элементов битонический, если его элементы сначала увеличиваются до индекса \(k\), \(2 \le k \le n-1\), а затем уменьшается до конца. Например, \([2,5,8,6,1]\) это битонический массив с \(k=3\), но \([2,5,8,1,6]\) не битонический массив (элементы сначала возрастают до \(k=3\), затем убывают, а затем возрастают снова).

Битоническая перестановка — это перестановка, в которой элементы следуют вышеупомянутому битоническому свойству. Например, \([2,3,5,4,1]\) является битонической перестановкой, но \([2,3,5,1,4]\) не является битонической перестановкой (поскольку это не битонический массив) и \([2,3,4,4,1]\)также не является битонической перестановкой (поскольку это не перестановка).

Объяснение примера из условий

Для \(n=3\), возможные перестановки это \([1,2,3]\), \([1,3,2]\), \([2,1,3]\), \([2,3,1]\), \([3,1,2]\), и \([3,2,1]\). Среди приведенных перестановок битоническими перестановками являются \([1,3,2]\) и \([2,3,1]\).

В первом тестовом примере ожидаемая перестановка должна иметь вид \([2,?,3]\), который не удовлетворяет ни одной из двух битонических перестановок с \(n=3\), следовательно, ответ равен 0.

Во втором тестовом примере ожидаемая перестановка должна иметь вид \([?,3,2]\), который удовлетворяет только битонической перестановке \([1,3,2]\), следовательно, ответ 1.

E. Пары вершин

графы дп математика теория чисел *2200

Давайте назовем упорядоченную пару вершин \((u, v)\) в ориентированном графе однонаправленный если \(u \neq v\), существует путь от \(u\) до \(v\), и не существует пути от \(v\) до \(u\).

Ориентированный граф называется \(p\)-достижимым, если он содержит ровно \(p\) упорядоченных пар вершин \((u, v)\) таких, что \(u < v\), \(u\) и \(v\) достижимы друг из друга. Найдите минимальное количество вершин, необходимое для создания \(p\)-достижимого ориентированного.

Еще, среди всех \(p\)-достижимых ориентированных графов с минимальным числом вершин, пусть \(G\) обозначает граф, который максимизирует количество однонаправленных пар вершин. Найдите это число.

Входные данные

Первая и единственная строка содержит одно целое число \(p\) (\(0 \le p \le 2 \cdot 10^5\)) — количество упорядоченных пар вершин.

Выходные данные

Выведите одну строку, содержащую два целых числа — минимальное количество вершин, необходимое для создания \(p\)-достижимого ориентированного графа, и максимальное количество однонаправленных пар вершин среди всех таких \(p\)-достижимых ориентированных графов с минимальным количеством вершин.

Примечание

В первом примере минимальное количество вершин, необходимое для создания \(3\)-достижимого ориентированного графа это \(3\). Среди всех \(3\)-достижимых ориентированных графов с \(3\) вершинами, следующий граф \(G\) является одним из графиков с максимальным количеством однонаправленных пар вершин, который является \(0\).

B. Дореми и идеальный урок по математике

математика теория чисел *900

«Все-все! Идеальный урок Дореми по математике уже начинается! Присаживайтесь и хорошо поработайте, если хотите иметь такой же IQ, как у меня!» На сегодняшнем уроке Дореми обучает всех вычитанию. И прямо сейчас она дает вам задание, чтобы проверить, насколько вы внимательно слушаете.

Вам дано множество \(S\), содержащее положительные целые числа. Вы можете выполнить следующую операцию несколько (возможно, ноль) раз:

  • выбрать два целых числа \(x\) и \(y\) из множества \(S\) такие, что \(x > y\) и \(x - y\) не принадлежит множеству \(S\).
  • добавить \(x-y\) в множество \(S\).

Вам нужно сказать Дореми, какое максимальное количество чисел может быть в \(S\), если выполнять все операции оптимально. Можно показать, что это количество ограничено.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n\le 10^5\)) — размер множества \(S\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(1\le a_1 < a_2 < \cdots < a_n \le 10^9\)) — положительные числа в \(S\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных вам нужно вывести максимально возможное количество чисел в \(S\). Можно показать, что это количество ограничено.

Примечание

В первом примере не существует подходящих \(x\) и \(y\). Максимальное количество чисел в \(S\) равно \(2\).

Во втором примере:

  • Изначально \(S=\{5,10,25\}\). Можно выбрать \(x=25\), \(y=10\) и добавить \(x-y=15\) в множество.
  • Теперь \(S=\{5,10,15,25\}\). Можно выбрать \(x=25\), \(y=5\) и добавить \(x-y=20\) в множество.
  • Теперь \(S=\{5,10,15,20,25\}\). Теперь нельзя выполнить никакую операцию.

После выполнения этих операций \(S\) будет содержать \(5\) чисел. Можно показать, что не существует последовательности операций, после которой в \(S\) будет более \(5\) чисел.

D. Дореми и игра с колышками

дп Комбинаторика математика *2000

У Дореми есть \(n+1\) колышек. \(n\) красных колышков расставлены в вершины правильного \(n\)-угольника и пронумерованы от \(1\) до \(n\) против часовой стрелки. Также есть синий колышек несколько меньшего диаметра по центру многоугольника. Вокруг красных колышков натянута резинка.

Дореми сегодня очень скучно, поэтому она решила сыграть в игру. Изначально у нее есть пустой массив \(a\). До тех пор, пока резинка не коснется синего колышка, она будет повторять следующую операцию:

  1. выбрать \(i\) (\(1 \leq i \leq n\)) такое, что красный колышек номер \(i\) еще не был убран;
  2. убрать красный колышек номер \(i\);
  3. добавить \(i\) в конец массива \(a\).

Дореми интересно, сколько различных массивов \(a\) может получиться как итог данного процесса. Так как ответ может быть большим, выведите его по модулю \(p\). Гарантируется, что \(p\) — простое число.

Игра с \(n=9\) и \(a=[7,5,2,8,3,9,4]\), а также игра с \(n=8\) и \(a=[3,4,7,1,8,5,2]\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(p\) (\(3 \leq n \leq 5000\), \(10^8 \le p \le 10^9\)) — количество красных колышков и модуль соответственно.

Гарантируется, что \(p\) — простое число.

Выходные данные

Выведите одно целое число — количество различных массивов \(a\), которые могут получиться как итог данной игры по модулю \(p\).

Примечание

В первом примере \(n=4\), в числе прочих могут получиться следующие массивы \(a\): \([4,2,3]\), \([1,4]\). Однако массив \(a\) не может быть равен \([1]\) или \([1,4,3]\).

E. Exchange

математика Перебор *1000

Monocarp is playing a MMORPG. There are two commonly used types of currency in this MMORPG — gold coins and silver coins. Monocarp wants to buy a new weapon for his character, and that weapon costs \(n\) silver coins. Unfortunately, right now, Monocarp has no coins at all.

Monocarp can earn gold coins by completing quests in the game. Each quest yields exactly one gold coin. Monocarp can also exchange coins via the in-game trading system. Monocarp has spent days analyzing the in-game economy; he came to the following conclusion: it is possible to sell one gold coin for \(a\) silver coins (i. e. Monocarp can lose one gold coin to gain \(a\) silver coins), or buy one gold coin for \(b\) silver coins (i. e. Monocarp can lose \(b\) silver coins to gain one gold coin).

Now Monocarp wants to calculate the minimum number of quests that he has to complete in order to have at least \(n\) silver coins after some abuse of the in-game economy. Note that Monocarp can perform exchanges of both types (selling and buying gold coins for silver coins) any number of times.

Input

The first line contains one integer \(t\) (\(1 \le t \le 10^4\)) — the number of test cases.

Each test case consists of one line containing three integers \(n\), \(a\) and \(b\) (\(1 \le n \le 10^7\); \(1 \le a, b \le 50\)).

Output

For each test case, print one integer — the minimum possible number of quests Monocarp has to complete.

Note

In the first test case of the example, Monocarp should complete \(4\) quests, and then sell \(4\) gold coins for \(100\) silver coins.

In the second test case, Monocarp should complete \(400000\) quests, and then sell \(400000\) gold coins for \(10\) million silver coins.

In the third test case, Monocarp should complete \(1\) quest, sell the gold coin for \(50\) silver coins, buy a gold coin for \(48\) silver coins, and then sell it again for \(50\) coins. So, he will have \(52\) silver coins.

In the fourth test case, Monocarp should complete \(1\) quest and then sell the gold coin he has obtained for \(50\) silver coins.

J. Hero to Zero

математика Паросочетания *2900

There are no heroes in this problem. I guess we should have named it "To Zero".

You are given two arrays \(a\) and \(b\), each of these arrays contains \(n\) non-negative integers.

Let \(c\) be a matrix of size \(n \times n\) such that \(c_{i,j} = |a_i - b_j|\) for every \(i \in [1, n]\) and every \(j \in [1, n]\).

Your goal is to transform the matrix \(c\) so that it becomes the zero matrix, i. e. a matrix where every element is exactly \(0\). In order to do so, you may perform the following operations any number of times, in any order:

  • choose an integer \(i\), then decrease \(c_{i,j}\) by \(1\) for every \(j \in [1, n]\) (i. e. decrease all elements in the \(i\)-th row by \(1\)). In order to perform this operation, you pay \(1\) coin;
  • choose an integer \(j\), then decrease \(c_{i,j}\) by \(1\) for every \(i \in [1, n]\) (i. e. decrease all elements in the \(j\)-th column by \(1\)). In order to perform this operation, you pay \(1\) coin;
  • choose two integers \(i\) and \(j\), then decrease \(c_{i,j}\) by \(1\). In order to perform this operation, you pay \(1\) coin;
  • choose an integer \(i\), then increase \(c_{i,j}\) by \(1\) for every \(j \in [1, n]\) (i. e. increase all elements in the \(i\)-th row by \(1\)). When you perform this operation, you receive \(1\) coin;
  • choose an integer \(j\), then increase \(c_{i,j}\) by \(1\) for every \(i \in [1, n]\) (i. e. increase all elements in the \(j\)-th column by \(1\)). When you perform this operation, you receive \(1\) coin.

You have to calculate the minimum number of coins required to transform the matrix \(c\) into the zero matrix. Note that all elements of \(c\) should be equal to \(0\) simultaneously after the operations.

Input

The first line contains one integer \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

The second line contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^8\)).

The third line contains \(n\) integers \(b_1, b_2, \dots, b_n\) (\(0 \le b_j \le 10^8\)).

Output

Print one integer — the minimum number of coins required to transform the matrix \(c\) into the zero matrix.

Note

In the first example, the matrix looks as follows:

111
000
111

You can turn it into a zero matrix using \(2\) coins as follows:

  • subtract \(1\) from the first row, paying \(1\) coin;
  • subtract \(1\) from the third row, paying \(1\) coin.

In the second example, the matrix looks as follows:

221
001
221

You can turn it into a zero matrix using \(5\) coins as follows:

  • subtract \(1\) from the first row, paying \(1\) coin;
  • subtract \(1\) from the third row, paying \(1\) coin;
  • subtract \(1\) from the third row, paying \(1\) coin;
  • subtract \(1\) from \(a_{2,3}\), paying \(1\) coin;
  • add \(1\) to the third column, receiving \(1\) coin;
  • subtract \(1\) from the first row, paying \(1\) coin;
  • subtract \(1\) from \(a_{2,3}\), paying \(1\) coin.

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.

M. Minimum LCM

математика теория чисел *1000

You are given an integer \(n\).

Your task is to find two positive (greater than \(0\)) integers \(a\) and \(b\) such that \(a+b=n\) and the least common multiple (LCM) of \(a\) and \(b\) is the minimum among all possible values of \(a\) and \(b\). If there are multiple answers, you can print any of them.

Input

The first line contains a single integer \(t\) (\(1 \le t \le 100\)) — the number of test cases.

The first line of each test case contains a single integer \(n\) (\(2 \le n \le 10^9\)).

Output

For each test case, print two positive integers \(a\) and \(b\) — the answer to the problem. If there are multiple answers, you can print any of them.

Note

In the second example, there are \(8\) possible pairs of \(a\) and \(b\):

  • \(a = 1\), \(b = 8\), \(LCM(1, 8) = 8\);
  • \(a = 2\), \(b = 7\), \(LCM(2, 7) = 14\);
  • \(a = 3\), \(b = 6\), \(LCM(3, 6) = 6\);
  • \(a = 4\), \(b = 5\), \(LCM(4, 5) = 20\);
  • \(a = 5\), \(b = 4\), \(LCM(5, 4) = 20\);
  • \(a = 6\), \(b = 3\), \(LCM(6, 3) = 6\);
  • \(a = 7\), \(b = 2\), \(LCM(7, 2) = 14\);
  • \(a = 8\), \(b = 1\), \(LCM(8, 1) = 8\).

In the third example, there are \(5\) possible pairs of \(a\) and \(b\):

  • \(a = 1\), \(b = 4\), \(LCM(1, 4) = 4\);
  • \(a = 2\), \(b = 3\), \(LCM(2, 3) = 6\);
  • \(a = 3\), \(b = 2\), \(LCM(3, 2) = 6\);
  • \(a = 4\), \(b = 1\), \(LCM(4, 1) = 4\).

D. Удачные цепочки

математика теория чисел *1600

Назовем пару положительных целых чисел \((x, y)\) удачной, если их наибольший общий делитель равен \(1\) (\(\gcd(x, y) = 1\))

Назовем цепочкой, порожденной \((x, y)\), последовательность пар \((x, y)\), \((x + 1, y + 1)\), \((x + 2, y + 2)\), \(\dots\), \((x + k, y + k)\) для некоторого целого \(k \ge 0\). Длиной цепочки назовем количество элементов, из которой она состоит, или \((k + 1)\).

Назовем цепочку удачной, если все элементы этой цепочки удачные.

Вам заданы \(n\) пар \((x_i, y_i)\). Посчитайте для каждой пары длину наидлиннейшей удачной цепочки, порожденной данной парой. Заметим, что если \((x_i, y_i)\) не является удачной, то порожденная этой парой цепочка имеет длину \(0\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество пар.

В следующих \(n\) строках заданы \(n\) пар — по одной в строке. В \(i\)-й строке заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i < y_i \le 10^7\)) — соответствующая пара.

Выходные данные

Выведите \(n\) чисел, где \(i\)-е число означает максимальную длину удачной цепочки, порожденной парой \((x_i, y_i)\) или \(-1\), если цепочка может быть бесконечно длинной.

Примечание

В первом наборе входных данных \(\gcd(5, 15) = 5 > 1\), то есть данная пара не является удачной, а потому длина удачной цепочки равна \(0\).

Во втором наборе входных данных \(\gcd(13 + 1, 37 + 1) = \gcd(14, 38) = 2\). А потому удачная цепочка состоит из одной пары \((13, 37)\).

D. Плей-офф

дп жадные алгоритмы Комбинаторика Конструктив математика *1500

\(2^n\) команд участвуют в плей-офф турнире. Турнир состоит из \(2^n - 1\) игры. Они проводятся следующим образом: на первом этапе команды делятся на пары: команда \(1\) играет против команды \(2\), команда \(3\) играет против команды \(4\) и так далее (таким образом, в этой фазе будет сыграно \(2^{n-1}\) игры). Когда команда проигрывает игру, она выбывает, и каждая игра приводит к выбыванию одной команды (нет ничьих). После этого остается \(2^{n-1}\) команд. Если остается только одна команда, она объявляется чемпионом; в противном начинается второй этап, где играется еще \(2^{n-2}\) игр: в первой из них победитель игры «\(1\) против \(2\)» играет против победителя игры «\(3\) против \(4\)», затем победитель игры «\(5\) против \(6\)» играет против победителя игры «\(7\) против \(8\)» и так далее. Этот процесс повторяется до тех пор, пока не останется только одна команда.

Уровень навыков \(i\)-й команды равен \(p_i\), где \(p\) — перестановка чисел \(1\), \(2\), ..., \(2^n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(2^n\) встречается ровно один раз).

Задана строка \(s\), состоящая из \(n\) символов. Эти символы обозначают результаты игр на каждом этапе турнира следующим образом:

  • если \(s_i\) равно 0, то на \(i\)-м этапе турнира (этапе с \(2^{n-i}\) играми) каждую игру выигрывает команда с меньшим уровнем навыков;
  • если \(s_i\) равно 1, то на \(i\)-м этапе турнира (этапе с \(2^{n-i}\) играми) каждую игру выигрывает команда с большим уровнем навыков.

Назовем целое число \(x\) выигрышным, если существует такая перестановка \(p\), что команда с уровнем навыков \(x\) выиграет турнир. Найдите все выигрышные целые числа.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 18\)).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из символов 0 и/или 1.

Выходные данные

Выведите все выигрышные целые числа \(x\) в порядке их возрастания.

E. Algebra Flash

meet-in-the-middle битмаски графы Деревья дп математика Перебор *2500

Выпущена новая версия: Algebra Flash 2.2

Список изменений:

  • Новый игровой режим!

Благодарим вас за непрерывную поддержку игры!

И это все? С небольшим разочарованием вы запускаете игру и нажимаете на новый режим. Написано «Цветные платформы».

В ряд расположены \(n\) платформ, пронумерованных от \(1\) до \(n\). В игре доступны \(m\) цветов, пронумерованных от \(1\) до \(m\). \(i\)-я платформа раскрашена в цвет \(c_i\).

Вы начинаете на платформе \(1\) и хотите добраться до платформы \(n\). За один ход вы можете прыгнуть с некоторой платформы \(i\) на платформы \(i + 1\) или \(i + 2\).

Все платформы изначально деактивированы (включая платформы \(1\) и \(n\)). Для каждого цвета \(j\) можно заплатить \(x_j\) монет, чтобы активировать все платформы этого цвета.

Вы хотите включить некоторые платформы так, чтобы можно было начать на активированной платформе \(1\), попрыгать по некотором активированным платформам и достичь платформы \(n\).

Какое наименьшее количество монет потребуется для достижения этого?

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le m \le 40\)) — количество платформ и количество цветов, соответственно.

Во второй строке записаны \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le m\)) — цвета платформ.

В третьей строке записаны \(m\) целых чисел \(x_1, x_2, \dots, x_m\) (\(1 \le x_i \le 10^7\)) — стоимости включения всех платформ каждого цвета.

Выходные данные

Выведите наименьшее количество монет, которое потребуется того, чтобы можно было начать на активированной платформе \(1\), попрыгать по некотором активированным платформам и достичь платформы \(n\).

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}]\).

E. Частичная сортировка

Комбинаторика математика теория чисел *2300

Рассмотрим перестановку\(^\dagger\) \(p\) длины \(3n\). За один шаг вы можете выполнить одну из следующих операций:

  • Отсортировать первые \(2n\) элементов в возрастающем порядке.
  • Отсортировать последние \(2n\) элементов в возрастающем порядке.

Можно показать, что любую перестановку можно отсортировать по возрастанию, используя только эти операции. Пусть \(f(p)\) — минимальное количество операций, необходимых для сортировки перестановки \(p\) в возрастающем порядке.

По данному \(n\) найдите сумму \(f(p)\) по всем \((3n)!\) перестановкам \(p\) длины \(3n\).

Так как ответ может быть очень большим, выведите его по модулю простого числа \(M\).

\(^\dagger\) Перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но в массиве присутствует \(4\)).

Входные данные

Единственная строка ввода содержит два числа \(n\) и \(M\) (\(1 \leq n \leq 10^6\), \(10^8 \leq M \leq 10^9\)). Гарантируется, что \(M\) — простое число.

Выходные данные

Выведите ответ по модулю \(M\).

Примечание

В первом примере считается сумма по данным перестановкам:

  • \([1, 2, 3]\) требует \(0\) операций;
  • \([1, 3, 2]\) требует \(1\) операцию;
  • \([2, 1, 3]\) требует \(1\) операцию;
  • \([2, 3, 1]\) требует \(2\) операции;
  • \([3, 1, 2]\) требует \(2\) операции;
  • \([3, 2, 1]\) требует \(3\) операции.

Таким образом, ответ \(0+1+1+2+2+3=9\).

A. Узкая дорога

*особая задача математика *800

Колонна из \(n\) самокатов едет по узкой односторонней дороге в пункт Б. Самокаты пронумерованы от \(1\) до \(n\). Для каждого самоката \(i\) известно, что текущее расстояние от него до пункта Б равно \(a_i\) метров. При этом \(a_1 < a_2 < \ldots < a_n\), в частности, самокат \(1\) находится ближе всего к пункту Б, а самокат \(n\) — дальше всего.

Самокат с номером \(i\) движется в сторону пункта Б со скоростью \(i\) метров в секунду (то есть чем ближе самокат в колонне к пункту Б, тем медленнее он едет). Так как дорога узкая, самокаты не могут обгонять друг друга. Более того, соседние самокаты в колонне должны соблюдать дистанцию хотя бы в \(1\) метр. Поэтому когда более быстрый самокат догоняет более медленный, более быстрому приходится дальше ехать со скоростью более медленного, причём на расстоянии в \(1\) метр от него.

Определите, на каком расстоянии до пункта Б будет каждый самокат ровно через одну секунду.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 100\)) — число самокатов в колонне.

В \(i\)-й из следующих \(n\) строк задано одно целое число \(a_i\) (\(1 \le a_i \le 1000\); \(a_1 < a_2 < \ldots < a_n\)) — текущее расстояние от самоката \(i\) до пункта Б в метрах.

Выходные данные

Выведите \(n\) целых чисел — расстояния от самокатов \(1, 2, \ldots, n\) до пункта Б в метрах через одну секунду.

Примечание

В первом тесте самокаты пока не мешают друг другу ехать, поэтому каждый самокат \(i\) продвигается на \(i\) метров в сторону пункта Б.

Во втором тесте самокаты уже выстроились в колонне на расстоянии \(1\) метр друг от друга и вынуждены ехать со скоростью самого медленного самоката с номером \(1\).

B1. Копирование файлов I

*особая задача математика Перебор реализация *1000

В этой версии задачи размеры копируемых файлов не превышают \(1000\) байт.

Вы копируете с одного сервера на другой \(n\) файлов размером \(a_1, a_2, \ldots, a_n\) байт. Файлы копируются последовательно в заданном порядке.

При копировании вы видите два прогресс-бара: первый показывает процент скопированных данных в текущем файле, а второй — общий процент скопированных данных по всем \(n\) файлам. Оба процента отображаются округлёнными вниз до целого числа. Значения на прогресс-барах обновляются после копирования каждого байта.

Формально, после копирования байта номер \(x\) из файла номер \(i\) первый прогресс-бар показывает \(\lfloor \frac{100 \cdot x}{a_i} \rfloor\) процентов, а второй — \(\lfloor \frac{100 \cdot (a_1 + a_2 + \ldots + a_{i - 1} + x)}{a_1 + a_2 + \ldots + a_n} \rfloor\) процентов. В самом начале копирования оба прогресс-бара показывают \(0\) процентов.

Найдите все такие целые числа от \(0\) до \(100\) включительно, что существует момент времени, в который оба прогресс-бара одновременно показывают это число. Выведите эти числа в порядке возрастания.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 100\)) — число копируемых файлов.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 1000\)) — размеры файлов в байтах в том порядке, в котором они будут копироваться.

Выходные данные

Выведите в возрастающем порядке все числа от \(0\) до \(100\) включительно такие, что существует момент времени, в который на обоих прогресс-барах одновременно показывается это число.

Примечание

В первом тесте копируется всего один файл, поэтому оба прогресс-бара всегда показывают одинаковые значения.

Во втором тесте первый прогресс-бар сразу же уйдёт вперёд, потом сбросится в ноль и начнёт догонять второй прогресс-бар заново. В конце копирования прогресс-бары некоторое время будут показывать одно и то же число.

B2. Копирование файлов II

*особая задача Бинарный поиск математика Перебор *1400

В этой версии задачи размеры копируемых файлов не превышают \(10^{10}\) байт.

Вы копируете с одного сервера на другой \(n\) файлов размером \(a_1, a_2, \ldots, a_n\) байт. Файлы копируются последовательно в заданном порядке.

При копировании вы видите два прогресс-бара: первый показывает процент скопированных данных в текущем файле, а второй — общий процент скопированных данных по всем \(n\) файлам. Оба процента отображаются округлёнными вниз до целого числа. Значения на прогресс-барах обновляются после копирования каждого байта.

Формально, после копирования байта номер \(x\) из файла номер \(i\) первый прогресс-бар показывает \(\lfloor \frac{100 \cdot x}{a_i} \rfloor\) процентов, а второй — \(\lfloor \frac{100 \cdot (a_1 + a_2 + \ldots + a_{i - 1} + x)}{a_1 + a_2 + \ldots + a_n} \rfloor\) процентов. В самом начале копирования оба прогресс-бара показывают \(0\) процентов.

Найдите все такие целые числа от \(0\) до \(100\) включительно, что существует момент времени, в который оба прогресс-бара одновременно показывают это число. Выведите эти числа в порядке возрастания.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 100\)) — число копируемых файлов.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{10}\)) — размеры файлов в байтах в том порядке, в котором они будут копироваться.

Выходные данные

Выведите в возрастающем порядке все числа от \(0\) до \(100\) включительно такие, что существует момент времени, в который на обоих прогресс-барах одновременно показывается это число.

Примечание

В первом тесте копируется всего один файл, поэтому оба прогресс-бара всегда показывают одинаковые значения.

Во втором тесте первый прогресс-бар сразу же уйдёт вперёд, потом сбросится в ноль и начнёт догонять второй прогресс-бар заново. В конце копирования прогресс-бары некоторое время будут показывать одно и то же число.

Обратите внимание, что третий тест в этой версии задачи отличается от третьего теста в предыдущей версии задачи.

C. Косия и теория чисел

китайская теорема об остатках математика Перебор теория чисел *1700

У Джой есть массив \(a\) из \(n\) положительных целых чисел. Косия хочет, чтобы вы определили, существует ли положительное целое число \(x > 0\) такое, что \(\gcd(a_i+x,a_j+x)=1\) для всех \(1 \leq i < j \leq n\).

Здесь \(\gcd(y, z)\) обозначает наибольший общий делитель (НОД) чисел \(y\) и \(z\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq {10}^{18}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует положительное целое число \(x\) такое, что \(\gcd(a_i+x,a_j+x)=1\) для всех \(1 \leq i < j \leq n\), и «NO» (без кавычек) иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере можно взять \(x = 4\). Это подходит, если:

  • Если \(i=1\) и \(j=2\), то \(\gcd(a_i+x,a_j+x)=\gcd(5+4,7+4)=\gcd(9,11)=1\).
  • Если \(i=1\) и \(j=3\), то \(\gcd(a_i+x,a_j+x)=\gcd(5+4,10+4)=\gcd(9,14)=1\).
  • Если \(i=2\) и \(j=3\), то \(\gcd(a_i+x,a_j+x)=\gcd(7+4,10+4)=\gcd(11,14)=1\).

Во втором примере при любом выборе \(x\) получается \(\gcd(a_1 + x, a_2 + x) = \gcd(3+x,3+x)=3+x\). Поэтому не существует подходящего значения \(x\).

E. Косия и дерево

Деревья дп Комбинаторика математика поиск в глубину и подобное снм Теория вероятностей *2400

У Ими есть неориентированное дерево из \(n\) вершин, ребра которого пронумерованы от \(1\) до \(n-1\). \(i\)-е ребро соединят вершины \(u_i\) и \(v_i\). Также на дереве находятся \(k\) бабочек. Изначально \(i\)-я бабочка находится в вершине \(a_i\). Все значения \(a\) попарно различны.

Косия играет в игру следующим образом.

  • Для \(i = 1, 2, \dots, n - 1\) Косия выбирает одно из направлений \(i\)-го ребра (\(u_i \rightarrow v_i\) или \(v_i \rightarrow u_i\)) с одинаковой вероятностью.
  • Для \(i = 1, 2, \dots, n - 1\), если в начальной вершине \(i\)-го ребра есть бабочка, а в конечной вершине нет бабочки, то эта бабочка перелетает в конечную вершину. Обратите внимание, что операции выполняются для ребер \(1, 2, \dots, n - 1\) по порядку, а не одновременно.
  • Косия выбирает две бабочки из \(k\) бабочек с равной вероятностью для всех \(\frac{k(k-1)}{2}\) способов выбрать две бабочки, затем она вычисляет расстояние\(^\dagger\) между двумя вершинами, и объявляет это своим счетом.

Косия хочет, чтобы вы вычислили математическое ожидание ее счета по модулю \(998\,244\,353^\ddagger\).

\(^\dagger\) Расстоянием между двумя вершинами в дереве называется количество ребер на (единственном) простом пути между ними.

\(^\ddagger\) Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \leq k \leq n \leq 3 \cdot {10}^5\)) — размер дерева и количество бабочек.

Вторая строка содержит \(k\) целых чисел \(a_1, a_2, \dots, a_k\) (\(1 \leq a_i \leq n\)) — начальные позиции бабочек. Гарантируется, что все позиции попарно различны.

\(i\)-я из следующих \(n − 1\) строк содержит два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\)) — вершины, которые соединяет \(i\)-е ребро.

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите одно целое число — математическое ожидание счета Косии по модулю \(998\,244\,353\).

Примечание

Дерево из первого примера показано ниже. Вершины с бабочками отмечены жирным.

Существуют только \(2\) бабочки, поэтому выбор бабочек фиксирован. Рассмотрим следующие \(4\) случая:

  • Ориентация ребер \(1 \rightarrow 2\) и \(2 \rightarrow 3\): бабочка из вершины \(1\) перемещается в вершину \(2\), а бабочка в вершине \(3\) не двигается. Расстояние между вершинами \(2\) и \(3\) равно \(1\).
  • Ориентация ребер \(1 \rightarrow 2\) и \(3 \rightarrow 2\): бабочка из вершины \(1\) перемещается в вершину \(2\), а бабочка в вершине \(3\) не двигается, потому что вершина \(2\) занята. Расстояние между вершинами \(2\) и \(3\) равно \(1\).
  • Ориентация ребер \(2 \rightarrow 1\) и \(2 \rightarrow 3\): бабочки в вершинах \(1\) и \(3\) не двигаются. Расстояние между вершинами \(1\) и \(3\) равно \(2\).
  • Ориентация ребер \(2 \rightarrow 1\) и \(3 \rightarrow 2\): бабочка в вершине \(1\) не двигается, а бабочка из вершины \(3\) перемещается в вершину \(2\). Расстояние между вершинами \(1\) и \(2\) равно \(1\).

Таким образом, математическое ожидание счета Косии равно \(\frac {1+1+2+1} {4} = \frac {5} {4}\), что есть \(748\,683\,266\) по модулю \(998\,244\,353\).

Дерево из второго примера показано ниже. Вершины с бабочками отмечены жирным. Математическое ожидание счета Косии равно \(\frac {11} {6}\), что есть \(831\,870\,296\) по модулю \(998\,244\,353\).

F. Кохиа и последовательность

битмаски дп Комбинаторика математика теория чисел *3100

У Мари есть три целых числа \(n\), \(x\) и \(y\).

Назовем массив \(a\) из \(n\) неотрицательных целых чисел хорошим, если он удовлетворяет следующим ограничениям:

  • \(a_1+a_2+\ldots+a_n=x\), и
  • \(a_1 \, | \, a_2 \, | \, \ldots \, | \, a_n=y\), где \(|\) обозначает операцию побитового ИЛИ.

Значением хорошего массива называется значение \(a_1 \oplus a_2 \oplus \ldots \oplus a_n\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Косия хочет, чтобы вы нашли побитовое исключающее ИЛИ значений всех хороших массивов. Если хороших массивов не существует, выведите \(0\).

Входные данные

Первая строка содержит три целых числа \(n\), \(x\) и \(y\) (\(1 \leq n < 2^{40}\), \(0 \leq x < 2^{60}\), \(0 \leq y < 2^{20}\)).

Выходные данные

Выведите одно целое число — побитовое исключающее ИЛИ значений всех хороших массивов.

Примечание

В первом примере есть \(12\) хороших массивов, они перечислены ниже.

  • \([0,2,3]\), \([0,3,2]\), \([2,0,3]\), \([2,3,0]\), \([3,0,2]\) и \([3,2,0]\): значение равно \(0 \oplus 2 \oplus 3 = 1\);
  • \([1, 2, 2]\), \([2, 1, 2]\) and \([2, 2, 1]\): значение равно \(1 \oplus 2 \oplus 2 = 1\);
  • \([1, 1, 3]\), \([1, 3, 1]\) and \([3, 1, 1]\): значение равно \(1 \oplus 1 \oplus 3 = 3\).

Поэтому побитовое исключющее ИЛИ значений всех хороших массивов равно \(\underbrace{1 \oplus \ldots \oplus 1}_{9\text{ раз}} \oplus 3 \oplus 3 \oplus 3 = 2\).

Во втором примере нет хороших массивов. Ответ должен быть \(0\).

G. Кохиа и скобки

бпф математика разделяй и властвуй *3400

У Чию есть скобочная последовательность\(^\dagger\) \(s\) длины \(n\). Пусть \(k\) равно минимальному числу символов, которое Чию должна удалить из \(s\), чтобы сделать \(s\) правильной\(^\ddagger\).

Теперь Косия хочет, чтобы вы посчитали количество способов удалить \(k\) символов из \(s\) так, чтобы \(s\) стала правильной, по модулю \(998\,244\,353\).

Обратите внимание, что два способа удалить символы считаются различными, если и только если множества удаленных индексов различаются.

\(^\dagger\) Скобочной последовательностью называется строка, состоящая только из символов «(» и «)».

\(^\ddagger\) Скобочная последовательность называется правильной, если ее можно превратить в корректное математическое выражение, добавляя только символы + и 1. Например, последовательности (())(), (), (()(())) и пустая строка являются правильными, а )(, (() и (()))( — нет.

Входные данные

Первая строка содержит строку \(s\) (\(1 \leq |s| \leq 5 \cdot {10}^5\)) — скобочную последовательность.

Гарантируется, что \(s\) содержит только символы «(» и «)».

Выходные данные

Выведите одно целое число — количество способов удалить \(k\) символов из \(s\) так, чтобы \(s\) стала правильной, по модулю \(998\,244\,353\).

Примечание

В первом примере можно показать, что минимальное количество символов, которое нужно удалить, равно \(2\). Есть \(4\) способа удалить \(2\) символа так, чтобы \(s\) стала правильной, как показано ниже. Удаленные символы показаны красным.

  • \(\texttt{(} \color{Red}{\texttt{)}} \texttt{)} \color{Red}{\texttt{(}} \texttt{(} \texttt{)}\),
  • \(\texttt{(} \texttt{)} \color{Red}{\texttt{)}} \color{Red}{\texttt{(}} \texttt{(} \texttt{)}\),
  • \(\texttt{(} \color{Red}{\texttt{)}} \texttt{)} \texttt{(} \color{Red}{\texttt{(}} \texttt{)}\),
  • \(\texttt{(} \texttt{)} \color{Red}{\texttt{)}} \texttt{(} \color{Red}{\texttt{(}} \texttt{)}\).

Во втором примере единственный способ сделать \(s\) сбалансированной — удалить единственную скобку, чтобы получить пустую скобочную последовательность, которая считается сбалансированной.

A. Хоссам и комбинации

Комбинаторика математика сортировки *900

Хоссам проснулся, ему стало скучно, и поэтому он решил придумать интересный массив, позвав своего друга Хазема.

Сейчас у них есть массив \(a\), состоящий из \(n\) положительных целых чисел. Хоссам выберет число \(a_i\), Хазем выберет число \(a_j\).

Посчитайте количество интересных пар \((a_i, a_j)\), удовлетворяющих всем следующим условиям:

  1. \(1 \le i, j \le n\);
  2. \(i \neq j\);
  3. Модуль разности \(|a_i - a_j|\) должен быть равен максимальному модулю разности по всем парам в массиве. Более формально: \(|a_i - a_j| = \max_{1 \le p, q \le n} |a_p - a_q|\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(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\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество интересных пар \((a_i, a_j)\)

Примечание

В первом наборе есть две интересные пары:

  • Хоссам выбирает четвертое число \(8\), Хазем выбирает пятое число \(1\).
  • Хоссам выбирает пятое число \(1\), Хазем выбирает четвертое число \(8\).

Во втором наборе есть четыре интересные пары:

  • Хоссам выбирает второе число \(2\), Хазем выбирает шестое число \(10\).
  • Хоссам выбирает шестое число \(10\), Хазем выбирает второе число \(2\).
  • Хоссам выбирает пятое число \(2\), Хазем выбирает шестое число \(10\).
  • Хоссам выбирает шестое число \(10\), Хазем выбирает пятое число \(2\).

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\) с максимально возможной характеристикой. Если ответов несколько, выведите любой из них.

D. Абсолютная сортировка

Конструктив математика *1400

Дан массив \(a\), состоящий из \(n\) целых чисел. Массив считается отсортированным, если \(a_1 \le a_2 \le \dots \le a_n\).

Вы должны сделать массив \(a\) отсортированным, выполнив следующую операцию ровно один раз:

  • выбрать целое число \(x\), затем для каждого \(i \in [1, n]\) заменить \(a_i\) на \(|a_i - x|\).

Найдите любое значение \(x\), при котором массив станет отсортированным, или скажите, что такого не существует.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2 \cdot 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^8\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число \(x\) (\(0 \le x \le 10^9\)), которое сделает массив отсортированным. Можно показать, что если такое целое \(x\) существует, есть хотя бы одно такое целое число между \(0\) и \(10^9\).

Если такого целого числа не существует, выведите \(-1\). Если есть несколько подходящих значений \(x\), выведите любое из них.

Примечание

В первом наборе входных данных, если применить \(x = 4\), массив станет \([1, 1, 1, 1, 1]\).

В третьем наборе входных данных, если применить \(x = 0\), массив станет \([1, 2, 3, 4, 5, 6, 7, 8]\).

В четвертом наборе входных данных, если применить \(x = 42\), массив станет \([32, 37, 38, 39, 40, 41]\).

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\).

A. Добавьте плюсы и минусы

Конструктив математика *800

У AquaMoon есть строка \(a\), состоящая только из \(0\) и \(1\). Она хочет добавить \(+\) и \(-\) между всеми парами соседних позиций, чтобы абсолютное значение полученного выражения было как можно меньше. Можете ли вы ей помочь?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2\,000\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\))  — длину \(a\).

Вторая строка каждого набора входных данных содержит строку \(a\) длины \(n\), состоящую только из \(0\) и \(1\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке строку длины \(n - 1\), состоящую из \(-\) и \(+\). Если существует более одного способа расстановки знаков, дающего наименьшее возможное абсолютное значение, то принимается любой из них.

Примечание

В первом наборе входных данных мы можем получить выражение \(1 - 1 = 0\), с абсолютным значением \(0\).

Во втором наборе входных данных мы можем получить выражение \(0 + 1 - 1 + 0 + 1 = 1\), с абсолютным значением \(1\).

В третьем наборе входных данных мы можем получить выражение \(1 + 0 + 0 + 0 - 1 = 0\), с абсолютным значением \(0\).

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. Интересный ряд

битмаски математика *1600

Петя и его друг, робот Petya++, любят решать увлекательные математические задачи.

Однажды Petya++ придумал числа \(n\) и \(x\) и написал на доске \(\)n\ \&\ (n+1)\ \&\ \dots\ \&\ m = x,\(\) где \(\&\) обозначает операцию побитового И. Затем он предложил своему другу Пете найти такое минимальное \(m\) (\(m \ge n\)), что равенство на доске выполняется.

К сожалению, Петя не смог решить эту задачу в уме и решил прибегнуть к помощи компьютера. Он довольно быстро написал программу и нашел ответ.

А справитесь ли вы с этой непростой задачей?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(x\) (\(0\le n, x \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(m\) — минимальное число такое, что равенство на доске будет выполняться.

Если равенство не выполнится ни при каком \(m\), то выведите вместо этого \(-1\).

Можно показать, что если требуемое \(m\) существует, то оно не превосходит \(5 \cdot 10^{18}\).

Примечание

В первом примере \(10\ \&\ 11 = 10\), но \(10\ \&\ 11\ \&\ 12 = 8\), поэтому ответ равен \(12\).

Во втором примере \(10 = 10\), поэтому ответ равен \(10\).

В третьем примере можно убедиться, что требуемого \(m\) не существует, поэтому необходимо вывести \(-1\).

D. Дружелюбные пауки

графы кратчайшие пути математика поиск в глубину и подобное теория чисел *1800

На Марсе обитает необычный вид пауков — двоичные пауки.

Прямо сейчас марсианские ученые наблюдают за колонией из \(n\) пауков, \(i\)-й из которых имеет \(a_i\) лапок.

Некоторые пауки дружат между собой. А именно, \(i\)-й и \(j\)-й пауки являются друзьями, если \(\gcd(a_i, a_j) \ne 1\), т. е. существует некоторое число \(k \ge 2\) такое, что \(a_i\) и \(a_j\) одновременно делятся на \(k\) без остатка. Здесь \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Ученые обнаружили, что пауки могут передавать сообщения. Если два паука являются друзьями, то тогда они могут передать сообщение напрямую за одну секунду. Иначе паук должен передать сообщение своему другу, тот, в свою очередь, должен передать сообщение своему другу, и так далее, пока сообщение не дойдет до адресата.

Рассмотрим пример.

Пусть паук с восемью лапками хочет передать сообщение пауку с \(15\)-ю лапками. Напрямую он этого сделать не может, потому что \(\gcd(8, 15) = 1\). Зато он может передать сообщение через паука с шестью лапками, поскольку \(\gcd(8, 6) = 2\) и \(\gcd(6, 15) = 3\). Таким образом, сообщение дойдет за две секунды.

Прямо сейчас ученые наблюдают, как \(s\)-й паук хочет передать сообщение \(t\)-му пауку. У исследователей есть гипотеза, что пауки всегда передают сообщения оптимально. По этой причине ученым потребуется программа, которая смогла бы вычислить минимальное время передачи сообщения, а также вывести один из оптимальных маршрутов.

Входные данные

В первой строке входных данных находится целое число \(n\) (\(2 \le n \le 3\cdot10^5\)) — количество пауков в колонии.

Во второй строке входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 3\cdot10^5\)) — количество лапок у пауков.

В третьей строке входных данных находится два целых числа \(s\) и \(t\) (\(1 \le s, t \le n\)) — пауки, между которыми необходимо передать сообщение.

Выходные данные

Если передать сообщение между заданной парой пауков невозможно, выведите \(-1\).

Иначе в первой строке выходных данных выведите целое число \(t\) (\(t \ge 1\)) — количество пауков, которые участвуют в передаче сообщения (т. е. минимальное время доставки сообщения в секундах плюс один). Во второй строке выведите \(t\) различных целых чисел \(b_1, b_2, \ldots, b_t\) (\(1 \le b_i \le n\)) — номера пауков, через которых должно следовать сообщение, в порядке его следования от отправителя к получателю.

Если вариантов построения оптимального маршрута для сообщения несколько, то выведите любой из них.

Примечание

Первый пример разобран выше. В нем видно, что сообщение от паука номер \(5\) (с восемью лапками) к пауку номер \(6\)\(15\)-ю лапками) оптимально передать через паука номер \(4\) (с шестью лапками).

Во втором примере паук номер \(7\)\(11\) лапками) ни с кем не дружит, поэтому ему невозможно передать сообщение.

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\) оптимальных плана показаны на рисунке ниже:

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.

G. Another Wine Tasting Event

Комбинаторика Конструктив математика Строки *2100

After the first successful edition, Gabriella has been asked to organize a second wine tasting event. There will be \(2n - 1\) bottles of wine arranged in a row, each of which is either red wine or white wine.

This time, Gabriella has already chosen the type and order of all the bottles. The types of the wines are represented by a string \(s\) of length \(2n - 1\). For each \(1 \le i \le 2n - 1\), it holds that \(s_i = \texttt{R}\) if the \(i\)-th bottle is red wine, and \(s_i = \texttt{W}\) if the \(i\)-th bottle is white wine.

Exactly \(n\) critics have been invited to attend. The critics are numbered from \(1\) to \(n\). Just like last year, each critic \(j\) wants to taste an interval of wines, that is, the bottles at positions \(a_j, \, a_j + 1, \, \dots, \, b_j\) for some \(1 \le a_j \le b_j \le 2n - 1\). Moreover, they have the following additional requirements:

  • each of them wants to taste at least \(n\) wines, that is, it must hold that \(b_j - a_j + 1 \ge n\);
  • no two critics must taste exactly the same wines, that is, if \(j \ne k\) it must hold that \(a_j \ne a_k\) or \(b_j \ne b_k\).

Gabriella knows that, since the event is held in a coastal region of Italy, critics are especially interested in the white wines, and don't care much about the red ones. (Indeed, white wine is perfect to accompany seafood.) Thus, to ensure fairness, she would like that all critics taste the same number of white wines.

Help Gabriella find an integer \(x\) (with \(0 \le x \le 2n - 1\)) such that there exists a valid assignment of intervals to critics where each critic tastes exactly \(x\) white wines. It can be proved that at least one such \(x\) always exists.

Input

The first line contains the integer \(n\) (\(1 \le n \le 10^6\)) — where \(2n - 1\) is the number of bottles, and \(n\) is the number of critics.

The second line contains a string \(s\) of length \(2n - 1\) that represents the arrangement of the wines — the \(i\)-th character of \(s\) (\(1 \le i \le 2n - 1\)) is \(\texttt{R}\) for a red wine and \(\texttt{W}\) for a white wine.

Output

Print an integer \(x\) — the number of white wines that each critic will taste.

It can be proved that at least one solution exists. If multiple solutions exist, any of them will be accepted.

Note

In the first sample, there are \(5\) critics and \(2 \cdot 5 - 1 = 9\) bottles of wine. A possible set of intervals that makes each critic taste \(2\) white wines is the following: \([2, 6],\) \([1, 6],\) \([4, 8],\) \([1, 5],\) \([3, 7]\). Note that all intervals contain at least \(5\) bottles.

In the second sample, there is \(1\) critic and \(2 \cdot 1 - 1 = 1\) bottle of wine. The only possible interval is \([1, 1]\), which gives \(x = 0\).

K. Uniform Chemistry

дп математика *3200

In a parallel universe there are \(n\) chemical elements, numbered from \(1\) to \(n\). The element number \(n\) has not been discovered so far, and its discovery would be a pinnacle of research and would bring the person who does it eternal fame and the so-called SWERC prize.

There are \(m\) independent researchers, numbered from \(1\) to \(m\), that are trying to discover it. Currently, the \(i\)-th researcher has a sample of the element \(s_i\). Every year, each researcher independently does one fusion experiment. In a fusion experiment, if the researcher currently has a sample of element \(a\), they produce a sample of an element \(b\) that is chosen uniformly at random between \(a+1\) and \(n\), and they lose the sample of element \(a\). The elements discovered by different researchers or in different years are completely independent.

The first researcher to discover element \(n\) will get the SWERC prize. If several researchers discover the element in the same year, they all get the prize. For each \(i = 1, \, 2, \, \dots, \, m\), you need to compute the probability that the \(i\)-th researcher wins the prize.

Input

The first line contains two integers \(n\) and \(m\) (\(2 \le n \le 10^{18}\), \(1 \le m \le 100\)) — the number of elements and the number of researchers.

The second line contains \(m\) integers \(s_1, \, s_2, \, \dots, \, s_m\) (\(1 \le s_i < n\)) — the elements that the researchers currently have.

Output

Print \(m\) floating-point numbers. The \(i\)-th number should be the probability that the \(i\)-th researcher wins the SWERC prize. Your answer is accepted if each number differs from the correct number by at most \(10^{-8}\).

Note

In the first sample, all researchers will discover element \(2\) in the first year and win the SWERC prize.

In the second sample, the last researcher will definitely discover element \(3\) in the first year and win the SWERC prize. The first two researchers have a \(50\%\) chance of discovering element \(2\) and a \(50\%\) chance of discovering element \(3\), and only element \(3\) will bring them the prize.

In the third sample, each researcher has an independent \(50\%\) chance of discovering element \(3\) in the first year, in which case they definitely win the SWERC prize. Additionally, if they all discover element \(2\) in the first year, which is a \(12.5\%\) chance, then they will all discover element \(3\) in the second year and all win the prize.

L. Controllers

Бинарный поиск математика *1500

You are at your grandparents' house and you are playing an old video game on a strange console. Your controller has only two buttons and each button has a number written on it.

Initially, your score is \(0\). The game is composed of \(n\) rounds. For each \(1\le i\le n\), the \(i\)-th round works as follows.

On the screen, a symbol \(s_i\) appears, which is either \(\texttt{+}\) (plus) or \(\texttt{-}\) (minus). Then you must press one of the two buttons on the controller once. Suppose you press a button with the number \(x\) written on it: your score will increase by \(x\) if the symbol was \(\texttt{+}\) and will decrease by \(x\) if the symbol was \(\texttt{-}\). After you press the button, the round ends.

After you have played all \(n\) rounds, you win if your score is \(0\).

Over the years, your grandparents bought many different controllers, so you have \(q\) of them. The two buttons on the \(j\)-th controller have the numbers \(a_j\) and \(b_j\) written on them. For each controller, you must compute whether you can win the game playing with that controller.

Input

The first line contains a single integer \(n\) (\(1 \le n \le 2\cdot 10^5\)) — the number of rounds.

The second line contains a string \(s\) of length \(n\) — where \(s_i\) is the symbol that will appear on the screen in the \(i\)-th round. It is guaranteed that \(s\) contains only the characters \(\texttt{+}\) and \(\texttt{-}\).

The third line contains an integer \(q\) (\(1 \le q \le 10^5\)) — the number of controllers.

The following \(q\) lines contain two integers \(a_j\) and \(b_j\) each (\(1 \le a_j, b_j \le 10^9\)) — the numbers on the buttons of controller \(j\).

Output

Output \(q\) lines. On line \(j\) print \(\texttt{YES}\) if the game is winnable using controller \(j\), otherwise print \(\texttt{NO}\).

Note

In the first sample, one possible way to get score \(0\) using the first controller is by pressing the button with numnber \(1\) in rounds \(1\), \(2\), \(4\), \(5\), \(6\) and \(8\), and pressing the button with number \(2\) in rounds \(3\) and \(7\). It is possible to show that there is no way to get a score of \(0\) using the second controller.

N. Count Permutations

математика *3500

You are given a string \(s\) with length \(n-1\) whose characters are either \(\texttt{<}\) or \(\texttt{>}\).

Count the permutations \(p_1, \, p_2, \, \dots, \, p_n\) of \(1, \, 2, \, \dots, \, n\) such that, for all \(i = 1, \, 2, \, \dots, \, n - 1\), if \(s_i\) is \(\texttt{<}\) then \(p_i < p_{i+1}\) and if \(s_i\) is \(\texttt{>}\) then \(p_i > p_{i+1}\).

Since this number can be very large, compute its logarithm in base \(2\).

Input

The first line contains a single integer \(n\) (\(2 \le n \le 100\,000\)).

The second line contains a string \(s\) of length \(n-1\); each character of \(s\) is either \(\texttt{<}\) or \(\texttt{>}\).

Output

Print the logarithm in base \(2\) of the number of permutations satisfying the constraints described in the statement.

Your answer is considered correct if its absolute or relative error does not exceed \(10^{-6}\). Formally, let your answer be \(x\) and let the correct answer be \(y\). Your answer is accepted if and only if \(\frac{|x - y|}{\max{(1, |y|)}} \le 10^{-6}\).

Note

In the first sample, there is only one valid permutation, that is \([2, 1]\). Since \(\log_2(1)=0\), the correct output is \(0\).

In the second sample, there are \(2\) valid permutations, that are \([3, 1, 2]\) and \([2, 1, 3]\). Since \(\log_2(2)=1\), the correct output is \(1\).

In the third sample, there are \(4\) valid permutations, that are \([1, 5, 4, 3, 2]\), \([2, 5, 4, 3, 1]\), \([3, 5, 4, 2, 1]\), \([4, 5, 3, 2, 1]\). Since \(\log_2(4)=2\), the correct output is \(2\).

In the fourth sample, there are \(909\) valid permutations. Notice that \(\log_2(909)=9.828136484194\ldots\)

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\) инверсии.

C. Мастер тестов

Бинарный поиск математика сортировки теория чисел *1700

Администрация школы должна выбрать команду своих представителей для участия в международном тесте. Всего в школе \(n\) учеников. Всех учеников можно описать массивом \(a\), в котором \(a_i\) равно уровню интеллекта \(i\)-го ученика (\(1 \le i \le n\)). Вопросы на тесте покрывают \(m\) тем, обозначенных числами \(1, 2, 3, \ldots, m\). Оказывается, \(i\)-й студент разбирается в теме \(T\), если \((a_i \bmod T) = 0\). Иначе в этой теме он полный новичок.

Будем говорить, что команда учеников коллегиально разбирается во всех темах, если для любой темы по крайней мере один участник команды разбирается в ней.

Нужно найти такую команду учеников, которая бы коллегиально разбиралась во всех темах, но при этом разность между максимальным и минимальным уровнями интеллекта участников команды была бы минимальна. Для такой команды выведите эту разность.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит числа \(n\) и \(m\) (\(1 \le n,m \le 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке. Если решения нет, выведите \(-1\).

Примечание

В первом наборе входных данных имеем учеников с уровнями интеллекта \(3\) и \(7\), а \(m = 4\). В частности, нет ученика с уровнем интеллекта, который бы делился на \(2\). Но поскольку \(2 \leq m\), то выбрать подходящую команду невозможно.

Во втором наборе входных данных мы можем составить команду из одного участника: в ней будет лишь ученик с уровнем интеллекта \(2\). Эта команда будет коллегиально разбираться в обеих темах \(1\) и \(2\).

В третьем наборе входных данных рассмотрим команду с уровнями интеллекта \(4, 5, 6, 7\). Такая команда будет коллегиально разбираться во всех темах \(1, 2, \ldots, 7\).

D. Цена дерева

битмаски Деревья дп Комбинаторика математика поиск в глубину и подобное Теория вероятностей *1900

Дано дерево на \(n\) вершинах, корень дерева — вершина \(1\). В каждой вершине написано значение, изначально (в момент \(t=0\)) равное \(0\) или \(1\).

В каждый целочисленный момент времени \(t>0\) значение вершины становится равно побитовому исключающему ИЛИ значений ее детей в момент времени \(t - 1\); значения листьев становятся равными \(0\), поскольку у них детей нет.

Через \(S(t)\) обозначим сумму значений всех вершин в момент \(t\).

Через \(F(A)\) обозначим сумму \(S(t)\) по всем значениям \(t\) в диапазоне \(0 \le t \le 10^{100}\), где \(A\) — некоторая изначальная расстановка \(0\) и \(1\) в дереве.

Ваша задача — найти сумму \(F(A)\) по всем \(2^n\) изначальным расстановкам \(0\) и \(1\) в дереве. Выведите ответ по модулю \(10^9+7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Следующие \(n-1\) строк каждого набора входных данных содержат по два числа — \(u\), \(v\), задающие ребро между \(u\) и \(v\) (\(1 \le u, v \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сумму по модулю \(10^9+7\).

Примечание

Найдём \(F(A)\) для расстановки \(A = [0,1,0,0,1,1]\) (\(A[i]\) означает значение вершины \(i\)). Состояние дерева в момент времени \(t = 0\) изображено ниже. В каждой вершине записаны два числа: ее номер, затем ее значение. \(S(0)\) в такой конфигурации равно \(3\).

В момент \(t = 1\) конфигурация меняется на \([1,0,0,0,0,0]\). Дерево будет выглядеть так, как показано на рисунке ниже. Имеем \(S(1) = 1\).

В момент \(t = 2\) конфигурация меняется на \([0,0,0,0,0,0]\). Дерево будет выглядеть так, как показано на рисунке ниже. Имеем \(S(2) = 0\).

Для всех \(t>2\) граф остаётся неизменным, то есть \(S(t)=0\) для всех \(t > 2\). Поэтому изначальная расстановка \(A = [0,1,0,0,1,1]\) имеет значение \(F(A) = 3 + 1 = 4\).

Выполнив аналогичный процесс для всех \(2^{6}\) возможных стартовых расстановок, получим ответ \(\textbf{288}\).

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\).

D. Гибкая строка возвращается

дп Комбинаторика математика Теория вероятностей *2100

Вам даны две бинарные строки \(a\) и \(b\) длины \(n\). На каждом шаге строка \(a\) изменяется следующим образом.

  • Индекс \(i\) (\(1 \leq i \leq n\)) выбирается случайным образом. Символ \(a_i\) будет изменится на противоположный. То есть если символ \(a_i\) равен \(0\), то он становится \(1\), а если \(a_i\) равен \(1\), то он становится \(0\).

Чему равняется математическое ожидание количества шагов, необходимого для того, чтобы обе строки стали равными в первый раз?

Бинарная строка — это строка, в которой каждый символ равен либо \(\tt{0}\), либо \(\tt{1}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — длина строк.

Вторая строка каждого набора содержит бинарную строку \(a\) длиной \(n\).

Третья строка каждого набора содержит бинарную строку \(b\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите математическое ожидание количества ходов по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом наборе индекс \(1\) выбирается случайным образом и \(a_1\) изменяется на противоположное значение. После этого строки \(a\) и \(b\) равны. Ожидаемое количество ходов — \(1\).

Во втором наборе строки \(a\) и \(b\) уже равны. Таким образом, ожидаемое количество ходов равно \(0\).

Ожидаемое количество ходов для третьего и четвертого наборов составляет \(\frac{56}{3}\) и \(\frac{125}{3}\) соответственно.

E. Дерево упало!

битмаски Деревья математика поиск в глубину и подобное *2500

Недавно на голову Боба с неба упало дерево. В дереве \(n\) вершин. В каждой вершине \(u\) дерева записано целое число \(a_u\). В дереве нет фиксированного корня, так как оно упало с неба.

В настоящее время Боб изучает дерево. Чтобы внести некоторую изюминку, Алиса предлагает игру. Сначала Боб выбирает некоторую вершину \(r\) корнем дерева. После этого Алиса выберет вершину \(v\) и сообщит ее Бобу. Затем Боб выберет одну или несколько вершин из поддерева вершины \(v\). Его результат будет равен побитовому исключающему ИЛИ всех значений, записанных в выбранных им вершинах. Боб должен сказать, какой максимальный результат он может получить для заданных \(r\) и \(v\).

Поскольку Боб не умеет решать задачи, он просит вас помочь ему найти ответ. Сможете ли вы ему помочь? Вам нужно найти ответ для нескольких комбинаций \(r\) и \(v\) для одного дерева.

Напомним, что дерево — это связный неориентированный граф без циклов. Поддерево вершины \(u\) — это множество всех вершин \(y\) таких, что простой путь от \(y\) до корня проходит через \(u\). Обратите внимание, что вершина \(u\) входит в поддерево вершины \(u\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит целое число \(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-1\) строк содержит два целых числа \(u\) и \(v\) (\(1\leq u, v\leq n\); \(u\neq v\)), обозначающих наличие неориентированного ребра между вершиной \(u\) и вершиной \(v\). Гарантируется, что данные ребра образуют дерево.

Следующая строка содержит целое число \(q\) (\(1\leq q\leq 2 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(r\) и \(v\) (\(1\leq r, v\leq n\)) — корневую вершину, которую определит Боб, и вершину, которую выберет Алиса.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных для каждого запроса выведите строку, содержащую целое число, обозначающее максимальный результат, который может получить Боб.

Примечание

На каждом из приведенных ниже рисунков вершина, окрашенная в зеленый цвет — это вершина, выбранная Бобом, а вершина, окрашенный в красный цвет — это вершина, выбранная Алисой. Значения вершин помещены в синие ячейки рядом с вершинами.

Рассмотрим первый пример. В первом запросе, если мы примем вершину \(4\) за корень, дерево будет выглядеть так, как показано на рисунке ниже:

Дерево с корнем \(4\) в первом запросе.
Вершинами в поддереве \(2\) являются: \([2,1,5,6,3]\). Среди них Боб может выбрать вершину \(3\), \(5\) и \(6\). Его результат будет следующим: \(a_3 \oplus a_5 \oplus a_6 = 8 \oplus 6 \oplus 1 = 15\). Он не может набрать больше этого значения.

Во втором запросе, если сделать корнем \(3\), то дерево будет выглядеть так:

Дерево с корнем \(3\) во втором запросе.
Единственной вершиной в поддереве \(5\) является \(5\). Боб может выбрать только вершину \(5\). Его результатом будет \(a_5 = 6\).

В третьем запросе, если корень — \(1\), то дерево выглядит следующим образом:

Дерево с корнем \(1\) в третьем запросе.
Вершинами в поддереве \(2\) являются: \([2,3,6,4]\). Среди них Боб может выбрать вершину \(2\), \(3\) и \(4\). Его результат будет следующим: \(a_2 \oplus a_3 \oplus a_4 = 12 \oplus 8 \oplus 25 = 29\). Он не может набрать больше этой суммы.

F. Максимизируем корень

графы Деревья дп математика поиск в глубину и подобное теория чисел *2600

Вам дано корневое дерево, состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\). Вершина \(1\) является корнем дерева. Каждая вершина имеет целочисленное значение. Значение \(i\)-й вершины равно \(a_i\). Следующую операцию можно выполнить не более \(k\) раз:

  • Выберите вершину \(v\), которая не была выбрана ранее, и целое число \(x\) такое, что \(x\) является общим делителем значений всех вершин поддерева \(v\). Умножьте значение каждой вершины поддерева \(v\) на \(x\).

Какое максимально возможное значение корневой вершины \(1\) можно получить после не более чем \(k\) операций? Формально, вы должны максимизировать значение \(a_1\).

Дерево — это связный неориентированный граф без циклов. Корневое дерево — это дерево с выбранной вершиной, которая называется корнем. Поддерево вершины \(u\) — это множество всех вершин \(y\) таких, что простой путь от \(y\) до корня проходит через \(u\). Обратите внимание, что вершина \(u\) входит в поддерево вершины \(u\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 50\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 10^5\), \(0 \leq k \leq n\)) — количество вершин в дереве и количество операций.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 1000\)), где \(a_i\) обозначает значение в вершине \(i\).

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\)), обозначающих ребро дерева между вершинами \(u_i\) и \(v_i\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите максимальное значение корня после выполнения не более чем \(k\) операций.

Примечание

Оба примера имеют одно и то же дерево:

Для первого набора вы можете выполнить две операции следующим образом:

  • Выберите поддерево с вершиной \(4\) и \(x = 2\).
    После этой операции значения вершин станут \(\{24, 12, 24, 12, 12\}.\)
  • Выберите поддерево с вершиной \(1\) и \(x = 12\).
    После этой операции значения вершин станут \(\{288, 144, 288, 144, 144\}.\)
Значение корня равно \(288\) и является максимальным.

Для второго тестового примера можно выполнить три операции следующим образом:

  • Выберите поддерево с вершиной \(4\) и \(x = 2\).
    После этой операции значения вершин станут \(\{24, 12, 24, 12, 12\}.\)
  • Выберите поддерево с вершиной \(2\) и \(x = 4\).
    После этой операции значения вершин станут \(\{24, 48, 24, 48, 48\}.\)
  • Выберите поддерево с вершиной \(1\) и \(x = 24\).
    После этой операции значения вершин станут \(\{576, 1152, 576, 1152, 1152\}.\)
Значение корня равно \(576\) и является максимальным.

B. Конструктив от MKnez

Конструктив математика *900

MKnez хочет построить массив \(s_1,s_2, \ldots , s_n\), удовлетворяющий следующим условиям:

  • Каждый элемент массива является целым числом, отличным от \(0\);
  • Сумма любых двух соседних элементов равна сумме всех элементов массива.

Формально, \(s_i \neq 0\) должно выполняться для всех \(1 \leq i \leq n\). Также должно выполняться \(s_1 + s_2 + \cdots + s_n = s_i + s_{i+1}\) для всех \(1 \leq i < n\).

Помогите MKnez построить массив с такими свойствами, или определите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 1000\)) — требуемую длину массива.

Выходные данные

Для каждого набора входных данных выведите «YES», если существует массив длины \(n\), удовлетворяющий заданным условиям. Иначе выведите «NO».

Если ответ «YES», то на следующей строке выведите массив \(s_1,s_2, \ldots, s_n\), удовлетворяющий условиям. Каждый элемент должен быть ненулевым целым числом в отрезке \([-5000,5000]\), т. е. для каждого \(1 \leq i \leq n\) должно выполняться \(-5000 \leq s_i \leq 5000\) и \(s_i \neq 0\).

Можно показать, что если решение существует, то также существует решение, удовлетворяющее дополнительным ограничениям на значения чисел.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере \([9,5]\) является корректным ответом, потому что \(9+5\) (сумма двух элементов \(s_1+s_2\)) равна \(9+5\) (сумме всех элементов). Существуют также другие решения, например, \([6,-9], [-1,-2], [-5000,5000], \ldots\)

Для второго примера покажем, почему некоторые массивы не удовлетворяют ограничениям:

  • \([1,1,1]\): \(s_1+s_2 = 1+1 = 2\) и \(s_1+s_2+s_3=1+1+1 = 3\) различны;
  • \([1,-1,1]\): \(s_1+s_2=1+(-1)=0\) и \(s_1+s_2+s_3=1+(-1)+1 = 1\) различны;
  • \([0,0,0]\): массив \(s\) не может содержать \(0\).

Это не является доказательством, но можно показать, что ответ — «NO».

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\).

E. Джоске и полный граф

Бинарный поиск математика Перебор Структуры данных теория чисел *2400

Джоске в подарок от дедушки получил огромный неориентированный взвешенный полный\(^\dagger\) граф \(G\), который содержит \(10^{18}\) вершин. Особенность подарка в том, что вес ребра между различными вершинами \(u\) и \(v\) равен \(\gcd(u, v)^\ddagger\). Джоске решил поэкспериментировать и сделать новый граф \(G'\). Для этого он выбирает два целых числа \(l \le r\), и оставляет только такие вершины \(v\), что \(l \le v \le r\), а также оставляет только ребра между оставшимися вершинами.

Теперь Джоске интересуется, сколько различных весов ребер в графе \(G'\). Так как граф получился огромный, он просит вашей помощи.

\(^\dagger\) Полным графом называется простой неориентированный граф, в котором каждая пара различных вершин смежна.

\(^\ddagger\) \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(l\), \(r\) (\(1 \le l \le r \le 10^{18}\), \(l \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество различных весов среди оставшихся ребер.

Примечание
Графа \(G'\) для первого набора входных данных.

На рисунке видно, что в графе \(2\) различных веса ребер.

В пятом наборе входных данных остается лишь одна вершина, из которой не исходит ни одного ребра, поэтому ответ — \(0\).

G. Вкусный десерт

Бинарный поиск математика снм строковые суфф. структуры теория чисел хэши *2400

Сегодня у повара Тонио важный день — в его родной город Морио приехал ревизор. Он доехал и до ресторана Тонио и заказал у него десерт. Тонио к такому повороту событий не был готов.

Как известно, десерт — это строка из строчных латинских символов. Тонио вспомнил общее правило десертов — строку \(s\) длины \(n\). Любой десерт \(t\) является вкусным, если количество вхождений строки \(t\) в строку \(s\) как подстроки делится нацело на длину \(t\).

Теперь Тонио хочет знать количество вкусных подстрок заготовки \(s\). Если подстрока встречается в строке \(s\) несколько раз, то в ответе нужно учесть все вхождения.

Входные данные

В первой строке дано целое число \(n\) (\(1 \leq n \leq 10^6\)) — длина правила \(s\).

Во второй строке находится строка \(s\) длины \(n\) — правило десертов. Правило состоит только из строчных букв латинского алфавита.

Выходные данные

В единственной строке выведите количество подстрок строки \(s\), являющихся вкусными десертами.

Примечание

В первом примере есть много вкусных подстрок — \(7\) из них это подстроки длины \(1\) (так как любое число делится на \(1\) нацело). Рассмотрим другие вкусные подстроки:

  • «ab» встречается в \(s\) \(2\) раза, что делится на длину подстроки.
  • «ba» также встречается \(2\) раза.

Следовательно ответ \(7 + 2 + 2 = 11\).

Обратите внимание, что в ответе учтены оба вхождения как «ab», так и «ba».

A. Ноутбук и проектор

геометрия математика *800

В доме Вики есть комната в форме прямоугольного параллелепипеда. Пол комнаты — прямоугольник размером \(w \times d\), а потолок находится над полом на постоянной высоте \(h\). Введем на полу систему координат таким образом, чтобы углы комнаты имели координаты \((0, 0)\), \((w, 0)\), \((w, d)\) и \((0, d)\).

Ноутбук стоит на полу в точке \((a, b)\). Проектор висит на потолке прямо над точкой \((f, g)\). Вика хочет соединить ноутбук и проектор кабелем таким образом, чтобы кабель все время шел вдоль стен, потолка или пола (то есть не висел внутри комнаты). Кроме того, кабель должен всегда идти параллельно одной из сторон параллелепипеда (то есть он не может идти по диагонали).

Какова минимальная длина кабеля необходима, чтобы соединить ноутбук и проектор?

Рисунок для первого набора входных данных. Один из оптимальных способов проложить кабель изображён зеленым цветом.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(w\), \(d\) и \(h\) (\(2 \le w, d, h \le 1000\)) — размеры комнаты.

Вторая строка содержит четыре целых числа \(a\), \(b\), \(f\), \(g\) (\(0 < a, f < w\); \(0 < b, g < d\)): ноутбук расположен на полу в точке \((a, b)\), а проектор — на потолке прямо над точкой \((f, g)\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную длину кабеля, необходимую для того, чтобы соединить ноутбук и проектор, причём так, чтобы кабель все время шел вдоль стен, пола и потолка комнаты, а также всё время шёл параллельно одной из сторон параллелепипеда.

Примечание

На рисунке в условии задачи изображен первый набор входных данных.

D. Много точных квадратов

математика Перебор теория чисел *1800

Дано множество \(a_1, a_2, \ldots, a_n\) из различных положительных целых чисел.

Назовем квадратностью целого числа \(x\) количество точных квадратов среди чисел \(a_1 + x, a_2 + x, \ldots, a_n + x\).

Найдите максимальную квадратность среди всех целых чисел \(x\) от \(0\) до \(10^{18}\) включительно.

Напомним, что точными квадратами являются числа вида \(t^2\), где \(t\) — неотрицательное целое число. Наименьшими точными квадратами являются \(0, 1, 4, 9, 16, \ldots\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — размер множества.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) в возрастающем порядке (\(1 \le a_1 < a_2 < \ldots < a_n \le 10^9\)) — само множество.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(50\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наибольшее возможное количество чисел среди \(a_1 + x, a_2 + x, \ldots, a_n + x\), являющихся точными квадратами, для некоторого \(0 \le x \le 10^{18}\).

Примечание

В первом наборе входных данных при \(x = 0\) в множестве будут два точных квадрата — \(1\) и \(4\). Более двух точных квадратов получить нельзя.

Во втором наборе входных данных при \(x = 3\) множество примет вид \(4, 9, 16, 25, 100\), то есть все его элементы станут точными квадратами.

F. Вставка скобок

Деревья дп Комбинаторика математика *2700

Вика любит играть со скобочными последовательностями. Сегодня она хочет создать новую скобочную последовательность по следующему алгоритму. Исходно скобочная последовательность Вики — пустая строка, а дальше \(n\) раз она повторит следующие действия:

  • Выберет место в текущей скобочной последовательности, куда можно вставлять скобки, случайно равновероятно среди всех возможных позиций. Если длина текущей последовательности равна \(k\), то таких позиций \(k+1\): перед первой скобкой, между первой и второй скобками, \(\ldots\), после \(k\)-й скобки. В частности, в пустой скобочной последовательности одно такое место.
  • Выберет строку «()» с вероятностью \(p\) или строку «)(» с вероятностью \(1 - p\) и вставит её в выбранное место. Длина скобочной последовательности увеличится на \(2\).

Скобочная последовательность называется правильной, если из неё возможно получить корректное арифметическое выражение путём вставки символов «+» и «1». Например, последовательности «(())()», «()» и «(()(()))» являются правильными, а «)(», «(()» и «(()))(» — нет.

Вика хочет знать, с какой вероятностью ее итоговая скобочная последовательность будет правильной. Помогите ей и найдите эту вероятность по модулю \(998\,244\,353\) (см. формат вывода).

Входные данные

В единственной строке задано два целых числа \(n\) и \(q\) (\(1 \le n \le 500\); \(0 \le q \le 10^4\)). Здесь \(n\) равно числу операций вставки скобок, а вероятность выбора Викой строки «()» на каждом шаге алгоритма равна \(p = q \cdot 10^{-4}\).

Выходные данные

Выведите вероятность того, что скобочная последовательность Вики окажется правильной, по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом примере с вероятностью \(p = \frac{3}{4}\) получится правильная скобочная последовательность (), а с вероятностью \(1 - p = \frac{1}{4}\) получится неправильная скобочная последовательность )(. Искомая вероятность равна \(\frac{3}{4}\), а \(249\,561\,089 \cdot 4 \equiv 3 \pmod{998\,244\,353}\).

Во втором примере искомая вероятность равна \(\frac{11}{25}\).

A. Сделай массив красивым

Конструктив математика сортировки *800

Назовем массив \(a\) уродливым, если в нем есть хотя бы один элемент, который равен сумме всех элементов до него. Если массив не уродливый, назовем его красивым.

Например:

  • массив \([6, 3, 9, 6]\) — уродливый: элемент \(9\) равен \(6 + 3\);
  • массив \([5, 5, 7]\) — уродливый: элемент \(5\) (второй) равен \(5\);
  • массив \([8, 4, 10, 14]\) — красивый: \(8 \ne 0\), \(4 \ne 8\), \(10 \ne 8 + 4\), \(14 \ne 8 + 4 + 10\), значит, ни один элемент не равен сумме всех элементов до него.

Вам дан массив \(a\), для элементов которого выполняется условие \(1 \le a_1 \le a_2 \le \dots \le a_n \le 100\). Вы должны поменять порядок элементов \(a\) так, чтобы получился красивый массив. Обратите внимание, что нельзя ни добавлять новые элементы, ни удалять существующие — вы можете только переставлять элементы массива \(a\). Если массив \(a\) уже красивый, вы можете оставить его без изменений.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задано одно целое число \(n\) (\(2 \le n \le 50\)). Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_1 \le a_2 \le \dots \le a_n \le 100\)).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если нельзя переставить элементы \(a\) так, чтобы он стал красивым, выведите NO;
  • иначе в первой строке выведите YES. Во второй строке выведите \(n\) целых чисел — красивый массив, который можно получить, поменяв порядок элементов в \(a\). Если таких массивов несколько, выведите любой из них.

B. Матрица разностей

Конструктив математика *1100

Для квадратной матрицы целых чисел размера \(n \times n\) определим ее красоту следующим образом: для каждой пары соседних по стороне элементов \(x\) и \(y\) выпишем число \(|x-y|\), а затем найдем количество различных чисел среди выписанных.

Например, для матрицы \(\begin{pmatrix} 1 & 3\\ 4 & 2 \end{pmatrix}\) будут выписаны числа \(|1-3|=2\), \(|1-4|=3\), \(|3-2|=1\) и \(|4-2|=2\); среди них \(3\) различных числа (\(2\), \(3\) и \(1\)), а значит, ее красота равна \(3\).

Ваша задача — для заданного \(n\) найти матрицу целых чисел размера \(n \times n\), где каждое число от \(1\) до \(n^2\) встречается ровно один раз, такую, что ее красота максимально возможная среди всех таких матриц.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 49\)) — количество наборов входных данных.

Первая (и единственная) строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 50\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(n\) целых чисел — матрицу целых чисел размера \(n \times n\), где каждое число от \(1\) до \(n^2\) встречается ровно один раз, такую, что ее красота максимально возможная среди всех таких матриц.

Если ответов несколько, выведите любой из них

E. Игра года

математика Перебор Структуры данных теория чисел *2300

Монокарп и Поликарп играют в компьютерную игру. В этой игре есть \(n\) боссов, пронумерованных от \(1\) до \(n\).

Они будут сражаться с каждым боссом по следующему алгоритму:

  • Монокарп делает \(k\) попыток убить босса;
  • Поликарп делает \(k\) попыток убить босса;
  • Монокарп делает \(k\) попыток убить босса;
  • Поликарп делает \(k\) попыток убить босса;
  • ...

Монокарп убивает \(i\)-го босса со своей \(a_i\)-й попытки. Поликарп убивает \(i\)-го босса со своей \(b_i\)-й попытки. Когда один из них убивает \(i\)-го босса, они переходят к \((i+1)\)-му боссу. Счетчики количества попыток сбрасываются для них обоих. Когда один из них убивает \(n\)-го босса, игра заканчивается.

Найдите все такие значения \(k\) от \(1\) до \(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 n\)) — номер попытки, на которой Монокарп убивает каждого босса.

В третьей строке записаны \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le n\)) — номер попытки, на которой Поликарп убивает каждого босса.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите две строки. В первой строке должно быть записано одно целое число \(\mathit{cnt}\) — количество таких значений \(k\) от \(1\) до \(n\), что Монокарп убьет всех боссов в первой строке. Во второй строке выведите \(\mathit{cnt}\) различных целых чисел — сами значения \(k\).

Примечание

Рассмотрим последний набор входных данных примера.

Пусть \(k = 1\). Сначала Монокарп делает одну попытку убить первого босса. Она успешная, так как \(a_1 = 1\). Затем Монокарп делает одну попытку убить второго босса. Она неуспешная, так как \(a_2 > 1\). Тогда Поликарп делает попытку. Она также неуспешная, так как \(b_2 > 1\). Затем Монокарп делает еще попытку. Она все еще неуспешная, так как \(a_2 > 2\). Это продолжается до тех пор, пока Поликарп наконец не убьет босса со своей третьей попытки. Монокарп не убил этого босса, поэтому \(k = 1\) — это не ответ.

Пусть \(k = 2\). Монокарп все еще убивает первого босса с первой попытки. Затем делает две неуспешные попытки на второго босса. Затем Поликарп делает две неуспешные попытки. Затем Монокарп делает еще две попытки и убивает босса со своей четвертой попытки. Третий босс похож на второго. Сначала две неуспешные попытки от Монокарпа. Затем две неуспешные попытки от Поликарпа. Затем у Монокарпа есть еще две попытки, но уже его первая успешная, так как \(a_3 = 3\). Четвертый босс также убит Монокарпом. Поэтому \(k = 2\) — это ответ.

A. Экспоненциальное уравнение

Конструктив математика *800

Вам дано целое число \(n\).

Найдите любую пару целых чисел \((x,y)\) (\(1\leq x,y\leq n\)), для которой \(x^y\cdot y+y^x\cdot x = n\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит одну строку с одним целым числом \(n\) (\(1\leq n\leq 10^9\)).

Выходные данные

Для каждого набора входных данных, если возможно, выведите два целых числа \(x\) и \(y\) (\(1\leq x,y\leq n\)). Если ответов несколько, выведите любой.

В противном случае выведите \(-1\).

Примечание

В третьем наборе входных данных \(2^3 \cdot 3+3^2 \cdot 2 = 42\), поэтому пары \((2,3),(3,2)\) будут считаться допустимыми решениями.

В четвертом наборе входных данных \(5^5 \cdot 5+5^5 \cdot 5 = 31250\), поэтому пара \((5,5)\) является допустимым решением.

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\).

F. Обратное преобразование

Конструктив математика реализация *2500

Ученый-перестановщик изучает самопреобразующуюся перестановку \(a\), состоящую из \(n\) элементов \(a_1,a_2,\ldots,a_n\).

Перестановка — это последовательность целых чисел от \(1\) до \(n\) длины \(n\), содержащая каждое число ровно один раз. Например, \([1]\), \([4, 3, 5, 1, 2]\) являются перестановками, а \([1, 1]\), \([4, 3, 1]\) — нет.

Перестановка изменяется каждый день. Каждый день каждый элемент \(x\) заменяется на \(a_x\), то есть \(a_x\) станет \(a_{a_x}\). Другими словами,

  • в первый день перестановка примет вид \(b\), где \(b_x = a_{a_x}\);
  • на второй день перестановка примет вид \(c\), где \(c_x = b_{b_x}\);
  • \(\ldots\)
Например, рассмотрим перестановку \(a = [2,3,1]\). В первый день она станет равна \([3,1,2]\). На второй день она станет равна \([2,3,1]\).

Вам дана перестановка \(a'\) на \(k\)-й день.

Определим \(\sigma(x) = a_x\) и определим \(f(x)\) как минимальное натуральное число \(m\) такое, что \(\sigma^m(x) = x\), где \(\sigma^m(x)\) обозначает \(\underbrace{\sigma(\sigma(\ldots \sigma}_{m \text{ раз}}(x) \ldots))\).

Например, если \(a = [2,3,1]\), то \(\sigma(1) = 2\), \(\sigma^2(1) = \sigma(\sigma(1)) = \sigma(2) = 3\), \(\sigma^3(1) = \sigma(\sigma(\sigma(1))) = \sigma(3) = 1\), поэтому \(f(1) = 3\). И если \(a=[4,2,1,3]\), то \(\sigma(2) = 2\), значит, \(f(2) = 1\); \(\sigma(3) = 1\), \(\sigma^2(3) = 4\), \(\sigma^3(3) = 3\), поэтому \(f(3) = 3\).

Найдите начальную перестановку \(a\) такую, что \(\sum\limits^n_{i=1} \dfrac{1}{f(i)}\) принимает минимально возможное значение.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)) — длина \(a\) и последний день.

Вторая строка содержит \(n\) целых чисел \(a'_1,a'_2,\ldots,a'_n\) (\(1 \le a'_i \le n\)) — перестановка в \(k\)-й день.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если хотя бы одна перестановка \(a\), из которой получается \(a'\), существует, выведите «YES», и в следующей строке выведите \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) — начальную перестановку с минимальной суммой \(\sum\limits^n_{i=1} \dfrac{1}{f(i)}\). Если ответов с минимальной суммой несколько, выведите любой.

Если нет ни одной подходящей перестановки, выведите «NO».

Примечание

Во втором наборе входных данных начальная перестановка может быть равна \(a = [6,2,5,7,1,3,4]\), которая станет \([3,2,1,4,6,5,7]\) в первый день и \(a' = [1,2,3,4,5,6,7]\) во второй день (\(k\)-й день). Кроме того, среди всех перестановок, удовлетворяющих этому, она имеет минимальную \(\sum\limits^n_{i=1} \dfrac{1}{f(i)}\), которая равна \(\dfrac{1}{4}+\dfrac{1}{1}+\dfrac{1}{4}+\dfrac{1}{2}+\dfrac{1}{4}+\dfrac{1}{4}+\dfrac{1}{2}=3\).

В пятом наборе входных данных начальная перестановка может быть равна \(a = [4,2,1,3]\), которая станет \([3,2,4,1]\) в первый день, \([4,2,1,3]\) на второй день и так далее. Таким образом, в \(8\)-й день (\(k\)-й день) в итоге получится \(a' = [4,2,1,3]\). Для такой перестановки достигается минимальное значение \(\sum\limits^n_{i=1} \dfrac{1}{f(i)} = \dfrac{1}{3} + \dfrac{1}{1} + \dfrac{1}{3} + \dfrac{1}{3} = 2\).

A. Единицы и двойки

математика Перебор реализация *800

Вам дана последовательность \(a_1, a_2, \ldots, a_n\). Каждый элемент \(a\) равен \(1\) или \(2\).

Выясните, существует ли целое число \(k\) такое, что выполняются следующие условия:

  • \(1 \leq k \leq n-1\), и
  • \(a_1 \cdot a_2 \cdot \ldots \cdot a_k = a_{k+1} \cdot a_{k+2} \cdot \ldots \cdot a_n\).

Если существует несколько \(k\), удовлетворяющих данному условию, выведите наименьшее из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \leq n \leq 1000\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 2\)).

Выходные данные

Для каждого набора входных данных, если не существует такого \(k\), выведите \(-1\). В противном случае выведите наименьшее возможное значение \(k\).

Примечание

Для первого набора входных данных \(k=2\) удовлетворяет условию, так как \(a_1 \cdot a_2 = a_3 \cdot a_4 \cdot a_5 \cdot a_6 = 4\). \(k=3\) также удовлетворяет данному условию, но нужно вывести наименьшее подходящее значение.

Для второго набора не существует \(k\), удовлетворяющего условию \(a_1 \cdot a_2 \cdot \ldots \cdot a_k = a_{k+1} \cdot a_{k+2} \cdot \ldots \cdot a_n\).

Для третьего набора \(k=1\), \(2\), \(3\) удовлетворяет заданному условию, поэтому ответ \(1\).

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\) — последовательные различные целые числа.

D. Движущиеся точки

Бинарный поиск Комбинаторика математика Перебор *2000

Вы играете в игру с \(n\) точками на числовой прямой.

Изначальная координата \(i\)-й точки равна \(x_i\). Координаты всех точек различны. Каждая точка начинает двигаться одновременно с одинаковой постоянной скоростью.

Каждая точка движется в направлении к ближайшей точке (отличной от нее самой), пока не встретится с какой-либо точкой. В случае равенства до ближайшей точки слева и справа, точка движется влево. Две точки встречаются, если их координаты совпадают, при этом они навсегда прекращают движение.

Через некоторое время все точки перестанут двигаться. Результатом игры является количество различных координат, в которых остановятся точки.

Поскольку эта игра слишком проста, подсчитайте сумму результатов игр для каждого подмножества из данных \(n\) точек, в котором есть хотя бы две точки. Так как ответ может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 3000\)).

Следующая строка содержит \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_1 < x_2 < \ldots < x_n \leq 10^9\)), где \(x_i\) является координатой \(i\)-й точки.

Выходные данные

Выведите сумму результатов по модулю \(10^9+7\).

Примечание

В первом примере для подмножества размером \(2\) две точки движутся навстречу друг другу, поэтому существует \(1\) координата, где точки останавливаются.

Для подмножества размером \(3\) первая точка и третья точка движутся ко второй точке, поэтому существует \(1\) координата, где точки останавливаются, вне зависимости от направления движения второй точки.

Для подмножества \([1, 2, 4, 6]\) первая и вторая точки движутся навстречу друг другу. Для третьей точки изначально вторая точка и четвертая точка являются ближайшими точками. Из-за этого равенства третья точка движется влево. Четвертая точка также движется влево. Таким образом, существует \(1\) координата, где точки останавливаются, которая равна \(1.5\).

Поскольку существует \(6\) подмножеств размером \(2\), \(4\) подмножеств размером \(3\) и одно подмножество размером \(4\), ответ равен \(6 \cdot 1 + 4 \cdot 1 + 1 = 11\).

Во втором примере для подмножества размером \(5\) (когда есть точки в координатах \(1\), \(3\), \(5\), \(11\), \(15\)) точки в координатах \(1\) и \(11\) будут двигаться вправо, а точки в координатах \(3\), \(5\), \(15\) — влево. Точки на \(1\), \(3\), \(5\) в конце концов встретятся в координате \(2\), а точки на \(11\) и \(15\) встретятся в координате \(13\), поэтому существует \(2\) координаты, где точки остановятся.

A. Serval и массив Mocha

математика Перебор теория чисел *800

Mocha нравятся массивы, и Serval подарил ей массив, состоящий из целых положительных чисел.

Mocha считает, что её массив положительных целых чисел \(a\) является хорошим тогда и только тогда, когда наибольший общий делитель всех элементов \(a\) не превосходит его длины. И массив из хотя бы \(2\) положительных целых чисел является красивым тогда и только тогда, когда все его префиксы длины хотя бы \(2\) являются хорошими.

Например:

  • \([3,6]\) не является хорошим, потому что \(\gcd(3,6)=3\) больше его длины \(2\).
  • \([1,2,4]\) является одновременно хорошим и красивым, потому что все его префиксы длины хотя бы \(2\), которыми являются \([1,2]\) и \([1,2,4]\), являются хорошими.
  • \([3,6,1]\) не является красивым, потому что \([3,6]\) не является хорошим.

Сейчас Mocha дала вам подаренный массив \(a\) из \(n\) целых положительных чисел, и она хочет узнать, может ли массив \(a\) стать красивым после изменения порядка элементов в \(a\). Разрешается сохранить массив \(a\) без изменений.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\leq t\leq 500\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\leq n\leq 100\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_1,a_2,\ldots,a_n\leq 10^6\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите Yes, если возможно изменить порядок элементов в \(a\), чтобы сделать его красивым, и выведите No, если нет.

Вы можете вывести Yes и No в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных ни \([3,6]\), ни \([6,3]\) не являются хорошими, поэтому невозможно получить красивый массив, изменив порядок элементов в \(a\).

Во втором наборе входных данных \([1,2,4]\) уже является красивым. Если оставить массив \(a\) без изменений, можно получить красивый массив.

C. Serval и массивы Toxel

дп Комбинаторика математика реализация *1500

Toxel любит массивы. Перед поездкой в Paldea Serval подарил ему массив \(a\). Этот массив состоит из \(n\) попарно различных элементов.

Чтобы получить больше массивов, Toxel выполнил \(m\) операций с исходным массивом. \(i\)-й операцией он изменил \(p_{i}\)-й элемент \((i-1)\)-го массива на \(v_{i}\), в результате чего получился \(i\)-й массив (исходный массив \(a\) имеет номер \(0\)). Во время изменений Toxel гарантировал, что элементы каждого массива по-прежнему попарно различны после каждой операции.

Наконец, Toxel получил \(m+1\) массив и обозначил их как \(A_{0}=a, A_{1},\ldots,A_{m}\). Для каждой пары \((i,j)\) (\(0\le i<j\le m\)), Toxel определил её значение как количество различных элементов в конкатенации \(A_{i}\) и \(A_{j}\). Теперь Toxel задается вопросом, какова сумма значений для всех пар массивов? Пожалуйста, помогите ему вычислить ответ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\le t\le10^{4}\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le2\cdot10^{5}\)) — длину массива и количество операций.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1},a_{2},\dots,a_{n}\) (\(1\le a_{i}\le n+m\)). Гарантируется, что все \(a_i\) попарно различны.

Каждая из следующих \(m\) строк каждого набора входных данных содержит два целых числа \(p_{i}\) и \(v_{i}\) (\(1\le p_{i}\le n\), \(1\le v_{i}\le n+m\)) — позиция изменяемого элемента и его новое значение. Гарантируется, что элементы каждого массива по-прежнему попарно различны после каждой операции.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(2\cdot10^{5}\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — сумму значений для всех пар массивов.

Примечание

В первом наборе входных данных массив изменяется следующим образом: \([1,2,3]\to[\underline{4},2,3]\to[4,\underline{5},3]\).

Конкатенацией \(0\)-го массива \(1\)-го массива является \(\require{cancel}[1,2,3,4,\cancel{2},\cancel{3}]\). Здесь есть \(4\) различных элемента.

Конкатенацией \(0\)-го массива и \(2\)-го массива является \(\require{cancel}[1,2,3,4,5,\cancel{3}]\). Здесь есть \(5\) различных элементов.

Конкатенацией \(1\)-го массива и \(2\)-го массива является \(\require{cancel}[4,2,3,\cancel{4},5,\cancel{3}]\). Здесь есть \(4\) различных элемента.

Зачёркнутые элементы являются повторяющимися в массиве.

Таким образом, ответ равен \(4+5+4=13\).

Во втором наборе входных данных обратите внимание, что массив может оставаться без изменений после операций.

E. Serval и музыкальная игра

дп математика Перебор реализация теория чисел *2500

Serval любит играть в музыкальные игры. Он столкнулся с проблемой, играя в музыкальные игры, и оставил её решать вам.

Вам даны \(n\) положительных целых чисел \(s_1 < s_2 < \ldots < s_n\). \(f(x)\) определим как количество таких \(i\) (\(1\leq i\leq n\)), что существуют неотрицательные целые числа \(p_i, q_i\) такие, что:

\(\)s_i=p_i\left\lfloor{s_n\over x}\right\rfloor + q_i\left\lceil{s_n\over x}\right\rceil\(\)

Найдите \(\sum_{x=1}^{s_n} x\cdot f(x)\) по модулю \(998\,244\,353\).

Напомним, что \(\lfloor x\rfloor\) обозначает максимальное целое число не больше \(x\), и \(\lceil x\rceil\) обозначает минимальное целое число не меньше \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\leq t\leq 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1\leq n\leq 10^6\)).

Вторая строка каждого набора входных данных содержит \(n\) положительных целых чисел \(s_1,s_2,\ldots,s_n\) (\(1\leq s_1 < s_2 < \ldots < s_n \leq 10^7\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\), и сумма \(s_n\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — сумму \(x\cdot f(x)\) по всем возможным \(x\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных \(s_n=4\), \(f(x)\) вычисляется следующим образом:

  • \(f(1)=1\)
    • \(\left\lfloor s_n\over 1\right\rfloor=4\), \(\left\lceil s_n\over 1\right\rceil=4\).
    • Можно показать, что \(p_1,p_2\) и \(q_1,q_2\), которые удовлетворяют условиям, не существует.
    • Пусть \(p_3=1\) и \(q_3=0\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 1\right\rfloor + q_3\cdot\left\lceil s_n\over 1\right\rceil = 1\cdot 4 + 0\cdot 4 = 4\).
  • \(f(2)=2\)
    • \(\left\lfloor s_n\over 2\right\rfloor=2\), \(\left\lceil s_n\over 2\right\rceil=2\).
    • Можно показать, что \(p_1\) и \(q_1\), которые удовлетворяют условиям, не существует.
    • Пусть \(p_2=1\) и \(q_2=0\), тогда \(s_2 = p_2\cdot\left\lfloor s_n\over 2\right\rfloor + q_2\cdot\left\lceil s_n\over 2\right\rceil = 1\cdot 2 + 0\cdot 2 = 2\).
    • Пусть \(p_3=0\) и \(q_3=2\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 2\right\rfloor + q_3\cdot\left\lceil s_n\over 2\right\rceil = 0\cdot 2 + 2\cdot 2 = 4\).
  • \(f(3)=3\)
    • \(\left\lfloor s_n\over 3\right\rfloor=1\), \(\left\lceil s_n\over 3\right\rceil=2\).
    • Пусть \(p_1=1\) и \(q_1=0\), тогда \(s_1 = p_1\cdot\left\lfloor s_n\over 3\right\rfloor + q_1\cdot\left\lceil s_n\over 3\right\rceil = 1\cdot 1 + 0\cdot 2 = 1\).
    • Пусть \(p_2=0\) и \(q_2=1\), тогда \(s_2 = p_2\cdot\left\lfloor s_n\over 3\right\rfloor + q_2\cdot\left\lceil s_n\over 3\right\rceil = 0\cdot 1 + 1\cdot 2 = 2\).
    • Пусть \(p_3=0\) и \(q_3=2\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 3\right\rfloor + q_3\cdot\left\lceil s_n\over 3\right\rceil = 0\cdot 1 + 2\cdot 2 = 4\).
  • \(f(4)=3\)
    • \(\left\lfloor s_n\over 4\right\rfloor=1\), \(\left\lceil s_n\over 4\right\rceil=1\).
    • Пусть \(p_1=1\) и \(q_1=0\), тогда \(s_1 = p_1\cdot\left\lfloor s_n\over 4\right\rfloor + q_1\cdot\left\lceil s_n\over 4\right\rceil = 1\cdot 1 + 0\cdot 1 = 1\).
    • Пусть \(p_2=1\) и \(q_2=1\), тогда \(s_2 = p_2\cdot\left\lfloor s_n\over 4\right\rfloor + q_2\cdot\left\lceil s_n\over 4\right\rceil = 1\cdot 1 + 1\cdot 1 = 2\).
    • Пусть \(p_3=2\) и \(q_3=2\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 4\right\rfloor + q_3\cdot\left\lceil s_n\over 4\right\rceil = 2\cdot 1 + 2\cdot 1 = 4\).

Таким образом, ответ равен \(\sum_{x=1}^4 x\cdot f(x) = 1\cdot 1 + 2\cdot 2 + 3\cdot 3 + 4\cdot 3 = 26\).

Во втором наборе входных данных:

  • \(f(1)=f(2)=f(3)=1\)
  • \(f(4)=3\)
  • \(f(5)=f(6)=f(7)=f(8)=f(9)=4\)

Например, когда \(x=3\), \(f(3)=1\), потому что существуют \(p_4\) и \(q_4\):

\(\)9 = 1 \cdot\left\lfloor{9\over 3}\right\rfloor + 2 \cdot\left\lceil{9\over 3}\right\rceil\(\)

Можно показать, что невозможно найти \(p_1,p_2,p_3\) и \(q_1,q_2,q_3\), которые удовлетворяют условиям.

Когда \(x=5\), \(f(5)=4\), потому что существуют следующие \(p_i\) и \(q_i\):

\(\)1 = 1 \cdot\left\lfloor{9\over 5}\right\rfloor + 0 \cdot\left\lceil{9\over 5}\right\rceil\(\) \(\)2 = 0 \cdot\left\lfloor{9\over 5}\right\rfloor + 1 \cdot\left\lceil{9\over 5}\right\rceil\(\) \(\)7 = 3 \cdot\left\lfloor{9\over 5}\right\rfloor + 2 \cdot\left\lceil{9\over 5}\right\rceil\(\) \(\)9 = 3 \cdot\left\lfloor{9\over 5}\right\rfloor + 3 \cdot\left\lceil{9\over 5}\right\rceil\(\)

Таким образом, ответ равен \(\sum_{x=1}^9 x\cdot f(x) = 158\).

A. Поликарп и День числа Пи

математика реализация Строки *800

14 марта во всем мире отмечается день числа \(\pi\). Это очень важная математическая константа, равная отношению длины окружности к её диаметру.

Поликарпу рассказали в школе, что число \(\pi\) иррациональное, следовательно, имеет бесконечное число цифр в десятичной записи. Он захотел подготовиться ко Дню числа \(\pi\), запомнив это число как можно точнее.

Поликарп выписал все цифры, которые ему удалось запомнить. Например, если Поликарп запомнил \(\pi\) как \(3.1415\), он выписал 31415.

Поликарп очень торопился и мог ошибиться, поэтому вы решили проверить, сколько первых цифр числа \(\pi\) Поликарп помнит правильно на самом деле.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных в тесте.

Каждый набор входных данных описывается одной строкой из цифр \(n\), которую выписал Поликарп.

Строка \(n\) содержит до \(30\) цифр.

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных.

В качестве ответа выведите, сколько первых цифр числа \(\pi\) Поликарп помнит правильно.

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\) в любом порядке. Гарантируется, что такая последовательность существует.

Если подходят несколько последовательностей, вы можете вывести любую.

C. Престановка

математика Перебор реализация *1000

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(1\) до \(n\) ровно по одному разу. Например, последовательности [\(3, 1, 4, 2\)], [\(1\)] и [\(2,1\)] являются перестановками, а [\(1,2,1\)], [\(0,1\)] и [\(1,3,4\)] — нет.

У Кристины была перестановка \(p\) из \(n\) элементов. Она записала ее на доску \(n\) раз таким образом, что:

  • записывая перестановку в \(i\)-й (\(1 \le i \le n)\) раз она пропускала элемент \(p_i\)
Таким образом, всего она записала на доску \(n\) последовательностей длины \(n-1\) каждая.

Например, пусть у Кристины была перестановка \(p\) = \([4,2,1,3]\) длины \(4\). Тогда она сделала следующее:

  1. Записала на доску последовательность \([2, 1, 3]\), пропустив элемент \(p_1=4\) из исходной перестановки.
  2. Записала на доску последовательность \([4, 1, 3]\), пропустив элемент \(p_2=2\) из исходной перестановки.
  3. Записала на доску последовательность \([4, 2, 3]\), пропустив элемент \(p_3=1\) из исходной перестановки.
  4. Записала на доску последовательность \([4, 2, 1]\), пропустив элемент \(p_4=3\) из исходной перестановки.

Вам известны \(n\) последовательностей, которые были записаны на доску, но Вы не знаете, в каком порядке они были записаны. Восстановите по ним исходную перестановку.

Таким образом, если Вам известны последовательности \([4, 2, 1]\), \([4, 2, 3]\), \([2, 1, 3]\), \([4, 1, 3]\), то исходная перестановка будет равна \(p\) = \([4, 2, 1, 3]\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(3 \le n \le 100\)).

Затем следует \(n\) строк, каждая из которых содержит ровно \(n-1\) целое число и описывает одну из последовательностей, выписанных на доску.

Гарантируется, что все последовательности могли быть получены из некоторой перестановки \(p\), а также что сумма \(n^2\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке перестановку \(p\) такую, что из нее могли быть получены заданные \(n\) последовательностей.

Гарантируется, что ответ существует и он единственный. Иными словами, для каждого набора входных данных обязательно найдется искомая перестановка.

Примечание

Первый набор входных данных разобран в условии задачи.

Во втором наборе входных данных последовательности выписаны в правильном порядке.

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\).

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]\).

D. Перестановки с неподвижным префиксом

Бинарный поиск битмаски математика сортировки Структуры данных хэши *1700

Заданы \(n\) перестановок \(a_1, a_2, \dots, a_n\), каждая длины \(m\). Напомним, что перестановка длины \(m\) — это последовательность из \(m\) различных целых чисел от \(1\) до \(m\).

Назовем красотой перестановки \(p_1, p_2, \dots, p_m\) наибольшее такое \(k\), что \(p_1 = 1, p_2 = 2, \dots, p_k = k\). Если \(p_1 \neq 1\), то красота равна \(0\).

Произведение двух перестановок \(p \cdot q\) — это такая перестановка \(r\), что \(r_j = q_{p_j}\).

Для каждого \(i\) от \(1\) до \(n\) выведите наибольшую красоту перестановки \(a_i \cdot a_j\) по всем \(j\) от \(1\) до \(n\) (возможно, \(i = j\)).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 5 \cdot 10^4\); \(1 \le m \le 10\)) — количество перестановок и длина каждой перестановки.

В \(i\)-й из следующих \(n\) строк записана перестановка \(a_i\) — \(m\) различных чисел от \(1\) до \(m\).

Сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

На каждый набор входных данных выведите \(n\) целых чисел. \(i\)-е значение должно быть равно наибольшей красоте перестановки \(a_i \cdot a_j\) по всем \(j\) (\(1 \le j \le n\)).

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\) монет.

B. Федя и массив

Конструктив математика *1100

Недавно Феде на день рождения подарили массив \(a\) из \(n\) целых чисел, записаных по кругу, в котором для каждой пары соседних элементов (\(a_1\) и \(a_2\), \(a_2\) и \(a_3\), \(\ldots\), \(a_{n - 1}\) и \(a_n\), \(a_n\) и \(a_1\)) модуль их разности равен \(1\).

Назовём локальным максимумом элемент, который больше обоих соседних элементов. Также назовём локальным минимумом элемент, который меньше обоих соседних элементов. Обратите внимание, что элементы \(a_1\) и \(a_n\) являются соседними.

К сожалению, Федя потерял массив, но он запомнил в нём сумму локальных максимумов \(x\) и сумму локальных минимумов \(y\).

По заданным \(x\) и \(y\) помогите Феде найти любой подходящий массив минимальной длины.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждая строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(-10^{9} \le y < x \le 10^{9}\)) — сумму локальных максимумов и сумму локальных минимумов, соотвественно.

Выходные данные

Для каждого набора входных данных в первой строке выведите одно число \(n\) — минимальную длину подходящего массива.

Во второй строке выведите \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(-10^{9} \leqslant a_i \leqslant 10^{9}\)) — элементы массива, такие что модуль разности каждой пары соседних равен \(1\).

Если существуют несколько решений, выведите любое из них.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Примечание

В первом наборе входных данных локальными максимумами являются числа на позициях \(3, 7\) и \(10\), а локальными минимумами числа на позициях \(1, 6\) и \(8\). \(x = a_3 + a_7 + a_{10} = 2 + 0 + 1 = 3\), \(y = a_1 + a_6 + a_8 = 0 + (-1) + (-1) = -2\).

Во втором наборе входных данных локальными максимумами являются числа на позициях \(2\) и \(10\), а локальными минимумами числа на позициях \(1\) и \(3\). \(x = a_2 + a_{10} = -1 + 5 = 4\), \(y = a_1 + a_3 = -2 + (-2) = -4\).

В третьем наборе входных данных локальными максимумами являются числа на позициях \(1\) и \(5\), а локальными минимумами числа на позициях \(3\) и \(6\).

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)\).

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]\) в этом порядке.

D. Подсчет факторизаций

дп Комбинаторика математика разделяй и властвуй теория чисел *1900

Факторизация положительного целого числа \(m\) — это единственный способ записать его в виде \(\displaystyle m=p_1^{e_1}\cdot p_2^{e_2}\cdot \ldots \cdot p_k^{e_k}\), где \(p_1, p_2, \ldots, p_k\) — простые числа, \(p_1 < p_2 < \ldots < p_k\) и \(e_1, e_2, \ldots, e_k\) — положительные целые числа.

Для каждого положительного целого числа \(m\), определим \(f(m)\) как мультимножество всех чисел в его факторизации, то есть \(f(m)=\{p_1,e_1,p_2,e_2,\ldots,p_k,e_k\}\) .

Например, \(f(24)=\{2,3,3,1\}\), \(f(5)=\{1,5\}\) и \(f(1)=\{\}\).

Вам задан список, состоящий из \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\). Подсчитайте, сколько положительных целых чисел \(m\) удовлетворяют условию \(f(m)=\{a_1, a_2, \ldots, a_{2n}\}\), поскольку это число может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n \le 2022\)).

Вторая строка содержит \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\) (\(1\le a_i\le 10^6\)) — заданный список.

Выходные данные

Выведите одно целое число — количество положительных целых чисел \(m\), удовлетворяющих условию \(f(m)=\{a_1, a_2, \ldots, a_{2n}\}\), по модулю \(998\,244\,353\).

Примечание

В первом примере два значения \(m\), такие что \(f(m)=\{1,2,3,3\}\): \(m=24\) и \(m=54\). Их факторизации: \(24=2^3\cdot 3^1\) и \(54=2^1\cdot 3^3\).

Во втором примере пять значений \(m\), таких что \(f(m)=\{2,2,3,5\}\): \(200, 225, 288, 500\) и \(972\).

В третьем примере не существует такого значения \(m\), что \(f(m)=\{1,4\}\). Ни \(1^4\), ни \(4^1\) не являются факторизациями, потому что \(1\) и \(4\) не являются простыми числами.

D. Раскраска треугольников

Комбинаторика математика *1600

Дан неориентированный граф из \(n\) вершин и \(n\) ребер, при этом \(n\) делится на \(6\). У каждого ребра есть вес — положительное целое число.

Структура графа имеет следующий вид: граф разделен на \(\frac{n}{3}\) троек вершин, в первую тройку входят вершины \(1, 2, 3\), во вторую — \(4, 5, 6\), и так далее. Каждая пара вершин из одной и той же тройки соединена ребром. Ни одно ребро не соединяет две вершины из разных троек.

Вершины этого графа надо раскрасить в два цвета, красный и синий. Каждая вершина должна быть покрашена в один из цветов; ровно \(\frac{n}{2}\) вершин должно быть покрашено в красный, и ровно \(\frac{n}{2}\) — в синий. Раскраски, отвечающие этим условиям, будем называть валидными.

Вес раскраски — это суммарный вес всех ребер, соединяющих вершины разных цветов.

Пусть \(W\) — максимальный вес валидной раскраски. Посчитайте количество валидных раскрасок с весом \(W\) и выведите результат по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(6 \le n \le 3 \cdot 10^5\), \(n\) делится на \(6\)).

Во второй строке заданы \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le 1000\)) — веса ребер. Ребро \(1\) соединяет вершины \(1\) и \(2\), ребро \(2\) соединяет вершины \(1\) и \(3\), ребро \(3\) соединяет вершины \(2\) и \(3\), ребро \(4\) соединяет вершины \(4\) и \(5\), ребро \(5\) соединяет вершины \(4\) и \(6\), ребро \(6\) соединяет вершины \(5\) и \(6\), и так далее.

Выходные данные

Выведите одно целое число — количество валидных раскрасок с максимальным весом, взятое по модулю \(998244353\).

Примечание

На картинке изображен граф из первого теста.

Максимальный вес валидной раскраски этого графа равен \(31\).

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\).

C. Максимальное множество

Бинарный поиск математика *1600

Назовем множество из положительных целых чисел \(S\) красивым, если для каждой пары чисел \(x\) и \(y\) из этого множества верно, что либо \(x\) делится на \(y\), либо \(y\) делится на \(x\).

Даны два целых числа \(l\) и \(r\). Рассмотрим все красивые множества, состоящие из чисел не меньше \(l\) и не больше \(r\). Выведите два числа:

  • максимально возможный размер красивого множества, состоящего из чисел от \(l\) до \(r\);
  • количество красивых множеств, состоящих из чисел от \(l\) до \(r\), с максимальным размером.

Так как второе число может быть очень большим, выведите его по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 10^6\)).

Выходные данные

Для каждого набора входных данных выведите два целых числа — максимально возможный размер красивого множества, состоящего из чисел от \(l\) до \(r\), и количество таких множеств с максимальным размером. Так как второе число может быть очень большим, выведите его по модулю \(998244353\).

Примечание

В первом наборе входных данных максимальный размер красивого множества из чисел от \(3\) до \(11\) равен \(2\). Существуют \(4\) подобных множества с максимальным размером:

  • \(\{ 3, 6 \}\);
  • \(\{ 3, 9 \}\);
  • \(\{ 4, 8 \}\);
  • \(\{ 5, 10 \}\).

F. Странные тройки

математика Перебор теория чисел *2900

Назовем тройку положительных целых чисел (\(a, b, n\)) странной, если выполняется равенство \(\frac{an}{nb} = \frac{a}{b}\). Здесь \(an\) — это конкатенация чисел \(a\) и \(n\), а \(nb\) — конкатенация \(n\) и \(b\). При конкатенации чисел считается, что у них нет ведущих нулей.

Например, если \(a = 1\), \(b = 5\) и \(n = 9\), то тройка является странной, потому что \(\frac{19}{95} = \frac{1}{5}\). С другой стороны, \(a = 7\), \(b = 3\) и \(n = 11\) не является странной, потому что \(\frac{711}{113} \ne \frac{7}{3}\).

Вам заданы три положительных целых числа \(A\), \(B\) and \(N\). Посчитайте количество странных троек \((a, b, n\)) таких, что \(1 \le a < A\), \(1 \le b < B\) and \(1 \le n < N\).

Входные данные

Единственная строка содержит три целых числа \(A\), \(B\) и \(N\) (\(1 \le A, B \le 10^5\); \(1 \le N \le 10^9\)).

Выходные данные

Выведите одно целое число — количество странных троек \((a, b, n\)) таких, что \(1 \le a < A\), \(1 \le b < B\) and \(1 \le n < N\).

Примечание

В первом примере \(7\) странных троек: \((1, 1, 1\)), (\(1, 4, 6\)), (\(1, 5, 9\)), (\(2, 2, 2\)), (\(2, 5, 6\)), (\(3, 3, 3\)) and (\(4, 4, 4\)).

E. Li Hua и массив

математика Перебор снм Структуры данных теория чисел *2300

Li Hua хочет решить задачу о \(\varphi\) — функции Эйлера. Напомним, что \(\varphi(x)=\sum\limits_{i=1}^x[\gcd(i,x)=1]\).\(^{\dagger,\ddagger}\)

У него есть последовательность \(a_1,a_2,\cdots,a_n\) и он хочет выполнить \(m\) операций:

  • «1 \(l\) \(r\)» (\(1\le l\le r\le n\)) — для каждого \(x\in[l,r]\), изменить \(a_x\) на \(\varphi(a_x)\).
  • «2 \(l\) \(r\)» (\(1\le l\le r\le n\)) — найдите минимальное количество изменений, необходимое для того, чтобы стало верно \(a_l=a_{l+1}=\cdots=a_r\). За одно изменение он выбирает один \(x\in[l,r]\) и изменяет \(a_x\) на \(\varphi(a_x)\).

Каждая операция второго типа является независимой, то есть массив не изменяется.

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

\(^\dagger\) \(\gcd(x,y)\) обозначает наибольший общий делитель (НОД) целых чисел \(x\) и \(y\).

\(^\ddagger\) Выражение \([\textrm{cond}]\) равно \(1\), если условие \(\textrm{cond}\) верно, и \(0\) в противном случае.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 10^{5}\)) — количество элементов в массиве и количество операций для обработки, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2},\cdots ,a_{n}\) (\(1\le a_{i}\le 5\cdot 10^{6}\)) — элементы массива.

Далее идут \(m\) строк, каждая строка содержит три целых числа \(t_{i},l_{i},r_{i}\) (\(t_i\in\{1,2\},1\le l_i\le r_i\le n\)) — \(i\)-я операция.

Выходные данные

Для каждого запроса вида «2 \(l\) \(r\)» выведите ответ в отдельной строке.

Примечание

Обозначим \(\varphi^k(x)=\begin{cases}x,&k=0\\\varphi(\varphi^{k-1}(x)),&k > 0\end{cases}\).

Сначала \(a=[8,1,6,3,7]\).

Чтобы сделать верным выражение \(a_1=a_2=a_3=a_4=a_5\), мы можем изменить \(a\) на \(a'=[\varphi^3(8),\varphi^0(1),\varphi^2(6),\varphi^2(3),\varphi^3(7)]=[1,1,1,1,1]\), используя \(3+0+2+2+3=10\) изменений.

Чтобы сделать \(a_3=a_4\), мы можем изменить \(a\) на \(a'=[\varphi^0(8),\varphi^0(1),\varphi^1(6),\varphi^1(3),\varphi^0(7)]=[8,1,2,2,7]\), используя \(0+0+1+1+0=2\) изменения.

После «1 \(1\) \(3\)», \(a\) меняется на \(a=[\varphi^1(8),\varphi^1(1),\varphi^1(6),\varphi^0(3),\varphi^0(7)]=[4,1,2,3,7]\).

Чтобы сделать \(a_3=a_4\), мы можем изменить \(a\) на \(a'=[\varphi^0(4),\varphi^0(1),\varphi^0(2),\varphi^1(3),\varphi^0(7)]=[4,1,2,2,7]\), используя \(0+0+0+1+0=1\) изменение.

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]\).

F. Подарки от Деда Ахмеда

дп математика теория чисел *2500

В Школе Деда Ахмеда обучается \(n+1\) ученик. Ученики разбиты на \(k\) классов, и в \(i\)-м классе обучается \(s_i\) учеников. Таким образом, \(s_1 + s_2 + \ldots + s_k = n+1\).

В честь скорого Дня дурака все ученики получат подарки!

Дед Ахмед планировал заказать \(n+1\) коробку с подарками. В каждой коробке будет один или несколько подарков. Дед Ахмед распределит их между классами так, чтобы были выполнены следующие условия:

  1. Класс номер \(i\) должен получить ровно \(s_i\) коробок (чтобы каждый ученик мог открыть ровно одну коробку с подарками).
  2. Суммарное количество подарков в коробках, полученных \(i\)-м классом, должно быть кратным \(s_i\) (то есть поровну распределяться между \(s_i\) учениками этого класса).

К сожалению, Дед Ахмед по невнимательности заказал всего \(n\) коробок с подарками, в \(i\)-й из которых содержится \(a_i\) подарков.

У Ахмеда есть время, чтобы купить недостающую коробку с подарками, причем количество подарков в коробке должно быть целым числом от \(1\) до \(10^6\). Помогите Ахмеду определить, коробку с каким количеством подарков ему стоит купить, а также постройте подходящее распределение коробок по классам, или сообщите, что это невозможно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 200\), \(k \le n + 1\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — количество подарков в имеющихся коробках.

Третья строка содержит \(k\) целых числа \(s_1, s_2, \ldots, s_k\) (\(1 \le s_i \le n+1\)) — количество учеников в классах. Гарантируется, что \(\sum s_i = n+1\).

Выходные данные

Если подходящего распределения не существует, в единственной строке выведите число \(-1\).

Иначе, в первой строке выведите единственное число \(s\) — количество подарков в коробке, которую должен купить Дед Ахмед (\(1 \le s \le 10^6\)).

Далее в \(k\) строках выведите распределение коробок по классам. В \(i\)-й строке выведите \(s_i\) целых чисел — размеры коробок, которые попадут в \(i\)-й класс.

Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом примере Дед Ахмед может купить всего \(1\) подарок. После определить в первый класс две коробки с \(7\) подарками. \(7 + 7 = 14\) нацело делится на \(2\). А во второй класс достанутся коробки с \(1, 7, 127\) подарками. \(1 + 7 + 127 = 135\) нацело делится на \(3\).

Во втором тестовом примере классы имеют размеры \(6\), \(1\), \(9\) и \(3\). Покажем, что имеющихся коробок достаточно, чтобы распределить в классы размеров \(6\), \(9\), \(3\), а в класс размера \(1\) можно купить коробку любого размера. В класс размера \(6\) отправим коробки размеров \(7\), \(1\), \(7\), \(6\), \(5\), \(4\). \(7 + 1 + 7 + 6 + 5 + 4 = 30\) нацело делится на \(6\). В класс размера \(9\) отправим коробки размеров \(1\), \(2\), \(3\), \(8\), \(3\), \(2\), \(9\), \(8\), \(9\). \(1 + 2 + 3 + 8 + 3 + 2 + 9 + 8 + 9 = 45\) нацело делится на \(9\). В класс размера \(3\) отправятся оставшиеся коробки размеров \(6\), \(5\), \(4\). \(6 + 5 + 4 = 15\) нацело делится на \(3\).

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\).

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)\).

G. Подсчет голосов

дп Комбинаторика математика *2600

\(n\) человек участвуют в голосовании. У каждого человека есть ровно один голос.

\(i\)-й человек состоит в команде \(t_i\) (\(1 \leq t_i \leq n\)), где \(t_i = t_j\) означает что \(i\), \(j\) состоят в одной команде. По правилам человек может проголосовать только за человека из другой команды. Обратите внимание, что это автоматически означает, что каждый человек не может проголосовать за себя.

Каждый человек знает количество голосов \(c_i\), которое он хочет получить. Сколько существует возможных способов провести голосование, так что каждый человек получит желаемое количество голосов? Поскольку это число может быть очень большим, найдите его по модулю \(998\,244\,353\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \leq n \leq 200\)) — количество людей.

Во второй строке находится \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(0 \leq c_i \leq n\)) — желаемые количества голосов. Гарантируется, что \(\sum\limits_{i=1}^{n} c_i = n\).

В третьей строке находится \(n\) целых чисел \(t_1, t_2, \ldots, t_n\) (\(1 \leq t_i \leq n\)) — номера команд.

Выходные данные

Выведите единственное целое число — количество способов провести голосование по модулю \(998\,244\,353\).

Примечание

В первом тесте есть два возможных способа провести голосование: \((2, 3, 1)\), \((3, 1, 2)\).

В третьем тесте есть пять возможных способов провести голосование: \((3, 3, 2, 2, 1)\), \((2, 3, 2, 3, 1)\), \((3, 3, 1, 2, 2)\), \((3, 1, 2, 3, 2)\), \((2, 3, 1, 3, 2)\).

B. Платформы

математика Перебор *1700

В одном одномерном мире есть n платформ. Платформа с номером k (нумерация начинается с 1) представляет собой отрезок с координатами [(k - 1)m, (k - 1)m + l], при этом l < m. Из точки 0 по платформам начинает прыгать кузнечик Вася, причем за каждый прыжок он перемещается ровно на d единиц вправо. Определите координату точки, в которой Вася упадет. Кузнечик падает, если он оказывается не на платформе, причем если он находится на краю, он не падает.

Входные данные

В первой строке входных данных содержится 4 целых числа n, d, m, l (1 ≤ n, d, m, l ≤ 106, l < m) — соответственно количество платформ, длина прыжка кузнечика Васи и числа m и l, необходимые для определения координат k-ой платформы: [(k - 1)m, (k - 1)m + l].

Выходные данные

Выведите координаты точки, в которой произойдет падение кузнечика. Не забудьте, что если Вася находится на краю платформы, он не падает.

B. Признаки делимости

математика теория чисел *2300

Вася проходит в школе признаки делимости. Вот некоторые из них:

  • Признак делимости на 2. Число делится на 2 тогда и только тогда, когда его последняя цифра делится на 2, то есть является четной.
  • Признак делимости на 3. Число делится на 3 тогда и только тогда, когда сумма его цифр делится на 3.
  • Признак делимости на 4. Число делится на 4 тогда и только тогда, когда две его последние цифры составляют число, которое делится на 4.
  • Признак делимости на 5. Число делится на 5 тогда и только тогда, когда последняя его цифра равна 5 или 0.
  • Признак делимости на 6. Число делится на 6 тогда и только тогда, когда оно делится одновременно на 2 и на 3 (то есть если последняя цифра четная и сумма цифр делится на 3).
  • Признак делимости на 7. Такой признак делимости Васе не известен.
  • Признак делимости на 8. Число делится на 8 тогда и только тогда, когда число, образованное тремя его последними цифрами, делится на 8.
  • Признак делимости на 9. Число делится на 9 тогда и только тогда, когда сумма его цифр делится на 9.
  • Признак делимости на 10. Число делится на 10 тогда и только тогда, когда оно оканчивается на ноль.
  • Признак делимости на 11. На 11 делятся только те и только те числа, у которых сумма цифр на нечетных позициях либо равна сумме цифр на четных позициях, либо отличается от неё на число, делящееся на 11.

Васю заинтересовал тот факт, что некоторые признаки делимости похожи друг на друга. Действительно, для проверки делимости числа на 2, 4, 5, 8 и 10 достаточно проверить выполнение некоторого условия для одной или нескольких последних цифр. Такие признаки Вася называет признаками 2-типа.

Если для проверки делимости нужно найти сумму цифр и проверить, делится ли она на заданное число, то Вася называет такой признак признаком 3-типа (потому что он работает для чисел 3 и 9).

Если нужно найти разность суммы цифр на нечетных позициях и суммы цифр на четных позициях и проверить, делится ли она на заданный делитель, такой признак называется признаком 11-типа (он подходит для числа 11).

В некоторых случаях нужно раскладывать делитель на несколько множителей и проверять выполнение признаков разных типов (2-типа, 3-типа или 11-типа). Например, для числа 6 мы проверяем признаки 2-типа и 3-типа, для числа 66 — всех трех типов. Такие комбинированные признаки делимости называются признаками 6-типа.

И, наконец, есть некоторые числа, для которых не подходят признаки ни 2-типа, ни 3-типа, ни 11-типа, ни 6-типа. Наименьшим таким числом является число 7, поэтому будем говорить, что для них выполняются признаки таинственного 7-типа, пока нераскрытого Васей.

Васина мечта — получить признаки делимости на все возможные числа. Он не намерен ограничиваться десятичной системой счисления. Поскольку чисел очень много, сам он не справится. Вася попросил вас написать программу, определяющую тип признака делимости в системе счисления с основанием b для заданного делителя d.

Входные данные

В первой строке входных данных содержатся два целых числа b и d (2 ≤ b, d ≤ 100) — основание системы счисления и делитель. Оба числа заданы в десятичной системе счисления.

Выходные данные

В первую строку выходных данных выведите тип признака в системе счисления с основанием b делимости на d: «2-type», «3-type», «11-type», «6-type» или «7-type». Если подходящих типов несколько, выведите тот из них, который идет раньше в приведенной последовательности. Если число имеет 2-тип, во вторую строку выведите наименьшее количество последних b-ичных цифр, которые понадобятся для проверки делимости.

Примечание

Признак делимости на 3 в двоичной системе счисления звучит следующим образом: «Число делится на 3 тогда и только тогда, когда сумма его цифр стоящих на четных местах отличается от суммы цифр, стоящих на нечетных местах, на число, делящееся на 3». Это признак 11-типа. Например, 2110 = 101012. Для него сумма цифр на нечетных местах равна 1 + 1 + 1 = 3, а на четных — 0 + 0 = 0. Признак выполняется, и число делится на 3.

В некоторых системах счисления для числа могут одновременно выполняться признаки 3-типа и 11-типа. Правильный ответ в этом случае — «3-type».

F. Задача про матанализ!

Конструктив математика реализация *1200

Студенты 199-ой группы очень плохо записывали лекции во время семестра. Подходит время экзамена по матанализу, поэтому надо как-то исправлять ситуацию. Будем считать, что студенты группы пронумерованы от 1 до n, а у каждого студента i (1 ≤ i ≤ n) есть его лучший друг p[i] (1 ≤ p[i] ≤ n). Так получилось, что каждый из студентов является лучшим другом ровно одного студента, иными словами все p[i] — различны. Возможно, в группе присутствуют такие «оригиналы», для которых i = p[i].

Каждый студент за семестр исписал ровно одну тетрадь. Известно, что студенты договорились действовать по следующему алгоритму:

  • в первый день подготовки каждый студент учит матанализ по своим лекциям,
  • утром каждого следующего дня каждый студент передает тетрадку с лекциями своему лучшему другу, но получает тетрадку от студента, чьим лучшим другом он является.

Так, во второй день тетрадка i-го студента находится у студента p[i] (1 ≤ i ≤ n), в третий день у студента p[p[i]] и так далее. В силу особенностей того, как дружат ребята (см. первый абзац), каждый день у каждого студента есть ровно одна тетрадь с лекциями.

Вам заданы две последовательности, описывающие ситуацию на третий и четвертый день подготовки:

  • a1, a2, ..., an, где ai обозначает студента, у кого в третий день подготовки находится тетрадь i-го студента;
  • b1, b2, ..., bn, где bi обозначает студента, у кого в четвертый день подготовки находится тетрадь i-го студента.

Вам неизвестен массив p, то есть неизвестно, кто является чьим лучшим другом. Напишите программу, которая по заданным последовательностям a и b находит p.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество студентов в группе. Вторая строка содержит последовательность различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ n). Третья строка последовательность различных целых чисел b1, b2, ..., bn (1 ≤ bi ≤ n).

Выходные данные

Выведите последовательность n различных целых p[1], p[2], ..., p[n] (1 ≤ p[i] ≤ n). Гарантируется, что решение существует и оно единственно.

F. Ещё одна n-мерная шоколадка

meet-in-the-middle дп математика теория чисел *2700

Мама купила мальчику Васе \(n\)-мерную шоколадку, представляющую собой \(n\)-мерный куб, у которого длина каждой стороны равна \(1\). У шоколадки намечено разделение на дольки. По \(i\)-му измерению ее можно разделить гиперплоскостями на \(a_i\) равных частей. Таким образом, шоколадка делится суммарно на \(a_1 \cdot a_2 \cdot a_3 \cdot \ldots \cdot a_n\) долек, у каждой дольки длина по \(i\)-му измерению равна \(\frac{1}{a_i}\), соответственно объём каждой дольки равен \(\frac{1}{a_1 a_2 \cdots a_n}\).

Вася с друзьями хочет разрезать шоколадку, чтобы получилось хотя бы \(k\) кусочков, при этом Вася хочет максимизировать объем наименьшего из них. Резать шоколадку можно только по местам соединения долек, причём каждый разрез должен проходить через всю шоколадку вдоль некоторой гиперплоскости, участвующей в образовании долек. Только сделав все разрезы, Вася разбирает шоколадку на кусочки.

Более формально, Вася хочет выбрать числа \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le a_i\)) — количество частей на которые Вася разрежет шоколадку вдоль каждого измерения. Должно выполняться условие \(b_1 \cdot b_2 \cdot \ldots \cdot b_n \ge k\), чтобы получить не менее \(k\) кусочков после всех разрезаний. Можно заметить, что при оптимальном разрезании с такими параметрами, минимальный кусочек будет содержать \(\lfloor \frac{a_1}{b_1} \rfloor \dotsm \lfloor \frac{a_n}{b_n} \rfloor\) долек, а его объём будет равен \(\lfloor \frac{a_1}{b_1} \rfloor \dotsm \lfloor \frac{a_n}{b_n} \rfloor \cdot \frac{1}{a_1 a_2 \cdots a_n}\).

Вася хочет получить максимальное возможное значение объема минимального кусочка, умноженного на \(k\), то есть он хочет максимизировать число \(\lfloor \frac{a_1}{b_1} \rfloor \dotsm \lfloor \frac{a_n}{b_n} \rfloor \cdot \frac{1}{a_1 a_2 \cdots a_n} \cdot k\). Помогите ему в этом.

Входные данные

В первой строке даны два целых числа \(n\) и \(k\) \((1 \le n \le 100\), \(1 \le k \le 10^7)\) — размерность шоколадки, и на сколько частей её нужно поделить.

Во второй строке даны \(n\) целых чисел \(a_1,\ a_2,\ \dots,\ a_n\) \((1 \le a_i \le 10^7)\) — количество кусочков, на которое размечена шоколадка вдоль каждого из измерений.

Выходные данные

Выведите одно число — максимальный возможный объём наименьшего из полученных кусочков, умноженный на \(k\), с абсолютной или относительной погрешностью не более \(10^{-9}\).

Если при заданных ограничениях разрезать шоколадку хотя бы на \(k\) кусочков невозможно, выведите \(0\).

Примечание

В первом примере одномерную шоколадку можно разделить так:

Тогда ответ будет \(\frac{2}{5} \cdot 2 = 0.8\)

Во втором примере шоколадку можно разрезать следующим образом:

Тогда ответ будет \(\frac{2}{5} \cdot \frac{3}{10} \cdot 6 = 0.72\)

В третьем примере шоколадку можно разрезать следующим образом:

Тогда ответ будет \(\frac{2}{4} \cdot \frac{1}{4} \cdot 7 = 0.875\)

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\) раз.

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\).

C. Места для селфи

Бинарный поиск геометрия математика Структуры данных *1400

Вселенная представляет собой координатную плоскость. На ней проложено \(n\) космических трасс, каждая из которых представляет собой прямую \(y=kx\), проходящую через начало координат \((0, 0)\). Также там есть \(m\) астероидных поясов, которые представляют собой параболы ветвями вверх, их можно представить как графики функций \(y=ax^2+bx+c\), где \(a > 0\).

Вы хотите сфотографировать каждую параболу. Для этого для каждой параболы вам нужно выбрать прямую, которая не пересекается с этой параболой и не касается её. Вы можете выбирать одну и ту же прямую для нескольких парабол. Найдите для каждой параболы такую прямую или определите, что её нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится одно число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора даны \(2\) целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — количество прямых и парабол соответственно.

Далее в \(n\) строках содержится по одному целому числу \(k\) (\(|k| \le 10^8\)) — коэффициенты уравнений прямых \(y=kx\), описывающих прямые. Прямые могут совпадать, \(k\) может быть равно \(0\).

Далее в \(m\) строках содержится по \(3\) целых числа \(a\), \(b\) и \(c\) (\(a, |b|, |c| \le 10^8\), \(a > 0\)) — коэффициенты уравнений парабол \(ax^2+bx+c\). Параболы могут совпадать.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\) и сумма \(m\) по всем наборам также не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ для каждой параболы в данном порядке. Если в данном наборе есть прямая, не пересекающаяся с данной параболой и не касающаяся ее, выведите сначала в отдельной строке слово «YES», а далее в отдельной строке число \(k\) — коэффициент этой прямой. Если таких прямых несколько, выведите любую из них. Если же искомой прямой нет, выведите одно слово «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Пустые строки в выводе в примере даны только для наглядности, вам их выводить необязательно (но можно).

Примечание

В первом наборе входных данных обе параболы не пересекаются с единственной данной прямой \(y=1\cdot x\), поэтому ответом будет два числа \(1\).

Во втором наборе прямая \(y=x\) и парабола \(2x^2+5x+1\) пересекаются, а также прямая \(y=4x\) и парабола \(x^2+2x+1\) касаются, поэтому эти пары не удовлетворяют условию. Значит, для первой параболы ответом будет \(1\) (\(y=1x\)), а для второй параболы — \(4\).

В третьем тестовом наборе прямая и парабола пересекаются, поэтому ответ — «NO».

F1. Выживание слабейших (простая версия)

Бинарный поиск математика Перебор реализация сортировки *2600

Это простая версия задачи. Она отличается от сложной только ограничением на \(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 3000\)) — начальную длину массива.

Вторая строка содержит \(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\).

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\) хода.

C. Мастер последовательностей

Конструктив математика Перебор *1600

Для некоторого положительного целого числа \(m\) YunQian считает массив \(q\) из \(2m\) (возможно, отрицательных) целых чисел хорошим, если и только если для каждой подпоследовательности \(q\), имеющей длину \(m\), произведение \(m\) элементов в подпоследовательности равно сумме оставшихся \(m\) элементов. Формально, пусть \(U=\{1,2,\ldots,2m\}\). Для всех множеств \(S \subseteq U\) таких, что \(|S|=m\), должно выполняться \(\prod\limits_{i \in S} q_i = \sum\limits_{i \in U \setminus S} q_i\).

Определим расстояние между двумя массивами \(a\) и \(b\) длиной \(k\) как \(\sum\limits_{i=1}^k|a_i-b_i|\).

Вам дано целое положительное число \(n\) и массив \(p\) из \(2n\) целых чисел.

Найдите минимальное расстояние между \(p\) и \(q\) среди всех хороших массивов \(q\) длины \(2n\). Можно показать, что для всех положительных целых чисел \(n\) существует хотя бы один хороший массив. Обратите внимание, что вам не требуется предъявлять массив \(q\), который достигает этого минимального расстояния.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2\cdot10^5\)).

Вторая строка каждого набора содержит \(2n\) целых чисел \(p_1, p_2, \ldots, p_{2n}\) (\(|p_i| \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора выведите минимальное расстояние между \(p\) и \(q\).

Примечание

В первом наборе оптимальный массив \(q=[6,6]\).

Во втором наборе оптимальный массив \(q=[2,2,2,2]\).

D. Мастер СНМ

дп Комбинаторика математика снм *2500

Вам дано целое число \(n\) и массив \(a\) длины \(n-1\), элементы которого либо \(0\), либо \(1\).

Определим стоимость перестановки \(^\dagger\) \(p\) длины \(m-1\) (\(m \leq n\)) следующим образом.

Пусть \(G\) - граф из \(m\) вершин с номерами от \(1\) до \(m\), не содержащий ребер. Для каждого \(i\) от \(1\) до \(m-1\) выполните следующие операции:

  • определим \(u\) и \(v\) как (различные) вершины с только входящими ребрами\(^{\dagger\dagger}\) в компонентах слабой связности \(^\ddagger\), содержащих вершины \(p_i\) и \(p_i+1\) соответственно
  • в графе \(G\), добавим направленное ребро из вершины \(v\) в \(u\), если \(a_{p_i}=0\), иначе добавим направленное ребро из вершины \(u\) в \(v\) (если \(a_{p_i}=1\)).
Заметим, что после каждого шага можно показать, что каждая компонента слабой связности \(G\) имеет ровно одну вершину с только входящими рёбрами.

Тогда, значение \(p\) — это количество входящих ребер \(G\) в вершину \(1\).

Для каждого \(k\) от \(1\) до \(n-1\) найдите сумму стоимостей всех \(k!\) перестановок длины \(k\). Поскольку эта величина может быть большой, от вас требуется вычислить ее только по модулю \(998\,244\,353\).

Операции при \(n=3\), \(a=[0,1]\) и \(p=[1,2]\)

\(^\dagger\) Перестановка длины \(n\) - это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) - перестановка, но \([1,2,2]\) - не перестановка (\(2\) встречается в массиве дважды), и \([1,3,4]\) - тоже не перестановка (\(n=3\), но в массиве есть \(4\)).

\(^\ddagger\) Компоненты слабой связности направленного графа — это то же самое, что и компоненты неориентированной версии графа. Формально, для направленного графа \(G\) определите граф \(H\), где для всех ребер \(a \to b\) в \(G\) добавляется неориентированное ребро \(a \leftrightarrow b\) в \(H\). Тогда компоненты слабой связности \(G\) являются компонентами \(H\).

\(^{\dagger\dagger}\) Заметим, что вершина, не имеющая ребер, считается имеющей только входящие ребра.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(2\le n\le 5 \cdot 10^5\)).

Вторая строка содержит \(n-1\) чисел \(a_1, a_2, \ldots, a_{n-1}\) (\(a_i\) равно \(0\) или \(1\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) целых чисел в строке. \(i\)-е число является ответом для \(k=i\), по модулю \(998\,244\,353\).

Примечание

Рассмотрим первый набор входных данных.

Когда \(k=1\), существует только \(1\) перестановка \(p\).

  • Когда \(p=[1]\), мы добавим одно ребро из вершины \(2\) в \(1\). Вершина \(1\) будет иметь \(1\) входящее ребро. Поэтому значение \([1]\) равно \(1\).

Поэтому, когда \(k=1\), ответ равен \(1\).

Когда \(k=2\), существует \(2\) перестановки \(p\).

  • Когда \(p=[1,2]\), мы добавим ребро из вершины \(2\) в \(1\) и ребро из \(3\) в \(1\). Вершина \(1\) будет иметь \(2\) входящих ребер. Таким образом, значение \([1,2]\) равно \(2\).
  • Когда \(p=[2,1]\), мы добавим ребро из вершины \(3\) в \(2\) и ребро из \(2\) в \(1\). Вершина \(1\) будет иметь входящее ребро \(1\). Таким образом, значение \([2,1]\) равно \(1\).

Поэтому, когда \(k=2\), ответ будет \(2+1=3\).

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. Игра в казино

математика сортировки *1200

Известное во всей солнечной системе казино «Галактика удачи» вводит новую карточную игру.

В этой игре есть колода из \(n\) карт. На каждой карте написано \(m\) чисел. Каждый из \(n\) игроков получает ровно по одной карте из колоды.

Далее все игроки попарно играют друг с другом, причем каждая пара игроков играет ровно один раз. Таким образом, если всего, например, четыре игрока, то будет сыграно шесть игр: первый со вторым, первый с третьим, первый с четвертым, второй с третьим, второй с четвертым и третий с четвертым.

В каждой из таких игр некоторым образом определяется победитель, но правила здесь довольно сложны, поэтому мы не будем описывать их здесь. Важно лишь, какое число фишек выплачивается победителю. Пусть на карте первого игрока записаны числа \(a_1, a_2, \dots, a_m\), а на карте второго игрока — \(b_1, b_2, \dots, b_m\). Тогда победителю выплачивается \(|a_1 - b_1| + |a_2 - b_2| + \dots + |a_m - b_m|\) фишек из общего банка, где \(|x|\) обозначает модуль числа \(x\).

Чтобы определить размер общего банка, необходимо вычислить суммарный выигрыш победителей по всем играм. Поскольку карт в колоде и игроков может быть много, то Вам было поручено написать программу, которая выполняет все необходимые вычисления.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных находится два целых числа \(n\) и \(m\) (\(1 \le n \cdot m \le 3\cdot 10^5\)) — количество карт в колоде и количество чисел на одной карте.

В каждой из следующих \(n\) строк набора входных данных находится по \(m\) целых чисел \(c_{i,j}\) (\(1 \le c_{i,j} \le 10^6\)) — описание \(i\)-й карты.

Гарантируется, что общая сумма \(n \cdot m\) во всех тестах не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — суммарный размер выигрышей по всем играм.

Примечание

Рассмотрим первый набор входных данных.

В игре между первым и вторым игроком победитель получит \(|1-7| + |4-9| + |2-2| + |8-1| + |5-4| = 19\) фишек.

В игре между первым и третьим игроком победитель получит \(|1-3| + |4-8| + |2-5| + |8-3| + |5-1| = 18\) фишек.

В игре между вторым и третьим игроком победитель получит \(|7-3| + |9-8| + |2-5| + |1-3| + |4-1| = 13\) фишек.

Итого за игру будет разыграно \(19 + 18 + 13 = 50\) фишек.

E3. Маршрутки на Венере (сложная версия)

дп Комбинаторика математика Перебор *2800

Это сложная версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и \(k\). Вы можете делать взломы, только если все три версии задачи сданы.

Максим — водитель маршрутки на планете Венера.

Чтобы проехаться на маршрутке Максима, необходимо иметь билет. У каждого билета есть номер, состоящий из \(n\) цифр. Но, как известно, жители Венеры пользуются не десятичной системой счисления, а системой счисления по основанию \(k\). Поэтому можно считать, что номер билета — это последовательность из \(n\) целых чисел от \(0\) до \(k-1\) включительно.

Жители Венеры считают билет счастливым, если на нем найдется цифра, равная сумме остальных цифр по модулю \(k\). Например, если \(k=10\), то билет \(7135\) является счастливым, поскольку \(7 + 1 + 5 \equiv 3 \pmod{10}\). С другой стороны, билет \(7136\) счастливым не является, поскольку ни одна цифра не равна сумме всех остальных по модулю \(10\).

Однажды Максим, выполняя очередную поездку, задумался: а сколько всего существует счастливых билетов? При этом Максим понимает, что это число может быть очень велико, поэтому его интересует лишь остаток от деления ответа на некоторое простое число \(m\).

Входные данные

В единственной строке входных данных находится три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 10^{18}\), \(1 \le k \le 2000\), \(10^8 \le m \le 10^9 + 7\), \(m\) — простое) — количество цифр на билете, основание системы счисления на Венере, и модуль, по которому надо найти ответ.

Выходные данные

Выведите одно целое число — количество счастливых билетов по модулю \(m\), т. е. остаток от деления ответа на \(m\).

Примечание

В первом примере существует всего четыре счастливых билета: \(000\), \(011\), \(101\) и \(110\).

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\) целых чисел — элементы массива, удовлетворяющего ограничениям задачи. Можно показать, что ответ всегда существует. Если ответов несколько, выведите любой из них.

E. Две бочки

Бинарный поиск дп математика реализация *2400

Есть две бочки — в первую помещается \(a\) литров воды, во вторую помещается \(b\) литров воды. В первой бочке изначально \(c\) (\(0 \le c \le a\)) литров воды, во второй бочке изначально \(d\) (\(0 \le d \le b\)) литров воды.

Вы хотите провести \(n\) действий над ними. \(i\)-е действие задается одним ненулевым целым числом \(v_i\). Если \(v_i > 0\), то вы пытаетесь налить \(v_i\) литров воды из первой бочки во вторую. Если \(v_i < 0\), то вы пытаетесь налить \(-v_i\) литров воды из второй бочки в первую.

Когда вы пытаетесь налить \(x\) литров воды из бочки, в которой сейчас \(y\) литров воды, в бочку, в которой может поместиться еще \(z\) литров воды, то за действие вы перельете только \(\min(x, y, z)\) литров воды.

Для всех пар начальных объемов воды \((c, d)\) таких, что \(0 \le c \le a\) и \(0 \le d \le b\), посчитайте объем воды в первой бочке после применения всех действий.

Входные данные

В первой строке записаны три целых числа \(n, a\) и \(b\) (\(1 \le n \le 10^4\); \(1 \le a, b \le 1000\)) — количество действий и вместимости бочек, соответственно.

Во второй строке записаны \(n\) целых чисел \(v_1, v_2, \dots, v_n\) (\(-1000 \le v_i \le 1000\); \(v_i \neq 0\)) — объем воды, который вы пытаетесь перелить в каждом действии.

Выходные данные

Для всех пар начальных объемов воды \((c, d)\) таких, что \(0 \le c \le a\) и \(0 \le d \le b\), посчитайте объем воды в первой бочке после применения всех действий.

Выведите \(a + 1\) строку, в каждой строке должно быть \(b + 1\) целых чисел. \(j\)-е значение в \(i\)-й строке должно быть ответом для \(c = i - 1\) и \(d = j - 1\).

Примечание

Рассмотрим \(c = 3\) и \(d = 2\) из первого примера:

  • В первом действии вы пытаетесь перелить \(2\) литра воды из второй бочки в первую, во второй бочке есть \(2\) литра воды, в первую поместится еще \(1\) литр. Поэтому переливается \(\min(2, 2, 1) = 1\) литр, в первой бочке теперь \(4\) литра, во второй \(1\) литр.
  • Во втором действии вы пытаетесь перелить \(1\) литр воды из первой бочки во вторую. Переливается \(\min(1, 4, 3) = 1\) литр, в первой бочке теперь \(3\) литра, во второй \(2\) литра.
  • В третьем действии вы пытаетесь перелить \(2\) литра воды из первой бочки во вторую. Переливается \(\min(2, 3, 2) = 2\) литра, в первой бочке теперь \(1\) литр, во второй \(4\) литра.

В конце в первой бочке \(1\) литр воды. Поэтому третье значение в четвертой строке равно \(1\).

G. Прогноз

дп Комбинаторика математика *2800

Рассмотрим турнир, в котором участвуют \(n\) спортсменов. Рейтинг \(i\)-го спортсмена равен \(a_i\).

Турнир проходит следующим образом. Сначала каждому спортсмену присваивается индекс — целое число от \(1\) до \(n\). Все индексы различны. Обозначим за \(p_i\) спортсмена с индексом \(i\).

Затем организаторы проведут \(n-1\) игр. В первой игре будут соревноваться спортсмены \(p_1\) и \(p_2\). Во второй — победитель первой игры и спортсмен \(p_3\). В третьей — победитель второй игры и спортсмен \(p_4\), и так далее — в последней игре будут соревноваться победитель игры \((n-2)\) и спортсмен \(p_n\).

Монокарп хочет спрогнозировать результаты каждой из \(n-1\) игр (конечно, он сформирует свой прогноз только после того, как все спортсмены получат свои индексы). Он знает, что когда в игре соревнуются спортсмены с рейтингами \(x\) и \(y\), и при этом \(|x - y| > k\), спортсмен с более высоким рейтингом обязательно побеждает. Но если \(|x - y| \le k\), победить может любой из двух спортсменов.

Среди всех \(n!\) способов назначить индексы участникам посчитайте количество таких способов, что Монокарп может точно спрогнозировать результат каждой из \(n-1\) игр. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 10^6\); \(0 \le k \le 10^9\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_1 \le a_2 \le \dots \le a_n \le 10^9\)).

Выходные данные

Выведите одно целое число — количество способов назначить участникам индексы так, чтобы Монокарп мог точно предсказать результат каждой из \(n-1\) игр.

Примечание

В первом примере Монокарп точно знает результат игры между любой парой игроков, поэтому все \(24\) способа назначить индексы игрокам подходят.

Во втором примере подходящие способы назначить индексы — такие: \([1, 3, 2]\), \([2, 3, 1]\), \([3, 1, 2\)] и \([3, 2, 1]\).

B. Конфеты

Конструктив математика теория чисел *800

Эта задача про конфеты. Изначально у вас есть \(1\) конфета, а вы хотите иметь ровно \(n\) конфет.

Вы можете использовать два следующих заклинания в любом порядке не более \(40\) раз суммарно.

  • Если у вас сейчас \(x\) конфет, то, используя первое заклинание, можно превратить \(x\) конфет в \(2x-1\) конфету.
  • Если у вас сейчас \(x\) конфет, то, используя второе заклинание, можно превратить \(x\) конфет в \(2x+1\) конфету.

Составьте список заклинаний так, чтобы после использования этих заклинаний по порядку у вас было ровно \(n\) конфет, или определите, что это невозможно.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит одну строку с одним целым числом \(n\) (\(2 \le n \le 10^9\)) — окончательным количеством конфет.

Выходные данные

Для каждого набора входных данных выведите следующее.

Если есть возможность получить \(n\) конфет, использовав заклинания не более \(40\) раз, то в первой строке выведите одно целое число \(m\) (\(1 \le m \le 40\)) — количество использованных вами заклинаний.

Затем во второй строке выведите \(m\) целых чисел \(a_{1}, a_{2}, \ldots, a_{m}\) (\(a_{i}\) должно быть равно \(1\) или \(2\)), разделенных пробелами. Если \(a_{i} = 1\), это означает, что вы используете первое заклинание на \(i\)-м шаге. Если \(a_{i} = 2\), это означает, что вы используете второе заклинание на \(i\)-м шаге.

Обратите внимание, что вам не нужно минимизировать количество операций \(m\), и если есть несколько вариантов ответа, можно вывести любой.

Если ответа не существует, выведите \(-1\).

Примечание

Для \(n=3\) мы можем просто использовать второе заклинание один раз и получить \(2 \cdot 1 + 1 = 3\) конфеты.

Для \(n=7\) мы можем использовать второе заклинание дважды. Применив это один раз, мы получаем \(3\) конфеты, а применив его дважды, мы получаем \(2 \cdot 3 + 1 = 7\) конфет.

D. Заползание на дерево

Бинарный поиск математика *1700

Улитки взбираются на дерево. Высота дерева \(h\) метров, а улитки начинают с позиции \(0\).

Каждая улитка задается парой целых чисел \(a\) и \(b\) (\(a > b\)). Начиная с \(1\)-го дня, одна улитка взбирается на дерево так: в светлое время суток она поднимается вверх на \(a\) метров; ночью улитка отдыхает и сползает на \(b\) метров. Если в \(n\)-й день улитка впервые достигает позиции \(h\) (то есть вершины дерева), то она заканчивает взбираться, и мы говорим, что улитка залезает на дерево за \(n\) дней. Обратите внимание, что в последний день улитка не обязательно поднимается вверх на \(a\) метров, если ее расстояние до вершины меньше \(a\).

К сожалению, изначально вы не знаете точную высоту дерева \(h\), но знаете, что \(h\) — положительное целое число. Вам нужно обработать следующие \(q\) событий по порядку.

  • Событие типа \(1\): приходит улитка с параметрами \(a\) и \(b\) и утверждает, что залезла на дерево за \(n\) дней. Если это утверждение противоречит ранее принятой информации (то есть не существует дерева, для которого все ранее принятые утверждения, а также данное, верны), игнорируйте его. В противном случае примите данное утверждение.
  • Событие типа \(2\): приходит улитка с параметрами \(a\) и \(b\) и спрашивает, сколько дней она будет залезать на дерево. Вы можете дать ответ только на основе принятый вами на текущий момент информации. Если вы не можете точно определить ответ, сообщите об этом.

Вам нужно обработать все события по порядку.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(q\) (\(1\le q \le 2\cdot 10^5\)) — количество событий.

Для следующих \(q\) строк первое целое число в каждой строке равно \(1\) или \(2\) — типу события.

Если тип события равен \(1\), то далее следуют три целых числа \(a\), \(b\) и \(n\) (\(1\le a,b,n \le 10^9\), \(a>b\)).

Если тип события равен \(2\), то далее следуют два целых числа \(a\) и \(b\) (\(1\le a,b \le 10^9\), \(a>b\)).

Гарантируется, что сумма \(q\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — по одному на каждое событие по порядку.

  • Для каждого события \(1\), если вы принимаете утверждение, выведите \(1\); если вы игнорируете его, выведите \(0\).
  • Для каждого события \(2\) выведите целое число, обозначающее количество дней, которое улитка будет забираться на дерева. Если нельзя определить ответ, выведите \(-1\).
Примечание

В первом наборе входных данных мы можем определить \(h=7\) по первому событию, поэтому мы знаем, что второй и третьей улиткам нужно потратить \(2\) и \(5\) дней соответственно, чтобы достичь вершины.

Покажем, как забирается вторая улитка:

  • В светлое время суток \(1\)-го дня: поднимается на \(4\) метра, теперь на позиции \(4\).
  • Ночью \(1\)-го дня: сползает вниз на \(1\) метр, теперь в позиции \(3\).
  • В светлое время суток \(2\)-го дня: поднимается на \(4\) метра, теперь на позиции \(7\) (достигает вершину).

В третьем наборе входных данных сообщение второй улитки противоречит сообщению первой улитки, потому что вторая улитка говорит, что потратила \(3\) дня, а за первые \(3\) дня она может подняться не более чем на \(1+1+2=4\) метра. Однако первой улитке требуется всего \(1\) день, чтобы подняться на \(4\) метра.

F. M-дерево

Деревья математика сортировки Структуры данных *2800

Корневое дерево называется хорошим, если каждая вершина дерева либо является листом (вершиной без детей), либо имеет ровно \(m\) детей.

Пусть на хорошем дереве на каждом листе \(u\) записано положительное целое число \(c_{u}\). Мы определяем значение листа как \(c_{u} + \mathrm{dep}_{u}\), где \(\mathrm{dep}_{u}\) — количество ребер на пути от вершины \(u\) до корня (также известное как глубина \(u\)). Ценность хорошего дерева — это максимальное значение всех его листьев.

Вам дан массив из \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\), которые должны быть записаны на листьях. Вам нужно построить хорошее дерево из \(n\) листьев и записать целые числа из массива \(a\) во все листья. Формально, вы должны выбрать для каждого листа \(u\) индекс \(b_{u}\), где \(b\) — перестановка длины \(n\), означающая, что целое число, записанное на листе \(u\), равно \(c_u = a_{b_{u}}\). При этих ограничениях вам необходимо минимизировать ценность хорошего дерева.

У вас есть \(q\) запросов. Каждый запрос задается парой целых чисел \(x\) и \(y\) и меняет \(a_{x}\) на \(y\), после чего вы должны вывести минимальное значение хорошего дерева для заданного массива \(a\).

Перестановкой длины \(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\), \(m\) и \(q\) (\(1\le n,q \le 2 \cdot 10^5\), \(2\le m \le 2\cdot 10^5\), \(n \equiv 1 \pmod {m - 1}\)) — количество листьев, константа \(m\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2}, \ldots, a_{n}\) (\(1 \le a_{i} \le n\)) — исходный массив.

В следующих \(q\) строках описываются запросы изменения. Каждая строка содержит два целых числа \(x\) и \(y\) (\(1\le x,y\le n\)), представляющих запрос, изменяющий \(a_{x}\) на \(y\).

Гарантируется, что сумма \(n\) и сумма \(q\) не превосходят \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел, \(i\)-е из которых — минимальная ценность дерева после \(i\)-го изменения.

Примечание

В первом наборе входных данных после первого запроса текущий массив \(a\) равен \([4,3,4,4,5]\). Мы можем построить такое хорошее дерево:

Первое число внутри вершины — это ее номер (в этой задаче номер вершины не имеет значения, но помогает понять рисунок). Если вершина является листом, то второе число внутри вершины — это число, написанное на ней.

Заметим, что \(\mathrm{dep}_{3}=\mathrm{dep}_{4}=1,\mathrm{dep}_{5}=\mathrm{dep}_{6}=\mathrm{dep}_{7}=2\), и ценность дерева, которая является максимальным значением по всем листьям, равна \(5+1=6\). Значения листьев \(5\), \(6\) и \(7\) также равны \(6\). Можно показать, что это дерево имеет минимальную ценность среди всех допустимых деревьев.

H. Последнее число

Комбинаторика математика *2900

Вам дано мультимножество \(S\). Изначально \(S = \{1,2,3, \ldots, n\}\).

Вы выполните следующую операцию \(n-1\) раз.

  • Выберите наибольшее число \(S_{\text{max}}\) в \(S\) и наименьшее число \(S_{\text{min}}\) в \(S\). Удалите эти два числа из \(S\) и добавьте \(S_{\text{max}} - S_{\text{min}}\) в \(S\).

Легко показать, что после \(n-1\) операций останется ровно одно число. Выведите это число.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^5\)). Далее следует их описание.

Для каждого набора входных данных в одной строке содержится целое число \(n\) (\(2 \le n \le 10^9\)) — изначальный размер множества \(S\).

Выходные данные

Для каждого набора входных данных выведите число, которое останется после \(n-1\) операции.

Примечание

Покажем, как изменится мультимножество \(S\) при \(n=4\).

  • Операция \(1\): \(S=\{1,2,3,4\}\), удаляем \(4\) и \(1\), добавляем \(3\).
  • Операция \(2\): \(S=\{2,3,3\}\), удаляем \(3\) и \(2\), добавляем \(1\).
  • Операция \(3\): \(S=\{1,3\}\), удаляем \(3\) и \(1\), добавляем \(2\).
  • Получившееся мультимножество: \(S = \{2\}\).

Таким образом, при \(n = 4\) ответ равен \(2\).

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\) цифры — максимально возможное число, которое можно получить.

B. Конвейерные ленты

математика реализация *1000

Конвейерная матрица \(m_n\) — матрица размера \(n \times n\), \(n\)чётное число. Матрица состоит из концентрических лент, движущихся по часовой стрелке.

Иными словами, конвейерная матрица для \(n = 2\) — это просто матрица \(2 \times 2\), ячейки которой образуют цикл длины \(4\) по часовой стрелке. Для любого натурального \(k \ge 2\), матрица \(m_{2k}\) получается добавлением к матрице \(m_{2k - 2}\) внешнего слоя, образующего цикл, направленный по часовой стрелке.

Конвейерная матрица \(8 \times 8\).

Вы стоите в ячейке с координатами \(x_1, y_1\) и хотите попасть в ячейку с координатами \(x_2, y_2\). Клетка имеет координаты \(x, y\), если находится на пересечении \(x\)-й строки и \(y\)-го столбца.

Стоя на какой-то ячейке, вы каждую секунду будете перемещаться на ячейку, следующую в направлении движения ленты, на которой вы находитесь. Также вы можете переместиться на соседнюю ячейку, потратив одну единицу энергии. Перемещения происходят мгновенно и их можно совершать неограниченное количество в любой момент времени.

Ваша задача — найти минимальное количество энергии, которое придётся потратить, чтобы добраться из ячейки с координатами \(x_1, y_1\) в ячейку с координатами \(x_2, y_2\).

Например, \(n=8\) изначально вы находитесь в ячейке с координатами \(1,3\) и хотите попасть в ячейку с координатами \(6, 4\). Вы можете сразу же сделать \(2\) перемещения, оказавшись в ячейке с координатами \(3, 3\), а затем через \(8\) секунд вы окажетесь в нужной ячейке.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

Описание каждого набора входных данных состоит из одной строки, содержащей пять целых чисел \(n\), \(x_1\), \(y_1\), \(x_2\) и \(y_2\) (\(1 \le x_1, y_1, x_2, y_2 \le n \le 10^9\)) — размер матрицы и координаты начальной и конечной ячеек. Гарантируется, что число \(n\) четно.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — минимальное количество энергии, которое придётся потратить, чтобы добраться из ячейки с координатами \(x_1, y_1\) в ячейку с координатами \(x_2, y_2\).

D. Умка и долгий перелёт

Конструктив математика реализация *1600

Девочка Умка любит путешествовать и участвовать в олимпиадах по математике. Однажды она летела самолетом на очередную олимпиаду и от скуки изучала огромный клетчатый лист бумаги.

Обозначим \(n\)-е число Фибоначчи как \(F_n = \begin{cases} 1, & n = 0; \\ 1, & n = 1; \\ F_{n-2} + F_{n-1}, & n \ge 2. \end{cases}\)

Клетчатый прямоугольник с высотой \(F_n\) и шириной \(F_{n+1}\) назовем прямоугольником Фибоначчи порядка \(n\).

У Умки есть прямоугольник Фибоначчи порядка \(n\). Кто-то закрасил в нём клетку на пересечении ряда \(x\) и столбца \(y\).

Необходимо разрезать этот прямоугольник ровно на \(n+1\) квадратов, чтобы

  • закрашенная клетка находилась в квадрате со стороной \(1\);
  • было не более одной пары квадратов с совпадающими сторонами;
  • сторона каждого квадрата являлась числом Фибоначчи.

Получится ли у Умки разрезать этот прямоугольник таким образом?

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных даны целые числа \(n\), \(x\), \(y\) (\(1 \le n \le 44\), \(1 \le x \le F_n\), \(1 \le y \le F_{n+1}\)) — порядок прямоугольника Фибоначчи и координаты закрашенной клетки.

Выходные данные

Для каждого набора входных данных выведите «YES», если ответ положительный, и «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание
Первый, третий и четвёртый наборы входных данных.

E. Живая последовательность

Бинарный поиск дп математика теория чисел *1500

В Японии цифра \(4\) читается как смерть, поэтому Боб решил построить живую последовательность. Живая последовательность \(a\) содержит все натуральные числа, не содержащие цифры \(4\). \(a = [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, \ldots]\).

Например, число \(1235\) входит в последовательность \(a\), а числа \(4321\), \(443\) не входят в последовательность \(a\).

Боб понял, что не умеет быстро искать конкретное число по позиции \(k\) в последовательности, поэтому просит вас о помощи.

Например, если Боб хочет узнать число на позиции \(k = 4\) (индексация с \(1\)), то вам нужно ответить \(a_k = 5\).

Входные данные

В первой строке входных данных дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

В единственной строке каждого набора входных данных задано одно целое число \(k\) (\(1 \le k \le 10^{12}\)) — позиция, интересующая Боба.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке число \(a_k\) в индексации с \(1\).

G1. Влад и правильные пути (простая версия)

дп Комбинаторика математика *2100

Это простая версия задачи, она отличается от сложной только ограничениями на \(n\) и \(k\).

Влад нашёл ряд из \(n\) плиток и число \(k\). Плитки пронумерованы слева направо и \(i\)-я плитка имеет цвет \(c_i\). Немного подумав, он решил, что с этим делать.

Вы можете начать с любой плитки и прыгать на любое количество плиток вправо, формируя при этом путь \(p\). Назовём путь \(p\) длины \(m\) правильным, если верно:

  • \(p\) разбивается на блоки длины ровно \(k\), то есть \(m\) делится на \(k\) без остатка;
  • \(c_{p_1} = c_{p_2} = \ldots = c_{p_k}\);
  • \(c_{p_{k+1}} = c_{p_{k+2}} = \ldots = c_{p_{2k}}\);
  • \(\ldots\)
  • \(c_{p_{m-k+1}} = c_{p_{m-k+2}} = \ldots = c_{p_{m}}\);

Ваша задача найти количество правильных путей максимальной длины. Так как это число может оказаться слишком большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)) — количество плиток в ряду и длину блока.

Вторая строка каждого набора содержит \(n\) целых чисел \(c_1, c_2, c_3, \dots, c_n\) (\(1 \le c_i \le n\)) — цвета плиток.

Гарантируется, что сумма \(n^3\) по всем наборам не превосходит \(5 \cdot 10^6\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных — количество правильных путей максимальной длины по модулю \(10^9 + 7\).

Примечание

В первом примере невозможно составить правильный путь, длины больше \(0\).

Во втором примере нас интересуют следующие пути:

  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 5\)
  • \(2 \rightarrow 4 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 7\)

В третьем примере подходит любой путь длины \(8\).

G2. Влад и правильные пути (сложная версия)

Бинарный поиск дп Комбинаторика математика Структуры данных *2200

Это сложная версия задачи, она отличается от простой только ограничениями на \(n\) и \(k\).

Влад нашёл ряд из \(n\) плиток и число \(k\). Плитки пронумерованы слева направо и \(i\)-я плитка имеет цвет \(c_i\). Немного подумав, он решил, что с этим делать.

Вы можете начать с любой плитки и прыгать на любое количество плиток вправо, формируя при этом путь \(p\). Назовём путь \(p\) длины \(m\) правильным, если верно:

  • \(p\) разбивается на блоки длины ровно \(k\), то есть \(m\) делится на \(k\) без остатка;
  • \(c_{p_1} = c_{p_2} = \ldots = c_{p_k}\);
  • \(c_{p_{k+1}} = c_{p_{k+2}} = \ldots = c_{p_{2k}}\);
  • \(\ldots\)
  • \(c_{p_{m-k+1}} = c_{p_{m-k+2}} = \ldots = c_{p_{m}}\);

Ваша задача найти количество правильных путей максимальной длины. Так как это число может оказаться слишком большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 5000\)) — количество плиток в ряду и длину блока.

Вторая строка каждого набора содержит \(n\) целых чисел \(c_1, c_2, c_3, \dots, c_n\) (\(1 \le c_i \le n\)) — цвета плиток.

Гарантируется, что сумма \(n^2\) по всем наборам не превосходит \(25 \cdot 10^6\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных — количество правильных путей максимальной длины по модулю \(10^9 + 7\).

Примечание

В первом примере невозможно составить правильный путь, длины больше \(0\).

Во втором примере нас интересуют следующие пути:

  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 5\)
  • \(2 \rightarrow 4 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 7\)

В третьем примере подходит любой путь длины \(8\).

D. Тривиальная гипотеза

*особая задача Конструктив математика теория чисел

\(\)f(n) = \left\{ \begin{array}{ll} \frac{n}{2} & n \equiv 0 \pmod{2}\\ 3n+1 & n \equiv 1 \pmod{2}\\ \end{array} \right.\(\)

Найдите целое число \(n\) такое, чтобы ни один из первых \(k\) членов последовательности \(n, f(n), f(f(n)), f(f(f(n))), \dots\) не равнялся \(1\).

Входные данные

В единственной строке дано целое число \(k\) (\(1 \leq k \leq \min(\textbf{[УДАЛЕНО]}, 10^{18})\)).

Выходные данные

Вывести одно целое число n таким образом, чтобы ни одно из первых \(k\) элементов последовательности \(n, f(n), f(f(n)), f(f(f(n))), \dots\) не равнялось \(1\).

Целое число \(n\) должно иметь не более \(10^3\) разрядов.

Примечание

В первом тесте последовательность, созданная с \(n = 5\), является \(5, 16, 8, 4, 2, 1, 4, \dots\), и ни один из первых \(k=1\) членов не равен \(1\).

Во втором тесте последовательность, созданная с \(n = 6\), является \(6, 3, 10, 5, 16, 8, 4, \dots\), и ни один из первых \(k=5\) членов не равен \(1\).

E. Не задача по геометрии

*особая задача *особая задача геометрия Конструктив математика

Входные данные

В единственной строке заданы три целых числа \(x\), \(y\), \(z\) (\(-1000 \le x, y, z \le 1000\)).

Выходные данные

Выведите одно вещественное число — ответ.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^6\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a-b|}{\max(1,|b|)} \le 10^6\).

A. Монеты

математика реализация *800

В Берляндии используются монеты двух типов — номиналами в \(2\) и в \(k\) бурлей.

Ваша задача — определить, возможно ли представить \(n\) бурлей в монетах, т. е. существуют ли неотрицательные целые числа \(x\) и \(y\), такие, что выполняется равенство \(2 \cdot x + k \cdot y = n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^{18}\); \(k \ne 2\)).

Выходные данные

На каждый набор входных данных выведите YES, если возможно представить \(n\) бурлей в монетах; иначе выведите NO. Каждую букву можно выводить в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

В первом наборе входных данных можно взять одну монету номиналом \(2\) и одну монету номиналом \(k = 3\).

Во втором наборе можно взять три монеты номиналом \(2\). Или же можно взять шесть монет номиналом \(k = 1\).

В третьем наборе нет способов представить \(7\) бурлей.

В четвертом наборе можно взять одну монету номиналом \(k = 8\).

A. Монеты

математика реализация *800

В Берляндии используются монеты двух типов — номиналами в \(2\) и в \(k\) бурлей.

Ваша задача — определить, возможно ли представить \(n\) бурлей в монетах, т. е. существуют ли неотрицательные целые числа \(x\) и \(y\), такие, что выполняется равенство \(2 \cdot x + k \cdot y = n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^{18}\); \(k \ne 2\)).

Выходные данные

На каждый набор входных данных выведите YES, если возможно представить \(n\) бурлей в монетах; иначе выведите NO. Каждую букву можно выводить в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

В первом наборе входных данных можно взять одну монету номиналом \(2\) и одну монету номиналом \(k = 3\).

Во втором наборе можно взять три монеты номиналом \(2\). Или же можно взять шесть монет номиналом \(k = 1\).

В третьем наборе нет способов представить \(7\) бурлей.

В четвертом наборе можно взять одну монету номиналом \(k = 8\).

B. Длинные ноги

математика Перебор *1700

Робот стоит в клетке \((0, 0)\) бесконечной сетки. Длина его ног может регулироваться. Изначально длина его ног равна \(1\).

Пусть робот сейчас стоит в клетке \((x, y)\), а длина его ног равна \(m\). За один ход он может исполнить одно из следующих трех действий:

  • прыгнуть в клетку \((x + m, y)\);
  • прыгнуть в клетку \((x, y + m)\);
  • увеличить длину ног на \(1\), то есть сделать ее равной \(m + 1\).

Какое наименьшее количество ходов ему потребуется, чтобы достичь клетки \((a, b)\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны два целых числа \(a\) and \(b\) (\(1 \le a, b \le 10^9\)) — финальная клетка.

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество ходов, которые потребуется роботу, чтобы достичь клетки \((a, b)\) из клетки \((0, 0)\).

Примечание

В первом наборе входных данных робот может сначала прыгнуть в \((0, 1)\), затем в \((1, 1)\). Если он когда-нибудь увеличит длину своих ног, то он сможет только перепрыгнуть \((1, 1)\).

Во втором наборе робот может прыгнуть в \((1, 0)\), затем увеличить длину своих ног до \(2\), затем прыгнуть трижды до \((1, 6)\).

В третьем наборе робот может увеличить длину своих ног трижды, чтобы сделать ее равной \(4\). Затем прыгнуть в \((0, 4)\). Затем прыгнуть дважды до \((8, 4)\).

D. Балансировка пушек

Бинарный поиск математика Перебор Структуры данных *2500

Вы получили работу в игровой студии, которая разработала и поддерживает онлайн шутер, и ваша первая по-настоящему большая работа — это помочь в балансировке оружия. В игре есть \(n\) пушек: у \(i\)-й пушки есть целочисленная скорость стрельбы \(f_i\) и целочисленный урон от одного выстрела \(d_i\). Таким образом, общая огневая мощь \(i\)-й пушки равна \(p_i = f_i \cdot d_i\).

Для начала, вам дали задачу изменить значения \(d_i\) некоторых пушек таким образом, чтобы новые значения \(d_i\) оставались целыми и огневая мощь всего оружия оказалась сбалансирована. Вам дали число \(k\), и сказали, что оружие сбалансировано, если \(\max\limits_{1 \le i \le n}{p_i} - \min\limits_{1 \le i \le n}{p_i} \le k\).

Так как игроки не любят больших изменений, вам нужно изменить значения \(d_i\) у наименьшего возможного количества пушек. Чему равно наименьшее количество пушек, у которых вы должны изменить урон, чтобы сделать игру сбалансированной?

Заметьте, что новые значения \(d_i\) должны быть целыми и строго больше \(0\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 3000\); \(0 \le k \le 1500\)) — количество пушек в игре и максимально возможный разрыв между самой сильной и самой слабой пушкой.

Во второй строке заданы \(n\) целых чисел \(f_1, f_2, \dots, f_n\) (\(1 \le f_i \le 2000\)), где \(f_i\) равно скорости стрельбы \(i\)-й пушки.

В третьей строке заданы \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^9\)), где \(d_i\) равно урону от одного выстрела \(i\)-й пушки.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных, выведите наименьшее количество пушек, у которых нужно изменить урон \(d_i\), чтобы сделать все оружие сбалансированным.

Заметим, что новые значения \(d_i\) должны быть целыми и больше \(0\).

Примечание

В первом наборе входных данных вы можете выставить \(d_1 = 2\) и \(d_2 = 4\). Вы получите массив \(d = [2, 4, 1, 2]\) и общую огневую мощь \(p = [12, 12, 13, 14]\). Пушки сбалансированы, так как \(14 - 12 \le 2\).

Во втором наборе вы должны изменить урон \(d_i\) всех трех пушек. Например, вы можете сделать \(d = [5151, 5100, 5050]\).

В третьем наборе все оружие уже сбалансировано, и вам не нужно ничего менять.

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», и Ян не сможет показаться умным.

В третьем наборе входных данных массив уже отсортирован в порядке неубывания, поэтому Яну не нужно ничего делать.

D. Подсчёт XOR

битмаски дп Комбинаторика математика *2600

Вам даны два положительных целых числа \(n\) и \(m\). Найдите сумму всех возможных значений \(a_1\bigoplus a_2\bigoplus\ldots\bigoplus a_m\), где \(a_1,a_2,\ldots,a_m\) являются неотрицательными целыми числами такими, что \(a_1+a_2+\ldots+a_m=n\).

Обратите внимание, что все возможные значения \(a_1\bigoplus a_2\bigoplus\ldots\bigoplus a_m\) должны быть посчитаны в сумме ровно один раз.

Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Здесь \(\bigoplus\) обозначает операцию побитового исключающего ИЛИ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единсвственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(0\le n\le 10^{18}, 1\le m\le 10^5\)) — сумма и количество чисел в наборе, соответственно.

Выходные данные

Для каждого набора входных данных выведите сумму всех возможных значений \(a_1\bigoplus a_2\bigoplus\ldots\bigoplus a_m\) по всем наборам неотрицательных целых чисел \(a_1,a_2,\ldots,a_m\) с \(a_1+a_2+\ldots+a_m=n\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Примечание

В первом наборе входных данных у нас должно быть \(a_1=69\), поэтому это единственное возможное значение \(a_1\), следовательно, наш ответ — \(69\).

Во втором наборе входных данных \((a_1,a_2)\) может быть равно \((0,5), (1,4), (2,3), (3,2), (4,1)\) или \((5,0)\), в которых \(a_1\bigoplus a_2\) равно \(5,5,1,1,5,5\) соответственно. Поэтому \(a_1\bigoplus a_2\) может быть равно \(1\) или \(5\), поэтому ответ равен \(1+5=6\).

В третьем наборе входных данных \(a_1,a_2,\ldots,a_{10}\) должны быть все равны \(0\), поэтому \(a_1\bigoplus a_2\bigoplus\ldots\bigoplus a_{10}=0\). Поэтому ответ равен \(0\).

E. Bosco and частица

дп математика Строки теория чисел *3100

Bosco изучает поведение частиц. Он решил исследовать особенности поведения так называемой частицы «четыре-один-два». Он поступает следующим образом:

Имеется прямая длиной \(n+1\), где самая верхняя точка — позиция \(0\), а самая нижняя — позиция \(n+1\). Частица первоначально (в момент времени \(t=0\)) находится в позиции \(0\) и движется вниз. Частица движется со скоростью \(1\) единица в секунду. В позициях \(1,2,\ldots,n\) находятся \(n\) излучателей.

Каждый излучатель может быть описан бинарной строкой. Начальное состояние каждого излучателя — это первый символ его бинарной строки. Когда частица сталкивается с излучателем, она меняет направление своего движения, если текущее состояние излучателя равно \(\texttt{1}\), и продолжает двигаться в том же направлении, если его текущее состояние равно \(\texttt{0}\), и этот излучатель переходит в следующее состояние (следующее состояние для последнего состояния определяется как первое состояние). Кроме того, частица всегда меняет свое направление, если она находится в положении \(0\) или \(n+1\) в момент времени \(t > 0\).

Bosco хотел бы узнать длину цикла движения частицы. Длина цикла определяется как минимальное значение \(c\), такое, что для любого времени \(t \ge 0\) положение частицы в момент времени \(t\) совпадает с положением частицы в момент времени \(t+c\). Можно доказать, что такое значение \(c\) существует всегда. Поскольку он понимает, что ответ может быть слишком большим, он просит вас вывести ответ по модулю \(998244353\).

Входные данные

Первая строка содерижит целое число \(n\) (\(1\le n\le10^6\)) — количество излучателей.

\(i\)-я из следующих \(n\) строк содержит бинарную строку \(s_i\) (\(1\le\left|s_i\right|\le10^6\)) — бинарная строка, содержащая только символы \(\texttt{0}\) и \(\texttt{1}\), описывающая излучатель на позиции \(i\).

Гарантируется, что сумма \(|s_i|\) не превосходит \(10^6\).

Выходные данные

Выведите единственное целое число — длину цикла движения частицы, взятую по модулю \(998244353\).

Примечание

В первом примере единственный излучатель на позиции \(1\) всегда имеет состояние \(\texttt{0}\). В моменты времени \(0,1,2,3\) позиции частицы равны \(0,1,2,1\) соответственно. Затем те же позиции будут повторяться, поэтому \(c=4\).

Анимация для второго примера: здесь или более плавная анимация.

F. OH NO1 (-2-3-4)

графы Конструктив математика *3500

Вам дан неориентированный граф с \(n\) вершинами и \(3m\) рёбрами. Граф может содержать кратные рёбра, но не содержит петель.

Граф удовлетворяет следующему условию: данные рёбра можно разделить на \(m\) групп по \(3\), таких что каждая группа является треугольником.

Треугольником являются три ребра \((a,b)\), \((b,c)\) и \((c,a)\) для некоторых трёх различных вершин \(a,b,c\) (\(1 \leq a,b,c \leq n\)).

Изначально каждая вершина \(v\) имеет неотрицательный целый вес \(a_v\). Для каждого ребра \((u,v)\) в графе вы должны выполнить следующую операцию ровно один раз:

  • Выбрать целое число \(x\) от \(1\) до \(4\). Затем увеличть \(a_u\) и \(a_v\) на \(x\).

После выполнения всех операций должно выполняться следующее условие: если \(u\) и \(v\) соединены ребром, то \(a_u \ne a_v\).

Можно доказать, что это всегда возможно при ограничениях задачи. Приведите способ, как это сделать, выводя выбор \(x\) для каждого ребра. Легко видеть, что порядок операций не имеет значения. Если существует несколько правильных ответов, выведите любой.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 10^6\), \(1 \le m \le 4 \cdot 10^5\)), обозначающие граф с \(n\) вершинами и \(3m\) рёбрами.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0 \leq a_i \leq 10^6\)) — изначальные веса каждой вершины.

Затем следуют \(m\) строк. \(i\)-я строка содержит три целых числа \(a_i\), \(b_i\), \(c_i\) (\(1 \leq a_i < b_i < c_i \leq n\)), обозначающие три ребра \((a_i,b_i)\), \((b_i,c_i)\) и \((c_i,a_i)\).

Обратите внимание, что граф может содержать кратные рёбра: пара \((x,y)\) может несколько раз встречаться в треугольниках.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\), и сумма \(m\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(m\) строк по \(3\) целых числа в каждой.

\(i\)-я строка должна содержать три целых числа \(e_{ab},e_{bc},e_{ca}\) (\(1 \leq e_{ab}, e_{bc} , e_{ca} \leq 4\)), обозначающие выбор значения \(x\) для рёбер \((a_i, b_i)\), \((b_i,c_i)\) and \((c_i, a_i)\) соответственно.

Примечание

В первом наборе входных данных изначальные веса равны \([0,0,0,0]\). Мы добавим значения следующим образом:

  • Добавили \(2\) к вершинам \(1\) и \(2\)
  • Добавили \(1\) к вершинам \(2\) и \(3\)
  • Добавили \(3\) к вершинам \(3\) и \(1\)

Итоговые веса равны \([5,3,4,0]\). Ответ корректен, потому что \(a_1 \neq a_2\), \(a_1 \neq a_3\), \(a_2 \neq a_3\), и все выбранные значения находятся между \(1\) и \(4\).

Во втором наборе входных данных изначальные веса равны \([0,0,0,0,0]\). Веса после операций равны \([12,5,6,7,6]\). Ответ корректен, потому что \(a_1 \neq a_2\), \(a_1 \neq a_3\), \(a_2 \neq a_3\), and that \(a_1 \neq a_4\), \(a_1 \neq a_5\), \(a_4 \neq a_5\), и все выбранные значения находятся между \(1\) и \(4\).

В третьем наборе входных данных изначальные веса равны \([3,4,5,6]\). Веса после операций равны \([19,16,17,20]\), поэтому все итоговые веса различны, что означает, что никакие две соседние вершины не имеют одинаковый вес.

C. Подобные многочлены

Комбинаторика математика *2400

Многочлен \(A(x)\) степени \(d\) — это выражение вида \(A(x) = a_0 + a_1 x + a_2 x^2 + \dots + a_d x^d\), где \(a_i\) — целые числа, и \(a_d \neq 0\). Два многочлена \(A(x)\) и \(B(x)\) называются подобными, если существует целое число \(s\), такое что для любого целого числа \(x\) выполняется условие

\(\) B(x) \equiv A(x+s) \pmod{10^9+7}. \(\)

Вам даны значения по модулю \(10^9+7\) двух подобных многочленов \(A(x)\) и \(B(x)\) степени \(d\) в точках \(x=0,1,\dots, d\).

Найдите значение \(s\), такое что \(B(x) \equiv A(x+s) \pmod{10^9+7}\) для всех целых чисел \(x\).

Входные данные

Первая строка содержит одно целое число \(d\) (\(1 \le d \le 2\,500\,000\)).

Вторая строка содержит \(d+1\) целых чисел \(A(0), A(1), \ldots, A(d)\) (\(0 \le A(i) < 10^9+7\)) — значения многочлена \(A(x)\).

Третья строка содержит \(d+1\) целых чисел \(B(0), B(1), \ldots, B(d)\) (\(0 \le B(i) < 10^9+7\)) — значения многочлена \(B(x)\).

Гарантируется, что многочлены \(A(x)\) и \(B(x)\) подобны, и что старшие коэффициенты (то есть коэффициенты перед \(x^d\)) многочленов \(A(x)\) и \(B(x)\) не делятся на \(10^9+7\).

Выходные данные

Выведите одно целое число \(s\) (\(0 \leq s < 10^9+7\)) такое, что \(B(x) \equiv A(x+s) \pmod{10^9+7}\) для всех целых чисел \(x\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере \(A(x) \equiv x-1 \pmod{10^9+7}\) и \(B(x)\equiv x+2 \pmod{10^9+7}\). Они подобны, потому что \(\)B(x) \equiv A(x+3) \pmod{10^9+7}.\(\)

Во втором примере \(A(x) \equiv (x+1)^2 \pmod{10^9+7}\) и \(B(x) \equiv (x+10)^2 \pmod{10^9+7}\), следовательно, \(\)B(x) \equiv A(x+9) \pmod{10^9+7}.\(\)

C. Лисица и полный обход древа

Деревья дп Конструктив математика реализация *2400

Лисица Яэ забралась на древо Священной сакуры. Древом называют связный неориентированный граф, не содержащий циклов.

Для передвижения по древу лисица применяет свои магические способности. Яэ может прыгнуть из вершины \(v\) в другую вершину \(u\) тогда и только тогда, когда расстояние между этими вершинами не превосходит \(2\). Иными словами, за один прыжок Яэ может перепрыгнуть из вершины \(v\) в вершину \(u\), если вершины \(v\) и \(u\) соединены ребром, либо если существует такая вершина \(w\), что вершины \(v\) и \(w\) соединены ребром, а также вершины \(u\) и \(w\) соединены ребром.

После того, как Яэ смогла заполучить лепесток сакуры, она задумалась, существует ли циклический маршрут в древе \(v_1, v_2, \ldots, v_n\), такой что:

  • лисица может совершить прыжок из вершины \(v_i\) в вершину \(v_{i + 1}\),
  • лисица может совершить прыжок из вершины \(v_n\) в вершину \(v_1\),
  • все \(v_i\) попарно различны.

Помогите лисице определить, существует ли требуемый обход.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин древа.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — вершины, соединенные ребром. Гарантируется, что данные ребра задают древо.

Выходные данные

В первой строке выведите «Yes» (без кавычек), если требуемый обход древа существует, либо «No» (без кавычек) в противном случае.

Если требуемый обход древа существует, во второй строке выведите \(n\) целых различных чисел \(v_1, v_2, \ldots, v_n\) (\(1 \le v_i \le n\)) — вершины древа в порядке обхода.

Если существует несколько корректных обходов, выведите любой из них.

Примечание

Древо из первого примера изображено ниже. Жирными стрелками обозначен маршрут лисицы.

Во втором примере любая последовательность из трёх различных вершин является корректным маршрутом, потому что лисица может совершить прыжок из любой вершины в любую.

Древо из третьего примера изображено ниже. Можно показать, что для него не существует требуемого маршрута.

E. Дороги в городе E

Деревья интерактив математика Теория вероятностей *3200

Это интерактивная задача.

Как хорошо известно, в городе «E» за его полутора тысячелетнюю историю ни разу не ремонтировали дороги. И только недавно руководство города отремонтировало некоторые из них.

Известно, что всего в городе «E» есть \(n\) перекрестков и \(m\) дорог, пронумерованных целыми числами от \(1\) до \(m\), перемещаться по которым можно в обе стороны. \(i\)-я дорога соединяет перекрестки с номерами \(a_i\) и \(b_i\).

Среди всех \(m\) дорог было отремонтировано некоторое подмножество дорог, но вам не известно, какое именно. Единственная информация, которую вы смогли получить от дорожных служб города, это то, что от любого перекрестка можно доехать до любого другого, двигаясь только по отремонтированным дорогам.

Вы — молодой предприниматель, и решили организовать службу доставки свежего сырого мяса в городе «E» (в самом городе такое мясо называют «стейками», оно пользуется большой популярностью у местных жителей). Вы уже набрали штат курьеров, однако курьеры готовы перемещаться только по отремонтированным дорогам. Теперь вам предстоит выяснить, какие дороги уже отремонтированы.

Городская администрация предоставила вам город на некоторое время, поэтому вы можете делать различные действия одного из трех типов:

  1. Заблокировать дорогу с номером \(x\). В этом случае перемещение по дороге для курьеров будет запрещено. Исходно все дороги разблокированы.
  2. Разблокировать дорогу с номером \(x\). В этом случае курьеры смогут двигаться по дороге \(x\), если она отремонтирована.
  3. Попробовать доставить заказ на перекресток с номером \(y\). В этом случае один из ваших курьеров начнет двигаться с неизвестного вам перекрестка \(s\) и доставит заказ на перекресток с номером \(y\) в том случае, если существует путь по разблокированным отремонтированным дорогам от перекрестка \(s\) до перекрестка \(y\). При этом гарантируется, что перекресток \(s\) будет выбран заранее.

К сожалению, город предоставлен в ваше полное распоряжение ненадолго, поэтому вы можете сделать не более \(100 \cdot m\) запросов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 1\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит каждого наборе входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2\,000\), \(n - 1 \le m \le 2\,000\)) — число перекрестков и дорог в городе «E».

Каждая из следующих \(m\) строк содержит описание одной дороги. \(i\)-я из этих строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)) — концы \(i\)-й дороги. Гарантируется, что никакая дорога не соединяет город сам с собой, при этом возможно, что между парой различных перекрестков есть несколько дорог.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходит \(2\,000\).

Протокол взаимодействия

После того, как вы считали описание набора входных данных, вы можете задавать запросы. Запросы могут быть трех типов:

  1. «- \(x\)» (\(1 \le x \le m\)). В этом случае дорога с номером \(x\) блокируется, если она ещё не была заблокирована.
  2. «+ \(x\)» (\(1 \le x \le m\)). В этом случае дорога с номером \(x\) разблокируется. Обратите внимание, что дорога \(x\) должна быть заранее заблокирована. Исходно все дороги разблокированы.
  3. «? \(y\)» (\(1 \le y \le n\)). В этом случае программа жюри выбирает некоторый город \(s\). В случае, если от города \(s\) до города \(y\) можно добраться по разблокированным отремонтированным дорогам, программа жюри выведет \(1\), иначе программа жюри выведет \(0\). Обратите внимание, что город \(s\) будет выбран до получения информации о городе \(y\), однако при выборе города \(s\) могут учитываться ваши предыдущие запросы.

Всего вы можете задать не более \(100 \cdot m\) запросов для каждого набора входных данных.

После того, как вы нашли все отремонтированные дороги, выведите «! \(c_1,\ c_2,\ c_3,\ \ldots,\ c_m\)», где \(c_i\) равно \(1\), если дорога \(i\) отремонтирована, и \(0\), если дорога не отремонтирована. Этот вывод не будет считаться в общем числе запросов. На это программа жюри выведет \(1\), если ваш ответ правильный, и \(0\), если ответ не правильный. Если вы считали \(0\), то ваша программа должна немедленно завершиться, чтобы получить вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока. Если вы считали \(1\), то перейдите к следующему набору входных данных, или завершите программу, если такого нет.

Обратите внимание, что вам не обязательно разблокировать все дороги на момент вывода ответа. Гарантируется, что все отремонтированные дороги зафиксированы изначально и не будут меняться программой жюри в зависимости от запросов.

После вывода запроса или ответа не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Вы не можете делать взломы по этой задаче.

Примечание

В первом наборе входных данных дорога \(1\) отремонтирована, а дорога \(2\) — нет. Для первого запроса доставки в качестве \(s\) был выбран перекресток \(1\), поэтому путь от перекрестка \(1\) до \(1\) есть. Для второго запроса доставки в качестве \(s\) был выбран перекресток \(1\), так как в города заблокирована единственная отремонтированная дорога, то пути между перекрестками \(1\) и \(2\) нет. Для третьего запроса доставки в качестве \(s\) был выбран перекресток \(2\), путь между перекрестками \(2\) и \(1\) есть по дороге \(1\), которая отремонтирована и разблокирована.

Во втором наборе входных данных для запросов доставки в качестве стартовых перекрестков были выбраны перекрестки \(1\), \(3\), \(1\), \(2\), \(2\), \(3\), \(1\).

D. Общие делители

математика Перебор реализация Строки хэши *1400

Недавно Вася узнал в школе, что такое делитель числа, и решил определить делитель строки. Вот что он придумал.

Строка a является делителем строки b тогда и только тогда, когда существует целое положительное число x такое, что если строку a выписать x раз подряд получится строка b. Например, у строки «abab» два делителя — «ab» и «abab».

Теперь Вася захотел написать программу, которая вычисляет количество общих делителей двух строк. Помогите ему, пожалуйста.

Входные данные

В первой строке входных данных задана непустая строка s1.

Во второй строке входных данных задана непустая строка s2.

Длины строк s1 и s2 положительны и не превосходят 105. Строки состоят только из строчных букв латинского алфавита.

Выходные данные

Выведите количество общих делителей строк s1 и s2.

Примечание

В первом примере общими делителями являются строки «abcd» и «abcdabcd».

В втором примере общим делителем является единственная строка «a». Строка «aa» не входит в ответ, так как не является делителем строки «aaa».

B. Невероятные приключения ДжоДжо

математика Строки *1100

Ты думал, что тут будет легенда про ДжоДжо? Но нет, это был я, Дио!

Дана бинарная строка \(s\) длины \(n\), состоящая из символов 0 и 1. Построим квадратную таблицу размера \(n \times n\), состоящую из символов 0 и 1 следующим образом.

В первую строку таблицы запишем исходную строку \(s\). Во вторую строку таблицы запишем циклический сдвиг строки \(s\) на один вправо. В третью строку таблицы запишем циклический сдвиг строки \(s\) на два вправо. И так далее. Таким образом, в строке с номером \(k\) будет записан циклический сдвиг строки \(s\) на \(k\) вправо. Строки таблицы пронумерованы от \(0\) до \(n - 1\) сверху вниз.

В получившейся таблице требуется найти прямоугольник, состоящий только из единиц, имеющий наибольшую площадь.

Прямоугольником мы называем множество всех клеток таблицы \((i, j)\) таких, что \(x_1 \le i \le x_2\) и \(y_1 \le j \le y_2\) для некоторых целых чисел \(0 \le x_1 \le x_2 < n\) и \(0 \le y_1 \le y_2 < n\).

Напомним, что циклическим сдвигом строки \(s\) на \(k\) вправо называется строка \(s_{n-k+1} \ldots s_n s_1 s_2 \ldots s_{n-k}\). Например, циклическим сдвигом строки «01011» на \(0\) вправо является сама строка «01011», её циклическим сдвигом на \(3\) вправо является строка «01101».

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит единственную бинарную строку \(s\) (\(1 \le \lvert s \rvert \le 2 \cdot 10^5\)), состоящую из символов 0 и 1.

Гарантируется, что сумма длин строк \(|s|\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную площадь прямоугольника, состоящего только из единиц. Если такого прямоугольника не существует, выведите \(0\).

Примечание

В первом наборе входных данных получается таблица \(1 \times 1\), состоящая из единственного символа 0, таким образом нет прямоугольников, состоящих из единиц, и ответ \(0\).

Во втором наборе входных данных получается таблица \(1 \times 1\), состоящая из единственного символа 1, поэтому ответ равен \(1\).

В третьем наборе входных данных получается таблица:

101
110
011

В четвёртом наборе входных данных получается таблица:

011110
001111
100111
110011
111001
111100

В пятом наборе входных данных получается таблица:

101010
010101
101010
010101
101010
010101

Прямоугольники с максимальной площадью выделены жирным шрифтом.

A. Сопоставление

Комбинаторика математика *800

Целочисленный шаблон — это строка, состоящая из цифр и/или знаков вопроса.

Положительное (строго больше \(0\)) целое число сопоставляется с шаблоном, если можно заменить каждый знак вопроса в шаблоне на цифру так, что мы получим десятичную запись этого числа без лишних нулей.

Например:

  • \(42\) сопоставляется с 4?;
  • \(1337\) сопоставляется с ????;
  • \(1337\) сопоставляется с 1?3?;
  • \(1337\) сопоставляется с 1337;
  • \(3\) не сопоставляется с ??;
  • \(8\) не сопоставляется с ???8;
  • \(1337\) не сопоставляется с 1?7.

Вам дан целочисленный шаблон, состоящий из не более \(5\) символов. Посчитайте количество положительных (строго больших \(0\)) целых чисел, которые сопоставляются с ним.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки \(s\) (\(1 \le |s| \le 5\)), состоящей из цифр и/или знаков вопроса. Эта строка является целочисленным шаблоном для соответствующего набора входных данных.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество положительных (строго больших \(0\)) целых чисел, которые сопоставляются с заданным шаблоном.

C. Разорвать на части

математика Перебор реализация Строки *1300

Дана строка \(s\), состоящая из строчных латинских букв.

За одно действие вы можете выбрать несколько (одну или больше) позиций в ней так, что никакие две выбранные позиции не соседние друг другу. Затем вы удаляете все буквы на выбранных позициях из строки. Полученные части строки затем склеиваются без изменения порядка.

Какое наименьшее количество действий необходимо совершить, чтобы все буквы в строке \(s\) стали одинаковые?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора записана строка \(s\), состоящая из строчных латинских букв. Ее длина от \(1\) до \(2 \cdot 10^5\).

Суммарная длина строк по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество действий, которые необходимо совершить, чтобы все буквы в строке \(s\) стали одинаковые.

Примечание

В первом наборе входных данных вы можете выбрать позиции \(2, 4\) и \(6\), и удалить соответствующие буквы 'b', 'c' и 'b'.

В третьем примере все буквы в строке уже одинаковые, поэтому не нужно совершать никаких действий.

В четвертом примере одно из возможных решений за \(2\) действия следующее. Сначала выбираете позиции \(1, 4, 6\). Строка становится «bce». Затем выбираете позиции \(1\) и \(3\). Строка становится «c». Все буквы в ней одинаковые, так как это просто одна буква.

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\) шагов.

F. Древесина

бпф дп Комбинаторика математика *2600

Перед торговым центром расположилась замечательная аллея с деревьями. Как жаль, что придется от нее избавиться, чтобы освободить место под парковку...

Деревья на аллее растут в один ряд. Есть \(n\) мест под деревья: позиция \(0\) — это торговый центр, позиция \(n+1\) — это дорога, а позиции с \(1\) по \(n\) — это места под деревья. Некоторые из них заняты — в них растут деревья одинаковой высоты \(k\). Не более одного дерева растет на каждом месте.

Когда вы срубаете дерево на месте \(x\), то вы можете его свалить либо налево, либо направо. Если оно падает налево, то занимает места с \(x-k\) по \(x\) включительно. Если оно падает направо, то занимает места с \(x\) по \(x+k\) включительно.

Пусть \(m\) деревьев растут на аллее в каких-то местах \(x_1, x_2, \dots, x_m\). Назовем аллею неудачной, если все \(m\) деревьев можно срубить таким образом, чтобы:

  • ни одно дерево не упало на торговый центр или дорогу;
  • ни одно место не было занято более чем одним упавшим деревом.

Посчитайте количество различных неудачных аллей с \(m\) деревьями высоты \(k\). Две аллеи считаются различными, если есть такое место \(y\), что дерево растет на месте \(y\) на первой аллее и не растет на месте \(y\) на второй аллее.

Выведите это число по модулю \(998\,244\,353\).

Входные данные

В единственной строке записаны три целых числа \(n, m\) и \(k\) (\(1 \le m, k \le n \le 3 \cdot 10^5\)) — количество мест для деревьев, количество деревьев и высота каждого дерева.

Выходные данные

Выведите одно целое число — количество различных неудачных аллей с \(m\) деревьями высоты \(k\) по модулю \(998\,244\,353\).

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\)-й элемент.

Во втором и третьем наборах входных данных примера не нужно делать удалений для достижения максимальной красоты.

В четвертом наборе входных данных примера необходимо оставить только первый и последний элементы.

C. Любитель булочек

математика *800

Тёма любит синнабоны — булочки с корицей и шоколадом в форме «улитки».

Синнабоны бывают разных размеров и представляют собой квадрат, если смотреть сверху. Самое вкусное в такой булочке — шоколад, который налит тонким слоем поверх синнабона в виде некой спирали и вокруг булочки, как на картинке:

Синнабоны размеров 4, 5, 6

У синнабона размера \(n\) длина внешней стороны квадрата равна \(n\), а длина самого короткого вертикального отрезка шоколада в центральной части равна одному.

Формально, сама булочка состоит из двух спиралей теста, разделенных шоколадом. Синнабон размера \(n + 1\) получается из синнабона размера \(n\) путем оборачивания каждой из спиралей теста вокруг синнабона на ещё один слой.

Важно, что синнабон размера \(n\) определён единственным образом.

Тёме интересно, сколько шоколада содержится в его синнабоне размера \(n\). Так как Тёма давно перестал покупать маленькие синнабоны, то гарантируется, что \(n \ge 4\).

Ответьте на этот неочевидный вопрос, вычислив суммарную длину шоколада на синнабоне.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных в тесте.

Далее следует \(t\) строк, каждая из которых описывает один набор входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(4 \le n \le 10^9\)) — размер синнабона.

Выходные данные

Выведите \(t\) целых чисел, \(i\)-е из которых должно быть равно ответу на \(i\)-й набор входных данных — суммарной длине слоя шоколада.

D. Супер-перестановка

Конструктив математика *1200

Перестановка — это последовательность из \(n\) целых чисел, в которой каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1]\), \([3,5,2,1,4]\), \([1,3,2]\) — перестановки, а \([2,3,2]\), \([4,3,1]\), \([0]\) — нет.

По перестановке \(a\) строится массив \(b\), где \(b_i = (a_1 + a_2 +~\dots~+ a_i) \bmod n\).

Перестановка чисел \([a_1, a_2, \dots, a_n]\) называется супер-перестановкой, если \([b_1 + 1, b_2 + 1, \dots, b_n + 1]\) также является перестановкой длины \(n\).

Грише стало интересно, существует ли супер-перестановка длины \(n\). Помогите ему справиться с этой нетривиальной задачей. Выведите любую супер-перестановку длины \(n\), если такая существует; в противном случае выведите \(-1\).

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из одной строки, в которой задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина искомой перестановки.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • \(n\) целых чисел — супер-перестановку длины \(n\), если такая существует.
  • \(-1\), в противном случае.

Если существует несколько подходящих перестановок, выведите любую из них.

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\).

G1. Магические тройки (простая версия)

математика Перебор Структуры данных теория чисел *1700

Это простая версия задачи. Единственное отличие в том, что в этой версии \(a_i \le 10^6\).

Для данной последовательности целых чисел \(a\) длины \(n\), тройка \((i, j, k)\) называется магической, если

  • \(1 \le i, j, k \le n\).
  • \(i\), \(j\), \(k\) — попарно различны.
  • существует некоторое целое положительное число \(b\), такое что \(a_i \cdot b = a_j\), а \(a_j \cdot b = a_k\).

Коля получил в подарок последовательность целых чисел \(a\), и теперь хочет посчитать количество магических троек для нее. Помогите ему в этом!

Обратите внимание, что нет ограничений на порядок чисел \(i\), \(j\) и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Вторая строка содержит \(n\) чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы последовательности \(a\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество магических троек для последовательности \(a\).

Примечание

В первом примере существует \(6\) магических троек для последовательности \(a\) — \((2, 3, 5)\), \((2, 5, 3)\), \((3, 2, 5)\), \((3, 5, 2)\), \((5, 2, 3)\), \((5, 3, 2)\).

Во втором примере существует единственная магическая тройка для последовательности \(a\) — \((2, 1, 3)\).

G2. Магические тройки (сложная версия)

математика Перебор Структуры данных теория чисел *2200

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(a_i \le 10^9\).

Для данной последовательности целых чисел \(a\) длины \(n\), тройка \((i, j, k)\) называется магической, если

  • \(1 \le i, j, k \le n\).
  • \(i\), \(j\), \(k\) — попарно различны.
  • существует некоторое целое положительное число \(b\), такое что \(a_i \cdot b = a_j\), а \(a_j \cdot b = a_k\).

Коля получил в подарок последовательность целых чисел \(a\), и теперь хочет посчитать количество магических троек для нее. Помогите ему в этом!

Обратите внимание, что нет ограничений на порядок чисел \(i\), \(j\) и \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Вторая строка содержит \(n\) чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы последовательности \(a\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество магических троек для последовательности \(a\).

Примечание

В первом примере существует \(6\) магических троек для последовательности \(a\) — \((2, 3, 5)\), \((2, 5, 3)\), \((3, 2, 5)\), \((3, 5, 2)\), \((5, 2, 3)\), \((5, 3, 2)\).

Во втором примере существует единственная магическая тройка для последовательности \(a\) — \((2, 1, 3)\).

A. A-характеристика

Комбинаторика Конструктив математика *800

Рассмотрим массив \(a_1, a_2, \dots, a_n\) состоящий из чисел \(1\) и \(-1\). Назовем его \(A\)-характеристикой количество пар индексов \(1 \le i < j \le n\) таких, что \(a_i \cdot a_j = 1\).

Вам необходимо найти любой массив \(a\) заданной длины \(n\), \(A\)-характеристика которого равна заданному \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 100\); \(0 \le k \le \frac{(n-1) n}{2}\)) — длина искомого массива и искомая \(A\)-характеристика.

Выходные данные

Для каждого набора входных данных, если нет массива \(a\) с \(A\)-характеристикой равной \(k\), выведите NO.

Иначе выведите YES и \(n\) чисел \(1\) и \(-1\), которые формируют требуемый массив \(a\). Если есть несколько решений, выведите любой из них.

Примечание

В первом наборе есть лишь одна пара различных элементов в массиве, и их произведение \(a_1 \cdot a_2 = -1 \neq 1\), поэтому его \(A\)-характеристика равна \(0\).

Во втором наборе есть лишь одна пара различных элементов в массиве, и их произведение \(a_1 \cdot a_2 = 1\), поэтому его \(A\)-характеристика равна \(1\).

Во третьем наборе есть три пары различных элементов в массиве, и их произведение \(a_1 \cdot a_2 = -1\), \(a_1 \cdot a_3 = 1\), \(a_2 \cdot a_3 = -1\), поэтому его \(A\)-характеристика равна \(1\).

В четвертом наборе можно показать что не существует массива длины \(3\), \(A\)-характеристика которого равна \(2\).

B. Шаговая сортировка

математика Перебор сортировки *900

Определим перестановкой длины \(n\) массив \(p\) длины \(n\), в котором каждое число от \(1\) до \(n\) встречается единожды.

Вам дана перестановка \(p_1, p_2, \dots, p_n\) и число \(k\). Вам необходимо отсортировать перестановку в возрастающем порядке. Для этого вы можете выполнить следующую операцию любое количество раз (возможно, ни разу):

  • выбрать два элемента перестановки \(p_i\) и \(p_j\) такие, что \(|i - j| = k\) и поменять их местами.

К сожалению, некоторые перестановки не могут быть отсортированы для некоторых \(k\). Например, невозможно отсортировать \([2, 4, 3, 1]\) для \(k = 2\).

Поэтому, перед началом сортировки, вы можете выполнить не более одного предварительного обмена:

  • выбрать любую пару \(p_i\) и \(p_j\) и поменять их местами.

Ваша задача проверить:

  1. возможно ли отсортировать перестановку без предварительных обменов,
  2. если нет, проверить, возможно ли отсортировать перестановку с использованием ровно одного предварительного обмена.

Например, если \(k = 2\) и дана перестановка \([2, 4, 3, 1]\), то вы можете выполнить предварительный обмен \(p_1\) и \(p_4\), что даст перестановку \([1, 4, 3, 2]\), которую уже можно отсортировать для данного \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le k \le n - 1\)) — длина перестановки, и расстояние между элементами, которые можно обменивать.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — элементы перестановки \(p\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных выведите

  • 0, если можно отсортировать перестановку без предварительного обмена;
  • 1, если можно отсортировать перестановку с одним предварительны обменом, но нельзя без предварительных обменов;
  • -1, если нельзя отсортировать перестановку с не более чем одним предварительным обменом.
Примечание

В первом наборе предварительный обмен не нужен, так как можно обменять местами \((p_1, p_2)\) и затем \((p_2, p_3)\).

Во втором наборе предварительный обмен не нужен, так как можно обменять местами \((p_1, p_3)\) и затем \((p_2, p_4)\).

В третьем наборе необходимо применить предварительный обмен к \((p_2, p_3)\), после чего перестановка становится \([3, 4, 1, 2]\), которую уже возможно отсортировать для \(k = 2\).

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\) являются сильно составными числами.

D. Уникальные палиндромы

Конструктив математика Строки *1900

Палиндром — это строка, которая читается одинаково с обеих сторон. Например, строка abcba — палиндром, а строка abca — нет.

Пусть \(p(t)\) — это количество уникальных палиндромных подстрок строки \(t\), т.е. количество подстрок \(t[l \dots r]\), которые сами являются палиндромами. Даже если некоторые подстроки присутствуют в \(t\) несколько раз, они учитываются ровно один раз. (Вся строка \(t\) также является подстрокой \(t\)).

Например, строка \(t\) \(=\) abcbbcabcb имеет \(p(t) = 6\) уникальных палиндромных подстрок: a, b, c, bb, bcb и cbbc.

Теперь определим \(p(s, m) = p(t)\) где \(t = s[1 \dots m]\). Другими словами, \(p(s, m)\) это количество палиндромных подстрок префикса строки \(s\) длины \(m\). Например, \(p(\)abcbbcabcb\(, 5)\) \(=\) \(p(\)abcbb\() = 5\).

Вам даны целое число \(n\) и \(k\) «условий» (\(k \le 20\)). Назовем строку \(s\), состоящую из \(n\) строчных латинских букв, хорошей если все \(k\) условий удовлетворены одновременно. Условие — это пара \((x_i, c_i)\), обозначающая что:

  • \(p(s, x_i) = c_i\), то есть префикс строки \(s\) длины \(x_i\) содержит ровно \(c_i\) уникальных палидромных подстрок.
Найдите хорошую строку \(s\) или сообщите, что такой \(s\) нет.

Изучите примечание, если вам нужны дополнительные пояснения.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(3 \le n \le 2 \cdot 10^5\), \(1 \le k \le 20\)) — длина хорошей строки \(s\) и количество условий.

Вторая строка каждого набора входных данных содержит \(k\) целых чисел \(x_1, x_2, \dots, x_k\) (\(3 \le x_1 < x_2 < \dots < x_k = n\)) где \(x_i\) — это длина префикса в \(i\)-м условии.

Третья строка каждого набора входных данных содержит \(k\) целых чисел \(c_1, c_2, \dots, c_k\) (\(3 \le c_1 \le c_2 \le \dots \le c_k \le \min{\left(10^9, \frac{(n + 1) n}{2} \right)}\)) где \(c_i\) — это количество палиндромных подстрок в \(i\)-м условии.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных если нет хорошей строки \(s\) длины \(n\), которая удовлетворяет всем запросам, выведите NO.

Иначе, выведите YES и строку \(s\) длины \(n\), состоящую из строчных латинских букв, которая удовлетворяет всем запросам. Если есть несколько ответов, выведите любой из них.

Примечание

В первом наборе строка \(s\) \(=\) abcbbcabcb удовлетворяет \(k = 2\) условиям:

  • \(p(s, x_1) = p(s, 5) =\) \(p(\)abcbb\() = 5 = s_1\). Палиндромные подстроки здесь: a, b, c, bb и bcb.
  • \(p(s, x_2) = p(s, 10) =\) \(p(\)abcbbcabcb\() = 6 = s_2\). Палиндромные подстроки здесь те же, что выше, и дополнительно подстрока cbbc.

Во втором наборе строка foo удовлетворяет \(k = 1\) условию:

  • \(p(\)foo\() = 3\). Палиндромные подстроки здесь f, o и oo.
Есть другие возможные ответы.

В третьем наборе строка ayda удовлетворяет \(k = 2\) условиям:

  • \(p(\)ayd\() = 3\). Палиндромные подстроки здесь a, y и d.
  • \(p(\)ayda\() = 3\). Палиндромные подстроки здесь те же.

В четвертом наборе строка wada удовлетворяет \(k = 2\) условиям:

  • \(p(\)wad\() = 3\). Палиндромные подстроки здесь w, a и d.
  • \(p(\)wada\() = 4\). Палиндромные подстроки здесь те же, и одна дополнительная подстрока ada.

В пятом наборе можно доказать, что нет строки длины \(4\) которая имеет \(5\) палиндромных подстрок.

В шестом наборе строке abcbcacbab удовлетворяет \(k = 3\) условиям:

  • \(p(\)abcb\() = 4\). Палиндромные подстроки здесь a, b, c и bcb.
  • \(p(\)abcbca\() = 5\). Палиндромные подстроки здесь те же, и одна дополнительная подстрока cbc.
  • \(p(\)abcbcacbab\() = 8\). Палиндромные подстроки здесь те же, и три дополнительные подстроки cac, bab и bcacb.

E. Удалить граф

графы дп игры математика Перебор *2500

Алиса и Боб играют с графом. У них есть неориентированный граф без петель и кратных ребер. Все вершины графа имеют степень равную \(2\). Граф может содержать несколько компонент связности. Обратите внимание, что если такой граф имеет \(n\) вершин, он будет иметь ровно \(n\) ребер.

Алиса и Боб ходят по очереди. Алиса ходит первой. За один ход игрок может выбрать \(k\) (\(l \le k \le r\); \(l < r\)) вершин, которые образуют связный подграф, и удалить эти вершины из графа, включая все инцидентные ребра.

Игрок, который не может сделать ход, проигрывает.

Предположим, для примера, что они играют на заданном графе с заданными \(l = 2\) и \(r = 3\):

Следующие множества вершин допустимы для первого хода Алисы:

  • \(\{1, 2\}\)
  • \(\{1, 3\}\)
  • \(\{2, 3\}\)
  • \(\{4, 5\}\)
  • \(\{4, 6\}\)
  • \(\{5, 6\}\)
  • \(\{1, 2, 3\}\)
  • \(\{4, 5, 6\}\)
Пусть Алиса выбрала подграф \(\{4, 6\}\).

Тогда следующие множества вершин допустимы для первого хода Боба:

  • \(\{1, 2\}\)
  • \(\{1, 3\}\)
  • \(\{2, 3\}\)
  • \(\{1, 2, 3\}\)
Пусть Боб выбрал подграф \(\{1, 2, 3\}\).

Алиса не может сделать ход, поэтому она проигрывает.

Вам дан граф размера \(n\) и целые числа \(l\) и \(r\). Кто победит, если Алиса и Боб играют оптимально.

Входные данные

Первая строка содержит три целых числа \(n\), \(l\) и \(r\) (\(3 \le n \le 2 \cdot 10^5\); \(1 \le l < r \le n\)) — количество вершин в графе и ограничения на количество вершин, которые Алиса или Боб могут выбрать одним ходом.

Следующие \(n\) строк содержат ребра графа: по одному в строке. \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)) — описание \(i\)-го ребра.

Гарантируется, что степени всех вершин данного графа равны \(2\).

Выходные данные

Выведите Alice (регистро-независимо), если Алиса победит, или Bob в противном случае.

Примечание

В первом тесте даны те же входные данные, что и в условии.

Во втором тесте дан тот же граф, что и в условии, но \(l = 1\) и \(r = 2\)

F. Случайная прогулка

графы Деревья дп математика Теория вероятностей *2600

Вам задано дерево, состоящее из \(n\) вершин и \(n - 1\) ребер, и у каждой вершины \(v\) есть свой счетчик \(c(v)\).

Первоначально в вершине \(s\) расположена фишка, и все счетчики, кроме \(c(s)\), равны \(0\); \(c(s)\) равен \(1\).

Ваша задача — переместить фишку в вершину \(t\). Для этого вы можете совершить следующую последовательность шагов. Пусть сейчас фишка расположена в вершине \(v\). За один шаг вы можете сделать следующее:

  1. выбрать одну из соседних вершин \(to\) вершины \(v\) равновероятно (\(to\) является соседней вершиной \(v\) тогда и только тогда, когда в дереве есть ребро \(\{v, to\}\));
  2. передвинуть фишку в вершину \(to\) и увеличить \(c(to)\) на \(1\).

Вы будете повторять данную операцию, пока не достигните вершины \(t\).

Для каждой вершины \(v\) вычислите математическое ожидание значения \(c(v)\) по модулю \(998\,244\,353\).

Входные данные

В первой строке заданы три целых числа: \(n\), \(s\) и \(t\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le s, t \le n\); \(s \neq t\)) — количество вершин в дереве, стартовая и конечная вершины.

В следующих \(n - 1\) строках заданы ребра дерева: по одному в строке. В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)), обозначающих ребро между вершинами \(u_i\) и \(v_i\).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите \(n\) чисел: математические ожидания значений \(c(v)\) по модулю \(998\,244\,353\) для каждого \(v\) от \(1\) по \(n\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Дерево из первого примера показано ниже:

Посчитаем математическое ожидание \(E[c(1)]\):
  • \(P(c(1) = 0) = 0\), так как \(c(1)\) изначально равно \(1\).
  • \(P(c(1) = 1) = \frac{1}{2}\), так как есть только одна последовательность шагов, приводящая к \(c(1) = 1\). Это \(1 \rightarrow 2 \rightarrow 3\) с вероятностью \(1 \cdot \frac{1}{2}\).
  • \(P(c(1) = 2) = \frac{1}{4}\): единственный путь \(1 \rightarrow_{1} 2 \rightarrow_{0.5} 1 \rightarrow_{1} 2 \rightarrow_{0.5} 3\).
  • \(P(c(1) = 3) = \frac{1}{8}\): единственный путь \(1 \rightarrow_{1} 2 \rightarrow_{0.5} 1 \rightarrow_{1} 2 \rightarrow_{0.5} 1 \rightarrow_{1} 2 \rightarrow_{0.5} 3\).
  • \(P(c(1) = i) = \frac{1}{2^i}\) в общем случае.
В результате \(E[c(1)] = \sum\limits_{i=1}^{\infty}{i \frac{1}{2^i}} = 2\).
Изображение дерева во втором тесте
Изображение дерева в третьем тесте

B1. LuoTianyi и летающие острова (простая версия)

Деревья Комбинаторика математика Теория вероятностей *1800

Это простая версия задачи. Единственное отличие в том, что в этой версии \(k\le\min(n,3)\). Вы можете делать взломы, только если обе версии задачи сданы.

Chtholly и летающие острова.

LuoTianyi сейчас живёт в мире с \(n\) летающими островами. Летающие острова соединены \(n-1\) ненаправленной воздушной дорогой, и из любого из двух летающих островов можно добраться до другого, путешествуя по воздушным дорогам. Это означает, что \(n\) летающих островов образуют дерево.

Однажды, LuoTianyi захотела встретиться со своими друзьями: Chtholly, Nephren, William, .... Всего она хочет встретиться с \(k\) людьми. Она не знает их точного расположения, но она знает, что они находятся на попарно различных островах. Она называет остров хорошим тогда и только тогда, когда сумма расстояний\(^{\dagger}\) от него до островов с \(k\) людьми минимально возможная среди всех \(n\) островов.

Сейчас LuoTianyi хочет узнать, если \(k\) человек случайным образом находятся в \(k\) различных из \(n\) островов, чему равно математическое ожидание количества хороших островов? Вам нужно сказать ей математическое ожидание по модулю \(10^9+7\).

\(^{\dagger}\)Расстоянием между двумя островами называется минимальное количество воздушных дорог, по которым нужно пройти, чтобы перейти с одного острова на другой.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1\le k \le \min(n,3), 1\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\)) — острова, соединённые \(i\)-й воздушной дорогой.

Гарантируется, что воздушные дороги образуют дерево.

Выходные данные

Выведите единственное целое число — математическое ожидание количества хороших островов по модулю \(10^9 + 7\).

Формально, пусть \(M = 10^9 + 7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0\) (\(\operatorname{mod} M\)). Выведите целое число, равное \(p \cdot q^{-1}\) \(\operatorname{mod} M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p\) (\(\operatorname{mod} M\)).

Примечание

В первом примере дороги образуют следующее дерево:

Если люди находятся на островах \(1\) и \(2\), тогда острова \(1\) и \(2\) являются хорошими.

Сумма расстояний от острова \(1\) или \(2\) до всех людей равна \(1+0=1\), что минимально. В это время сумма расстояний от острова \(3\) до всех людей равна \(2+1=3\), что больше \(1\).

Таким же образом, когда люди находятся на островах \(1\) и \(3\), тогда острова \(1,2\) и \(3\) являются хорошими.

Когда люди находятся на островах \(1\) и \(4\), тогда острова \(1,2,3\) и \(4\) являются хорошими.

Когда люди находятся на островах \(2\) и \(3\), тогда острова \(2\) и \(3\) являются хорошими.

Когда люди находятся на островах \(2\) и \(4\), тогда острова \(2,3\) и \(4\) являются хорошими.

Когда люди находятся на островах \(3\) и \(4\), тогда острова \(3\) и \(4\) являются хорошими.

Поэтому математическое ожидание количества хороших островов равно \(\frac{16}{6}\), что равняется \(666666674\) по модулю \(10^9+7\).

Во втором примере воздушные дороги образуют следующее дерево:

Всегда есть единственный хороший остров, поэтому математическое ожидание равно \(1\).

B2. LuoTianyi и летающие острова (сложная версия)

Деревья Комбинаторика математика поиск в глубину и подобное Теория вероятностей *2300

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(k\le n\). Вы можете делать взломы, только если обе версии задачи сданы.

Chtholly и летающие острова.

LuoTianyi сейчас живёт в мире с \(n\) летающими островами. Летающие острова соединены \(n-1\) ненаправленной воздушной дорогой, и из любого из двух летающих островов можно добраться до другого, путешествуя по воздушным дорогам. Это означает, что \(n\) летающих островов образуют дерево.

Однажды, LuoTianyi захотела встретиться со своими друзьями: Chtholly, Nephren, William, .... Всего она хочет встретиться с \(k\) людьми. Она не знает их точного расположения, но она знает, что они находятся на попарно различных островах. Она называет остров хорошим тогда и только тогда, когда сумма расстояний\(^{\dagger}\) от него до островов с \(k\) людьми минимально возможная среди всех \(n\) островов.

Сейчас LuoTianyi хочет узнать, если \(k\) человек случайным образом находятся в \(k\) различных из \(n\) островов, чему равно математическое ожидание количества хороших островов? Вам нужно сказать ей математическое ожидание по модулю \(10^9+7\).

\(^{\dagger}\)Расстоянием между двумя островами называется минимальное количество воздушных дорог, по которым нужно пройти, чтобы перейти с одного острова на другой.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1\le k \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\)) — острова, соединённые \(i\)-й воздушной дорогой.

Гарантируется, что воздушные дороги образуют дерево.

Выходные данные

Выведите единственное целое число — математическое ожидание количества хороших островов по модулю \(10^9 + 7\).

Формально, пусть \(M = 10^9 + 7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0\) (\(\operatorname{mod} M\)). Выведите целое число, равное \(p \cdot q^{-1}\) \(\operatorname{mod} M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p\) (\(\operatorname{mod} M\)).

Примечание

В первом примере дороги образуют следующее дерево:

Если люди находятся на островах \(1\) и \(2\), тогда острова \(1\) и \(2\) являются хорошими.

Сумма расстояний от острова \(1\) или \(2\) до всех людей равна \(1+0=1\), что минимально. В это время сумма расстояний от острова \(3\) до всех людей равна \(2+1=3\), что больше \(1\).

Таким же образом, когда люди находятся на островах \(1\) и \(3\), тогда острова \(1,2\) и \(3\) являются хорошими.

Когда люди находятся на островах \(1\) и \(4\), тогда острова \(1,2,3\) и \(4\) являются хорошими.

Когда люди находятся на островах \(2\) и \(3\), тогда острова \(2\) и \(3\) являются хорошими.

Когда люди находятся на островах \(2\) и \(4\), тогда острова \(2,3\) и \(4\) являются хорошими.

Когда люди находятся на островах \(3\) и \(4\), тогда острова \(3\) и \(4\) являются хорошими.

Поэтому математическое ожидание количества хороших островов равно \(\frac{16}{6}\), что равняется \(666666674\) по модулю \(10^9+7\).

Во втором примере дороги образуют следующее дерево:

Мы можем заметить, что так как есть один человек на каждом острове, то только остров \(3\) является хорошим. Поэтому математическое ожидание количества хороших островов равно \(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\).

B. Lunatic Never Content

математика теория чисел *1100

У вас есть массив \(a\), состоящий из \(n\) неотрицательных целых чисел. Определим \(f(a, x) = [a_1 \bmod x, a_2 \bmod x, \dots, a_n \bmod x]\) для некоторого положительного целого \(x\). Найдите максимальное \(x\) такое, что \(f(a, x)\) является палиндромом.

Здесь \(a \bmod x\) — целочисленный остаток от деления \(a\) на \(x\).

Массив называется палиндромом, если он читается одинаково в обе стороны. Более формально, массив \(a\) длины \(n\) является палиндромом, если для любого \(i\) (\(1 \leq i \leq n\)) выполняется \(a_i = a_{n - i + 1}\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — число наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_i\) (\(0 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное число \(x\) такое, что \(f(a, x)\) является палиндромом. Если \(x\) может быть бесконечно большим, вместо этого выведите число \(0\).

Примечание

В первом примере \(f(a, x = 1) = [0, 0]\) является палиндромом.

Во втором примере \(f(a, x = 2) = [1, 0, 1, 0, 0, 1, 0, 1]\) является палиндромом.

Можно показать, что в первых двух примерах никакой \(x\) больше не будет удовлетворять условию.

В третьем примере \(f(a, x) = [0]\) для любого \(x\), так что мы можем выбрать его бесконечно большим, откуда ответ равен \(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\). В таком случае оба алгоритма получают максимальное число голосов, и остаются доступными на следующий раунд.

F. Fading into Fog

геометрия интерактив математика Теория вероятностей *2800

Это интерактивная задача.

Есть \(n\) различных загаданных точек с вещественными координатами на двухмерной евклидовой плоскости. За один запрос вы можете спросить прямую \(ax + by + c = 0\) и получить в ответ проекции всех \(n\) точек на эту прямую в некотором порядке. Выводимые проекции могут быть неточными, прочтите секцию протокола взаимодействия для лучшего понимания.

Используя минимальное число запросов, найдите все \(n\) точек и выведите их в некотором порядке. Под минимальностью понимается минимальное число запросов, необходимое для решения любого набора входных данных из \(n\) точек.

Загаданные точки определяются заранее и не меняются во время взаимодействия. Другими словами, интерактор не адаптивен.

Проекцией точки \(A\) на прямую \(ax + by + c = 0\) является точка на прямой, ближайшая к \(A\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 50\)) — число наборов входных данных.

Далее следуют наборы входных данных.

В первой строке набора входных данных находится единственное целое число \(n\) (\(2 \leq n \leq 25\)) — число загаданных точек.

Для каждого набора входных данных гарантируется, что для любых двух загаданных точек их \(x\) координаты отличаются хотя бы на \(1\). Аналогично, \(y\) координаты любых двух точек отличаются хотя бы на \(1\).

Координаты \(x\) и \(y\) всех скрытых точек не превышают \(100\) по абсолютному значению.

Протокол взаимодействия

Чтобы запросить прямую \(ax + by + c = 0\), выведите «? a b c», где все a, b и c — вещественные числа до \(100\) по абсолютному значению. Для меньшей потери точности числа \(a\) и \(b\) должны удовлетворять условию \(|a| + |b| \geq 0.1\), где \(|a|\) — модуль числа \(a\).

В качестве ответа на запрос вы получите \(n\) точек в формате «x_1 y_1 ... x_n y_n», где точки \((x_i, y_i)\) являются проекциями загаданных точек на прямую \(ax + by + c = 0\) в некотором порядке. Гарантируется, что каждая выведенная точка находится на расстоянии не более \(10^{-4}\) от точной точки проекции. Каждая координата выводится с не более чем 9 знаками после запятой.

Смотрите пример взаимодействия для лучшего понимания.

Если вы сделаете слишком много запросов, то получите вердикт Wrong answer.

Чтобы вывести ответ, вы должны вывести «! x_1 y_1 ... x_n y_n», где \((x_i, y_i)\) — координаты загаданных точек. Загаданные точки можно выводить в любом порядке. Ответ будет считаться корректным, если каждая из выведенных точек будет на расстоянии не более \(10^{-3}\) от соответствующей загаданной. Вывод ответа не считается за запрос.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для того чтобы сделать взлом, используйте следующий формат теста.

В первой строке выведите одно целое число \(t\) (\(1 \leq t \leq 50\)) — число наборов входных данных.

Далее идет описание наборов входных данных.

В первой строке для набора входных данных выведите одно целое число \(n\) (\(2 \leq n \leq 25\)). В следующих \(n\) строках выведите по 2 числа. Числа в \(i\)-й строке должны соответствовать числам \(x_i\) и \(y_i\) соответственно. Выведенные точки должны удовлетворять условиям описанным в секции ввода.

Примечание

В примере загаданные точки \((1, 3)\) и \((2.5, 0.5)\)

Рисунок, объясняющий первый запрос:

Рисунок, объясняющий второй запрос:

A. Подсчет порядка

Комбинаторика математика сортировки *1100

Даны два массива \(a\) и \(b\), каждый из \(n\) целых чисел. Все элементы \(a\) попарно различны.

Найдите количество способов переставить элементы массива \(a\) так, чтобы выполнялось \(a_i > b_i\) для всех \(1 \le i \le n\), по модулю \(10^9 + 7\).

Два способа перестановки считаются разными, если полученные массивы различны.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(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 10^9\)) — массив \(a\). Гарантируется, что все элементы \(a\) попарно различны.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1\), \(b_2\), \(\ldots\), \(b_n\) (\(1 \le b_i \le 10^9\)) — массив \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите количество способов переставить элементы массива \(a\) так, чтобы выполнялось \(a_i > b_i\) для всех \(1 \le i \le n\), по модулю \(10^9 + 7\).

A. Делимый массив

Конструктив математика *800

Дано положительное целое число \(n\). Найдите массив \(a_1, a_2, \ldots, a_n\), который будет идеальным.

Идеальный массив \(a_1, a_2, \ldots, a_n\) удовлетворяет следующим критериям:

  • \(1 \le a_i \le 1000\) для всех \(1 \le i \le n\).
  • \(a_i\) делится на \(i\) для всех \(1 \le i \le n\).
  • \(a_1 + a_2 + \ldots + a_n\) делится на \(n\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 200\)). Затем следует их описание.

Единственная строка каждого набора входных данных содержит одно положительное целое число \(n\) (\(1 \le n \le 200\)) — длину массива \(a\).

Выходные данные

Для каждого набора входных данных выведите массив \(a_1, a_2, \ldots, a_n\), который будет идеальным.

Мы можем показать, что ответ всегда существует. Если есть несколько решений, выведите любое.

Примечание

В третьем наборе входных данных:

  • \(a_1 = 1\) делится на \(1\).
  • \(a_2 = 2\) делится на \(2\).
  • \(a_3 = 3\) делится на \(3\).
  • \(a_1 + a_2 + a_3 = 1 + 2 + 3 = 6\) делится на \(3\).

В пятом наборе входных данных:

  • \(a_1 = 3\) делится на \(1\).
  • \(a_2 = 4\) делится на \(2\).
  • \(a_3 = 9\) делится на \(3\).
  • \(a_4 = 4\) делится на \(4\).
  • \(a_5 = 5\) делится на \(5\).
  • \(a_1 + a_2 + a_3 + a_4 + a_5 = 3 + 4 + 9 + 4 + 5 = 25\) делится на \(5\).

B. Перестановка Swap

математика теория чисел *900

Дана неотсортированная перестановка \(p_1, p_2, \ldots, p_n\). Чтобы отсортировать перестановку, выберите один раз целое число \(k\) (\(k \ge 1\)) и выполните некоторые операции над перестановкой. В одной операции вы можете выбрать два целых числа \(i\), \(j\) (\(1 \le j < i \le n\)) таких, что \(i - j = k\), затем поменять местами \(p_i\) и \(p_j\).

Какое максимальное значение \(k\) вы можете выбрать, чтобы отсортировать данную перестановку?

Перестановка — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2, 3, 1, 5, 4]\) — это перестановка, но \([1, 2, 2]\) не является перестановкой (\(2\) появляется дважды в массиве), а \([1, 3, 4]\) также не является перестановкой (\(n = 3\), но в массиве есть \(4\)).

Неотсортированная перестановка \(p\) — это такая перестановка, что существует хотя бы одна позиция \(i\), которая удовлетворяет условию \(p_i \ne i\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 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\). Гарантируется, что заданные числа образуют перестановку длины \(n\) и данная перестановка неотсортирована.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите максимальное значение \(k\), которое вы можете выбрать, чтобы отсортировать данную перестановку.

Мы можем показать, что ответ всегда существует.

Примечание

В первом наборе входных данных максимальное значение \(k\), которое вы можете выбрать, равно \(1\). Операции, используемые для сортировки перестановки:

  • Поменять местами \(p_2\) и \(p_1\) (\(2 - 1 = 1\)) \(\rightarrow\) \(p = [1, 3, 2]\)
  • Поменять местами \(p_2\) и \(p_3\) (\(3 - 2 = 1\)) \(\rightarrow\) \(p = [1, 2, 3]\)

Во втором наборе входных данных максимальное значение \(k\), которое вы можете выбрать, равно \(2\). Операции, используемые для сортировки перестановки:

  • Поменять местами \(p_3\) и \(p_1\) (\(3 - 1 = 2\)) \(\rightarrow\) \(p = [1, 4, 3, 2]\)
  • Поменять местами \(p_4\) и \(p_2\) (\(4 - 2 = 2\)) \(\rightarrow\) \(p = [1, 2, 3, 4]\)

F. Вечная зима

графы математика поиск в глубину и подобное *1300

Граф-снежинка генерируется из двух целых чисел \(x\) и \(y\), которые больше \(1\), следующим образом:

  • Начните с одной центральной вершины.
  • Подключите \(x\) новых вершин к этой центральной вершине.
  • Подключите \(y\) новых вершин к каждой из этих \(x\) вершин.
Например, ниже приведен граф-снежинка для \(x=5\) и \(y=3\).

Граф-снежинка выше имеет центральную вершину \(15\), затем \(x=5\) вершин, подключенных к ней (\(3\), \(6\), \(7\), \(8\) и \(20\)), а затем \(y=3\) вершины, подключенные к каждой из них.

Для заданного графа-снежинки определите значения \(x\) и \(y\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных в тесте.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 200\); \(1 \leq m \leq \min\left(1000, \frac{n(n-1)}{2}\right)\)) — количество вершин и ребер в графе соответственно.

Следующие \(m\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)) — номера вершин, соединенных ребром. Граф не содержит кратных ребер и петель.

Гарантируется, что этот граф является графом снежинки для некоторых целых чисел \(x\) и \(y\), которые больше \(1\).

Выходные данные

Для каждого набора входных данных на отдельной строке выведите значения \(x\) и \(y\), в этом порядке, разделенные пробелом.

Примечание

Первый набор входных данных изображен в условии. Обратите внимание, что вывод 3 5 является неправильным, так как сначала должно быть выведено \(x\), а затем \(y\).

G. Пирамида из банок

дп математика реализация Структуры данных *1600

На ярмарке есть огромная пирамида из консервных банок с \(2023\) рядами, пронумерованными в стандартном порядке, как показано на рисунке.

Если вначале попасть в банку с номером \(9^2\), то упадут все банки, покрашенные в красный цвет на рисунке выше.

Вы бросаете мяч в пирамиду, и он попадает в одну банку с номером \(n^2\). Это приводит к тому, что все банки, которые находятся над этой банкой, падают (то есть банка \(n^2\) падает, затем падают банки, непосредственно находящиеся над \(n^2\), затем банки, непосредственно находящиеся над этими банками, и так далее). Например, на рисунке выше показаны банки, которые упадут, если попасть в банку \(9^2\).

Какова сумма номеров всех банок, которые упадут? Напомним, что \(n^2 = n \times n\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — это означает, что банка, в которую вы попали, имеет номер \(n^2\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — сумму номеров всех банок, которые упадут.

Примечание

Первый набор входных данных изображен в условии. Сумма номеров, которые упадут, равна \(\)1^2 + 2^2 + 3^2 + 5^2 + 6^2 + 9^2 = 1 + 4 + 9 + 25 + 36 + 81 = 156.\(\)

Во втором наборе входных данных упадет только банка с номером \(1^2\), поэтому ответ равен \(1^2=1\).

В третьем наборе входных данных упадут банки с номерами \(1^2\) и \(2^2\), поэтому ответ равен \(1^2+2^2=1+4=5\).

В четвертом наборе входных данных упадут банки с номерами \(1^2\) и \(3^2\), поэтому ответ равен \(1^2+3^2=1+9=10\).

В пятом наборе входных данных упадут банки с номерами \(1^2\), \(2^2\) и \(4^2\), поэтому ответ равен \(1^2+2^2+4^2=1+4+16=21\).

H. Не вините меня

битмаски дп Комбинаторика математика *1700

К сожалению, автор задачи не смог придумать интересную историю, поэтому он просто просит вас решить следующую задачу.

Дан массив \(a\), состоящий из \(n\) положительных целых чисел. Посчитайте количество подпоследовательностей, для которых побитовое \(\mathsf{AND}\) элементов в подпоследовательности имеет ровно \(k\) единичных битов в двоичном представлении. Ответ может быть большим, поэтому выведите его по модулю \(10^9+7\).

Напомним, что подпоследовательность массива \(a\) - это последовательность, которую можно получить из \(a\), удалив некоторые (возможно, ни одного) элементы. Например, \([1, 2, 3]\), \([3]\), \([1, 3]\) являются подпоследовательностями \([1, 2, 3]\), но \([3, 2]\) и \([4, 5, 6]\) - нет.

Обратите внимание, что \(\mathsf{AND}\) обозначает логическую операцию AND.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание наборов входных данных.

Первая строка каждого тестового случая состоит из двух целых чисел \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\), \(0 \le k \le 6\)) — длина массива и количество единичных битов, которое должно быть у побитового \(\mathsf{AND}\) подсчитанных подпоследовательностей в двоичном представлении.

Вторая строка каждого тестового случая состоит из \(n\) целых чисел \(a_i\) (\(0 \leq a_i \leq 63\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число - количество подпоследовательностей, у которых в двоичном представлении значение побитового \(\mathsf{AND}\) имеет ровно \(k\) установленных битов. Ответ может быть большим, поэтому выведите его по модулю \(10^9+7\).

A. Штаб

Конструктив математика *1700

Сенсация, сенсация в двумерном государстве! Был пойман особо опасный преступник — один из членов знаменитой банды «Пихстеры». Как сообщает отдел по борьбе с преступностью, задержанный ехал на своей машине из главного штаба банды в киоск с мороженым, где и был пойман. Каждый объект двумерного государства (киоск с мороженым, машина, штаб) представляет собой точку на плоскости.

Машина преступника была оборудована GPS передатчиком. Данные передатчика показали, что на пути от штаба до киоска с мороженым машина совершила ровно n перемещений. За одно перемещение машина из точки (x, y) может попасть в одну из четырех точек: перемещение в точку (x - 1, y) будем обозначать буквой «L», в точку (x + 1, y) — «R», в точку (x, y - 1) — «D», в точку (x, y + 1) — «U».

Из-за большой погрешности GPS передатчик, установленный на машине, не сохраняет точную последовательность перемещений машины. Вместо точных перемещений в журнал GPS записываются возможные перемещения в виде одной из строк: «UL», «UR», «DL», «DR» или «ULDR». Каждая такая строка обозначает, что было совершено ровно одно перемещение, соответствующее какому-то одному символу строки. Например, строка «UL» обозначает, что было совершено либо перемещение «U», либо перемещение «L».

Вам задан журнал возможных перемещений преступника от штаба банды до киоска в хронологическом порядке. Зная, что киоск с мороженым находится в точке с координатами (0, 0), определите в скольки различных точках может находиться штаб банды (то есть, требуется найти количество возможных позиций старта машины).

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 2·105) — количество перемещений машины от штаба до киоска.

Каждая из следующих n строк обозначает возможное перемещение машины. Гарантируется, что каждое возможное перемещение это одна из строк: «UL», «UR», «DL», «DR» или «ULDR».

Все перемещения заданы в хронологическом порядке.

Выходные данные

Выведите единственное целое число — количество различных возможных положений штаба банды.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

Рисунок ниже показывает девять возможных положений штаба банды из первого примера:

Например, из точки (1, 0), машина может доехать до точки (0, 0), совершая следующие перемещения:

B. BOSS может посчитать пары

математика Перебор *2000

Даны два массива \(a\) и \(b\) длины \(n\).

Ваша задача — посчитать количество пар целых чисел \((i,j)\) таких, что \(1 \leq i < j \leq n\) и \(a_i \cdot a_j = b_i+b_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 n\)) — элементы массива \(a\).

Третья строка каждого набора содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество искомых пар.

Примечание

В первом примере есть \(2\) подходящие пары:

  • \((1,2)\),
  • \((1,3)\).

Во втором примере есть \(7\) подходящих пар:

  • \((1,2)\),
  • \((1,5)\),
  • \((2,8)\),
  • \((3,4)\),
  • \((4,7)\),
  • \((5,6)\),
  • \((5,7)\).

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\) гиперправильные скобочные последовательности: ((())(())), ((())()()), ()()((())) и ()()(()()).

E. Сортировка по-хулигански

математика Структуры данных *3500

Для перестановки \(p\) длины \(n\) мы определяем хулиганский обмен следующим образом:

  • Пусть \(i\) — индекс наибольшего элемента \(p_i\) такого, что \(p_i \neq i\).
  • Пусть \(j\) — индекс самого маленького элемента \(p_j\), такого, что \(i < j\).
  • Поменяйте местами \(p_i\) и \(p_j\).

Мы определяем \(f(p)\) как количество хулиганских обменов, которые нужно выполнить, пока \(p\) не станет отсортированной. Обратите внимание, что если \(p\) является тождественной перестановкой, то \(f(p)=0\).

Вам даны \(n\) и перестановка \(p\) длины \(n\). Вам нужно обработать следующие \(q\) обновлений.

В каждом обновлении вам даются два целых числа \(x\) и \(y\). Нужно поменять местами \(p_x\) и \(p_y\) и затем найти значение \(f(p)\).

Обратите внимание, что обновления сохраняются. Изменения, внесенные в перестановку \(p\), будут применяться при обработке будущих обновлений.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 5 \cdot 10^5\), \(1 \le q \le 5 \cdot 10^4\)) — длину перестановки и количество обновлений.

Вторая строка содержит \(n\) целых \(p_1,p_2,\ldots,p_n\) (\(1 \leq p_i \leq n\)) — перестановку \(p\). Все элементы \(p\) различны.

В \(i\)-й из следующих \(q\) строк ввода содержатся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i < y_i \le n\)), описывающие \(i\)-е обновление.

Выходные данные

После каждого обновления выведите \(f(p)\).

Примечание

После первого обновления мы имеем \(f(p)=5\). \(5\) хулиганских обменов изображены ниже:

  • \([\mathbf{1}, 2, \mathbf{8}, 5, 3, 4, 7, 6]\),
  • \([1, 2, \mathbf{3}, 5, \mathbf{8}, 4, 7, 6]\),
  • \([1, 2, 3, 5, \mathbf{4}, \mathbf{8}, 7, 6]\),
  • \([1, 2, 3, 5, 4, \mathbf{6}, 7, \mathbf{8}]\),
  • \([1, 2, 3, \mathbf{4}, \mathbf{5}, 6, 7, 8]\).

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\) операций к нему.

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» будут распознаны как положительный ответ).

F. Ира и фламенко

Комбинаторика Конструктив математика реализация сортировки Структуры данных *1700

Ира очень любит испанский танец фламенко. Она решила основать собственную танцевальную студию и нашла \(n\) учеников, \(i\)-й из которых имеет уровень \(a_i\).

Ира может выбрать несколько своих учеников и поставить с ними танец. Таким образом она может поставить огромное количество танцев, но её интересуют только великолепные танцы. Танец называется великолепным, если выполнено следующее:

  • в танце участвуют ровно \(m\) учеников;
  • уровни всех танцоров попарно различны;
  • уровни любых двух танцоров отличаются строго меньше чем на \(m\).

Например, если \(m = 3\) и \(a = [4, 2, 2, 3, 6]\), следующие танцы являются великолепными (красным цветом выделены ученики, участвующие в танце): \([\color{red}{4}, 2, \color{red}{2}, \color{red}{3}, 6]\), \([\color{red}{4}, \color{red}{2}, 2, \color{red}{3}, 6]\). В то же время танцы \([\color{red}{4}, 2, 2, \color{red}{3}, 6]\), \([4, \color{red}{2}, \color{red}{2}, \color{red}{3}, 6]\), \([\color{red}{4}, 2, 2, \color{red}{3}, \color{red}{6}]\) не являются великолепными.

В танце \([\color{red}{4}, 2, 2, \color{red}{3}, 6]\) участвуют \(2\) ученика, хотя \(m = 3\).

В танце \([4, \color{red}{2}, \color{red}{2}, \color{red}{3}, 6]\) участвуют ученики с уровнями \(2\) и \(2\), хотя уровни всех танцоров должны быть попарно различны.

В танце \([\color{red}{4}, 2, 2, \color{red}{3}, \color{red}{6}]\) участвуют ученики с уровнями \(3\) и \(6\), но \(|3 - 6| = 3\), хотя \(m = 3\).

Помогите Ире посчитать количество великолепных танцев, которые она может поставить. Так как это число может быть очень большим, посчитайте его по модулю \(10^9 + 7\). Два танца считаются различными, если различны наборы учеников, участвующих в них.

Входные данные

В первой строке дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \le m \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\).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество великолепных танцев по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных Ира может поставить только такие великолепные танцы: \([\color{red}{8}, 10, 10, \color{red}{9}, \color{red}{6}, 11, \color{red}{7}]\), \([\color{red}{8}, \color{red}{10}, 10, \color{red}{9}, 6, 11, \color{red}{7}]\), \([\color{red}{8}, 10, \color{red}{10}, \color{red}{9}, 6, 11, \color{red}{7}]\), \([\color{red}{8}, 10, \color{red}{10}, \color{red}{9}, 6, \color{red}{11}, 7]\), \([\color{red}{8}, \color{red}{10}, 10, \color{red}{9}, 6, \color{red}{11}, 7]\).

Второй набор входных данных разобран в условии.

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\) ходов.

E. MEX НОК

Бинарный поиск математика реализация Структуры данных теория чисел *2300

Вам дан массив \(a\) длины \(n\). Назовем целое положительное число \(x\) хорошим, если нельзя найти такой подотрезок\(^{\dagger}\) массива, что наименьшее общее кратное всех элементов на нём равно \(x\).

Вам требуется найти наименьшее хорошее число.

Подотрезком \(^{\dagger}\) массива \(a\) называется набор элементов \(a_l, a_{l + 1}, \ldots, a_r\) для некоторых \(1 \le l \le r \le n\). Будем обозначать такой подотрезок \([l, r]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5 \cdot 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\).

Выходные данные

Для каждого набора входных выведите единственное целое число — наименьшее хорошее число.

Примечание

В первом наборе входных данных, \(4\) — хорошее число, при этом оно является наименьшим, так как числа \(1,2,3\) встречаются в массиве, а значит, есть подотрезки массива длины \(1\) с наименьшими общими кратными \(1,2,3\). При этом нельзя найти подотрезок массива с наименьшим общим кратным равным \(4\).

Во втором наборе входных данных, \(7\) — хорошее число. При этом числа \(1,2,3,4,5\) встречаются в массиве явно, а число \(6\) является наименьшим общим кратных подотрезков \([2, 3]\) и \([1, 3]\).

В третьем наборе входных данных, \(1\) — хорошее число, так как наименьшие общие кратные для чисел на отрезках \([1, 1], [1, 2], [2, 2]\), соответственно, равны \(2,6,3\).

F. Печатная машинка

математика Перебор *2500

Недавно Поликарпу подарили необычную печатную машинку!

Машинка состоит из \(n\) ячеек, пронумерованных слева направо от \(1\) до \(n\), и движущейся над ними каретки. В ячейках печатной машинки лежат \(n\) различных целых чисел от \(1\) до \(n\), причем в каждой ячейке \(i\) изначально лежит число \(p_i\). До всех действий каретка находится на ячейке с номером \(1\) и в ее буферном хранилище ничего нет. Назовем ячейку текущей, если каретка стоит на этой ячейке.

Она может выполнять пять типов операций:

  • Взять число из текущей ячейки, если она не пустая, и положить его в буфер каретки, если в нём нет числа (то есть в буфере может быть не более одного числа).
  • Положить число из буфера каретки, если он не пустой, в текущую ячейку, если она пустая.
  • Поменять местами число, которое находится в буфере каретки, с числом, которое находится в текущей ячейке, если буфер и ячейка имеют в себе числа.
  • Сдвинуть каретку с текущей ячейки \(i\) на ячейку \(i + 1\) (если \(i < n\)), при этом число в буфере сохраняется.
  • Сбросить каретку, то есть переместить ее на ячейку с номером \(1\), при этом число в буфере сохраняется.

Поликарпа очень заинтересовала эта печатная машинка, поэтому он просит вас помочь разобраться в ней и задаст вам \(q\) запросов трех типов:

  1. Выполнить циклический сдвиг последовательности \(p\) на \(k_j\) влево.
  2. Выполнить циклический сдвиг последовательности \(p\) на \(k_j\) вправо.
  3. Развернуть последовательность \(p\).

До всех запросов, а также после каждого запроса Поликарп хочет узнать, какое минимальное количество сбросов каретки нужно сделать для текущей последовательности, чтобы распределить числа по своим ячейкам (то есть чтобы число \(i\) оказалось в ячейке с номером \(i\)).

Обратите внимание, что Поликарп хочет только узнать минимальное количество сбросов каретки для расположения чисел по своим местам, но он не распределяет их на самом деле.

Помогите Поликарпу узнать ответы на интересующие его запросы!

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — количество ячеек.

Вторая строка содержит \(n\) целых различных чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — изначальное расположение чисел по ячейкам.

Третья строка содержит единственное число \(q\) (\(0 \le q \le 4 \cdot 10^5\)) — количество запросов.

В каждой из следующих \(q\) строках описываются запросы Поликарпа:

В \(j\)-й строке сначала содержится число \(t_j\) (\(1 \le t_j \le 3\))  — тип запроса .

Если запрос типа \(t_j = 1\) или \(t_j = 2\), то далее, в той же строке, содержится число \(k_j\) (\(1 \le k_j \le n\))  — длина сдвига.

Выходные данные

Выведите \(q + 1\) число — минимальное количество сбросов каретки для последовательности до всех запросов, а также после каждого запроса Поликарпа.

Примечание

В первом примере ответ \(1\). Картинка ниже показывает работу каретки.

Во втором примере последовательности, для которых нужно посчитать ответ, выглядят так:

  1. До всех запросов: \(1\ 2\ 3\) — ответ \(0\).
  2. После сдвига на \(1\) вправо: \(3\ 1\ 2\) — ответ \(2\).
  3. После разворота последовательности: \(2\ 1\ 3\) — ответ \(1\).

В третьем примере последовательности до всех запросов и после каждого запроса выглядят так:

  1. \(3\ 1\ 2\ 5\ 4\) — ответ \(3\).
  2. \(5\ 4\ 3\ 1\ 2\) — ответ \(2\).
  3. \(2\ 1\ 3\ 4\ 5\) — ответ \(1\).
  4. \(3\ 4\ 5\ 2\ 1\) — ответ \(2\).
  5. \(1\ 3\ 4\ 5\ 2\) — ответ \(1\).
  6. \(2\ 5\ 4\ 3\ 1\) — ответ \(2\).

A. k-е равенство

математика Перебор реализация *1700

Рассмотрим все равенства вида \(a + b = c\), где \(a\) имеет \(A\) цифр, \(b\)\(B\) цифр, а \(c\)\(C\) цифр. Все числа — целые, положительны и записаны без ведущих нулей. Найдите \(k\)-е лексикографически наименьшее равенство, записанное в виде строки, как указано выше, или определите, что его не существует.

Например, первые три равенства, удовлетворяющие \(A = 1\), \(B = 1\), \(C = 2\), имеют вид

  • \(1 + 9 = 10\),
  • \(2 + 8 = 10\),
  • \(2 + 9 = 11\).

Равенство \(s\) лексикографически меньше равенства \(t\), в котором все числа имеют ту же длину, если и только если выполняется следующее:

  • в первой позиции, где \(s\) и \(t\) различны, в уравнении \(s\) находится меньшая цифра, чем соответствующая цифра в \(t\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит числа \(A\), \(B\), \(C\), \(k\) (\(1 \leq A, B, C \leq 6\), \(1 \leq k \leq 10^{12}\)).

Каждый тест содержит не более \(5\) наборов входных данных, которые не удовлетворяют \(A, B, C \leq 3\).

Выходные данные

Для каждого набора входных данных, если подходящих равенств строго меньше \(k\), выведите \(-1\).

В противном случае выведите \(k\)-е равенство в виде строки вида \(a + b = c\).

Примечание

В первом наборе входных данных первыми \(9\) решениями являются: \(\langle 1, 1, 2 \rangle, \langle 1, 2, 3 \rangle, \langle 1, 3, 4 \rangle, \langle 1, 4, 5 \rangle, \langle 1, 5, 6 \rangle, \langle 1, 6, 7 \rangle, \langle 1, 7, 8 \rangle, \langle 1, 8, 9 \rangle, \langle 2, 1, 3 \rangle\).

В третьем наборе входных данных решений нет, так как наименьшие возможные значения \(a\) и \(b\) больше, чем максимально возможное значение \(c\)\(10 + 10 = 20 > 9\).

Обратите внимание, что пробелы в выводе имеют значение.

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\), он также выиграет в четырех случаях, но это значение не является наименьшим.

C. Галактики-близнецы

битмаски Конструктив математика Перебор Теория вероятностей *2600

Известный во всем мире астрофизик Млейл ваГрасс Тайсок недавно прочитал о существовании скоплений галактик-близнецов. Прежде чем поделиться этими знаниями с широкой аудиторией в своем подкасте под названием S.tarT-ok, он хочет доказать их существование самостоятельно. Млейл осознает, что просторы Вселенной поражают воображение (почти так же поражают, как и его наблюдательность), и решает попытать счастья и найти новое скопление галактик-близнецов.

Для этого он использует свой ТЛескоп для наблюдения за еще не исследованной человечеством частью ночного неба, в которой есть ровно \(2^{k + 1}\) галактик, расположенных в ряд. \(i\)-я из них состоит ровно из \(0 \le g_i < 4^k\) звезд.

Скопление галактик — это любой непустой непрерывный подотрезок галактик. Более того, считается, что её признак равен побитовому исключающему ИЛИ всех значений \(g_i\) в этом диапазоне.

Два скопления галактик считаются близнецами тогда и только тогда, когда они имеют равные признаки и их соответствующие отрезки не пересекаются.

Напишите программу, которая для многих сценариев будет читать описание участка ночного неба, наблюдаемого Млейлем, и выводить расположение двух отрезков, принадлежащих некоторой паре галактик-близнецов, или единственное значение \(-1\), если такой пары не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(k\) (\(0 \le k \le 17\)).

Вторая строка содержит \(2^{k + 1}\) целых чисел \(g_1, g_2, \ldots, g_{2^{k+1}}\) (\(0 \le g_i < 4^k\)).

Гарантируется, что сумма значений \(2^{k + 1}\) по всем наборам входных данных не превосходит \(2^{18}\).

Выходные данные

Ответы для всех наборов входных данных должны содержаться в отдельных строках. Если существует пара галактик-близнецов, то выведите четыре целых числа \(a\), \(b\), \(c\) и \(d\), обозначающие их отрезки \([a, b]\) и \([c, d]\) (первый интервал не обязан начинаться раньше второго, но они должны быть непересекающимися). Если пары таких галактик не существует, выведите единственное значение \(-1\).

Примечание

В первом наборе входных данных мы выбираем интервалы \([2, 4]\) и \([6, 6]\) в качестве наших галактик-близнецов. Признак первого интервала равен \(15 \oplus 0 \oplus 7 = 8\), и признак второго интервала равен \(8\), так что эти скопления галактик действительно являются близнецами.

D. Гипотеза доктора Брауна

графы математика поиск в глубину и подобное теория чисел *2900

Повстанцы потерпели поражение в последней битве с имперскими войсками, но появился луч новой надежды.

Тем временем на одной из завоеванных планет Люк готовился к нелегальным уличным гонкам (что не должно удивлять, учитывая историю его семьи). Люк прибыл к финишу с 88 милями в час на спидометре. Выйдя из машины, он был встречен новой реальностью. Оказалось, что битва еще не произошла и начнется ровно через \(k\) часов.

Повстанцы разместили по одному линкору на каждой из \(n\) планет. \(m\) однонаправленных червоточин соединяют планеты. Прохождение каждой червоточины занимает ровно один час. Генералы Империума точно спланировали битву, но их войска не могут быстро адаптироваться к изменяющимся обстоятельствам. Поэтому повстанцам достаточно переместить несколько кораблей перед битвой, чтобы запутать противника, обеспечить победу и изменить судьбу галактики.

В силу многочисленных стратегических соображений, которые мы сейчас опустим, повстанцы хотели бы выбрать два корабля, которые поменяются местами так, чтобы оба они были в движении все время (ровно \(k\) часов). Другими словами, повстанцы ищут две планеты \(x\) и \(y\) такие, что существуют пути длиной \(k\) от \(x\) до \(y\) и от \(y\) до \(x\).

Из-за ограниченного запаса топлива выбор одного корабля также будет приемлемым. Этот корабль должен лететь через червоточины в течение \(k\) часов, а затем вернется на исходную планету.

Сколько существует способов выбора кораблей для выполнения задания?

Входные данные

В первой строке ввода находятся три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n \leq 10^5\), \(0 \leq m \leq 2 \cdot 10^5\), \(n^3 \leq k \leq 10^{18}\)), обозначающие соответственно количество планет, червоточин и часов, оставшихся до начала битвы.

Следующие \(m\) строк содержат по два целых числа \(x\) и \(y\) (\(1 \leq x, y \leq n\), \(x \ne y\)), означающих, что существует однонаправленная червоточина от планеты \(x\) до планеты \(y\). Гарантируется, что не существует двух одинаковых червоточин, т. е. для любых двух червоточин либо \(x_1 \neq x_2\), либо \(y_1 \neq y_2\).

Выходные данные

В первой и единственной строке ваша программа должна вывести количество возможных вариантов выбора пары или одного военного корабля для миссии.

Примечание

В первом наборе входных данных можно выбрать пары кораблей со следующих планет: \(2\) и \(5\), \(3\) и \(5\), \(1\) и \(4\). Также можно было выбрать отдельные корабли с планет \(6\) и \(7\).

Во втором наборе входных данных можно выбрать пару кораблей из следующих планет: \(2\) и \(3\). Также можно было выбрать отдельные корабли с планет \(1\), \(2\), \(3\), \(4\) и \(5\).

В третьем наборе входных данных нет пар кораблей, которые мы можем выбрать. Также можно было выбрать отдельные корабли с планет \(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\) серебряных монет для обоих астрофизиков, то компания должна будет заплатить дополнительную золотую монету.

A. Кузнечик на прямой

Конструктив математика *800

Даны два целых числа \(x\) и \(k\). Кузнечик начинает в точке \(0\) на оси OX. За один ход он может прыгнуть на целое расстояние, которое не делится на \(k\), влево или вправо.

Какое наименьшее количество ходов может потребоваться кузнечику, чтобы достичь \(x\)? Какие это ходы?

Если существует несколько ответов, выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны два целых числа \(x\) и \(k\) (\(1 \le x \le 100\); \(2 \le k \le 100\)) — конечная точка и ограничение на прыжки, соответственно.

Выходные данные

На каждый набор входных данных выведите одно целое число \(n\) — наименьшее количество ходов, которое может потребоваться кузнечику, чтобы достичь \(x\).

Во второй строке выведите \(n\) целых чисел, каждое из них не должно делиться на \(k\). Положительное число означает прыжок направо, отрицательное число означает прыжок налево. Конечная точка после всех прыжков должна быть ровно \(x\).

Длина каждого прыжка должна быть от \(-10^9\) до \(10^9\). Можно показать, что для любого решение с наименьшим количеством прыжков, существует и решение с таким же количеством прыжков такое, что каждый прыжок от \(-10^9\) до \(10^9\).

Можно показать, что при данных ограничениях ответ всегда существует. Если существует несколько ответов, выведите любой из них.

A. Список на доске

Конструктив математика *800

На доске были написаны два целых числа. После этого следующая операция была выполнена \(n-2\) раза:

  • Выбрать на доске любые два целых числа и написать на доске модуль их разности.

После завершения этого процесса список из \(n\) целых чисел был перемешан. Вам даётся итоговый список. Восстановите одно из двух начальных чисел. Второе восстанавливать не нужно.

Гарантируется, что данный вам массив может быть получен с помощью вышеописанного процесса.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 100\)) — размер конечного списка.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(-10^9 \le a_i \le 10^9\)) — перемешанный список чисел, записанный на доске.

Гарантируется, что входные данные были получены с помощью процесса, описанного выше.

Выходные данные

Для каждого набора входных данных выведите одно целое число \(x\) — одно из двух начальных чисел на доске.

Если существует несколько решений, выведите любое из них.

Примечание

Для первого набора входных данных, \(a\) можно получить, начав либо с \(9\) и \(2\), а затем записав \(|9-2|=7\), либо начав с \(9\) и \(7\) и записав \(|9-7|=2\). Этот список нельзя получить, начав с \(2\) и \(7\). Поэтому в любом случае \(9\) должно было быть одним из начальных чисел. Обратите внимание, что \(2\) и \(7\) также являются корректными ответами.

Для второго набора входных данных можно показать, что два начальных числа должны были быть \(-4\) и \(11\).

Для четвертого набора входных данных начальными числами могли быть либо \(3\) и \(3\), либо \(3\) и \(0\). В любом случае одно из них было \(3\).

Для пятого набора входных данных мы можем показать, что начальными числами были \(8\) и \(16\).

B. Минимизация подотрезков перестановки

Конструктив математика *1100

Вам дана перестановка \(p\) длины \(n\). Вы хотите минимизировать количество подотрезков \(p\), которые являются перестановками. Для этого вы должны выполнить следующую операцию ровно один раз:

  • Выбрать целые числа \(i\), \(j\), где \(1 \le i, j \le n\), затем
  • Поменять местами \(p_i\) и \(p_j\).

Например, если \(p = [5, 1, 4, 2, 3]\) и мы выбираем \(i = 2\), \(j = 3\), то итоговый массив будет равен \([5, 4, 1, 2, 3]\). Если вместо этого мы выберем \(i = j = 5\), то итоговый массив будет \([5, 1, 4, 2, 3]\).

При каком выборе \(i\) и \(j\) количество подотрезков, являющихся перестановками, будет минимальным?

Перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) дважды встречается в массиве), и \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве есть \(4\)).

Массив \(a\) является подотрезком массива \(b\), если \(a\) можно получить из \(b\) путем удаления нескольких (возможно, нуля или всех) элементов из начала и нескольких (возможно, нуля или всех) элементов из конца.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 2\cdot 10^5\)) — размер перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых \(p_1, p_2, \ldots p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны) — элементы перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа \(i\) и \(j\) (\(1 \le i, j \le n\)) — индексы, которые нужно поменять местами в \(p\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере после замены возможны четыре массива:

  • Если мы поменяем местами \(p_1\) и \(p_2\), то получим массив \([2, 1, 3]\), который имеет 3 подотрезка, которые являются перестановками (\([1]\), \([2, 1]\), \([2, 1, 3]\)).
  • Если поменять местами \(p_1\) и \(p_3\), то получим массив \([3, 2, 1]\), который имеет 3 подотрезка, которые являются перестановками (\([1]\), \([2, 1]\), \([3, 2, 1]\)).
  • Если поменять местами \(p_2\) и \(p_3\), мы получим массив \([1, 3, 2]\), который имеет 2 подотрезка, которые являются перестановками (\([1]\), \([1, 3, 2]\)).
  • Если поменять любой элемент местами с самим собой, мы получим массив \([1, 2, 3]\), который имеет 3 подотрезка, которые являются перестановками (\([1]\), \([1, 2]\), \([1, 2, 3]\)).
Поэтому лучше всего поменять местами элементы на позициях \(2\) и \(3\).

В третьем примере, после того, как мы поменяем местами элементы на позициях \(2\) и \(5\), итоговый массив будет равняться \([1, 4, 2, 5, 3]\). Единственными подотрезками, которые являются перестановками, будут \([1]\) и \([1, 4, 2, 5, 3]\). Мы можем показать, что это минимально возможное количество.

C. Без простых разностей

Конструктив математика теория чисел *1400

Вам даны целые числа \(n\) и \(m\). Заполните таблицу размером \(n\) на \(m\) целыми числами от \(1\) до \(n\cdot m\) таким образом, чтобы для любых двух соседних клеток сетки модуль разности значений в этих клетках не был простым числом. Две клетки в таблице считаются соседними, если они имеют общую сторону.

Можно показать, что при заданных ограничениях решение всегда существует.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(4 \le n, m \le 1000\)) — размеры таблицы.

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(m\) целых чисел в каждой, представляющих итоговую таблицу. Каждое число от \(1\) до \(n\cdot m\) должно появиться в таблице ровно один раз.

Дополнительные пробелы и пустые строки в приведенном ниже примере вывода присутствуют только для удобства чтения и не являются обязательными.

Если существует несколько решений, выведите любое из них.

Примечание

Первый пример соответствует картинке выше. Единственными абсолютными разностями между соседними элементами в этой таблице являются числа \(1\), \(4\), \(6\), \(8\) и \(9\), ни одно из которых не является простым.

E. Подсчет суперпоследовательностей

дп Комбинаторика математика *2500

Вам дан массив \(a\) из \(n\) целых чисел, в котором все элементы \(a_i\) лежат в диапазоне \([1, k]\). Сколько различных массивов \(b\) из \(m\) целых чисел, где все элементы \(b_i\) лежат в диапазоне \([1, k]\), содержат \(a\) в качестве подпоследовательности? Два массива считаются различными, если они отличаются хотя бы в одной позиции.

Последовательность \(x\) является подпоследовательностью последовательности \(y\), если \(x\) может быть получена из \(y\) путем удаления нескольких (возможно, нуля или всех) элементов.

Поскольку ответ может быть очень большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора содержит три целых числа \(n\), \(m\), \(k\) (\(1 \le n \le 2\cdot 10^5\), \(n \le m \le 10^9\), \(1 \le k \le 10^9\)) — размер \(a\), размер \(b\) и максимально допустимое значение в массивах, соответственно.

Следующая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(1\le a_i \le k\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих массивов \(b\), по модулю \(10^9+7\).

Примечание

В первом примере, поскольку \(k=1\), существует только один массив размера \(m\), состоящий из целых чисел \([1, k]\). Этот массив (\([1, 1, \ldots, 1]\)) содержит исходный массив в качестве подпоследовательности, поэтому ответ - 1.

Во втором примере есть \(9\) массивов: \([1, 1, 2, 2]\), \([1, 2, 1, 2]\), \([1, 2, 2, 1]\), \([1, 2, 2, 2]\), \([1, 2, 2, 3]\), \([1, 2, 3, 2]\), \([1, 3, 2, 2]\), \([2, 1, 2, 2]\), \([3, 1, 2, 2]\).

В четвертом примере, поскольку \(m=n\), единственным массивом размера \(m\), который содержит \(a\) в качестве подпоследовательности, является сам \(a\).

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

Как-то раз Тёма оказался в бинарной кофейне. Это очень популярное и необычное место.

Кофейня предлагает посетителям \(k\) разных вкусных десертов. Десерты нумеруются от \(0\) до \(k-1\). Стоимость \(i\)-о десерта составляет \(2^i\) монет, ведь это бинарная кофейня! Тёма готов потратить не более \(n\) монет на дегустацию десертов. При этом ему неинтересно покупать любой десерт более одного раза, ведь для оценки вкуса достаточно и одного.

Сколькими различными способами он может купить несколько десертов (возможно ноль) для дегустации?

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте.

Далее следует \(t\) строк, каждая из которых описывает один набор входных данных.

В единственной строке каждого набора задано два целых числа \(n\) и \(k\) (\(1 \le n, k \le 10^9\)) — количество монет, которые Тёма готов потратить, и количество десертов в бинарной кофейне.

Выходные данные

Выведите \(t\) целых чисел, \(i\)-е из которых должно быть равно ответу на \(i\)-й набор входных данных — количеству способов купить десерты для дегустации.

Примечание

Варианты для первого набора входных данных: {}, {1}

Варианты для второго набора входных данных: {}, {1}

Варианты для третьего набора входных данных: {}, {1}, {2}

Варианты для четвёртого набора входных данных: {}, {1}, {2}, {1, 2}

C. Горнолыжный курорт

Комбинаторика математика *1000

Дима Ватрушин работает учителем алгебры в школе. За хорошую работу его отправили в отпуск на \(n\) дней. Дима давно мечтал съездить на горнолыжный курорт, поэтому он хочет выделить несколько дней подряд и отправиться кататься на лыжах. Так как поездка требует тщательной подготовки, то он готов поехать минимум на \(k\) дней.

Вам дан массив \(a\), содержащий прогноз погоды на курорте. То есть в \(i\)-й день температура будет равна \(a_i\) градусов.

Дима родился в Сибири, поэтому он сможет отправиться отдохнуть, только если температура не поднимется выше \(q\) градусов на протяжении всей поездки.

К сожалению, Дима настолько увлекся абстрактной алгеброй, что разучился считать. Он просит вас помочь ему и посчитать количество способов выбрать даты отдыха на курорте.

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержатся три целых числа \(n\), \(k\), \(q\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le n\), \(-10^9 \le q \le 10^9\)) — длина массива \(a\), минимальное количество дней на курорте и максимальная комфортная для Димы температура.

Во второй строке набора содержится \(n\) целых чисел \(a_1, a_2, a_3, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — температура на горнолыжном курорте.

Cумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор — количество способов Диме выбрать даты отдыха на курорте.

Примечание

В первом наборе входных данных примера Дима может поехать в любой день, поэтому ему подходят даты [1], [2], [3], [1, 2], [2, 3], [1, 2, 3].

Во втором и четвертом наборах входных данных примера Дима не может поехать ни в какой день из-за высокой температуры, поэтому подходящих дат нет.

В третьем наборе входных данных примера Дима может поехать только в даты [1, 2, 3].

G1. В поисках истины (простая версия)

meet-in-the-middle интерактив Конструктив математика Теория вероятностей *2200

Единственное отличие между версиями — максимальное количество запросов. В этой версии вы можете сделать не более \(2023\) запросов.

Это интерактивная задача.

Вы играете в игру. Круг разделен на \(n\) секторов, секторы пронумерованы от \(1\) до \(n\) в некотором порядке. Вы находитесь в соседней комнате и не знаете ни количество секторов, ни порядка их нумерации. Также есть стрелка, которая изначально указывает на какой-то сектор. Изначально ведущий сообщает вам номер сектора, на который указывает стрелка. После этого вы можете попросить ведущего переместить стрелку на \(k\) секторов по часовой стрелке или против часовой стрелки не более чем \(2023\) раза. И каждый раз вам сообщается номер сектора, на который указывает стрелка.

Ваша задача определить число \(n\) — количество секторов, используя не более чем \(2023\) запроса.

Гарантируется, что \(1 \le n \le 10^6\).

Входные данные

Входные данные состоят из одного целого числа \(x\) (\(1 \le x \le n\)) — номер начального сектора.

Выходные данные

После того, как вы определите число \(n\) — количество секторов, выведите «! n» (\(1 \le n \le 10^6\)). После этого программа должна немедленно завершиться.

Обратите внимание, что вывод ответа не считается запросом.

Гарантируется, что число \(n\) и номера секторов зафиксированы изначально и не будут меняться программой жюри в зависимости от запросов.

Протокол взаимодействия

После описания ввода вы можете задавать запросы. Запросы могут быть двух типов:

  1. «+ k» (\(0 \le k \le 10^9\)) — попросить переместить стрелку на \(k\) секторов по часовой стрелке.
  2. «- k» (\(0 \le k \le 10^9\)) — попросить переместить стрелку на \(k\) секторов против часовой стрелки.

После каждого запроса вы должны считать целое число \(x\) (\(1 \le x \le n\)) — номер текущего сектора, на который указывает стрелка.

Всего вы можете сделать не более \(2023\) запросов.

Если вы сделаете слишком много запросов, вы получите вердикт Wrong answer.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

Взломы

Для взломов используйте следующий формат теста.

В первой строке выведите одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество секторов.

Во второй строке выведите \(n\) различных целых чисел \(1 \le a_1, a_2, \dots, a_n \le n\) — номера секторов по часовой стрелке, стрелка изначально указывает на сектор с номером \(a_1\).

G2. В поисках истины (сложная версия)

meet-in-the-middle интерактив Конструктив математика Теория вероятностей *2500

Единственное отличие между версиями — максимальное количество запросов. В этой версии вы можете сделать не более \(1000\) запросов.

Это интерактивная задача.

Вы играете в игру. Круг разделен на \(n\) секторов, секторы пронумерованы от \(1\) до \(n\) в некотором порядке. Вы находитесь в соседней комнате и не знаете ни количество секторов, ни порядка их нумерации. Также есть стрелка, которая изначально указывает на какой-то сектор. Изначально ведущий сообщает вам номер сектора, на который указывает стрелка. После этого вы можете попросить ведущего переместить стрелку на \(k\) секторов по часовой стрелке или против часовой стрелки не более чем \(1000\) раз. И каждый раз вам сообщается номер сектора, на который указывает стрелка.

Ваша задача определить число \(n\) — количество секторов, используя не более чем \(1000\) запросов.

Гарантируется, что \(1 \le n \le 10^6\).

Входные данные

Входные данные состоят из одного целого числа \(x\) (\(1 \le x \le n\)) — номер начального сектора.

Выходные данные

После того, как вы определите число \(n\) — количество секторов, выведите «! n» (\(1 \le n \le 10^6\)). После этого программа должна немедленно завершиться.

Обратите внимание, что вывод ответа не считается запросом.

Гарантируется, что число \(n\) и номера секторов зафиксированы изначально и не будут меняться программой жюри в зависимости от запросов.

Протокол взаимодействия

После описания ввода вы можете задавать запросы. Запросы могут быть двух типов:

  1. «+ k» (\(0 \le k \le 10^9\)) — попросить переместить стрелку на \(k\) секторов по часовой стрелке.
  2. «- k» (\(0 \le k \le 10^9\)) — попросить переместить стрелку на \(k\) секторов против часовой стрелки.

После каждого запроса вы должны считать целое число \(x\) (\(1 \le x \le n\)) — номер текущего сектора, на который указывает стрелка.

Всего вы можете сделать не более \(1000\) запросов.

Если вы сделаете слишком много запросов, вы получите вердикт Wrong answer.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

Взломы

Для взломов используйте следующий формат теста.

В первой строке выведите одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество секторов.

Во второй строке выведите \(n\) различных целых чисел \(1 \le a_1, a_2, \dots, a_n \le n\) — номера секторов по часовой стрелке, стрелка изначально указывает на сектор с номером \(a_1\).

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\).

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\) целых чисел. Обратите внимание, что дается не больше чисел, чем белых клеток в матрице, так что ответ всегда существует.

A. Тенцинг и Цонду

игры математика *800

Цонду всегда бежит первым! ! !

Цонду и Тенцинг играют в карточную игру. У Цонду есть \(n\) монстров со способностями \(a_1, a_2, \ldots, a_n\), а у Тенцинга — \(m\) монстров со способностями \(b_1, b_2, \ldots, b_m\).

Цонду и Тенцинг по очереди делают ходы, причем Цонду ходит первым. Каждый ход делающий ход игрок выбирает двух монстров: одного со своей стороны и одного со стороны соперника. Эти монстры устроят бой между собой. Предположим, что значения способностей выбранных монстров равны \(x\) и \(y\) соответственно, тогда значения способностей монстров станут \(x-y\) и \(y-x\) соответственно. Если значение способности любого монстра станет меньше или равно \(0\), то монстр умирает.

Игра заканчивается, когда хотя бы у одного игрока не останется в живых ни одного монстра. Победителем считается игрок, у которого монстры остались в живых. Если у обоих игроков не осталось в живых ни одного монстра, игра заканчивается вничью.

Найдите результат игры, когда оба игрока играют оптимально.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^3\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n,m \leq 50\)) — количество монстров у Цонду и Тенцинга соответственно.

Вторая строка каждого набора содержит \(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\)) — значения способностей монстров Тенцинга.

Выходные данные

Для каждого набора входных данных выведите «Tsondu» (без кавычек), если победил Цонду, «Tenzing», если победил Тенцинг, и «Draw», если игра закончилась вничью.

Обратите внимание, что вывод чувствителен к регистру букв. Например, если ответ равен «Tsondu», но вы вывели «tsondu», «TSONDU» или «tSonDu», то это всё неправильные ответы.

Примечание

Рассмотрим первый набор входных данных. Можно показать, что у Цонду есть выигрышная стратегия. Ниже приводится возможный способ, которым Цонду может выиграть (обратите внимание, что в этом примере игроки могут играть не оптимально):

  • В первый ход Цонду выбирает монстра со способностью \(9\) на своей стороне для борьбы с монстром со способностью \(1\) на стороне Тенцинга, стоимость способностей обоих монстров становится \(8\) и \(-8\) соответственно. Монстр со способностью \(-8\) на стороне Тенцинга погибает.
  • Во второй ход Тенцинг выбирает монстра со способностью \(2\) на своей стороне, чтобы сразиться с монстром со способностью стоимостью \(8\) на стороне Цонду, стоимость способностей обоих монстров становится \(-6\) и \(6\) соответственно. Монстр со способностью \(-6\) на стороне Тенцинга погибает.
  • На третьем ходу Цонду выбирает монстра со способностью \(6\) на своей стороне, чтобы сразиться с монстром со способностью \(3\) на стороне Тенцинга, стоимость способностей обоих монстров становится \(3\) и \(-3\) соответственно. Монстр со способностью \(-3\) на стороне Тенцинга погибает.
  • Теперь у Тенцинга не осталось живых монстров. Поскольку у Тсонду еще остались монстры в живых, Тсонду побеждает.

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\).

E. Тенцинг и треугольник

геометрия дп жадные алгоритмы математика Структуры данных *2300

На двумерной плоскости имеется \(n\) попарно различных точек и прямая \(x+y=k\). Точка \(i\) находится в точке \((x_i,y_i)\). Все точки имеют неотрицательные координаты и находятся строго под прямой. Другими словами, \(0 \leq x_i,y_i, x_i+y_i < k\).

Тенцинг хочет стереть все точки. Он может выполнить следующие две операции:

  1. Нарисовать треугольник: Тенцинг выберет два неотрицательных целых числа \(a\), \(b\), которые удовлетворяют условию \(a+b<k\), тогда все точки внутри треугольника, образованного прямыми \(x=a\), \(y=b\) и \(x+y=k\) будут стерты. Можно показать, что этот треугольник является равнобедренным прямоугольным треугольником. Пусть длины сторон треугольника равны \(l\), \(l\) и \(\sqrt 2 l\) соответственно. Тогда стоимость этой операции равна \(l \cdot A\).

    Синяя область следующего рисунка описывает треугольник с \(a=1,b=1\) со стоимостью \(=1\cdot A\).

  2. Стереть определенную точку: Тенцинг выбирает целое число \(i\), которое удовлетворяет условию \(1 \leq i \leq n\) и стирает точку \(i\). Стоимость этой операции равна \(c_i\).

Помогите Тенцингу найти минимальную стоимость стирания всех точек.

Входные данные

Первая строка содержит три целых числа \(n\), \(k\) и \(A\) (\(1\leq n,k\leq 2\cdot 10^5\), \(1\leq A\leq 10^4\)) — количество точек, коэффициент, описывающий гипотенузу треугольника и коэффициент, описывающий стоимость построения треугольника.

В следующих \(n\) строках входных данных \(i\)-я строка содержит три целых числа \(x_i,y_i,c_i\) (\(0\leq x_i,y_i,x_i+y_i< k\), \(1\leq c_i\leq 10^4\)) — координаты \(i\)-й точки и стоимость ее стирания с помощью второй операции. Гарантируется, что координаты попарно различны.

Выходные данные

Выведите одно целое число –минимальную стоимость стирания всех точек.

Примечание

Рисунок первого примера:

Тенцинг выполняет следующие операции:

  1. построить треугольник с \(a=3,b=2\), стоимость \(=1\cdot A=1\).
  2. стереть первую точку, стоимость \(=1\).
  3. стереть вторую точку, стоимость \(=1\).
  4. стереть третью точку, стоимость \(=1\).

Рисунок для второго примера:

G. Тенцинг и случайные операции

дп Комбинаторика математика Теория вероятностей *2800

Еще одна задача про случайность.

У Тенцинга есть массив \(a\) длины \(n\) и целое число \(v\).

Тенцинг выполняет следующую операцию \(m\) раз:

  1. Выбрать целое число \(i\) такое, что \(1 \leq i \leq n\), равномерно случайным образом.
  2. Для всех \(j\) таких, что \(i \leq j \leq n\), присвоить \(a_j := a_j + v\).

Тенцинг хочет узнать ожидаемое значение \(\prod_{i=1}^n a_i\) после выполнения \(m\) операций, по модулю \(10^9+7\).

Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Первая строка ввода содержит три целых числа \(n\), \(m\) и \(v\) (\(1\leq n\leq 5000\), \(1\leq m,v\leq 10^9\)).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i\leq 10^9\)).

Выходные данные

Выведите ожидаемое значение \(\prod_{i=1}^n a_i\) по модулю \(10^9+7\).

Примечание

Существует три возможных значения \(a\) после выполнения всех \(m\) операций:

1. \(a_1=2,a_2=12\) с \(\frac{1}{4}\) вероятностью.

2. \(a_1=a_2=12\) с \(\frac{1}{4}\) вероятностью.

3. \(a_1=7,a_2=12\) с \(\frac{1}{2}\) вероятностью.

Таким образом, ожидаемое значение \(a_1\cdot a_2\) равно \(\frac{1}{4}\cdot (24+144) + \frac{1}{2}\cdot 84=84\).

H. Тенцинг и случайные вещественные числа

битмаски графы дп математика Теория вероятностей *3000

Имеется \(n\) непрерывно распределённых случайных вещественных чисел от 0 до 1 включительно, которые обозначаются как \(x_1, x_2, \ldots, x_n\).

Тенцинг имеет \(m\) условий. Каждое условие имеет вид \(x_i+x_j\le 1\) или \(x_i+x_j\ge 1\).

Тенцинг хочет узнать вероятность того, что все условия выполнены, по модулю \(998~244~353\).

Формально, пусть \(M = 998~244~353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1\le n\le 20\), \(0\le m\le n^2+n\)).

Затем следующие \(m\) строк содержат три целых числа \(t\), \(i\) и \(j\) (\(t \in \{0,1\}\), \(1\le i\le j\le n\)).

  • Если \(t=0\), то условие равно \(x_i+x_j\le 1\).
  • Если \(t=1\), то условие равно \(x_i+x_j\ge 1\).

Гарантируется, что все условия попарно различны.

Выходные данные

Выведите вероятность того, что все условия выполнены, по модулю \(M = 998~244~353\).

Примечание

В первом примере условиями являются \(x_1+x_2 \le 1\) и \(x_3+x_3\ge 1\), и вероятность выполнения каждого условия равна \(\frac 12\), поэтому вероятность того, что они оба выполнены, равна \(\frac 12\cdot \frac 12=\frac 14\), по модулю \(998~244~353\) равно \(748683265\).

Во втором примере ответ равен \(\frac 14\).

В третьем примере ответ равен \(\frac 1{16}\).

В четвертом случае сумма всех переменных должна быть равна \(2\), поэтому вероятность равна \(0\).

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)\).

C. Сумма в бинарном дереве

битмаски Деревья Комбинаторика математика *800

Ване очень нравится математика. Однажды, когда он решал очередную задачу по математике, он придумал интересное дерево. Это дерево строится следующим образом.

Изначально в дереве есть только одна вершина с номером \(1\) — корень дерева. Затем, Ваня добавляет к ней двух детей, присваивая им последовательные номера — \(2\) и \(3\) соответственно. После этого, он будет добавлять детей к вершинам по возрастанию их номеров, начиная с \(2\), присваивая их детям минимальные не занятые номера. В итоге, у Вани получится бесконечное дерево с корнем в вершине \(1\), где каждая вершина будет иметь ровно два ребенка, а номера вершин будут расположены последовательно по слоям.

Часть дерева Вани.

Ване стало интересно, чему равна сумма номеров вершин на пути от вершины с номером \(1\) до вершины с номером \(n\) в таком дереве. Так как Ваня не любит считать, он попросил Вас помочь ему узнать эту сумму.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следует \(t\) строк — описание наборов входных данных. Каждая строка содержит одно целое число \(n\) (\(1 \le n \le 10^{16}\)) — номер вершины, для которой Ваня хочет посчитать сумму номеров вершин на пути от корня до этой вершины.

Выходные данные

Для каждого набора входных данных выведите одно целое число — искомую сумму.

Примечание

В первом наборе данных примера на пути от корня до вершины \(3\) лежат две вершины \(1\) и \(3\), для них сумма равна \(4\).

Во втором наборе данных примера на пути от корня до вершины с номером \(10\) лежат вершины \(1\), \(2\), \(5\), \(10\), сумма их номеров равна \(1+2+5+10 = 18\).

D. Яблоня

Деревья дп Комбинаторика математика поиск в глубину и подобное *1200

У Тимофея в саду растёт яблоня, она представляет собой корневое дерево из \(n\) вершин с корнем в вершине \(1\) (вершины пронумерованы от \(1\) от \(n\)). Деревом называется связный граф без циклов, петель и кратных ребер.

Это дерево очень необычное — оно растёт корнем вверх. Впрочем, в этом нет ничего необычного для деревьев в программировании.

Яблоня достаточно молодая, поэтому на ней вырастет всего два яблока. Яблоки вырастут в определённых вершинах (эти вершины могу совпадать). После того как яблоки вырастут, Тимофей начнёт трясти яблоню, пока яблоки не упадут. Каждый раз, когда Тимофей трясёт яблоню, с каждым из яблок происходит следующее:

Пусть яблоко сейчас находится в вершине \(u\).

  • Если у вершины \(u\) есть ребёнок, то яблоко перемещается в него (если таких вершин несколько, то яблоко может переместиться в любую из них).
  • Иначе яблоко падает с дерева.

Можно показать, что через конечное время оба яблока упадут с дерева.

У Тимофея есть \(q\) предположений, в каких вершинах могут вырасти яблоки. Он предполагает, что яблоки могут вырасти в вершинах \(x\) и \(y\), и хочет узнать количество пар вершин (\(a\), \(b\)), с которых яблоки могут упасть с дерева, где \(a\) — вершина, с которой упадёт яблоко из вершины \(x\), \(b\) — вершина, с которой упадёт яблоко из вершины \(y\). Помогите ему это сделать.

Входные данные

В первой строке дано число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных даны числа \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество вершин в яблоне.

Далее следует \(n - 1\) строка, описывающая дерево. В \(i\)-й из них даны числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)) — ребро в дереве.

В следующей строке дано единственное целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество предположений Тимофея.

Далее следует \(q\) строк, описывающих предположения Тимофея. В \(i\)-й строке даны числа \(x_i\) и \(y_i\) (\(1 \leq x_i, y_i \leq n\)) — предполагаемые вершины, на которых вырастут яблоки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\). Аналогично, сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса Тимофея выведите количество упорядоченных пар вершин, с которых яблоки могут упасть с дерева, если предположение окажется верным, в отдельной строке.

Примечание

В первом примере:

  • Для первого запроса существует две возможные пары вершин, с которых яблоки могут упасть: \((4, 4), (5, 4)\).
  • Для второго запроса также существует две пары: \((5, 4), (5, 5)\).
  • Для третьего запроса есть всего одна пара: \((4, 4)\).
  • Для четвертого запроса существует \(4\) пары: \((4, 4), (4, 5), (5, 4), (5, 5)\).
Дерево из первого примера.

Во втором примере для первого предположения есть \(4\) возможных пар вершин, с которых могут упасть яблоки: \((2, 3), (2, 2), (3, 2), (3, 3)\). Для второго запроса есть всего одна возможная пара: \((2, 3)\). Для третьего запроса есть две пары: \((3, 2), (3, 3)\).

F1. Метрополитен в Омске (простая версия)

графы Деревья дп жадные алгоритмы математика поиск в глубину и подобное Структуры данных *1800

Это простая версия задачи. Единственное отличие между простой и сложной версией состоит в том, что в этой версии для всех вопросов \(u = 1\).

Как известно, Омск — столица Берляндии. Как и в любой столице, в Омске есть хорошо развитая система метрополитена. Метрополитен Омска представляет из себя некоторое количество станций, соединённых туннелями, причём между любыми двумя станциями есть ровно один путь, проходящий по каждому из туннелей не более одного раза. Иными словами, метрополитен представляет собой дерево.

Для развития метрополитена и привлечения жителей в Омске используется следующая система. Каждая станция имеет свой вес \(x \in \{-1, 1\}\). Если станция имеет вес \(-1\), то при посещении станции с жителя Омска взимается плата в \(1\) бурль. Если же вес станции равен \(1\), то житель Омска вознаграждается \(1\)-м бурлем.

Пока что есть только одна станция с номером \(1\) и весом \(x = 1\). Каждый день происходит одно из следующих событий:

  • К станции с номером \(v_i\) присоединяется новая станция с весом \(x\), и ей присваивается номер, на единицу больший количества уже существующих станций.
  • Лёша, живущий в Омске, задаётся вопросом: существует ли подотрезок\(\dagger\) (возможно, пустой) пути между вершинами \(u\) и \(v\) такой, что, проехав по нему, можно заработать ровно \(k\) бурлей (если \(k < 0\), то это означает, что на проезд придётся потратить \(k\) бурлей). Иначе говоря, Лёшу интересует, существует ли такой подотрезок пути, что сумма весов вершин в нем равна \(k\). Обратите внимание, что подотрезок может быть пустым, и тогда сумма равна \(0\).

Вы являетесь другом Лёши, поэтому Ваша задача — ответить на вопросы Лёши.

\(\dagger\)Подотрезок — непрерывная последовательность элементов.

Входные данные

В первой строке находится число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество событий.

Далее следует \(n\) строк, описывающих события. В \(i\)-й строке возможен один из вариантов:

  • Сначала идёт символ «+» (без кавычек), затем два числа \(v_i\) и \(x_i\) (\(x_i \in \{-1, 1\}\), также гарантируется, что вершина с номером \(v_i\) существует). В этом случае к станции с номером \(v_i\) присоединяется новая станция с весом \(x_i\).
  • Сначала идёт символ «?» (без кавычек), а затем три числа \(u_i\), \(v_i\) и \(k_i\) (\(-n \le k_i \le n\)). Гарантируется, что вершины с номерами \(u_i\) и \(v_i\) существуют. В этом случае необходимо определить, существует ли подотрезок (возможно, пустой) пути между станциями \(u_i\) и \(v_i\) с суммой весов ровно \(k_i\). В этой версии задачи гарантируется, что \(u_i = 1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого вопроса Лёши выведите «Yes» (без кавычек), если описанный в условии подотрезок существует, иначе выведите «No» (без кавычек).

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Пояснение к первому примеру.

Ответ на второй вопрос «Yes», так как существует путь \(1\).

В четвертом вопросе мы можем снова выбрать путь \(1\).

В пятом запросе ответ «Yes», так как есть путь \(1-3\).

В шестом запросе мы можем выбрать пустой путь, так как сумма весов на нем равна \(0\).

Нетрудно показать, что нет путей, удовлетворяющих первому и третьему запросу.

F2. Метрополитен в Омске (сложная версия)

Деревья дп математика поиск в глубину и подобное разделяй и властвуй Структуры данных *2300

Это сложная версия задачи. Единственное отличие между простой и сложной версией состоит в том, что в этой версии \(u\) может принимать любые возможные значения.

Как известно, Омск — столица Берляндии. Как и в любой столице, в Омске есть хорошо развитая система метрополитена. Метрополитен Омска представляет из себя некоторое количество станций, соединённых туннелями, причём между любыми двумя станциями есть ровно один путь, проходящий по каждому из туннелей не более одного раза. Иными словами, метрополитен представляет собой дерево.

Для развития метрополитена и привлечения жителей в Омске используется следующая система. Каждая станция имеет свой вес \(x \in \{-1, 1\}\). Если станция имеет вес \(-1\), то при посещении станции с жителя Омска взимается плата в \(1\) бурль. Если же вес станции равен \(1\), то житель Омска вознаграждается \(1\)-м бурлем.

Пока что есть только одна станция с номером \(1\) и весом \(x = 1\). Каждый день происходит одно из следующих событий:

  • К станции с номером \(v_i\) присоединяется новая станция с весом \(x\), и ей присваивается номер, на единицу больший количества уже существующих станций.
  • Лёша, живущий в Омске, задаётся вопросом: существует ли подотрезок\(\dagger\) (возможно, пустой) пути между вершинами \(u\) и \(v\) такой, что, проехав по нему, можно заработать ровно \(k\) бурлей (если \(k < 0\), то это означает, что на проезд придётся потратить \(k\) бурлей). Иначе говоря, Лёшу интересует, существует ли такой подотрезок пути, что сумма весов вершин в нем равна \(k\). Обратите внимание, что подотрезок может быть пустым, и тогда сумма равна \(0\).

Вы являетесь другом Лёши, поэтому Ваша задача — ответить на вопросы Лёши.

\(\dagger\)Подотрезок — непрерывная последовательность элементов.

Входные данные

В первой строке находится число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество событий.

Далее следует \(n\) строк, описывающих события. В \(i\)-й строке возможен один из вариантов:

  • Сначала идёт символ «+» (без кавычек), затем два числа \(v_i\) и \(x_i\) (\(x_i \in \{-1, 1\}\), также гарантируется, что вершина с номером \(v_i\) существует). В этом случае к станции с номером \(v_i\) присоединяется новая станция с весом \(x_i\).
  • Сначала идёт символ «?» (без кавычек), а затем три числа \(u_i\), \(v_i\) и \(k_i\) (\(-n \le k_i \le n\)). Гарантируется, что вершины с номерами \(u_i\) и \(v_i\) существуют. В этом случае необходимо определить, существует ли подотрезок (возможно, пустой) пути между станциями \(u_i\) и \(v_i\) с суммой весов ровно \(k_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого вопроса Лёши выведите «Yes» (без кавычек), если описанный в условии подотрезок существует, иначе выведите «No» (без кавычек).

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Пояснение к первому примеру.

Ответ на второй вопрос «Yes», так как существует путь \(1\).

В четвертом вопросе мы можем снова выбрать путь \(1\).

В пятом запросе ответ «Yes», так как есть путь \(1-3\).

В шестом запросе мы можем выбрать пустой путь, так как сумма весов на нем равна \(0\).

Нетрудно показать, что нет путей, удовлетворяющих первому и третьему запросу.

B. Перестановки и простые числа

Конструктив математика *1000

Вам дано целое положительное число \(n\).

В этой задаче через \(\operatorname{MEX}\) для набора целых чисел \(c_1,c_2,\dots,c_k\) обозначим наименьшее положительное целое число \(x\), которое не встречается в наборе \(c\).

Простотой массива \(a_1,\dots,a_n\) назовём количество пар \((l,r)\), таких что \(1 \le l \le r \le n\) и \(\operatorname{MEX}(a_l,\dots,a_r)\) является простым числом.

Найдите произвольную перестановку чисел \(1,2,\dots,n\) с максимально возможным значением простоты среди всех перестановок \(1,2,\dots,n\).

Обратите внимание:

  • Целое число, не меньшее \(2\), называется простым, если его целыми положительными делителями являются только \(1\) и оно само. Например, \(2,5,13\) — простые числа, а \(1\) и \(6\) не простые.
  • Перестановкой чисел \(1,2,\dots,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\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, задающих перестановку \(1,2,\dots,n\), на которой достигается максимально возможная простота.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных есть всего \(3\) пары \((l,r)\) с \(1 \le l \le r \le 2\), из которых \(2\) имеют простое значение \(\operatorname{MEX}(a_l,\dots,a_r)\):

  • \((l,r) = (1,1)\): \(\operatorname{MEX}(2) = 1\), что не является простым.
  • \((l,r) = (1,2)\): \(\operatorname{MEX}(2,1) = 3\), что является простым.
  • \((l,r) = (2,2)\): \(\operatorname{MEX}(1) = 2\), что является простым.
Отсюда, простота равна \(2\).

Во втором наборе входных данных \(\operatorname{MEX}(1) = 2\) является простым, так что простота равна \(1\).

В третьем наборе входных данных максимально возможная простота равна \(8\).

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\).

G. Дерево с весами

битмаски Деревья Конструктив математика матрицы поиск в глубину и подобное реализация Структуры данных теория чисел *3000

Дано дерево на \(n\) вершинах, пронумерованных числами \(1,2,\dots,n\). \(i\)-е ребро соединяет вершины \(u_i\) и \(v_i\) и имеет некоторый неизвестный целый положительный вес \(w_i\). Вам также известны расстояния \(d_i\) между вершинами \(i\) и \(i+1\) для всех \(1 \le i \le n-1\) (это расстояние равно сумме весов рёбер на простом пути между вершинами дерева \(i\) и \(i+1\)).

Найдите вес каждого ребра. Если существует несколько решений, выведите любое из них. Если не существует весов \(w_i\), согласующихся со всеми данными, выведите одно целое число \(-1\).

Входные данные

Первая строка содержит целое число \(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\)).

В последней строке содержится \(n-1\) целых чисел \(d_1,\dots,d_{n-1}\) (\(1 \le d_i \le 10^{12}\)).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Если решения не существует, выведите одно целое число \(-1\). В противном случае выведите \(n-1\) строку, содержащую веса \(w_1,\dots,w_{n-1}\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере дерево выглядит следующим образом:

Во втором примере вес \(w_2\) не может быть равен \(0\), поскольку должен быть целым положительным числом. Поэтому решения нет.

В третьем примере дерево выглядит следующим образом:

H. Циклы, кратные трём

дп Комбинаторика математика снм Структуры данных *3400

Дана последовательность \(a_1,\dots,a_n\) длины \(n\), изначально все её элементы — пустые. Над последовательностью совершают \(n\) обновлений, в каждом из которых один из элементов \(a\) становится некоторым числом, таким образом, что после всех обновлений \(a\) становится перестановкой \(1,2,\dots,n\).

После каждого обновления найдите число способов (по модулю \(998\,244\,353\)) заполнить остающиеся пустые места в \(a\) так, чтобы \(a\) стала перестановкой \(1,2,\dots,n\), причём длины всех циклов в \(a\) стали кратны \(3\).

Перестановкой \(1,2,\dots,n\) является последовательность длины \(n\), состоящая из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Циклом в перестановке \(a\) называется последовательность попарно различных чисел \((i_1,\dots,i_k)\), такая что \(i_2 = a_{i_1},i_3 = a_{i_2},\dots,i_k = a_{i_{k-1}},i_1 = a_{i_k}\). Длина этого цикла равна числу \(k\), которое кратно \(3\), если и только если \(k \equiv 0 \pmod 3\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 3 \cdot 10^5\), \(n \equiv 0 \pmod 3\)).

В \(i\)-й из следующих \(n\) строк содержатся по два числа \(x_i\) и \(y_i\), что значит, что \(i\)-е обновление делает \(a_{x_i}\) равным \(y_i\).

Гарантируется, что \(x_1,\dots,x_n\) и \(y_1,\dots,y_n\) являются перестановками \(1,2,\dots,n\), т. е. \(a\) становится перестановкой \(1,2,\dots,n\) после всех обновлений.

Выходные данные

Выведите \(n\) строк: число способов (по модулю \(998\,244\,353\)) после \(1,2,\dots,n\) обновлений.

Примечание

В первом примере, скажем, после \(3\)-го обновления есть \(3\) способа заполнить последовательность \(a = [4,\_,2,5,\_,\_]\):

  • \([4,1,2,5,6,3]\): имеем один цикл \((1\,4\,5\,6\,3\,2)\) длины \(6\).
  • \([4,6,2,5,1,3]\): имеем два цикла \((1\,4\,5)\) и \((2\,6\,3)\), с длинами \(3\) и \(3\).
  • \([4,6,2,5,3,1]\): имеем один цикл \((1\,4\,5\,3\,2\,6)\) длины \(6\).

Во втором примере первое же обновление создаёт цикл длины \(1\), так что нет ни одного способа сделать так, чтобы длины всех циклов были кратны \(3\).

A. Запрещенное число

Конструктив математика реализация теория чисел *800

Дано целое число \(n\), которое вы хотите получить. У вас есть бесконечный запас каждого целого числа от \(1\) до \(k\), кроме числа \(x\) (числа \(x\) нет ни одной штуки).

Разрешается взять произвольное количество каждого из этих чисел (возможно, ноль). Можете ли вы сделать так, чтобы сумма взятых чисел была равна \(n\)?

Если существует несколько ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны три целых числа \(n, k\) и \(x\) (\(1 \le x \le k \le n \le 100\)).

Выходные данные

На каждый набор входных данных в первой строке выведите «YES» или «NO» — можете ли вы взять произвольное количество каждого из чисел от \(1\) до \(k\), кроме \(x\), так, чтобы их сумма была равна \(n\).

Если можете, то во второй строке должно быть записано одно целое число \(m\) — суммарное количество взятых чисел. В третьей строке должны быть записаны \(m\) целых чисел — каждое от \(1\) до \(k\), не равно \(x\), а их сумма равна \(n\).

Если существует несколько ответов, то выведите любой из них.

Примечание

Другой возможный ответ на первый набор входных данный — это \([3, 3, 3, 1]\). Обратите внимание, что не требуется минимизировать количество взятых чисел. Существуют и другие ответы.

Во втором наборе у вас есть только бесконечный запас чисел \(2\). Невозможно собрать сумму \(5\) только из них.

В пятом наборе вообще нет доступных чисел, поэтому невозможно собрать никакую положительную сумму.

B. Идем вместе

геометрия математика реализация *900

Боб и Кэрол провели целый день вместе с Алисой, но пришла пора идти домой. Алиса, Боб и Кэрол живут на бесконечной двумерной плоскости в клетках \(A\), \(B\) и \(C\) соответственно. Сейчас все трое находятся в клетке \(A\).

Если Боб (или Кэрол) находится в некоторой клетке, то он (она) может переместиться в одну из ее соседних клеток. Две клетки называются соседними, если они имеют общую сторону. Например, у клетки \((3, 5)\) есть четыре соседние клетки: \((2, 5)\), \((4, 5)\), \((3, 6)\) и \((3, 4)\).

Боб хочет вернуться в клетку \(B\), Кэрол — в клетку \(C\). Каждый из них хочет вернуться домой по кратчайшему пути, т. е. по пути, который состоит из наименьшего возможного количества клеток. Но также они хотели бы идти вместе.

Какое наибольшее возможное количество клеток Боб и Кэрол смогут пройти вместе, если каждых из них идет домой по одному из кратчайших путей?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных заданы два целых числа \(x_A\) и \(y_A\) (\(1 \le x_A, y_A \le 10^8\)) — позиция клетки \(A\), где сейчас находятся Боб и Кэрол.

Во второй строке каждого набора заданы два целых числа \(x_B\) и \(y_B\) (\(1 \le x_B, y_B \le 10^8\)) — позиция клетки \(B\) (дом Боба).

В третьей строке каждого набора заданы два целых числа \(x_C\) и \(y_C\) (\(1 \le x_C, y_C \le 10^8\)) — позиция клетки \(C\) (дом Кэрол).

Дополнительное ограничение на входные данные: в пределах одного набора клетки \(A\), \(B\) \(C\) — попарно различные.

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимально возможное количество клеток, которые Боб и Кэрол могут пройти вместе, если каждый из них идет домой по одному из кратчайших путей.

Примечание

Во всех картинках, красным обозначены клетки, лежащие только на пути Боба; светло-синим — клетки на пути только Кэрол, а темно-синим — общие для Боба и Кэрол клетки.

Один из оптимальных ответов для первого набора входных данных изображен ниже:

Путь Боба состоит из \(5\) клеток, путь Кэрол — из \(7\) клеток, и они пройдут \(3\) клетки вместе.

Оптимальный ответ для второго набора изоборажен ниже:

Путь Боба состоит из \(4\) клеток, путь Кэрол — из \(3\) клеток, и они пройдут вместе только \(1\) клетку.

Один из оптимальных ответов для третьего набора изображен ниже:

Путь Боба состоит из \(6\) клеток, путь Кэрол — из \(9\) клеток, и они пройдут \(6\) клеток вместе.

D. Рейтинговая система

Бинарный поиск дп жадные алгоритмы математика Перебор снм Структуры данных *1800

Вы разрабатываете рейтинговую систему для онлайн-игры. Каждый раз, когда игрок участвует в матче в этой игре, его рейтинг меняется в зависимости от результатов.

Изначально рейтинг игрока равен \(0\). Он будет участвовать в \(n\) матчах; после \(i\)-го матча рейтинг изменяется на \(a_i\) (рейтинг увеличивается на \(a_i\), если \(a_i\) положительное, или уменьшается на \(|a_i|\), если отрицательное. В последовательности \(a\) нет нулей).

В системе есть дополнительное правило: для заданного целого числа \(k\), если рейтинг игрока достиг значения \(k\), он никогда не опустится ниже него. Формально, если рейтинг игрока хотя бы \(k\), а изменение рейтинга должно сделать его меньше \(k\), то рейтинг снизится ровно до \(k\).

Ваша задача состоит в том, чтобы определить значение \(k\) таким образом, чтобы рейтинг игрока после всех \(n\) матчей был максимально возможным (среди всех возможных целочисленных значений \(k\)). Если существует несколько возможных ответов, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество матчей.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\); \(a_i \ne 0\)) — изменение рейтинга после \(i\)-го матча.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(m\) (\(-10^{18} \le m \le 10^{18}\)) — такое значение \(k\), при котором рейтинг игрока будет максимально возможным. Можно показать, что существует хотя бы одно такое значение, которое удовлетворяет ограничениям \(-10^{18} \le m \le 10^{18}\).

Примечание

В первом примере, если \(k=3\), то рейтинг изменяется следующим образом: \(0 \rightarrow 3 \rightarrow 3 \rightarrow 4 \rightarrow 6\).

Во втором примере, если \(k=0\), то рейтинг изменяется следующим образом: \(0 \rightarrow 0 \rightarrow 0 \rightarrow 0\).

В третьем примере, если \(k=25\), то рейтинг изменяется следующим образом: \(0 \rightarrow 4 \rightarrow 6\).

В четвертом примере, если \(k=6\), то рейтинг изменяется следующим образом: \(0 \rightarrow 5 \rightarrow 6 \rightarrow 6 \rightarrow 8 \rightarrow 7 \rightarrow 6 \rightarrow 8\).

E. Коробки и шары

дп математика реализация *2500

В ряд расставлены \(n\) коробок. Коробки пронумерованы от \(1\) до \(n\). В некоторых коробках лежит по одному шару, остальные пустые. Хотя бы в одной коробке есть шар и хотя бы одна коробка пустая.

За один ход вы обязаны выбрать коробку с шаром и соседнюю с ней пустую коробку и переложить шар из одной коробки в другую. Коробки \(i\) и \(i+1\) для всех \(i\) от \(1\) до \(n-1\) считаются соседними друг с другом. Коробки \(1\) и \(n\) не соседние.

Сколько различных расположений шаров может быть после совершения ровно \(k\) ходов? Два расположения называются различными, если есть хотя бы одна такая коробка, что в одном из них в ней есть шар, а в другом нет.

Так как ответ может быть достаточно большой, выведите его остаток от деления на \(10^9+7\).

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 1500\); \(1 \le k \le 1500\)) — количество коробок и количество ходов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(a_i \in \{0, 1\}\)) — \(0\) обозначает пустую коробку, \(1\) обозначает коробку с шаром. В последовательности есть хотя бы один \(0\) и хотя бы одна \(1\).

Выходные данные

Выведите одно целое число — количество возможных различных расположений шаров после совершения ровно \(k\) ходов, по модулю \(10^9+7\).

Примечание

В первом примере есть следующие возможные расположения:

  • 0 1 1 0 — получается после перемещения шара из коробки \(1\) в коробку \(2\);
  • 1 0 0 1 — получается после перемещения шара из коробки \(3\) в коробку \(4\);
  • 1 1 0 0 — получается после перемещения шара из коробки \(3\) в коробку \(2\).

Во втором примере есть следующие возможные расположения:

  • 1 0 1 0 — три способа получить ее: просто верните обратно шар после первой операции;
  • 0 1 0 1 — получается из любого из первых двух расположений после первого хода.

F. Пловцы в бассейне

бпф дп математика теория чисел *2800

В бассейне длины \(l\) собираются поплавать \(n\) человек. Все люди начинают плавать одновременно (в момент \(0\)), но можно считать, что они плавают по разным дорожками, а потому не создают помех друг другу.

Каждый пловец плывет по следующему маршруту: он стартует в точке \(0\) и плывет в точку \(l\) с постоянной скоростью (у \(i\)-го пловца скорость \(v_i\) единиц в секунду). Достигнув точки \(l\), он моментально (за незначительно малое время) разворачивается и плывет назад в точку \(0\) с той же постоянной скоростью. После возвращения в точку \(0\) он моментально разворачивается и плывет в точку \(l\), и так далее.

Назовем некоторый действительный момент времени моментом встречи, если хотя бы два пловца оказались в одной и той же точке бассейна в данный момент (точка может быть как \(0\) или \(l\), так и любая другая действительная точка в пределах бассейна).

Бассейн будет открыт для плавания на \(t\) секунд. Посчитайте количество моментов встречи, пока бассейн открыт. Так как ответ может быть очень большим, выведите его по модулю \(10^9 + 7\).

Входные данные

В первой строке заданы два целых числа \(l\) и \(t\) (\(1 \le l, t \le 10^9\)) — длина бассейна и количество секунд, на протяжении которых в нем будут плавать люди.

Во второй строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество пловцов.

В третьей строке заданы \(n\) целых чисел \(v_1, v_2, \dots, v_n\) (\(1 \le v_i \le 2 \cdot 10^5\)), где \(v_i\) — скорость \(i\)-го пловца. Все \(v_i\) — попарно различны.

Выходные данные

Выведите одно целое число — количество моментов встреч (включая момент \(t\), если нужно, и исключая момент \(0\)) по модулю \(10^9 + 7\).

Примечание

В первом примере три момента встречи:

  • момент \(6\), в который оба пловца в точке \(6\);
  • момент \(12\), в который оба пловца в точке \(6\);
  • и момент \(18\), в который оба пловца в точке \(0\).

A. Рудольф и перерезание верёвки

математика реализация *800

В стену вбито \(n\) гвоздей, \(i\)-й гвоздь вбит в \(a_i\) метрах над землёй, к нему привязан один конец верёвки длины \(b_i\) метров. Все гвозди вбиты на разных высотах друг над другом. Один леденец привязан сразу ко всем веревкам. Леденец привязан к концу веревки, который не привязан к гвоздю.

Чтобы взять леденец его нужно опустить на землю. Для этого Рудольф может перерезать некоторые верёвки, по одной за раз. Помогите Рудольфу найти минимальное количество верёвок, которое необходимо перерезать, чтобы получить леденец.

На рисунке изображен пример первого теста:

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — количество гвоздей.

В \(i\)-й из следующий \(n\) строк записаны два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 200\)) — высота \(i\)-го гвоздя и длина привязанной к нему веревки, все \(a_i\) различны.

Гарантируется, что данные непротиворечивы, то есть по ним можно построить описанную в условии конфигурацию.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество веревок, которые нужно разрезать, чтобы леденец упал на землю.

D. Рудольф и елочка

геометрия Конструктив математика *1200

Рудольф нарисиовал красивую елочку и решил распечатать рисунок. Но краска в картридже часто заканчивается в самый неподходящий момент. Поэтому Рудольф хочет заранее посчитать, сколько зеленой краски ему понадобится.

Елочка представляет собой вертикальный ствол, на котором на разной высоте располагаются одинаковые треугольные ветки. Толщина ствола пренебрежимо мала.

Каждая ветка представляет собой равнобедренный треугольник с основанием \(d\) и высотой \(h\), основание которого перпендикулярно стволу. Треугольники располагаются углом вверх, и ствол проходит ровно посередине. Основание \(i\)-го треугольника находится на высоте \(y_i\).

На рисунке изображен пример елочки с \(d = 4, h = 2\) и тремя ветками с основаниями в координатах \([1, 4, 5]\).

Помогите Рудольфу вычислить суммарную площадь веток елочки.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов.

Первая строка набора содержит три целых числа \(n, d, h\) (\(1 \le n, d, h \le 2 \cdot 10^5\)) — количество веток елочки, длина основания и высота веток, соответственно.

Вторая строка набора содержит \(n\) целых чисел \(y_i\) \((1 \le y_i \le 10^9, y_1 < y_2 < ... < y_n)\) — координаты оснований веток.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно вещественное число — суммарная площадь веток елочки. Ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

E1. Рудольф и снежинки (простая версия)

математика Перебор реализация *1300

Это простая версия задачи. Единственное отличие в том, что в этой версии \(n \le 10^6\).

Однажды зимним утром Рудольф задумчиво смотрел в окно и наблюдал за падающими снежинками. Он очень быстро заметил некоторую симметрию в конфигурации снежинок. И как истинный математик, Рудольф придумал математическую модель снежинки.

Он определил снежинку как неориентированный граф, строящийся по следующим правилам:

  • Изначально в графе одна единственная вершина.
  • Далее в граф добавляются ещё вершины. Исходная вершина соединяется ребрами с ещё \(k\) новыми вершинами (\(k > 1\)).
  • Каждая из вершин, соединённая только с одной другой вершиной, соединяется ребрами с ещё \(k\) новыми вершинами. Этот шаг нужно выполнить хотя бы один раз.

Минимальная снежинка для \(k = 4\) приведена на рисунке.

После некоторых математических изысканий Рудольф понял, что такие снежинки могут иметь далеко не любое число вершин. Помогите Рудольфу проверить, может ли существовать снежинка с \(n\) вершинами.

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится целое число \(n\) (\(1 \le n \le 10^6\)) — количество вершин, для которого нужно проверить существование снежинки.

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор — «YES», если существует такое \(k > 1\), для которого можно построить снежинку с заданным количеством вершин; «NO» в противном случае.

E2. Рудольф и снежинки (сложная версия)

Бинарный поиск математика Перебор реализация *1800

Это сложная версия задачи. Единственное отличие в том, что в этой версии \(n \le 10^{18}\).

Однажды зимним утром Рудольф задумчиво смотрел в окно и наблюдал за падающими снежинками. Он очень быстро заметил некоторую симметрию в конфигурации снежинок. И как истинный математик, Рудольф придумал математическую модель снежинки.

Он определил снежинку как неориентированный граф, строящийся по следующим правилам:

  • Изначально в графе одна единственная вершина.
  • Далее в граф добавляются ещё вершины. Исходная вершина соединяется ребрами с ещё \(k\) новыми вершинами (\(k > 1\)).
  • Каждая из вершин, соединённая только с одной другой вершиной, соединяется ребрами с ещё \(k\) новыми вершинами. Этот шаг нужно выполнить хотя бы один раз.

Минимальная снежинка для \(k = 4\) приведена на рисунке.

После некоторых математических изысканий Рудольф понял, что такие снежинки могут иметь далеко не любое число вершин. Помогите Рудольфу проверить, может ли существовать снежинка с \(n\) вершинами.

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится целое число \(n\) (\(1 \le n \le 10^{18}\)) — количество вершин, для которого нужно проверить существование снежинки.

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор — «YES», если существует такое \(k > 1\), для которого можно построить снежинку с заданным количеством вершин; «NO» в противном случае.

E. Платиновый треугольник?

интерактив Комбинаторика математика Перебор реализация Теория вероятностей *2900

Это интерактивная задача.

Made in Heaven — довольно любопытный стенд. Конечно, это (возможно) самый сильный Стенд из всех существующих, но он также является ярым любителем головоломок. Например, недавно он задал Qtaro следующую задачу:

Made in Heaven имеет \(n\) скрытых целых чисел \(a_1, a_2, \dots, a_n\) (\(3 \le n \le 5000\), \(1 \le a_i \le 4\)). Qtaro должен определить все \(a_i\), задав Made in Heaven несколько вопросов следующего вида:

  • В одном запросе Qtaro разрешается дать Made in Heaven три различных индекса \(i\), \(j\) и \(k\) (\(1 \leq i, j, k \leq n\)).
  • Если \(a_i, a_j, a_k\) образуют стороны невырожденного треугольника \(^\dagger\), Made in Heaven выдаст площадь этого треугольника.
  • В противном случае, Made in Heaven ответит \(0\).

Задав не более \(5500\) таких вопросов, Qtaro должен либо сказать Made in Heaven все значения \(a_i\), либо сообщить, что нет возможности однозначно определить их.

К сожалению, из-за перезагрузки вселенной, Qtaro не так умен, как Jotaro. Пожалуйста, помогите Qtaro решить задачу Made In Heaven.

——————————————————————

\(^\dagger\) Три целых положительных числа \(a, b, c\) образуют стороны невырожденного треугольника тогда и только тогда, когда выполняются все следующие три неравенства:

  • \(a+b > c\),
  • \(b+c > a\),
  • \(c+a > b\).
Протокол взаимодействия

Взаимодействие начинается с чтения \(n\) (\(3 \le n \le 5000\)) — количества скрытых целых чисел.

Чтобы задать вопрос, соответствующий тройке \((i, j, k)\) (\(1 \leq i < j < k \leq n\)), выведите «? \(i\) \(j\) \(k\)» без кавычек. После этого вы должны прочитать одно целое число \(s\).

  • Если \(s = 0\), то \(a_i\), \(a_j\) и \(a_k\) не являются сторонами невырожденного треугольника.
  • Иначе, \(s = 16 \Delta^2\), где \(\Delta\) — площадь треугольника. Площадь предоставляется в таком формате для удобства, чтобы вам нужно было вводить только целые числа.

Если числа \(a_i\) не могут быть однозначно определены, выведите «! \(-1\)» без кавычек. Иначе, если вы определили все значения \(a_i\), выведите «! \(a_1\) \(a_2\) \(\dots\) \(a_n\)» в одну строку.

Интерактор неадаптивный. Скрытый массив \(a_1, a_2, \dots, a_n\) фиксируется заранее и не изменяется в процессе взаимодействия.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома используйте следующий формат.

Первая строка содержат одно целое число \(n\) (\(3 \le n \le 5000\))  – количество скрытых целых чисел.

Вторая строка содержат \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 4\))  – скрытый массив.

Примечание

В первом примере процесс взаимодействия происходит следующим образом:

StdinStdoutОбъяснение
3Прочитаем \(n = 3\). Существует \(3\) скрытых целых чисел
? 1 2 3Попросим найти площадь, образованную \(a_1\), \(a_2\) и \(a_3\)
63Получено \(16\Delta^2 = 63\). Значит, площадь \(\Delta = \sqrt{\frac{63}{16}} \approx 1.984313\)
! -1Ответим, что не существует однозначного массива, удовлетворяющего запросам.

Из полученной площади можно сделать вывод, что числа, образующие треугольник, либо (\(4\), \(4\), \(1\)), либо (\(3\), \(2\), \(2\)) (в определенном порядке). Поскольку существует несколько массивов чисел, удовлетворяющих запросам, уникальный ответ не может быть найден.

Во втором примере процесс взаимодействия происходит следующим образом:

ШагStdinStdoutОбъяснение
16Прочитаем \(n = 6\). Значит, есть \(6\) скрытых чисел
2? 1 2 3Спросим площадь треугольника, образованного \(a_1\), \(a_2\) и \(a_3\)
30Они не образуют невырожденный треугольник
4? 2 3 4Спросим площадь треугольника, образованного \(a_2\), \(a_3\) и \(a_4\)
50Они не образуют невырожденный треугольник
6? 4 5 6Спросим площадь треугольника, образованного \(a_4\), \(a_5\) и \(a_6\)
70Они не образуют невырожденный треугольник
8? 1 5 6Спросим площадь треугольника, образованного \(a_1\), \(a_5\) и \(a_6\)
963Получим \(16\Delta^2 = 63\). Тогда площадь \(\Delta = \sqrt{\frac{63}{16}} \approx 1.984313\)
10? 3 5 6Спросим площадь треугольника, образованного \(a_3\), \(a_5\) и \(a_6\)
1115Получим \(16\Delta^2 = 15\). Тогда площадь \(\Delta = \sqrt{\frac{15}{16}} \approx 0.968245\)
12? 1 2 4Спросим площадь треугольника, образованного \(a_3\), \(a_5\) и \(a_6\)
13135Получим \(16\Delta^2 = 135\). Тогда площадь \(\Delta = \sqrt{\frac{135}{16}} \approx 2.904738\)
14! 3 2 1 4 2 2Однозначный ответ найден, и он равен \(a = [3, 2, 1, 4, 2, 2]\).

Из шагов \(10\) и \(11\) мы можем сделать вывод, что мультимножество \(\left\{a_3, a_5, a_6\right\}\) должно равняться \(\left\{2, 2, 1\right\}\).

Из шагов \(8\) и \(9\), мультимножество \(\left\{a_1, a_5, a_6\right\}\) должно быть либо \(\left\{4, 4, 1\right\}\), либо \(\left\{3, 2, 2\right\}\).

Так как \(\left\{a_3, a_5, a_6\right\}\) и \(\left\{a_1, a_5, a_6\right\}\) пересекаются по \(a_5\) и \(a_6\), делаем вывод, что \(a_5 = a_6 = 2\), а также \(a_1 = 3\), \(a_3 = 1\).

Из шагов \(6\) и \(7\) известно, что \(a_5 = a_6 = 2\), а \(a_4\), \(a_5\) и \(a_6\) не могут образовать невырожденный треугольник, следовательно, \(a_4 = 4\).

При всей известной информации, только \(a_2 = 2\) удовлетворяет запросам, сделанным на шагах \(2\), \(3\), \(4\), \(5\), \(12\) и \(13\).

В третьем примере один массив, удовлетворяющий запросам, — \([1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\).

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\).
.

A. Вика и подружки

игры математика *900

Вика с подружками пришла на шоппинг в торговый центр, который может быть представлен в виде клетчатого прямоугольника из залов со сторонами длины \(n\) и \(m\). Каждый зал имеет координаты \((a, b)\), где \(1 \le a \le n, 1 \le b \le m\). При этом мы называем зал с координатами \((c, d)\) соседним для него, если \(|a - c| + |b - d| = 1\).

Устав от пустых разговоров о моде, Вика решила незаметно сбежать. Но так как она ещё не успела заглянуть в один из магазинчиков, покидать территорию торгового центра девушка не хочет. Спустя некоторое время подружки заметили исчезновение Вики и начали её искать.

Сейчас девушка находится в зале с координатами \((x, y)\), а \(k\) её подруг в залах с координатами \((x_1, y_1)\), \((x_2, y_2)\), ... \(, (x_k, y_k)\) соответственно. Координаты могут совпадать.

Каждую минуту сначала Вика перемещается в один из соседних по стороне залов по своему выбору, а затем каждая подруга (видя перемещение Вики) также выбирает один из соседних залов, чтобы перейти в него. Обратите внимание, что все девушки обязательно переходят в соседние залы.

Если в конце минуты (то есть после того, как все девушки перейдут в соседние залы) хотя бы одна подруга находится в том же зале, что и Вика, то она ловит её и зовёт всех остальных.

Скажите, может ли Вика бесконечно убегать от надоедливых подруг или через какое-то время ей всё же придётся продолжить слушать пустые разговоры о моде.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке входных содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся три целых числа \(n\), \(m\), \(k\) (\(1 \le n, m, k \le 100\)) — размеры торгового центра и количество подруг Вики.

Во второй строке каждого набора входных данных содержатся два целых числа \(x\) и \(y\) (\(1 \le x \le n\), \(1 \le y \le m\)) — координаты зала, в котором находится Вика.

В каждой из следующих \(k\) строк каждого набора входных данных содержатся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n\), \(1 \le y_i \le m\)) — координаты зала, в котором находится \(i\)-я подруга.

Выходные данные

Для каждого набора входных данных выведите «YES», если Вика может бесконечно убегать от подружек, в противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных подруга никогда не догонит Вику, поскольку Вика может каждый раз переходить в зал, противоположный по диагонали с тем, где находится подруга.

Во втором наборе входных данных куда бы ни пошла Вика, каждая из подруг может её поймать после первого же перемещения.

В третьем наборе входных данных Вика и подруга всегда будут находиться в разных залах.

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\).

В пятом наборе входных данных Вика может вовсе не перекрашивать мостик и пройти по нему, не переступая через дощечки.

C. Вика и ценники

математика теория чисел *1800

Вика пришла в свой любимый магазин косметики «Золотая груша». Она заметила, что цены на \(n\) товаров изменились с её последнего визита.

Она решила проанализировать, как сильно изменились цены, и для каждого из \(n\) товаров посчитала разницу между старой и новой ценой.

Вике понравилось считать разницу между ценами и она решила продолжить этот процесс.

Пусть старые цены представимы в виде массива неотрицательных чисел \(a\), а новые цены в виде массива неотрицательных чисел \(b\). Оба массива имеют одинаковую длину \(n\).

За одну операцию Вика строит новый массив \(c\) по принципу: \(c_i = |a_i - b_i|\). Затем мы переименовываем массив \(c\) в массив \(b\), а массив \(b\) — в массив \(a\), после чего Вика повторяет с ними операцию.

Так, например, если \(a = [1, 2, 3, 4, 5, 6, 7]\); \(b = [7, 6, 5, 4, 3, 2, 1]\), то \(c = [6, 4, 2, 0, 2, 4, 6]\). Далее \(a = [7, 6, 5, 4, 3, 2, 1]\); \(b = [6, 4, 2, 0, 2, 4, 6]\).

Вика решила называть пару массивов \(a\), \(b\) скучной, если после некоторого числа таких операций все элементы массива \(a\) станут нулями.

Выведите «YES», если исходная пара массивов является скучной, «NO» — в противном случае.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(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\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le 10^9\)) — новые цены на товары.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если пара массивов цен является скучной, «NO» — иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных массив \(a\) изначально нулевой.

Во втором наборе входных данных после первой операции \(a = [1, 2, 3], b = [0, 0, 0]\). После второй операции \(a = [0, 0, 0], b = [1, 2, 3]\).

В третьем наборе входных данных можно показать, что массив \(a\) никогда не станет нулевым.

D. Вика и бонусы

Бинарный поиск математика Перебор Тернарный поиск *2200

В любимом Викином магазине косметики «Золотая груша» новая система бонусов!

Работает эта система следующим образом: пусть у покупателя есть \(b\) бонусов. Перед оплатой покупки он может выбрать одну из двух опций:

  • Получить скидку в размере текущего количества бонусов, при этом бонусы не списываются.
  • Накопить дополнительно \(x\) бонусов, где \(x\) — последняя цифра числа \(b\). В результате чего на счету покупателя станет \(b+x\) бонусов.

Например, если у покупателя было \(24\) бонуса, он может как получить скидку в размере \(24\), так и накопить ещё \(4\) бонуса, после чего на его счету станет \(28\) бонусов.

На данный момент Вика уже успела накопить \(s\) бонусов.

Девушка знает, что за оставшееся время действия бонусной системы она совершит ещё \(k\) покупок в сети магазинов «Золотая груша».

Ознакомившись с правилами работы системы бонусов, Вике стало интересно, какую максимальную суммарную скидку она сможет получить.

Помогите девушке ответить на этот вопрос.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных данных содержится пара целых чисел \(s\) и \(k\) (\(0 \le s \le 10^9\), \(1 \le k \le 10^9\)) — текущее количество бонусов на счету у Вики и сколько ещё покупок девушка совершит.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную суммарную скидку, которую можно получить по бонусной системе.

Примечание

В первом наборе входных данных Вика может накопить бонусы после первой и второй покупки, после чего получить скидку \(4\).

Во втором наборе входных данных Вика может три раза получить скидку \(11\), суммарная скидка составит \(33\).

В третьем наборе входных данных независимо от действий Вики у неё всегда будет суммарная скидка \(0\).

E. Вика и блинчики

математика Перебор реализация теория чисел *2600

В родном городе Вики, Владивостоке, очень красивое море.

Часто можно видеть ребят, запускающих «блинчики» или «лягушки». Так называется процесс кидания камня в море под небольшим углом, отчего он далеко летит и несколько раз отскакивает от водной глади.

Вика много раз запускала «блинчики» и знает, что если кинуть камень от берега перпендикулярно береговой линии с силой \(f\), то он сперва коснётся воды на расстоянии \(f\) от берега, затем оттолкнётся и вновь коснётся воды на расстоянии \(f - 1\) от предыдущей точки касания. Так камешек будет лететь по прямой, всё сокращая расстояния между точками, в которых он касается воды, пока не упадёт в море.

Формально, точки в которых камень соприкоснётся с водной гладью будут иметь следующие координаты: \(f\), \(f + (f - 1)\), \(f + (f - 1) + (f - 2)\), ... , \(f + (f - 1) + (f - 2) + \ldots + 1\) (если считать, что \(0\) — координата береговой линии).

Как-то раз прогуливаясь вечером по набережной Владивостока, Вика увидела, как группа ребят запускала «блинчики» в море с одной и той же точки с разными силами.

Ей стало интересно, какое максимальное количество ребят могут запустить камешек со своей силой \(f_i\), так чтобы все \(f_i\) были различными целыми положительными числами, и при этом все \(n\) камешков в процессе полёта коснулись воды в точке с координатой \(x\) (если считать, что \(0\) — координата береговой линии).

Немного подумав, Вика ответила на свой вопрос. После этого она начала анализировать, а как будет изменятся ответ на её вопрос, если координату \(x\) домножать на некоторые положительные целые числа \(x_1\), \(x_2\), ... , \(x_q\), выбранные ей для анализа.

Вике сложно справится с таким анализом самостоятельно, поэтому она обратилась к вам за помощью.

Формально, Вику интересует ответ на её вопрос для координат \(X_1 = x \cdot x_1\), \(X_2 = X_1 \cdot x_2\), ... , \(X_q = X_{q-1} \cdot x_q\). Так как ответ для таких координат может быть очень большой, найдите его по модулю \(M\). Гарантируется, что число \(M\) является простым.

Входные данные

В первой строке входных данных содержится три целых числа \(x\) (\(1 \le x \le 10^9\)), \(q\) (\(1 \le q \le 10^5\)) и \(M\) (\(100 \le M \le 2 \cdot 10^9\)) — изначальная координата, для которой Вика ответила на вопрос самостоятельно, количество чисел \(x_i\), на которые Вика будет домножать изначальную координату и простой модуль \(M\).

Во второй строке входных данных содержится \(q\) чисел \(x_1, x_2, x_3, \ldots, x_q\) (\(1 \le x_i \le 10^6\)) — описанные в условии числа.

Выходные данные

Выведите \(q\) целых чисел, где \(i\)-е число соответствует ответу на вопрос Вики для координаты \(X_i\). Все ответы выводите по модулю \(M\).

Примечание

В первом примере, чтобы камешек коснулся водной глади в точке с координатой \(2\), его нужно кинуть с силой \(2\). Чтобы камешек коснулся воды в точке с координатой \(2 \cdot 3 = 6\), его нужно кинуть с силой \(3\) или с силой \(6\).

Во втором примере можно запустить «блинчик» с силой \(5\) или \(14\), чтобы он коснулся в воды в точке с координатой \(7 \cdot 2 = 14\). Для координаты \(14 \cdot 13 = 182\) есть \(4\) варианта сил — это \(20\), \(29\), \(47\), \(182\).

F. Вика и вики

Бинарный поиск битмаски дп Комбинаторика математика разделяй и властвуй *2400

На днях Вика изучала свой любимый интернет-ресурс — Википедию.

На просторах Википедии она вычитала про интересную математическую операцию побитового исключающего ИЛИ, обозначаемую \(\oplus\).

Вика стала изучать свойства этой загадочной операции. Для этого она взяла массив \(a\), состоящий из \(n\) целых неотрицательных чисел и применила одновременно ко всем его элементам следующую операцию: \(a_i = a_i \oplus a_{(i+1) \bmod n}\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\). Элементы массива нумеруются, начиная с \(0\).

Так как для полного изучения недостаточно проделать вышеописанные действия единожды, Вика повторяет их до тех пор, пока массив \(a\) не превратится в состоящий только из нулей.

Определите, через сколько описанных выше действий все элементы массива \(a\) станут нулевыми. Если такой момент никогда не наступит, выведите \(-1\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \le n \le 2^{20}\)) — длина массива \(a\).

Гарантируется, что \(n\) представимо в виде \(2^k\) для некоторого целого числа \(k\) (\(0 \le k \le 20\)).

Вторая строка содержит \(n\) целых чисел \(a_0, a_1, a_2, \dots, a_{n-1}\) (\(0 \le a_i \le 10^9\)) — элементы массива \(a\).

Выходные данные

Выведите единственное число — минимальное число действий, необходимое, чтобы сделать все элементы массива \(a\) нулевыми, или \(-1\), если массив \(a\) никогда не станет нулевым.

Примечание

В первом примере после одной операции массив \(a\) станет равен \([3, 3, 3, 3]\). Через ещё одну операцию он будет равен \([0, 0, 0, 0]\).

Во втором примере массив \(a\) изначально состоит только из нулей.

В третьем примере после одной операции массив \(a\) станет равен \([0]\).

A. Утренний сэндвич

математика реализация *800

Монокарп начинает каждое утро со вкусного сэндвича. Его ингредиенты — это всегда хлеб, сыр и ветчина.

Сэндвич всегда готовится по следующему принципу:

  • кусок хлеба
  • ломтик сыра или ветчины
  • кусок хлеба
  • \(\dots\)
  • ломтик сыра или ветчины
  • кусок хлеба

То есть в сэндвиче всегда хлеб сверху и снизу, и при этом хлеб и начинка чередуются (начинка — это либо сыр, либо ветчина). Каждый кусок хлеба и каждый ломтик сыра или ветчины называется слоем.

Сегодня Монокарп проснулся и обнаружил, что у него есть \(b\) кусков хлеба, \(c\) ломтиков сыра и \(h\) ломтиков ветчины. Какое наибольшее количество слоев может быть в его утреннем сэндвиче?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор состоит из трех целых чисел \(b, c\) и \(h\) (\(2 \le b \le 100\); \(1 \le c, h \le 100\)) — количество кусков хлеба, ломтиков сыра и ломтиков ветчины, соответственно.

Выходные данные

На каждый набор входных данных выведите одно целое число — наибольшее количество слоев, которое может быть в его утреннем сэндвиче.

Примечание

В первом наборе входных данных Монокарп может собрать сэндвич из трех слоев: либо кусок хлеба, ломтик сыра и другой кусок хлеба, либо кусок хлеба, ломтик ветчины и другой кусок хлеба.

Во втором наборе у Монокарпа есть много хлеба, но не очень много начинки. Он может собрать сэндвич из четырех кусков хлеба, одного ломтика сыра и двух ломтиков ветчины.

В третьем наборе все наоборот — у Монокарпа есть много начинки, но не очень много хлеба. Он может собрать сэндвич из трех кусков хлеба и двух ломтиков сыра, например.

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]\).

A. Травяное растение

математика *1300

Гномы посадили очень интересное растение, представляющее собой треугольник, направленный «вверх». Это растение обладает забавным свойством. Через один год растение-треугольник, направленное «вверх», разделится на четыре растения-треугольника: три из них будут направлены «вверх», а одно — «вниз». Через еще один год каждое растение-треугольник, разделится на четыре растения-треугольника: три из них направлены в ту же сторону, что и родительское растение, а одно направлено в другую сторону. Далее каждый год процесс повторяется. На рисунке ниже показан этот процесс.

Помогите гномам узнать, сколько получится растений-треугольников, смотрящих «вверх», через n лет.

Входные данные

В первой строке задано единственное целое число n (0 ≤ n ≤ 1018) — количество полных лет, которое росло растение.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Выходные данные

Выведите единственное число — остаток от деления количества смотрящих «вверх» растений через n лет на 1000000007 (109 + 7).

Примечание

Первый тестовый пример, соответствует второму треугольнику на рисунке в условии. Второй тестовый пример — третьему.

B. Грибные учёные

математика Тернарный поиск *1800

Как известно, во всей вселенной принята трёхмерная декартова система координат, в которой каждой точке ставится в соответствие три вещественные координаты (x, y, z). В этой системе координат, расстояние от центра вселенной до точки считается по формуле: . Грибные ученые, подчиненные Великого Грибного короля, считают, что вселенная не совсем права и что расстояние от центра вселенной до точки равно xa·yb·zc.

Чтобы «завалить» метрику грибных ученых, обычные учёные задали им задачку: найти такие x, y, z (0 ≤ x, y, zx + y + z ≤ S), что расстояние от центра вселенной до точки (x, y, z) в метрике грибных ученых максимально. Грибные ученые не сильны в математике, поэтому они поручили это задание Вам.

Обратите внимание, в этой задаче считается, что 00 = 1.

Входные данные

В первой строке записано единственное целое число S (1 ≤ S ≤ 103) — максимальная сумма координат искомой точки.

Во второй строке записаны через пробел три целых числа a, b, c (0 ≤ a, b, c ≤ 103) — числа, описывающие метрику грибных ученых.

Выходные данные

Выведите три вещественных числа — координаты точки, в которой достигается максимум в метрике грибных учёных. Если ответов несколько выведите любой, удовлетворяющий ограничениям.

Натуральный логарифм расстояния от центра вселенной до выведенной точки в метрике грибных ученых не должен отличаться от натурального логарифма максимального расстояния более, чем на 10 - 6. Считается, что ln(0) =  - ∞.

D. Пришествие

математика теория чисел *2600

К гномикам спустился их Великий Грибной король, но не каждый мог увидеть его. Лишь только некоторое количество избранных гномиков могли увидеть короля.

Известно, что Великого Грибного короля могут увидеть лишь LCM(k2l + 1, k2l + 1 + 1, ..., k2r + 1) гномиков. Числа k, l, r каким-то непонятным простым гномикам способом выбирает Великий Грибной король.

Гномики историки решили задокументировать все пришествия Великого Грибного короля. Для каждого пришествия, гномики историки знают три числа ki, li, ri, которые выбрал Великий Грибной король в это пришествие, и простое число pi. Помогите им посчитать остаток от деления на pi количества гномиков, которые могут увидеть короля, для каждого из пришествий.

Входные данные

В первой строке входных данных записано единственное целое число t (1 ≤ t ≤ 105) — количество пришествий короля.

В каждой из следующих t строк входных данных записано четыре целых числа, разделённых пробелами, ki, li, ri и pi (1 ≤ ki ≤ 1060 ≤ li ≤ ri ≤ 1018; 2 ≤ pi ≤ 109) — числа, которые выбрал Великий Грибной король, и простой модуль, соответственно.

Гарантируется, что во всех пришествиях число pi простое.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Выходные данные

Для каждого пришествия выведите ответ в отдельной строке — остаток от деления количества гномов, которые смогут увидеть короля, на число pi. Ответы для пришествий выводите в том порядке, в котором заданы описания пришествий во входных данных.

Примечание

Считается, что LCM(a1, a2, ..., an) обозначает наименьшее общее кратное чисел a1, a2, ..., an.

Считается, что x0 = 1, для любых x.

E. Картон для картин

Бинарный поиск геометрия математика реализация *1100

У Мирчи есть \(n\) картин. \(i\)-я картина является квадратом со стороной \(s_i\) сантиметров.

Он прикрепил каждую картину к квадратному куску картона так, чтобы у каждой картинки был картон шириной \(w\) сантиметров со всех сторон. Всего он использовал \(c\) квадратных сантиметров картона. Зная размеры картин и значение \(c\), сможете ли вы найти значение \(w\)?

Картинка первого тестового примера. Здесь \(c = 50 = 5^2 + 4^2 + 3^2\), поэтому ответ \(w=1\).

Обратите внимание, что кусок картона находится за каждой картинкой, а не только по краям.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два положительных целых числа \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) и \(c\) (\(1 \leq c \leq 10^{18}\)) — количество картин и количество использованных квадратных сантиметров картона.

Вторая строка каждого набора содержит \(n\) целых чисел, разделенных пробелами, \(s_i\) (\(1 \leq s_i \leq 10^4\)) — размеры картин.

Сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Дополнительное ограничение на ввод: Для каждого набора входных данных существует такое целое число \(w\).

Пожалуйста, обратите внимание, что некоторые наборы входных данных могут не поместиться в 32-разрядный целочисленный тип, поэтому вам следует использовать по крайней мере 64-разрядный целочисленный тип в вашем языке программирования (например, long long для C++).

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(w\) (\(w \geq 1\)), при котором понадобится ровно \(c\) квадратных сантиметров картона.

Примечание

Первый пример объяснен в условии.

Для второго примера выбрано значение \(w\) равное \(2\), таким образом, площадь, покрытая картоном, составляет \(c = (2 \cdot 2 + 6)^2 = 10^2 = 100\) квадратных сантиметров.

Для третьего примера выбрано значение \(w\) равное \(4\), что дает площадь покрытия \(c = (2 \cdot 4 + 2)^2 \times 5 = 10^2 \times 5 = 100 \times 5 = 500\) квадратных сантиметров.

F. We Were Both Children

математика Перебор реализация теория чисел *1300

Михай и Славик смотрели на группу из \(n\) лягушек, пронумерованных от \(1\) до \(n\), которые изначально находились в точке \(0\). Лягушка \(i\) может прыгнуть на расстояние \(a_i\).

Каждую секунду лягушка \(i\) прыгает на \(a_i\) единиц вперед. Прежде чем лягушки начнут прыгать, Славик и Михай могут поставить ровно одну ловушку в координате, чтобы поймать всех лягушек, которые когда-либо пройдут через эту координату.

Однако, дети не могут уйти далеко от своего дома, поэтому они могут поставить ловушку только в одной из первых \(n\) точках (то есть в точке с координатой от \(1\) до \(n\)), и дети не могут поставить ловушку в точке \(0\), так как они боятся лягушек.

Можете ли вы помочь Славику и Михаю определить, сколько лягушек они могут поймать, используя ловушку?

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(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\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество лягушек, которых Славик и Михай могут поймать с помощью ловушки.

Примечание

В первом примере лягушки будут прыгать следующим образом:

  • Лягушка 1: \(0 \to 1 \to 2 \to 3 \to \mathbf{\color{red}{4}} \to \cdots\)
  • Лягушка 2: \(0 \to 2 \to \mathbf{\color{red}{4}} \to 6 \to 8 \to \cdots\)
  • Лягушка 3: \(0 \to 3 \to 6 \to 9 \to 12 \to \cdots\)
  • Лягушка 4: \(0 \to \mathbf{\color{red}{4}} \to 8 \to 12 \to 16 \to \cdots\)
  • Лягушка 5: \(0 \to 5 \to 10 \to 15 \to 20 \to \cdots\)
Таким образом, если Славик и Михай поставят ловушку в координате \(4\), они смогут поймать трех лягушек: лягушек 1, 2 и 4. Можно доказать, что они не смогут поймать больше лягушек.

Во втором примере Славик и Михай могут поставить ловушку в координате \(2\) и мгновенно поймать всех трех лягушек.

G. The Morning Star

геометрия Комбинаторика математика реализация сортировки Структуры данных *1500

Компас указывает прямо на утреннюю звезду. Он может указывать только в одном из восьми направлений: четыре основных направления (N, S, E, W) или их комбинации (NW, NE, SW, SE). В противном случае, он сломается.

Направления, в которых может указывать компас.

На плоскости находится \(n\) различных точек с целочисленными координатами. Сколько существует способов разместить компас в одной точке и утреннюю звезду в другой, чтобы компас не сломался?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Затем следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество точек.

Затем следуют \(n\) строк, каждая строка содержит два целых числа \(x_i\), \(y_i\) (\(-10^9 \leq x_i, y_i \leq 10^9\)) — координаты каждой точки.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар точек, которые не сломают компас.

Примечание

В первом примере, любая пара точек не сломает компас:

  • Компас находится в \((0,0)\), утренняя звезда находится в \((-1,-1)\): компас будет указывать \(\text{SW}\).
  • Компас находится в \((0,0)\), утренняя звезда находится в \((1,1)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((-1,-1)\), утренняя звезда находится в \((0,0)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((-1,-1)\), утренняя звезда находится в \((1,1)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((1,1)\), утренняя звезда находится в \((0,0)\): компас будет указывать \(\text{SW}\).
  • Компас находится в \((1,1)\), утренняя звезда находится в \((-1,-1)\): компас будет указывать \(\text{SW}\).

Во втором примере, только две пары точек не сломают компас:

  • Компас находится в \((6,9)\), утренняя звезда находится в \((10,13)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((10,13)\), утренняя звезда находится в \((6,9)\): компас будет указывать \(\text{SW}\).

A. Разговоры на эскалаторе

Конструктив математика Перебор *800

Однажды Владу в метро стало интересно, с кем из пассажиров он может поговорить на эскалаторе. Всего есть \(n\) пассажиров. На эскалаторе всего \(m\) ступенек, все ступеньки пронумерованы от \(1\) до \(m\) и \(i\)-я ступенька имеет высоту \(i \cdot k\).

Влад имеет рост \(H\) сантиметров. Два человека с ростом \(a\) и \(b\) могут поговорить на эскалаторе, если они стоят на разных ступеньках и разница в росте между ними равна разнице высот между ступеньками.

Например, если два человека имеют рост \(170\) и \(180\) сантиметров, и при этом \(m = 10, k = 5\) то они могут встать на ступеньки с номерами \(7\) и \(5\), тогда разница высот между ступеньками равна разнице в росте двух людей: \(k \cdot 2 = 5 \cdot 2 = 10 = 180 - 170\). Есть и другие возможные способы.

Дан массив \(h\) размера \(n\), \(h_i\) означает рост \(i\)-го человека. Владу интересно, со сколькими людьми он может поговорить на эскалаторе по отдельности.

Например, если \(n = 5, m = 3, k = 3, H = 11\), и \(h = [5, 4, 14, 18, 2]\). Влад сможет поговорить с человеком с ростом \(5\) (Влад встанет на ступеньку \(1\), а второй встанет на ступеньку с номером \(3\)) и с человеком с ростом \(14\) (например Влад может встать на ступеньку с номером \(3\), а второй встанет на ступеньку с номером \(2\)). С человеком с ростом \(2\) Влад не сможет поговорить, так как даже если они встанут на крайние ступени эскалатора, разница между ними будет \(6\), а их разница в росте составляет \(9\). С остальными людьми Влад не сможет поговорить на эскалаторе, таким образом, ответ для данного примера: \(2\).

Входные данные

В первой строке содержится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В первой строке каждого набора записаны целые числа: \(n, m, k, H\) (\(1 \le n,m \le 50\), \(1 \le k,H \le 10^6\)). Где \(n\) — количество людей, \(m\) — количество ступенек, \(k\) — разница высот между соседними ступеньками, \(H\) — рост Влада.

Во второй строке записано \(n\) целых чисел: \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le 10^6\)). \(h_i\) означает рост \(i\)-го человека.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество человек, с которыми Влад сможет поговорить на эскалаторе по отдельности.

Примечание

Первый пример разобран в условии.

Во втором примере Влад сможет поговорить с человеком с ростом \(11\).

В третьем примере Влад сможет поговорить с людьми с ростом: \(44, 74, 98, 62\). Таким образом, ответ \(4\).

В четвертом примере Влад сможет поговорить с человеком с ростом \(73\).

D. Префиксные суммы перестановки

математика реализация *1300

Вам загадали некоторый массив из \(n\) элементов, после чего посчитали его массив префиксных сумм и передали его вам, случайно потеряв при передаче один элемент. Ваша задача — выяснить, может ли данный массив соответствовать какой-то перестановке.

Перестановкой из \(n\) элементов называется массив из \(n\) чисел от \(1\) до \(n\), такой что каждое число встречается в нём ровно один раз.

Массив префиксных сумм массива \(a\) — это такой массив \(b\), что \(b_i = \sum_{j=1}^i a_j, 1 \le i \le n\).

Например, исходная перестановка была \([1, 5, 2, 4, 3]\). Её массив префиксных сумм — \([1, 6, 8, 12, 15]\). Потеряв один элемент, можно получить, например, массивы \([6, 8, 12, 15]\) или \([1, 6, 8, 15]\).

Также можно показать, что массив \([1, 2, 100]\) не соответствует никакой перестановке.

Входные данные

Первая строка содержит положительное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка описания каждого набора входных данных содержит положительное число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — размер загаданного массива.

Вторая строка описания каждого набора входных данных содержит \(n - 1\) положительное число \(a_i\) (\(1 \le a_i \le 10^{18}\)), \(a_{i-1} < a_i\) — элементы массива префиксных сумм.

Гарантируется, что сумма значений \(n\) по всем наборам не превосходит \(2 \cdot 10^5\)

Выходные данные

Для каждого набора входных данных, выведите «YES», если существует такая перестановка, и «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В четвёртом примере подходит, например, перестановка \([1, 2, 3, 4]\). В пятом примере подходит, например, перестановка \([2, 1]\). В седьмом примере подходит, например, перестановка \([1, 2, 4, 3]\).

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\).

A. Набор Ntarsis

Бинарный поиск математика теория чисел *1800

Ntarsis получил набор \(S\), изначально содержащий целые числа \(1, 2, 3, \ldots, 10^{1000}\) в отсортированном порядке. Каждый день он будет одновременно удалять \(a_1\)-е, \(a_2\)-е, \(\ldots\), \(a_n\)-е наименьшие числа в \(S\).

Какое наименьшее число останется в \(S\) после \(k\) дней?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n,k \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\);
  • Сумма \(k\) по всем наборам не превышает \(2 \cdot 10^5\);
  • \(a_1 < a_2 < \cdots < a_n\) для всех наборов входных данных.
Выходные данные

Для каждого набора входных данных выведите целое число, которое является наименьшим элементом в \(S\) после \(k\) дней.

Примечание

В первом наборе входных данных каждый день удаляется \(1\)-й, \(2\)-й, \(4\)-й, \(5\)-й и \(6\)-й наименьшие элементы из \(S\). Таким образом, после первого дня \(S\) станет равным \(\require{cancel}\) \(\{\cancel 1, \cancel 2, 3, \cancel 4, \cancel 5, \cancel 6, 7, 8, 9, \ldots\} = \{3, 7, 8, 9, \ldots\}\). Наименьшим элементом является \(3\).

Во втором наборе каждый день удаляется \(1\)-й, \(3\)-й, \(5\)-й, \(6\)-й и \(7\)-й наименьшие элементы из \(S\). \(S\) будет изменяться следующим образом:

День\(S\) до\(S\) после
1\(\{\cancel 1, 2, \cancel 3, 4, \cancel 5, \cancel 6, \cancel 7, 8, 9, 10, \ldots \}\)\(\to\)\(\{2, 4, 8, 9, 10, \ldots\}\)
2\(\{\cancel 2, 4, \cancel 8, 9, \cancel{10}, \cancel{11}, \cancel{12}, 13, 14, 15, \ldots\}\)\(\to\)\(\{4, 9, 13, 14, 15, \ldots\}\)
3\(\{\cancel 4, 9, \cancel{13}, 14, \cancel{15}, \cancel{16}, \cancel{17}, 18, 19, 20, \ldots\}\)\(\to\)\(\{9, 14, 18, 19, 20, \ldots\}\)

Наименьшим элементом, оставшимся после \(k = 3\) дней, является \(9\).

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]\).

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\) операций.

B. Фибоначчарсис

Бинарный поиск математика Перебор *1200

На день рождения Ntarsis получил два целых числа \(n\) и \(k\). Он задался вопросом, сколько фибоначчи-подобных последовательностей длины \(k\) можно сформировать таким образом, чтобы \(n\) было \(k\)-м элементом последовательности.

Последовательность неубывающих неотрицательных целых чисел считается фибоначчи-подобной, если \(f_i = f_{i-1} + f_{i-2}\) для всех \(i > 2\), где \(f_i\) обозначает \(i\)-й элемент последовательности. Обратите внимание, что \(f_1\) и \(f_2\) могут быть произвольными.

Например, последовательности \([4,5,9,14]\) и \([0,1,1]\) считаются допустимыми, в то время как \([0,0,0,1,1]\), \([1, 2, 1, 3]\) и \([-1,-1,-2]\) — нет: первые две не везде удовлетворяют \(f_i = f_{i-1} + f_{i-2}\), а последняя не выполняет условие, что элементы неотрицательны.

Произведите впечатление на Ntarsis, оказав ему помощь в решении этой задачи.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\), \(3 \leq k \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество допустимых фибоначчи-подобных последовательностей длины \(k\), в которых \(k\)-м элементом является \(n\). Иными словами, выведите количество последовательностей \(f\) из \(k\) элементов таких, что \(f\) — фибоначчи-подобная, и \(f_k = n\). Можно показать, что это число конечно.

Примечание

Для \(n = 22\), \(k = 4\) существует \(4\) допустимые фибоначчи-подобные последовательности:

  • \([6,8,14,22]\)
  • \([4,9,13,22]\)
  • \([2,10,12,22]\)
  • \([0,11,11,22]\)

Для \(n = 3\), \(k = 9\) можно показать, что не существует допустимой фибоначчи-подобной последовательности, удовлетворяющей данным условиям.

Для \(n = 55\), \(k = 11\), единственная подходящая фибоначчи-подобная последовательность это \([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\).

A1. Dual (простая версия)

Конструктив математика *1400

Единственное различие между двумя версиями этой задачи — ограничение на максимальное количество операций. Делать взломы можно только в том случае, если решены обе версии задачи.

Вам дан массив \(a_1, a_2,\dots, a_n\) целых чисел (положительных, отрицательных или \(0\)). Вы можете выполнить над массивом несколько операций (возможно, \(0\)).

Операция производится так: выбираются \(i, j\) (\(1 \leq i, j \leq n\), они могут быть равны) и задается \(a_i := a_i + a_j\) (т.е. к \(a_i\) прибавляется \(a_j\)).

Сделайте массив неубывающим (т.е. \(a_i \leq a_{i+1}\) для \(1 \leq i \leq n-1\)) не более чем за \(50\) операций. Минимизировать количество операций не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 20\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-20 \le a_i \le 20\)) — массив перед выполнением операций.

Выходные данные

Для каждого набора входных данных выведите свои операции в следующем формате:

Первая строка должна содержать целое число \(k\) (\(0 \le k \le 50\)) — количество операций.

Следующие \(k\) строк представляют собой \(k\) операций по порядку. Каждая из этих \(k\) строк должна содержать два целых числа \(i\) и \(j\) (\(1 \leq i, j \leq n\)) — соответствующая операция заключается в прибавлении \(a_j\) к \(a_i\).

После всех операций массив \(a_1, a_2,\dots, a_n\) должен быть неубывающим.

Примечание

В первом наборе входных данных, добавив к \(a_2\) \(a_1 = 2\), получим массив \([2, 3]\), который является неубывающим.

Во втором наборе входных данных массив изменяется следующим образом:

  • \([1, 2, -10, 3]\)
  • \([1, 2, -10, 6]\)
  • \([1, 2, -10, 12]\)
  • \([1, 2, 2, 12]\)

В третьем наборе входных данных итоговый массив имеет вид \([2, 3, 3, 3, 3]\).

A2. Dual (сложная версия)

Конструктив математика *1900

Единственное различие между двумя версиями этой задачи — ограничение на максимальное количество операций. Делать взломы можно только в том случае, если решены обе версии задачи.

Вам дан массив \(a_1, a_2,\dots, a_n\) целых чисел (положительных, отрицательных или \(0\)). Вы можете выполнить над массивом несколько операций (возможно, \(0\)).

Операция производится так: выбираются \(i, j\) (\(1 \leq i, j \leq n\), они могут быть равны) и задается \(a_i := a_i + a_j\) (т.е. к \(a_i\) прибавляется \(a_j\)).

Сделайте массив неубывающим (т.е. \(a_i \leq a_{i+1}\) для \(1 \leq i \leq n-1\)) не более чем за \(31\) операций. Минимизировать количество операций не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 20\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-20 \le a_i \le 20\)) — массив перед выполнением операций.

Выходные данные

Для каждого набора входных данных выведите свои операции в следующем формате:

Первая строка должна содержать целое число \(k\) (\(0 \le k \le 31\)) — количество операций.

Следующие \(k\) строк представляют собой \(k\) операций по порядку. Каждая из этих \(k\) строк должна содержать два целых числа \(i\) и \(j\) (\(1 \leq i, j \leq n\)) — соответствующая операция заключается в прибавлении \(a_j\) к \(a_i\).

После всех операций массив \(a_1, a_2,\dots, a_n\) должен быть неубывающим.

Примечание

В первом наборе входных данных, добавив к \(a_2\) \(a_1 = 2\), получим массив \([2, 3]\), который является неубывающим.

Во втором наборе входных данных массив изменяется следующим образом:

  • \([1, 2, -10, 3]\)
  • \([1, 2, -10, 6]\)
  • \([1, 2, -10, 12]\)
  • \([1, 2, 2, 12]\)

В третьем наборе входных данных итоговый массив имеет вид \([2, 3, 3, 3, 3]\).

C. Ожидаемое разрушение

дп Комбинаторика математика Теория вероятностей *2500

У вас есть набор \(S\) из \(n\) различных целых чисел в диапазоне от \(1\) до \(m\).

Каждую секунду вы выполняете следующие действия:

  1. Выбираете элемент \(x\) из \(S\) равномерно случайным образом.
  2. Удаляете \(x\) из \(S\).
  3. Если \(x+1 \leq m\) и \(x+1\) не находится в \(S\), то добавляете \(x+1\) в \(S\).

Каково ожидаемое количество секунд до того момента, когда \(S\) не станет пустым?

Выведите ответ по модулю \(1\,000\,000\,007\).

Формально, пусть \(P = 1\,000\,000\,007\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{a}{b}\), где \(a\) и \(b\) — целые числа, и \(b \not \equiv 0 \pmod{P}\). Выведите целое число, равное \(a \cdot b^{-1} \bmod P\). Другими словами, выведите такое целое число \(z\), что \(0 \le z < P\) и \(z \cdot b \equiv a \pmod{P}\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq m \leq 500\)) — количество элементов в множестве \(S\) и верхнюю границу на значение элементов в \(S\).

Вторая строка содержит \(n\) целых чисел \(S_1,\,S_2,\,\dots,\,S_n\) (\(1 \leq S_1 < S_2 < \ldots < S_n \leq m\)) — элементы множества \(S\).

Выходные данные

Выведите одно целое число — ожидаемое количество секунд до того момента, когда \(S\) станет пустым, по модулю \(1\,000\,000\,007\).

Примечание

Для теста 1 приведен список всех возможных сценариев и их вероятностей:

  1. \([1, 3]\) (вероятность 50%) \(\to\) \([1]\) \(\to\) \([2]\) \(\to\) \([3]\) \(\to\) \([]\)
  2. \([1, 3]\) (вероятность 50%) \(\to\) \([2, 3]\) (вероятность 50%) \(\to\) \([2]\) \(\to\) \([3]\) \(\to\) \([]\)
  3. \([1, 3]\) (вероятность 50%) \(\to\) \([2, 3]\) (вероятность 50%) \(\to\) \([3]\) \(\to\) \([]\)

Сложив их, получим \(\frac{1}{2}\cdot 4 + \frac{1}{4} \cdot 4 + \frac{1}{4} \cdot 3 = \frac{15}{4}\). Мы видим, что \(750000009 \cdot 4 \equiv 15 \pmod{1\,000\,000\,007}\).

E. Комплекты игр

дп жадные алгоритмы Конструктив математика Перебор *3000

Риши разрабатывает игры в 2D-метаверсе и хочет предлагать своим клиентам комплекты игр. Каждая игра имеет соответствующее значение удовольствия. Комплект игр состоит из подмножества игр, суммарное удовольствие которых составляет \(60\).

Ваша задача — выбрать \(k\) игр, где \(1 \leq k \leq 60\), и соответствующие им значения удовольствия \(a_1, a_2, \dots, a_k\) таким образом, чтобы сформировать ровно \(m\) различных комплектов игр.

Входные данные

На вход подается одно целое число \(m\) (\(1 \le m \le 10^{10}\)) — желаемое количество комплектов игр.

Выходные данные

Первая строка должна содержать целое число \(k\) (\(1 \le k \le 60\)) — количество игр.

Вторая строка должна содержать \(k\) целых чисел, \(a_1, a_2, \dots, a_k\) (\(1 \le a_1, a_2, \dots, a_k \le 60\)) — значения удовольствия данных \(k\) игр.

Примечание

В первом примере любое подмножество размера \(3\) является комплектом игр. Таких подмножеств \(4\).

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]\).

B. Хорошие массивы

математика реализация *900

Дан массив целых положительных чисел \(a\) длины \(n\).

Назовем массив целых положительных чисел \(b\) длины \(n\) хорошим, если:

  1. \(a_i \neq b_i\) для всех \(i\) от \(1\) до \(n\),
  2. \(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 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10 ^ 9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует хороший массив, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных одним возможным хорошим массивом является массив \([3, 3, 3]\). Примерами не хороших массивов являются:

  • \([8, 0, 1]\) — массив состоит не только из целых положительных чисел,
  • \([5, 2, 4]\) — cумма элементов массива отличается от суммы элементов исходного массива,
  • \([5, 2, 2]\) — третий элемент равен третьему элементу исходного массива.

Во втором наборе входных данных \([1, 1]\) — единственный массив целых положительных чисел длины \(2\), сумма элементов которого равна \(2\). Поскольку \([1, 1]\) не является хорошим массивом, ответ — «NO».

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\).

D. Сильные вершины

Деревья математика сортировки *1300

Даны два массива \(a\) и \(b\), оба длины \(n\). Элементы обоих массивов пронумерованы от \(1\) до \(n\). Вы строите ориентированный граф, где существует ориентированное ребро из \(u\) в \(v\) (\(u\neq v\)), если \(a_u-a_v \ge b_u-b_v\).

Вершина \(V\) называется сильной, если существует путь от \(V\) ко всем остальным вершинам.

Путем в ориентированном графе называют такую цепочку из нескольких вершин, соединенных рёбрами, что двигаясь от вершины \(u\) по направлениям рёбер можно достичь вершины \(v\).

Ваша задача — найти все сильные вершины.

Например, если \(a=[3,1,2,4]\) и \(b=[4,3,2,1]\), граф будет выглядеть так:

Граф имеет только одну сильную вершину с номером \(4\)
Входные данные

Первая строка содержит целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 2\cdot 10^5\)) — длину \(a\) и \(b\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2 \dots a_n\) (\(-10^9 \le a_i \le 10^9\)) — массив \(a\).

Третья строка содержит \(n\) целых чисел \(b_1,b_2 \dots b_n\) (\(-10^9 \le b_i \le 10^9\)) — массив \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки: в первой строке выведите количество сильных вершин, а во второй строке выведите все сильные вершины в возрастающем порядке.

Примечание

Первый пример разобран в условии.

Для второго примера граф выглядит так:

Граф имеет две сильные вершины с номерами в \(3\) и \(5\). Обратите внимание, что между вершинами \(3\) и \(5\) проведено двунаправленное ребро.

В третьем примере вершины соединяет единственное направленное ребро от вершины \(2\) к вершине \(1\), поэтому единственная сильная вершина это \(2\).

В четвертом примере все вершины попарно соединены двунаправленными рёбрами, поэтому от каждой вершины есть путь к любой другой.

E. Мощность точек

математика сортировки *1500

Вам даны \(n\) точек с целочисленными координатами \(x_1,\dots x_n\), которые лежат на числовой прямой.

Для некоторого целого числа \(s\) построим отрезки [\(s,x_1\)], [\(s,x_2\)], \(\dots\), [\(s,x_n\)]. Обратите внимание, что если \(x_i<s\), то отрезок будет выглядеть как [\(x_i,s\)]. Отрезок [\(a, b\)] покрывает все целочисленные точки \(a, a+1, a+2, \dots, b\).

Назовём мощностью точки \(p\) количество отрезков, которые пересекают точку с координатой \(p\), обозначим её как \(f_p\).

Ваша задача: для каждого \(s \in \{x_1,\dots,x_n\}\) вычислить \(\sum\limits_{p=1}^{10^9}f_p\), то есть сумму \(f_p\) по всем целочисленным точкам от \(1\) до \(10^9\).

Например, если начальные координаты \([1,2,5,7,1]\) и выбрать \(s=5\), то отрезки будут такими: \([1,5]\),\([2,5]\),\([5,5]\),\([5,7]\),\([1,5]\). А мощности точек будут: \(f_1=2, f_2=3, f_3=3, f_4=3, f_5=5, f_6=1, f_7=1, f_8=0, \dots, f_{10^9}=0\). Их сумма \(2+3+3+3+5+1+1=18\).

Входные данные

Первая строка содержит целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — количество точек.

Вторая строка содержит \(n\) целых чисел \(x_1,x_2 \dots x_n\) (\(1 \le x_i \le 10^9\)) — координаты точек.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора выведите \(n\) чисел, \(i\)-е из которых равно сумме мощностей всех точек для \(s=x_i\).

Примечание

В первом наборе входных данных мы сначала выбираем \(s=x_1=1\), тогда образуются такие отрезки: \([1,1]\),\([1,4]\),\([1,3]\).

Силы точек будут такими: \(f_1=3, f_2=2, f_3=2, f_4=1, f_5=0 \dots\) Сумма мощностей точек: \(3+2+2+1+0+\dots+0=8\).

Затем \(s=x_2=4\). Тогда будут такие отрезки: \([1,4]\),\([4,4]\),\([3,4]\), а мощности точек \(f_1=1, f_2=1, f_3=2, f_4=3\).

В конце берем \(s=x_3=3\) и отрезки выглядят так: \([1,3]\),\([3,4]\),\([3,3]\), а мощности точек: \(f_1=1, f_2=1, f_3=3, f_4=1\).

F. Сумма и произведение

Бинарный поиск математика Структуры данных *1600

У вас есть массив \(a\) длины \(n\).

Ваша задача — ответить на \(q\) запросов: для заданных \(x,y\) найти количество пар \(i\) и \(j\) (\(1 \le i < j \le n\)), таких что и \(a_i + a_j = x\) и \(a_i \cdot a_j = y\).

То есть для массива \([1,3,2]\) и запросов \(x=3,y=2\) ответ \(1\):

  • \(i=1\) и \(j=2\) не удовлетворяет условию, потому что \(1 + 3 = 4\) а не \(3,\) также \(1 \cdot 3=3\) а не \(2\);
  • \(i=1\) и \(j=3\) удовлетворяет условию;
  • \(i=2\) и \(j=3\) не удовлетворяет условию, потому что \(3 + 2 = 5\) а не \(3,\) также \(3 \cdot 2=6\) а не \(2\);
Входные данные

Первая строка содержит одно целое число \(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 2\cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат по два числа \(x\) и \(y\) (\(1 \le |x|\le 2\cdot 10^9,1\le |y|\le 10^{18}\)) — запрос.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\). Также это гарантируется для суммы значений \(q\).

Выходные данные

Для каждого набора выведите \(q\) чисел в одной строке — ответы на запросы.

Примечание

Для первого набора входных данных разберем каждую пару чисел из массива отдельно:

  • пара \((a_1,a_2)\): \(a_1 + a_2 = 4\) , \(a_1 \cdot a_2 = 3\)
  • пара \((a_1,a_3)\): \(a_1 + a_3 = 3\) , \(a_1 \cdot a_3 = 2\)
  • пара \((a_2,a_3)\): \(a_2 + a_3 = 5\) , \(a_2 \cdot a_3 = 6\)
Из этого видно, что для первого запроса нам подходит пара \((a_1,a_3)\), для второго \((a_2,a_3)\), а для третьего и четвертого подходящих пар нет.

Во втором наборе входных данных все комбинации пар подходят.

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\).

A. Вместе мы сила

Конструктив математика теория чисел *800

Дан массив \(a\) длины \(n\), содержащий целые числа. Также есть два изначально пустых массива \(b\) и \(c\). Вам нужно каждый элемент массива \(a\) добавить ровно в один из массивов \(b\) или \(c\), чтобы выполнялись следующие условия:

  • Каждый из массивов \(b\) и \(c\) непустой. Более формально, пусть \(l_b\) — длина массива \(b\), \(l_c\) — длина массива \(c\). Тогда \(l_b, l_c \ge 1\).
  • Для любых двух индексов \(i\) и \(j\) (\(1 \le i \le l_b, 1 \le j \le l_c\)) число \(c_j\) не является делителем \(b_i\).

Выведите массивы \(b\) и \(c\), которые могут получиться, или выведите \(-1\), если их не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(-1\), если решения не существует.

Иначе, в первой строке выведите два целых числа \(l_b\) и \(l_c\) — длины массивов \(b\) и \(c\) соответственно.

Во второй строке выведите \(l_b\) целых чисел \(b_1, b_2, \ldots, b_{l_b}\) — элементы массива \(b\).

В третьей строке выведите \(l_c\) целых чисел \(c_1, c_2, \ldots, c_{l_c}\) — элементы массива \(c\).

Если существует несколько возможных решений, выведите любое из них. Элементы массивов можно выводить в любом порядке.

Примечание

В первом наборе входных данных решения не существует.

Во втором наборе входных данных мы можем получить \(b = [1, 3, 5]\) и \(c = [2, 4]\). Тогда элементы \(2\) и \(4\) не делят элементы \(1, 3\) и \(5\).

В пятом наборе входных данных мы можем получить \(b = [4, 8, 4]\) и \(c = [12, 12]\).

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\).

E. Максимальная моногонность

дп математика Перебор *2500

Вам дан массив \(a\) длины \(n\) и массив \(b\) длины \(n\). Назовем стоимостью отрезка \([l, r]\), \(1 \le l \le r \le n\), значение \(|b_l - a_r| + |b_r - a_l|\).

Напомним, что два отрезка \([l_1, r_1]\), \(1 \le l_1 \le r_1 \le n\), и \([l_2, r_2]\), \(1 \le l_2 \le r_2 \le n\), являются непересекающимися, если выполнено одно из двух условий: \(r_1 < l_2\) или \(r_2 < l_1\).

Также длиной отрезка \([l, r]\), \(1 \le l \le r \le n\), мы называем значение \(r - l + 1\).

Найдите максимально возможную суммарную стоимость попарно непересекающихся отрезков \([l_j, r_j]\), \(1 \le l_j \le r_j \le n\), суммарная длина которых равна \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) \((1 \le t \le 1000)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 3000\)) — длину массива \(a\) и суммарную длину отрезков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-10^9 \le b_i \le 10^9\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3000\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимально возможную суммарную стоимость таких отрезков.

Примечание

В первом наборе входных данных стоимость любого отрезка равна \(0\), поэтому суммарная стоимость равна \(0\).

Во втором наборе входных данных можно взять отрезок \([1, 1]\) со стоимостью \(8\) и отрезок \([3, 3]\) со стоимостью \(2\), чтобы получить сумму \(10\). Можно показать, что это оптимальное решение.

В третьем наборе входных данных нас интересуют только отрезки длины \(1\), а стоимость любого такого отрезка равна \(0\).

В четвертом наборе входных данных можно показать, что оптимальная сумма равна \(16\). Например, можно взять отрезки \([3, 3]\) и \([4, 4]\).

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\) бурля хватит.

F. Вычисляем ПСП

геометрия математика реализация сортировки Структуры данных *2900

Заданы \(2n\) наборов \((a, b, c)\), где \(a\) и \(b\) — некоторые положительные целые числа, а \(c\) — скобка '(' или ')'. В ровно \(n\) наборах \(c = \)'(', в остальных \(n\) — \(c =\) ')'.

Требуется выбрать два положительных числа \(x\) и \(y\) (\(x > 0\) и \(y > 0\); не обязательно целые) и отсортировать наборы в порядке возрастания \(a \cdot x + b \cdot y\). Если у нескольких наборов одно и то же значение, то их можно расположить в произвольном порядке друг между другом.

Можно ли выбрать такие значения \(x\) и \(y\), что, взяв скобки \(c\) из наборов в полученном порядке, мы получим правильную скобочную последовательность?

Правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов «1» и «+».

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1500\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 1500\)).

В \(i\)-й из следующих \(2n\) строк записаны два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^6\)) и символ \(c_i\) (\(c_i = \)'(' или \(c_i = \)')'). В ровно \(n\) наборах \(c_i = \)'(', в остальных \(n\) — \(c_i =\) ')'.

Сумма \(n\) по всем наборам входных данных не превосходит \(1500\).

Выходные данные

На каждый набор входных данных выведите «YES», если возможно выбрать такие значения \(x\) и \(y\), что, взяв скобки \(c\) из наборов в полученном порядке, мы получим правильную скобочную последовательность. Иначе выведите «NO».

Примечание

В первом наборе входных данных можно выбрать \(x = 10, y = 0.1\). Значения для наборов тогда будут \(10 \cdot 1 + 0.1 \cdot 4 = 10.4\) и \(10 \cdot 2 + 0.1 \cdot 3 = 20.3\). Тогда сначала будет первый набор, за ним второй, из чего получается скобочная последовательность «()», которая является правильной.

Во втором наборе невозможно выбрать такие положительные \(x\) и \(y\), что открывающей скобке будет присвоено значение, меньше или равное значению закрывающей скобки.

В четвертом наборе можно выбрать \(x = 0.6, y = 0.55\). Скобочная последовательность будет «(()(()))».

A. Простое удаление

Конструктив математика *800

Простое число — это положительное целое число, у которого ровно два различных положительных делителя: \(1\) и само число. Например, \(2\), \(3\), \(13\) и \(101\) — простые числа; \(1\), \(4\), \(6\) и \(42\) не являются простыми числами.

Вам задана последовательность цифр от \(1\) до \(9\), в которой каждая цифра от \(1\) до \(9\) встречается ровно один раз.

Вы можете применять следующую операцию несколько (возможно, ноль) раз: выбрать любую цифру из последовательности и удалить ее. Однако вы не можете применять эту операцию, если в последовательности осталось только две цифры.

Ваша цель — получить последовательность цифр, являющуюся простым числом. Обратите внимание, что менять порядок цифр нельзя.

Выведите итоговую последовательность или сообщите, что получить простое число описанными в условии операциями невозможно.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей \(9\) цифр (без символов-разделителей между ними). Каждая цифра от \(1\) до \(9\) входит в эту строку ровно один раз.

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке следующим образом:

  • если невозможно получить простое число описанными в условии операциями, выведите \(-1\);
  • иначе выведите любую последовательность цифр, которая соответствует простому числу и которую можно получить, проведя описанную в условии операцию несколько (возможно, ноль) раз. Если есть несколько различных последовательностей, выведите любую из них.

E. Непересекающиеся подперестановки

дп Комбинаторика математика реализация *2300

Заданы два целых числа \(n\) и \(k\).

Для массива длины \(n\) давайте определим его стоимость как максимальное количество непрерывных подмассивов этого массива, которые могут быть выбраны следующим образом:

  • каждый элемент массива принадлежит не более чем одному подмассиву;
  • длина каждого подмассива ровно \(k\);
  • каждый подмассив содержит каждое целое число от \(1\) до \(k\) ровно один раз.

Например, если \(n = 10\), \(k = 3\) и массив равен \([1, 2, 1, 3, 2, 3, 2, 3, 1, 3]\), его стоимость равна \(2\), потому что, например, мы можем выбрать два подмассива: от \(2\)-го элемента до \(4\)-го и от \(7\)-го элемента до \(9\)-го, и мы можем показать, что выбрать больше \(2\) подмассивов нельзя.

Посчитайте сумму стоимостей по всем массивам длины \(n\), состоящих из целых чисел от \(1\) до \(k\), и выведите ее по модулю \(998244353\).

Входные данные

Единственная строка входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 4000\)).

Выходные данные

Выведите одно целое число— сумму стоимостей по всем массивам длины \(n\), состоящих из целых чисел от \(1\) до \(k\), по модулю \(998244353\).

D. Шарики мороженого

Бинарный поиск Комбинаторика Конструктив математика *1300

Тёма решил увлечься приготовлением мороженого. Он достаточно преуспел в этом деле и научился хорошо делать мороженое в рожке ровно из двух шариков.

До увлечения мороженым Тёма увлекался математикой. Поэтому он заинтересовался, какое минимальное количество шариков ему нужно иметь, чтобы из них можно было приготовить ровно \(n\) различных видов мороженого.

Шарики мороженого бывают разных вкусов: \(1, 2, 3, \dots\). Тёма может приготовить мороженое из двух шариков любого вкуса (возможно, одинакового).

Два мороженых считаются различными, если множества вкусов их шариков отличаются. Например \(\{1, 2\} = \{2, 1\}\), но \(\{1, 1\} \neq \{1, 2\}\).

Например, имея следующие шарики мороженого: \(\{1, 1, 2\}\), можно приготовить всего два вида мороженого: \(\{1, 1\}\) и \(\{1, 2\}\).

Обратите внимание, что Теме не нужно делать все стаканчики мороженого одновременно. Это означает, что он делает стаканчики мороженого независимо друг от друга. Также, чтобы сделать следующий стаканчик \(\{x, x\}\) для некоторого \(x\), Теме нужно иметь как минимум \(2\) шарика типа \(x\).

Помогите Тёме ответить на этот вопрос. Можно показать, что ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке входных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \le n \le 10^{18}\)) — количество видов мороженого, которое хочет получить Тёма.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество шариков, которое необходимо купить Тёме.

Примечание

В первом примере достаточно иметь следующие типы шариков: \(\{1, 1\}\). Обратите внимание, что множество \(\{1\}\) недостаточно, так как нам нужно как минимум \(2\) шарика типа \(1\), чтобы сделать такой стаканчик \(\{1, 1\}\).

Во втором примере невозможно сделать это с \(2\) шариками, но это можно сделать с помощью следующих шариков: \(\{1, 2, 3\}\).

В третьем примере оптимальным ответом является \(\{1, 2, 3, 4\}\), поэтому мы можем получить следующие стаканчики мороженого: \(\{1, 2\}\), \(\{1, 3\}\), \(\{1, 4\}\), \(\{2, 3\}\), \(\{2, 4\}\), \(\{3, 4\}\).

G. Великий Уравнитель

Бинарный поиск математика сортировки Структуры данных *2000

Тёма приобрел на радиорынке старый прибор с маленьким экраном и потёртой надписью «Великий Уравнитель» на боковой стенке.

Продавец сказал, что прибору на вход необходимо подать массив целых чисел \(a\), после чего «Великий Уравнитель» будет работать следующим образом:

  1. Отсортировать текущий массив по неубыванию и выкинуть повторяющиеся элементы, оставляя только одно вхождение каждого элемента.
  2. Если текущая длина массива равна \(1\), прибор заканчивает работу и выводит на экран единственное число массива — результат работы прибора.
  3. Прибавить к текущему массиву арифметическую прогрессию {\(n,\ n - 1,\ n - 2,\ \ldots,\ 1\)}, где \(n\) — длина текущего массива. Иными словами, к \(i\)-у элементу массива, при нумерации с нуля, прибавится \(n - i\).
  4. Перейти к первому шагу.

Чтобы протестировать работу прибора, Тёма придумал некоторый массив целых чисел \(a\), после чего захотел проделать \(q\) операций с массивом \(a\) следующего вида:

  1. Присвоить элементу \(a_i\) (\(1 \le i \le n\)) значение \(x\) (\(1 \le x \le 10^9\)).
  2. Подать на вход прибору массив \(a\) и узнать результат работы прибора, при этом во время работы прибора, массив \(a\) не изменяется.

Помогите Тёме узнать результат работы прибора после каждого запроса изменения.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится единственное число \(n\) (\(1 \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\).

В третьей строке набора содержится единственное число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

В каждой из следующих \(q\) строк набора содержится два целых числа \(i\) (\(1 \le i \le n\)) и \(x\) (\(1 \le x \le 10^9\)) — описания запросов.

Гарантируется, что сумма значений \(n\) и сумма значений \(q\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — результат работы прибора после каждого запроса изменения.

Примечание

Давайте рассмотрим первый пример входных данных.

Сначала массив чисел, подаваемый на вход прибору будет равен \([6, 4, 8]\). Он будет меняться следующим образом: \(\)[6, 4, 8] \rightarrow [4, 6, 8] \rightarrow [7, 8, 9] \rightarrow [10, 10, 10] \rightarrow [10]\(\)

Затем массив чисел, подаваемый на вход прибору будет равен \([6, 10, 8]\). Он будет меняться следующим образом: \(\)[6, 10, 8] \rightarrow [6, 8, 10] \rightarrow [9, 10, 11] \rightarrow [12, 12, 12] \rightarrow [12]\(\)

Последний массив чисел, подаваемый на вход прибору будет равен \([6, 10, 1]\). Он будет меняться следующим образом: \(\)[6, 10, 1] \rightarrow [1, 6, 10] \rightarrow [4, 8, 11] \rightarrow [7, 10, 12] \rightarrow [10, 12, 13] \rightarrow [13, 14, 14] \rightarrow [13, 14] \rightarrow [15, 15] \rightarrow [15]\(\)

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]\).

C. MEX много раз

математика реализация *1100

Дан массив \(a_1,a_2,\ldots, a_n\), состоящий из попарно различных целых чисел от \(0\) до \(n\). Рассмотрим следующую операцию:

  • последовательно для каждого \(i\) от \(1\) до \(n\) в этом порядке элемент \(a_i\) заменяется на \(\operatorname{MEX}(a_1, a_2, \ldots, a_n)\).

Здесь \(\operatorname{MEX}\) набора чисел \(c_1, c_2, \ldots, c_m\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\). Например, \(\operatorname{MEX}(0, 2, 2, 1, 4) = 3\), и \(\operatorname{MEX}(1, 2) = 0\).

Выведите массив, который получится после применения к нему такой операции \(k\) раз.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1\le n\le 10^5\), \(1\le k\le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) попарно различных целых чисел \(a_1,a_2,\ldots, a_n\) (\(0\le a_i\le n\)) — элементы массива до выполнения операций.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите все \(n\) элементов итогового массива после применения к нему операции \(k\) раз.

Примечание

В первом наборе входных данных процесс происходит следующим образом:

  1. На первой операции массив изменяется с \([1]\) на \([0]\), поскольку \(\operatorname{MEX}(1) = 0\).
  2. На второй операции массив изменяется с \([0]\) на \([1]\), поскольку \(\operatorname{MEX}(0) = 1\).

Значит, массив станет равен \([1]\) после двух операций.

Во втором наборе входных данных за одну операцию массив изменяется так: \([{\mkern3mu\underline{\mkern-3mu {\bf 0}\mkern-3mu}\mkern3mu}, 1, 3] \rightarrow [2, {\mkern3mu\underline{\mkern-3mu {\bf 1}\mkern-3mu}\mkern3mu}, 3] \rightarrow [2, 0, {\mkern3mu\underline{\mkern-3mu {\bf 3}\mkern-3mu}\mkern3mu}] \rightarrow [2, 0, 1]\).

В третьем наборе входных данных за одну операцию массив изменяется так: \([{\mkern3mu\underline{\mkern-3mu {\bf 0}\mkern-3mu}\mkern3mu}, 2] \rightarrow [1, {\mkern3mu\underline{\mkern-3mu {\bf 2}\mkern-3mu}\mkern3mu}] \rightarrow [1, 0]\). За вторую операцию массив изменяется так: \([{\mkern3mu\underline{\mkern-3mu {\bf 1}\mkern-3mu}\mkern3mu}, 0] \rightarrow [2, {\mkern3mu\underline{\mkern-3mu {\bf 0}\mkern-3mu}\mkern3mu}] \rightarrow [2, 1]\).

E. Спидран

графы дп жадные алгоритмы математика Перебор поиск в глубину и подобное сортировки *2100

Вы играете в компьютерную игру, в которой есть \(n\) заданий, которые вам нужно выполнить. Однако \(j\)-е задание можно выполнить только в начале \(h_j\)-го часа игрового дня. Каждый игровой день длится ровно \(k\) часов. Часы каждого игрового дня пронумерованы числами \(0, 1, \ldots, k - 1\). После конца первого дня начинается следующий, и так далее.

Между заданиями есть зависимости: для некоторых пар \((a_i, b_i)\) задание с номером \(b_i\) может быть выполнено только после выполнения задания с номером \(a_i\). Гарантируется, что циклических зависимостей нет, поскольку иначе игру пройти было бы невозможно и никто не стал бы в неё играть.

Вы очень хорошо умеете играть в эту игру, поэтому вы можете выполнить любое число заданий за пренебрежимо малое время (т. е. вы можете выполнить любое число заданий в начале одного и того же часа, даже если между ними есть зависимости). Вам нужно выполнить все задания как можно быстрее. Вы можете выполнять их в любом доступном порядке. Время прохождения игры равно разнице между временем завершения последнего задания и временем завершения первого задания в этом порядке.

Найдите наименьшее время, за которое можно пройти игру.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n\le 200\,000\), \(0\le m\le 200\,000\), \(1\le k\le 10^9\)) — количество заданий, количество зависимостей между ними, а также длительность игрового дня в часах.

Следующая строка содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(0\le h_i < k\)).

Следующие \(m\) строк описывают зависимости. В \(i\)-й из них содержатся два целых числа \(a_i\) и \(b_i\) (\(1\le a_i < b_i\le n\)): это означает, что задание с номером \(b_i\) может быть выполнено только после выполнения задания \(a_i\). Гарантируется, что все зависимости попарно различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее время, необходимое для прохождения игры.

Примечание

В первом наборе входных данных задания \(1\) и \(4\) нужно выполнить в начале \(12\)-го часа дня, но они не могут быть выполнены в течение одного часа, поскольку между ними нужно выполнить задания \(2\) и \(3\). Однако всё это можно сделать за \(24\) часа. Для этого можно начать в \(12\) часов первого игрового дня, выполнив первое задание. В \(16\) часов можно выполнить задание \(2\). В \(18\) часов можно выполнить задание \(3\). Наконец, в \(12\) часов следующего дня можно выполнить задание \(4\). С момента выполнения первого задания до момента выполнения последнего прошло \(24\) часа.

В третьем наборе входных данных можно выполнить первое задание, а затем сразу же выполнить второе. Можно начать в \(5\) часов первого дня, выполнив первое задание. Сразу после этого становится доступным второе задание, его можно выполнять немедленно. Суммарное прошедшее время равно \(0\).

В четвёртом наборе входных данных можно начать с третьего задания. Можно начать в \(555\) часов первого дня и закончить в \(35\) часов второго дня. Суммарное прошедшее время равно \(1035-555=480\).

F. Разделяй, считай XOR и властвуй

битмаски дп математика *2600

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\).

За одну операцию вы разбиваете массив на две части: непустой префикс и непустой суффикс. Значение каждой части определяется как побитовое исключающее ИЛИ (XOR) всех элементов в ней. Затем отбросьте часть с меньшим значением. Если обе части имеют одинаковое значение, вы можете сами выбрать, какую часть отбросить. После этого массив становится равен оставшейся части.

Операции выполняются, пока длина массива не станет равна \(1\). Для каждого \(i\) (\(1 \le i \le n\)) определите, можно ли достичь состояния, в котором остаётся только \(i\)-й элемент (в исходной нумерации).

Формально, у вас есть два числа \(l\) и \(r\), изначально \(l = 1\) и \(r = n\). Текущее состояние массива есть \([a_l, a_{l+1}, \ldots, a_r]\).

Пока \(l < r\), вы применяете следующую операцию:

  • Выбрать произвольное \(k\) из множества \(\{l, l + 1, \ldots, r - 1\}\). Пусть \(x = a_l \oplus a_{l + 1} \oplus \ldots \oplus a_k\) и \(y = a_{k + 1} \oplus a_{k + 2} \oplus \ldots \oplus a_{r}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.
  • Если \(x < y\), то присвойте \(l = k + 1\).
  • Если \(x > y\), то присвойте \(r = k\).
  • Если \(x = y\), то или присвойте \(l = k + 1\), или \(r = k\).

Для каждого \(i\) (\(1 \le i \le n\)) определите, можно ли добиться равенств \(l = r = i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10\,000\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{60}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10\,000\).

Выходные данные

Для каждого набора входных данных выведите строку длины \(n\), где \(i\)-й символ равен 1, если можно добиться \(l = r = i\), и 0 в противном случае.

Примечание

В первом тесте возможно добиться равенств \(l = r = i\) для всех \(i\) от \(1\) до \(n\):

  • при \(i=1\): \([1; 6] \rightarrow [1; 4] \rightarrow [1; 1]\);
  • при \(i=2\): \([1; 6] \rightarrow [1; 3] \rightarrow [2; 3] \rightarrow [2; 2]\);
  • при \(i=3\): \([1; 6] \rightarrow [1; 3] \rightarrow [3; 3]\);
  • при \(i=4\): \([1; 6] \rightarrow [1; 4] \rightarrow [4; 4]\);
  • при \(i=5\): \([1; 6] \rightarrow [5; 6] \rightarrow [5; 5]\);
  • при \(i=6\): \([1; 6] \rightarrow [6; 6]\).

Отдельно рассмотрим случай \(i = 2\). Изначально \(l = 1\), \(r = 6\).

  1. Мы можем выбрать \(k = 3\) и присвоить \(r = k = 3\), поскольку \((3 \oplus 2 \oplus 1) = 0 \ge 0 = (3 \oplus 7 \oplus 4)\);
  2. Затем мы можем выбрать \(k = 1\) и присвоить \(l = k + 1 = 2\), так как \(3 \le 3 = (2 \oplus 1)\);
  3. Наконец, мы можем выбрать \(k = 2\) и присвоить \(r = k = 2\), поскольку \(2 \ge 1\).

G. Swaps

графы дп Комбинаторика математика *2800

Дан массив целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)). Вы можете выполнить следующую операцию несколько раз (возможно, ни одного):

  • выбрать произвольное \(i\) и выполнить swap\((a_i, a_{a_i})\).

Сколько различных массивов можно получить? Выведите ответ по модулю \((10^9 + 7)\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1\le a_i\le n\)).

Выходные данные

Выведите одно число — число достижимых массивов по модулю \((10^9 + 7)\).

Примечание

В первом примере изначально массив равен \([1, 1, 2]\). Если выполнить операцию с \(i = 3\), то местами поменяются значения \(a_3\) и \(a_2\), массив станет равен \([1, 2, 1]\). Можно показать, что других достижимых массивов нет.

Во втором примере четыре достижимых массива суть \([2, 1, 4, 3]\), \([1, 2, 4, 3]\), \([1, 2, 3, 4]\), \([2, 1, 3, 4]\). Можно показать, что других достижимых массивов нет.

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\), который удовлетворял был всем вышеописанным условиям.

C. Цепочка делителей

битмаски Конструктив математика теория чисел *1300

Дано целое число \(x\). Вам нужно уменьшить \(x\) до \(1\).

Для этого вы можете выполнять следующую операцию несколько (возможно, ноль) раз:

  • выбрать \(d\), являющееся делителем \(x\), затем заменить \(x\) на \(x-d\), т.е. уменьшить \(x\) на \(d\). (Мы называем \(d\) делителем \(x\), если \(d\) — положительное целое число, для которого существует целое \(q\), такое что \(x = d \cdot q\).)

Кроме того, есть дополнительное ограничение: вам нельзя выбирать одно и то же значение \(d\) более двух раз.

Например, для \(x=5\) следующая последовательность действий является недопустимой, поскольку в ней \(1\) использована более чем дважды: \(5\xrightarrow{-1}4\xrightarrow{-1}3\xrightarrow{-1}2\xrightarrow{-1}1\). Однако следующая последовательность действий является допустимой: \(5\xrightarrow{-1}4\xrightarrow{-2}2\xrightarrow{-1}1\).

Выведите произвольную последовательность действий, которая уменьшает \(x\) до \(1\) не более чем за \(1000\) операций. Можно доказать, что такая последовательность всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(x\) (\(2\le x \le 10^{9}\)).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите целое число \(k\) (\(1 \le k \le 1001\)).

Во второй строке через пробел выведите \(k\) целых чисел \(a_1,a_2,\ldots,a_k\), таких что:

  • \(a_1=x\);
  • \(a_k=1\);
  • для каждого \(2 \le i \le k\), величина \((a_{i-1}-a_i)\) является делителем \(a_{i-1}\). Каждое число может быть выбрано делителем не более чем дважды.
Примечание

В первом наборе входных данных можно выполнить следующую последовательность операций: \(3\xrightarrow{-1}2\xrightarrow{-1}1\).

В втором наборе входных данных можно выполнить следующую последовательность операций: \(5\xrightarrow{-1}4\xrightarrow{-2}2\xrightarrow{-1}1\).

В третьем наборе входных данных можно выполнить следующую последовательность операций: \(14\xrightarrow{-2}12\xrightarrow{-6}6\xrightarrow{-3}3\xrightarrow{-1}2\xrightarrow{-1}1\).

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\).

E. Угадайка

битмаски Деревья игры математика сортировки Строки Структуры данных Теория вероятностей *2100

У Кэрол есть последовательность \(s\) из \(n\) неотрицательных целых чисел. Она хочет сыграть с Алисой и Бобом в «Угадайку».

Игра устроена следующим образом. Сначала Кэрол случайно выберет два целых индекса \(i_a\) и \(i_b\) из диапазона \([1, n]\) и обозначит \(a=s_{i_a}\), \(b=s_{i_b}\). Обратите внимание: \(i_a\) и \(i_b\) могут совпасть.

Затем Кэрол сообщит:

  • значение \(a\) — Алисе;
  • значение \(b\) — Бобу;
  • значение \(a \mid b\) и Алису и Бобу, где \(|\) обозначает операцию побитового ИЛИ.

Обратите внимание: Кэрол не сообщит никакой информации об \(s\) ни Алисе, ни Бобу.

Затем начинается процесс угадывания. Алиса и Боб ходят по очереди, причём первой ходит Алиса. Цель обоих игроков — выяснить, какое из утверждений верно: \(a < b\), \(a > b\), или \(a = b\).

На своём ходу игрок может сделать одно из двух:

  • сказать «Я не знаю» и передать ход другому игроку;
  • сказать «Я знаю», а затем сообщить ответ: «\(a<b\)», «\(a>b\)», или же «\(a=b\)»; после этого игра заканчивается.

Алиса и Боб слышат фразы друг друга и могут использовать их в своих рассуждениях. Оба игрока достаточно умны. Сказать «Я знаю» они могут только в том случае, если точно уверены в ответе.

Найдите математическое ожидание числа шагов в такой игре. Выведите ответ по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(s_1,s_2,\ldots, s_n\) (\(0 \le s_i < 2^{30}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных есть всего \(4\) возможные ситуации:

  1. \(i_a=1\), \(i_b=1\), \(a=2\), \(b=2\), число шагов равно \(2\);
  2. \(i_a=1\), \(i_b=2\), \(a=2\), \(b=3\), число шагов равно \(3\);
  3. \(i_a=2\), \(i_b=1\), \(a=3\), \(b=2\), число шагов равно \(2\);
  4. \(i_a=2\), \(i_b=2\), \(a=3\), \(b=3\), число шагов равно \(3\).

Математическое ожидание числа шагов равно \(\frac{2+3+2+3}{4}=\frac{5}{2}=499122179\pmod{998244353}\).

Рассмотрим первый случай, когда \(a=2\), \(b=2\). Процесс угадывания происходит следующим образом.

На первом ходу Алиса думает так: «Я знаю, что \(a=2, a\mid b=2\). Можно сделать вывод, что \(b=0\) или \(b=2\), но какой из этих двух случаев имеет место — пока неясно». Поэтому она говорит: «Я не знаю».

На втором ходу Боб думает так: «Я знаю, что \(b=2, a\mid b=2\). Можно сделать вывод, что \(a=0\) или \(a=2\). Однако если \(a=0\), то Алиса на своём ходу уже бы сказала, что \(a<b\). Но она этого не сказала. Значит, \(a=2\)». Поэтому он говорит: «Я знаю, \(a=b\)». Игра завершается.

Во втором наборе входных данных, при \(a=0\), \(b=0\), Алиса сразу заключает, что \(a=b\). Ожидаемое число ходов равно \(1\).

H. Поток астеризма

дп математика матрицы *3200

Bogocubic играет в игру с amenotiomoi. Сначала Bogocubic фиксировал целое число \(n\), затем он дал amenotiomoi целое число \(x\), изначально равное \(1\).

За один ход amenotiomoi выполняет одну из следующих операций с равной вероятностью:

  • увеличить \(x\) на \(1\);
  • умножить \(x\) на \(2\).

Bogocubic хочет узнать, чему равно математическое ожидание числа шагов, которое должен сделать amenotiomoi, чтобы сделать \(x\) больше или равным \(n\). Найдите эту величину по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(y\), что \(0 \le y < M\) и \(y \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите одно число — математическое ожидание числа шагов по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных \(n\le x\) без выполнения каких-либо операций, так что ответ равен \(0\).

Во втором наборе входных данных, для \(n = 4\), ниже указан список всех возможных последовательностей операций вместе с вероятностями их реализации:

  • \(1\stackrel{+1}{\longrightarrow}2\stackrel{+1}{\longrightarrow}3\stackrel{+1}{\longrightarrow}4\), вероятность равна \(\frac{1}{8}\);
  • \(1\stackrel{\times 2}{\longrightarrow}2\stackrel{+1}{\longrightarrow}3\stackrel{+1}{\longrightarrow}4\), вероятность равна \(\frac{1}{8}\);
  • \(1\stackrel{+1}{\longrightarrow}2\stackrel{+1}{\longrightarrow}3\stackrel{\times 2}{\longrightarrow}6\), вероятность равна \(\frac{1}{8}\);
  • \(1\stackrel{\times 2}{\longrightarrow}2\stackrel{+1}{\longrightarrow}3\stackrel{\times 2}{\longrightarrow}6\), вероятность равна \(\frac{1}{8}\);
  • \(1\stackrel{+1}{\longrightarrow}2\stackrel{\times 2}{\longrightarrow}4\), вероятность равна \(\frac{1}{4}\);
  • \(1\stackrel{\times 2}{\longrightarrow}2\stackrel{\times 2}{\longrightarrow}4\), вероятность равна \(\frac{1}{4}\).

Значит, математическое ожидание числа шагов равно \(4 \cdot \left(3 \cdot \frac{1}{8}\right) + 2 \cdot \left(2 \cdot \frac{1}{4} \right) =\frac{5}{2} \equiv 499122179 \pmod{998244353}\). В третьем наборе входных данных, для \(n = 8\), математическое ожидание числа шагов равно \(\frac{137}{32}\equiv 717488133\pmod{998244353}\).

В четвёртом наборе входных данных, для \(n = 15\), математическое ожидание числа шагов равно \(\frac{24977}{4096} \equiv 900515847 \pmod{998244353}\).

A. Ambitious Kid

математика *800

Chaneka, Pak Chanek's child, is an ambitious kid, so Pak Chanek gives her the following problem to test her ambition.

Given an array of integers \([A_1, A_2, A_3, \ldots, A_N]\). In one operation, Chaneka can choose one element, then increase or decrease the element's value by \(1\). Chaneka can do that operation multiple times, even for different elements.

What is the minimum number of operations that must be done to make it such that \(A_1 \times A_2 \times A_3 \times \ldots \times A_N = 0\)?

Input

The first line contains a single integer \(N\) (\(1 \leq N \leq 10^5\)).

The second line contains \(N\) integers \(A_1, A_2, A_3, \ldots, A_N\) (\(-10^5 \leq A_i \leq 10^5\)).

Output

An integer representing the minimum number of operations that must be done to make it such that \(A_1 \times A_2 \times A_3 \times \ldots \times A_N = 0\).

Note

In the first example, initially, \(A_1\times A_2\times A_3=2\times(-6)\times5=-60\). Chaneka can do the following sequence of operations:

  1. Decrease the value of \(A_1\) by \(1\). Then, \(A_1\times A_2\times A_3=1\times(-6)\times5=-30\)
  2. Decrease the value of \(A_1\) by \(1\). Then, \(A_1\times A_2\times A_3=0\times(-6)\times5=0\)

In the third example, Chaneka does not have to do any operations, because from the start, it already holds that \(A_1\times A_2\times A_3\times A_4\times A_5=0\times(-1)\times0\times1\times0=0\)

B. Battling with Numbers

Комбинаторика математика теория чисел *1400

On the trip to campus during the mid semester exam period, Chaneka thinks of two positive integers \(X\) and \(Y\). Since the two integers can be very big, both are represented using their prime factorisations, such that:

  • \(X=A_1^{B_1}\times A_2^{B_2}\times\ldots\times A_N^{B_N}\) (each \(A_i\) is prime, each \(B_i\) is positive, and \(A_1<A_2<\ldots<A_N\))
  • \(Y=C_1^{D_1}\times C_2^{D_2}\times\ldots\times C_M^{D_M}\) (each \(C_j\) is prime, each \(D_j\) is positive, and \(C_1<C_2<\ldots<C_M\))

Chaneka ponders about these two integers for too long throughout the trip, so Chaneka's friend commands her "Gece, deh!" (move fast) in order to not be late for the exam.

Because of that command, Chaneka comes up with a problem, how many pairs of positive integers \(p\) and \(q\) such that \(\text{LCM}(p, q) = X\) and \(\text{GCD}(p, q) = Y\). Since the answer can be very big, output the answer modulo \(998\,244\,353\).

Notes:

  • \(\text{LCM}(p, q)\) is the smallest positive integer that is simultaneously divisible by \(p\) and \(q\).
  • \(\text{GCD}(p, q)\) is the biggest positive integer that simultaneously divides \(p\) and \(q\).
Input

The first line contains a single integer \(N\) (\(1 \leq N \leq 10^5\)) — the number of distinct primes in the prime factorisation of \(X\).

The second line contains \(N\) integers \(A_1, A_2, A_3, \ldots, A_N\) (\(2 \leq A_1 < A_2 < \ldots < A_N \leq 2 \cdot 10^6\); each \(A_i\) is prime) — the primes in the prime factorisation of \(X\).

The third line contains \(N\) integers \(B_1, B_2, B_3, \ldots, B_N\) (\(1 \leq B_i \leq 10^5\)) — the exponents in the prime factorisation of \(X\).

The fourth line contains a single integer \(M\) (\(1 \leq M \leq 10^5\)) — the number of distinct primes in the prime factorisation of \(Y\).

The fifth line contains \(M\) integers \(C_1, C_2, C_3, \ldots, C_M\) (\(2 \leq C_1 < C_2 < \ldots < C_M \leq 2 \cdot 10^6\); each \(C_j\) is prime) — the primes in the prime factorisation of \(Y\).

The sixth line contains \(M\) integers \(D_1, D_2, D_3, \ldots, D_M\) (\(1 \leq D_j \leq 10^5\)) — the exponents in the prime factorisation of \(Y\).

Output

An integer representing the number of pairs of positive integers \(p\) and \(q\) such that \(\text{LCM}(p, q) = X\) and \(\text{GCD}(p, q) = Y\), modulo \(998\,244\,353\).

Note

In the first example, the integers are as follows:

  • \(X=2^2\times3^1\times5^1\times7^2=2940\)
  • \(Y=3^1\times7^1=21\)

The following are all possible pairs of \(p\) and \(q\):

  • \(p=21\), \(q=2940\)
  • \(p=84\), \(q=735\)
  • \(p=105\), \(q=588\)
  • \(p=147\), \(q=420\)
  • \(p=420\), \(q=147\)
  • \(p=588\), \(q=105\)
  • \(p=735\), \(q=84\)
  • \(p=2940\), \(q=21\)

In the third example, the integers are as follows:

  • \(X=2^1\times5^1=10\)
  • \(Y=2^1\times3^1=6\)

There is no pair \(p\) and \(q\) that simultaneously satisfies \(\text{LCM}(p,q)=10\) and \(\text{GCD}(p,q)=6\).

L. Lihmuf Balling

Бинарный поиск математика Перебор *2400

After working at a factory (Lihmuf Sorting), Lihmuf wants to play a game with his good friend, Pak Chanek. There are \(N\) boxes numbered from \(1\) to \(N\). The \(i\)-th box contains \(i\) balls. Pak Chanek and Lihmuf will play a game using those boxes.

There will be \(N\) turns numbered from \(1\) to \(N\). On each turn, Pak Chanek chooses one box and takes all balls from that box, then Lihmuf does the same thing for one box he chooses (it is possible that the two chosen boxes are the same).

Given an integer \(M\). Before the game begins, Lihmuf must choose an integer \(K\) satisfying \(1 \leq K \leq M\). It is known that on the \(j\)-th turn, Pak Chanek will choose the \(j\)-th box, while Lihmuf will choose the \(y\)-th box, with \(y=((j \times K - 1) \bmod N) + 1\). Help Lihmuf choose the correct value of \(K\) so that he will get as many balls as possible! If there are more than one possible values of \(K\) that result in the maximum total balls, find the minimum such value of \(K\).

Keep in mind that each box can be chosen more than once, but after a box is chosen for the first time, the box becomes empty.

Input

The only line contains two integers \(N\) and \(M\) (\(1 \leq N \leq 10^9\); \(1 \leq M \leq 2000\)) — the number of boxes and the maximum limit for the value of \(K\).

Output

An integer representing the value of \(K\) that will make Lihmuf get as many balls as possible. If there are more than one possible value of \(K\) that result in the maximum total balls, find the minimum such value of \(K\).

Note

In the first example, if Lihmuf chooses \(K=1\), the game will go as follows:

  1. Pak Chanek chooses the \(1\)-st box and gets \(1\) ball, then Lihmuf chooses the \(1\)-st box and gets \(0\) balls.
  2. Pak Chanek chooses the \(2\)-nd box and gets \(2\) balls, then Lihmuf chooses the \(2\)-nd box and gets \(0\) balls.
  3. Pak Chanek chooses the \(3\)-rd box and gets \(3\) balls, then Lihmuf chooses the \(3\)-rd box and gets \(0\) balls.

In total, Lihmuf gets \(0+0+0=0\) balls.

The maximum total balls that can be earned by Lihmuf is \(0\) because he can only choose \(K=1\). Therefore, \(K=1\) is the minimum possible value of \(K\) that results in the maximum total balls.

In the second example, if Lihmuf chooses \(K=3\), the game will go as follows:

  1. Pak Chanek chooses the \(1\)-st box and gets \(1\) ball, then Lihmuf chooses the \(3\)-rd box and gets \(3\) balls.
  2. Pak Chanek chooses the \(2\)-nd box and gets \(2\) balls, then Lihmuf chooses the \(1\)-st box and gets \(0\) balls.
  3. Pak Chanek chooses the \(3\)-rd box and gets \(0\) balls, then Lihmuf chooses the \(4\)-th box and gets \(4\) balls.
  4. Pak Chanek chooses the \(4\)-th box and gets \(0\) balls, then Lihmuf chooses the \(2\)-nd box and gets \(0\) balls.
  5. Pak Chanek chooses the \(5\)-th box and gets \(5\) balls, then Lihmuf chooses the \(5\)-th box and gets \(0\) balls.

In total, Lihmuf gets \(3+0+4+0+0=7\) balls.

It can be obtained that \(7\) is the maximum total balls that can be earned by Lihmuf. The possible values of \(K\) that result in \(7\) total balls are \(3\) and \(4\). Therefore, \(K=3\) is the minimum possible value of \(K\) that results in the maximum total balls.

M. Mighty Rock Tower

дп Комбинаторика математика Перебор Теория вероятностей *2400

Pak Chanek comes up with an idea in the midst of boredom to play a game. The game is a rock tower game. There is a big rock that is used as a base. There are also \(N\) small identical rocks that Pak Chanek will use to build a rock tower with a height of \(N\) above the base rock.

Initially, there are no small rocks that are located above the base rock. In other words, the height of the tower above the base rock is initially \(0\). In one move, Pak Chanek can place one small rock onto the top of the tower which makes the height of the tower above the base rock increase by \(1\). Each time Pak Chanek place one small rock, the following will happen after the small rock is placed:

  • Let's say \(x\) is the height of the tower above the base rock right after the small rock is placed.
  • There is a probability of \(P_x\) percent that the topmost rock falls.
  • If \(x \geq 2\) and the topmost rock falls, then there is another probability of \(P_x\) percent that the \(2\)-nd topmost rock also falls.
  • If \(x \geq 3\) and the \(2\)-nd topmost rock falls, then there is another probability of \(P_x\) percent that the \(3\)-rd topmost rock also falls.
  • If \(x \geq 4\) and the \(3\)-rd topmost rock falls, then there is another probability of \(P_x\) percent that the \(4\)-th topmost rock also falls.
  • And so on.

If the tower successfully reaches a height of \(N\) without any rocks falling after that, then the game is ended.

If given an integer array \([P_1, P_2, \ldots, P_N]\), what is the expected value of the number of moves that Pak Chanek needs to do to end the game? It can be proven that the expected value can be represented as an simple fraction \(\frac{P}{Q}\) where \(Q\) is coprime to \(998\,244\,353\). Output the value of \(P \times Q^{-1}\) modulo \(998\,244\,353\).

Input

The first line contains a single integer \(N\) (\(1 \leq N \leq 2\cdot10^5\)) — the required height of the rock tower.

The second line contains \(N\) integers \(P_1, P_2, P_3, \ldots, P_N\) (\(0 \leq P_i \leq 99\)).

Output

An integer representing the expected value of the number of moves that Pak Chanek needs to do to end the game, modulo \(998\,244\,353\).

Note

In the first example, the expected value of the number of moves that Pak Chanek needs to do to end the game is \(\frac{19}{2}\).

E1. salyg1n и массив (простая версия)

интерактив Конструктив математика *2000

Это простая версия задачи. Единственное различие между версиями - ограничение на количество запросов. В этой версии вы можете сделать не более 100 запросов. Вы можете делать взломы, только если решены обе версии задачи.

Это интерактивная задача!

salyg1n дал вам целое положительное число \(k\) и решил сыграть с вами в игру. Он загадал массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)). Вы должны вывести \(a_1 \oplus a_2 \oplus \ldots \oplus a_n\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Вы можете делать запросы вида:

  • \(?\) \(i\): в ответ на этот запрос вы получите \(a_i \oplus a_{i + 1} \oplus \ldots \oplus a_{i + k - 1}\). Также после этого запроса подотрезок \(a_i, a_{i + 1}, \ldots, a_{i + k - 1}\) развернется, то есть загаданный массив \(a\) станет таким: \(a_1, a_2, \ldots a_{i - 1}, a_{i + k - 1}, a_{i + k - 2}, \ldots, a_{i + 1}, a_i, a_{i + k}, \ldots, a_n\).

Вы можете сделать не более \(100\) запросов чтобы дать ответ на задачу.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) – количество тестовых случаев.

Протокол взаимодействия

Взаимодействие Вашей программы с программой жюри в каждом тестовом случае начинается со считывания двух целых положительных четных чисел \(n\) и \(k\) (\(1 \leq k \leq n \leq k^2 \leq 2500\)) – длины загаданного массива и длины подотрезка запроса соответственно.

Чтобы узнать значение \(a_i \oplus a_{i + 1} \oplus \ldots \oplus a_{i + k - 1}\), выведите запрос в формате \(?\) \(i\) (\(1 \leq i \leq n - k + 1\)). Затем считайте одно целое число – ответ на ваш запрос.

Вы можете сделать не более \(100\) запросов. Когда вы будете готовы сообщить ответ, выведите его в формате \(!\) \(x\). После этого следует приступать к обработке следующего тестового случая или завершить программу, если это был последний тестовый случай. Вывод ответа не считается как один из \(100\) запросов.

Если ваша программа сделает более \(100\) запросов для одного набора входных данных, или сделает некорректный запрос, то ответом на запрос будет -1, после получения такого ответа ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10000\). Интерактор в этой задаче не является адаптивным.

Взломы:

Чтобы сделать взлом, используйте следующий формат:

В первой строке находится одно целое число \(t\) – количество тестовых случаев.

Описание каждого тестового случая должно состоять из двух строк. В первой строке находятся числа \(n\) и \(k\) – длина загаданного массива и длина подотрезка запроса соответственно. Во второй строке находятся \(n\) чисел \(a_1, a_2, \ldots, a_n\) – массив, который должно загадать жюри в данном тестовом случае.

Примечание

В первом тестовом случае жюри загадало массив \(a\) \(=\) \([4, 2, 5, 1]\)

Во втором тестовом случае жюри загадало массив \(a\) \(=\) \([5, 7, 1, 3, 3, 7]\)

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\) конфеты.

В третьем наборе входных данных невозможно сделать так, чтобы у всех людей было одинаковое количество конфет.

В четвёртом наборе входных данных двум людям не нужно ничего делать.

C. План путешествия

Деревья дп Комбинаторика математика реализация *2400

Во время летних каникул после экзамена, Tom и Daniel планировали отправиться в путешествие.

В их стране есть \(n\) городов, пронумерованных от \(1\) до \(n\). И система дорожного движения в стране особенная. Для любого города \(i\) (\(1 \le i \le n\)) есть:

  • дорога между городами \(i\) и \(2i\), если \(2i\le n\);
  • дорога между городами \(i\) и \(2i+1\), если \(2i+1\le n\).

Составляя план путешествия, Daniel выбирает некоторое целое значение от \(1\) до \(m\) для каждого города, для \(i\)-го города обозначим его \(a_i\).

Пусть \(s_{i,j}\) равно максимальному значению для городов на простом\(^\dagger\) пути между городами \(i\) и \(j\). Тогда оценка плана путешествия равна \(\sum_{i=1}^n\sum_{j=i}^n s_{i,j}\).

Tom хочет знать сумму оценок всех возможных планов путешествия. Daniel просит вас помочь ему найти её. Вам нужно сказать ответ по модулю \(998\,244\,353\).

\(^\dagger\) Простым путём между городами \(x\) и \(y\) называется путь между ними, который проходит по каждому городу не более одного раза.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1\le t\le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\leq n\leq 10^{18}\), \(1\leq m\leq 10^5\)) — количество городов и максимальное значение для города.

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — сумму оценок всех возможных планов путешествия по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных есть только один возможный план путешествия:

Путь \(1\rightarrow 1\): \(s_{1,1}=a_1=1\).

Путь \(1\rightarrow 2\): \(s_{1,2}=\max(1,1)=1\).

Путь \(1\rightarrow 3\): \(s_{1,3}=\max(1,1)=1\).

Путь \(2\rightarrow 2\): \(s_{2,2}=a_2=1\).

Путь \(2\rightarrow 1\rightarrow 3\): \(s_{2,3}=\max(1,1,1)=1\).

Путь \(3\rightarrow 3\): \(s_{3,3}=a_3=1\).

Оценка равна \(1+1+1+1+1+1=6\).

Во втором наборе входных данных есть четыре возможных плана путешествия:

Оценка плана \(1\): \(1+1+1=3\).

Оценка плана \(2\): \(1+2+2=5\).

Оценка плана \(3\): \(2+2+1=5\).

Оценка плана \(4\): \(2+2+2=6\).

Таким образом, сумма оценок равна \(3+5+5+6=19\).

B. 2D Путешествие

геометрия кратчайшие пути математика сортировки *1100

Piggy живет на бесконечной плоскости с декартовой системой координат.

На плоскости есть \(n\) городов, пронумерованных от \(1\) до \(n\), и первые \(k\) городов являются крупными. Координаты \(i\)-го города равны \((x_i,y_i)\).

Piggy, как опытный путешественник, хочет совершить расслабляющую поездку после экзамена. В данный момент он находится в городе \(a\), и хочет добраться до города \(b\) на самолете. Между любыми двумя городами можно совершить перелёт, а также можно посещать несколько городов во время путешествия, но конечным пунктом должен быть город \(b\).

Из-за активной торговли между крупными городами можно путешествовать на самолете между ними бесплатно. Формально, цена авиабилета \(f(i,j)\) между двумя городами \(i\) и \(j\) определяется следующим образом:

\(\) f(i,j)= \begin{cases} 0, & \text{если оба города }i \text{ и }j \text{ являются крупными городами} \\ |x_i-x_j|+|y_i-y_j|, & \text{в противном случае} \end{cases} \(\)

Piggy не хочет экономить время, но хочет сэкономить деньги. Поэтому вам нужно сказать ему минимальное значение суммарной стоимости всех авиабилетов, если он может совершить произвольное количество перелётов.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(k\), \(a\) и \(b\) (\(2\le n\le 2\cdot 10^5\), \(0\le k\le n\), \(1\le a,b\le n\), \(a\ne b\)) — количество городов, количество крупных городов и номера начального и конечного городов.

Затем следуют \(n\) строк, \(i\)-я строка содержит два целых числа \(x_i\) и \(y_i\) (\(-10^9\le x_i,y_i\le 10^9\)) — координаты \(i\)-го города. Первые \(k\) строк описывают крупные города. Гарантируется, что все координаты попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное значение суммарной стоимости всех авиабилетов.

Примечание

В первом наборе входных данных:

Крупные города отмечены красным.

Оптимальный способ выбора перелётов: \(3\rightarrow 1 \rightarrow 2 \rightarrow 5\), что будет стоить \(3+0+1=4\). Обратите внимание, что перелёт \(1\rightarrow 2\) стоит \(0\), потому что города \(1\) и \(2\) являются крупными городами.

Во втором наборе входных данных, так как всего \(2\) города, единственный способ — совершить перелёт из города \(1\) в город \(2\).

В третьем наборе входных данных, так как города \(2\) и \(4\) являются крупными городами, Piggy может взять прямой рейс из города \(2\) в город \(4\), что будет стоить \(0\).

В четвертом наборе входных данных, Piggy может совершить перелёты \(3\rightarrow 2\rightarrow 1\), и стоимость будет \(11+11=22\).

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\).

C. Разноцветная таблица

Бинарный поиск дп математика реализация Структуры данных *1300

Вам даны два целых числа \(n\) и \(k\). Также вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) размера \(n\). Известно, что для всех \(1 \leq i \leq n\) верно, что \(1 \leq a_i \leq k\).

Определим двумерный массив \(b\) размера \(n \times n\) так: \(b_{i, j} = \min(a_i, a_j)\). Представим массив \(b\) как квадрат, где верхняя левая клетка — это \(b_{1, 1}\), строки нумеруются сверху вниз от \(1\) до \(n\), столбцы — слева направо от \(1\) до \(n\). Назовём цветом клетки число, которое в ней записано (для клетки с координатами \((i, j)\) это \(b_{i, j}\)).

Для каждого цвета от \(1\) до \(k\) найдём минимальный прямоугольник в массиве \(b\), содержащий все клетки этого цвета. Выведите сумму ширины и высоты этого прямоугольника.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n, k \leq 10^5\)) — размер массива \(a\), а также количество цветов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq k\)) — массив \(a\).

Гарантируется, что суммы значений \(n\) и \(k\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

На каждый набор входных данных выведите \(k\) чисел: сумму ширины и высоты минимального прямоугольника, содержащего все клетки одного цвета, для цветов от \(1\) до \(k\).

Примечание

В первом наборе входных данных весь массив \(b\) состоит из цвета \(1\), поэтому минимальный прямоугольник для цвета \(1\) имеет размер \(2 \times 2\), сумма его сторон это \(4\).

Во втором наборе входных данных массив \(b\) выглядит так:

11
12

Одна из угловых клеток имеет цвет \(2\), три остальные клетки имеют цвет \(1\). Поэтому для цвета \(1\) минимальный прямоугольник имеет размер \(2 \times 2\), а для цвета \(2\)\(1 \times 1\).

В последнем наборе входных данных \(b\) выглядит так:

11111
12221
12321
12221
11111

F. Ленивые числа

Бинарный поиск математика *2900

Вам даны натуральные числа \(n\) и \(k\). Для каждого числа от \(1\) до \(n\) выпишем его запись в системе счисления с основанием \(k\) (без ведущих нулей), а затем отсортируем получившийся массив в лексикографическом порядке как строки. В отсортированном массиве пронумеруем элементы от \(1\) до \(n\) (то есть индексация начинается с \(1\)). Найдите количество чисел \(i\) таких, что запись числа \(i\) оказалась на \(i\)-й позиции в отсортированном массиве записей.

Примеры записей: \(1\) в любой системе счисления равно \(1\), \(7\) при \(k = 3\) будет записано как \(21\), \(81\) при \(k = 9\) будет записано как \(100\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит целые числа \(n\) и \(k\) (\(1 \leq n \leq 10^{18}\), \(2 \leq k \leq 10^{18}\)).

Выходные данные

На каждый набор входных данных выведите одно целое число — количество чисел \(1 \leq i \leq n\) таких, что запись числа \(i\) в системе счисления с основанием \(k\) оказалась на \(i\)-й позиции после сортировки

Примечание

В первом наборе входных данных для чисел \(1\) и \(2\) их записи на \(1\) и \(2\) будут на позициях соответственно.

Во втором наборе входных данных отсортированный массив равен \([1_2 = 1, 10_2 = 2, 100_2 = 4, 11_2 = 3]\), на нужных позициях только записи чисел \(1\) и \(2\).

В третьем наборе входных данных отсортированный массив равен \([1_4 = 1, 10_4 = 4, 11_4 = 5, 12_4 = 6, 2_4 = 2, 3_4 = 3]\), на своей позиции только число \(1\).

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\).

C. Невзаимнопростое разбиение

математика теория чисел *1100

Вам даны два целых числа \(l \le r\). Вам нужно найти такие целые положительные числа \(a\) и \(b\), чтобы одновременно выполнялись следующие условия:

  • \(l \le a + b \le r\)
  • \(\gcd(a, b) \neq 1\)

или сообщить, что их не существует.

\(\gcd(a, b)\) обозначает наибольший общий делитель чисел \(a\) и \(b\). Например \(\gcd(6, 9) = 3\), \(\gcd(8, 9) = 1\), \(\gcd(4, 2) = 2\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Единственная строка описания каждого набора входных данных содержит \(2\) целых числа \(l, r\) (\(1 \le l \le r \le 10^7\)).

Выходные данные

Для каждого набора входных данных выведите целые числа \(a, b\), подходящие под все условия, в отдельной строке. Если ответа нет, вместо этого выведите единственное число \(-1\).

Если ответов несколько, вы можете вывести любой из них.

Примечание

В первом наборе входных данных \(11 \le 6 + 9 \le 15\), \(\gcd(6, 9) = 3\), все условия выполнены. Обратите внимание, что это не единственный возможный ответ, например, \(\{4, 10\}, \{5, 10\}, \{6, 6\}\) также являются верными ответами для данного набора.

Во втором наборе входных данных единственные пары \(\{a, b\}\), подходящие под условие \(1 \le a + b \le 3\), — это пары \(\{1, 1\}, \{1, 2\}, \{2, 1\}\), однако в каждой такой паре \(\gcd(a, b)\) равняется \(1\), а значит, ответа не существует.

В третьем наборе входных данных \(\gcd(14, 4) = 2\)

D. Плюс минус перестановка

математика *1200

Вам даны \(3\) числа — \(n\), \(x\), \(y\). Назовём счётом перестановки\(^\dagger\) \(p_1, \ldots, p_n\) следующую величину:

\(\)(p_{1 \cdot x} + p_{2 \cdot x} + \ldots + p_{\lfloor \frac{n}{x} \rfloor \cdot x}) - (p_{1 \cdot y} + p_{2 \cdot y} + \ldots + p_{\lfloor \frac{n}{y} \rfloor \cdot y})\(\)

Другими словами, счёт перестановки — это сумма \(p_i\) по всем индексам \(i\), делящимся на число \(x\), минус сумма \(p_i\) по всем индексам \(i\), делящимся на число \(y\).

Вам нужно найти максимально возможный счёт среди всех перестановок длины \(n\).

Например, если \(n = 7\), \(x = 2\), \(y = 3\), максимальный счёт достигается на перестановке \([2,\color{red}{\underline{\color{black}{6}}},\color{blue}{\underline{\color{black}{1}}},\color{red}{\underline{\color{black}{7}}},5,\color{blue}{\underline{\color{red}{\underline{\color{black}{4}}}}},3]\) и равен \((6 + 7 + 4) - (1 + 4) = 17 - 5 = 12\).

\(^\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\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка описания каждого набора входных данных содержит \(3\) целых числа \(n\), \(x\), \(y\) (\(1 \le n \le 10^9\), \(1 \le x, y \le n\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальный счёт среди всех перестановок длины \(n\).

Примечание

Первый набор входных данных разобран в условии задачи выше.

Во втором наборе входных данных одной из оптимальных перестановок будет \([12,11,\color{blue}{\underline{\color{black}{2}}},4,8,\color{blue}{\underline{\color{red}{\underline{\color{black}{9}}}}},10,6,\color{blue}{\underline{\color{black}{1}}},5,3,\color{blue}{\underline{\color{red}{\underline{\color{black}{7}}}}}]\). Счёт этой перестановки равен \((9 + 7) - (2 + 9 + 1 + 7) = -3\). Можно показать, что счёта больше чем \(-3\) добиться невозможно. Обратите внимание, что ответ на задачу может быть отрицательным.

В третьем наборе входных данных счёт перестановки будет равен \((p_1 + p_2 + \ldots + p_9) - p_9\). Одна из оптимальных перестановок для данного случая: \([9, 8, 7, 6, 5, 4, 3, 2, 1]\), её счет равен \(44\). Можно показать, что счёта больше чем \(44\) добиться невозможно.

В четвёртом наборе входных данных \(x = y\), поэтому счёт любой перестановки будет равен \(0\).

F. Продажа зверинца

графы математика поиск в глубину и подобное реализация снм *1800

Вы владелец зверинца, состоящего из \(n\) животных пронумерованных от \(1\) до \(n\). Однако содержать зверинец достаточно затратно, поэтому вы решили его продать!

Известно, что каждое животное боится ровно одного другого животного. А точнее, животное \(i\) боится животного \(a_i\) (\(a_i \neq i\)). Также для каждого животного известна его стоимость, для животного \(i\) она равняется \(c_i\).

Вы будете продавать всех своих животных в каком-то зафиксированном порядке. Формально, вам надо будет выбрать некоторую перестановку\(^\dagger\) \(p_1, p_2, \ldots, p_n\), и продать сначала животное \(p_1\), потом животное \(p_2\), и так далее, последним продав животное \(p_n\).

Когда вы продаёте животное \(i\), есть два варианта развития событий:

  • Если животное \(a_i\) было продано раньше чем животное \(i\), вы получаете \(c_i\) денег за продажу животного \(i\).
  • Если животное \(a_i\) не было продано раньше чем животное \(i\), вы получаете \(2 \cdot c_i\) денег за продажу животного \(i\). (Удивительно, но животные, которые боятся в текущий момент имеют большую ценность).

Ваша задача — выбрать порядок продажи животных так, чтобы максимизировать суммарную прибыль.

Например, если \(a = [3, 4, 4, 1, 3]\), \(c = [3, 4, 5, 6, 7]\) и выбранная вами перестановка равна \([4, 2, 5, 1, 3]\), то:

  • Первым продаётся животное \(4\). Животное \(a_4 = 1\) не было продано ранее, а значит, вы получаете \(2 \cdot c_4 = 12\) денег за продажу.
  • Вторым продаётся животное \(2\). Животное \(a_2 = 4\) было продано ранее, а значит, вы получаете \(c_2 = 4\) денег за продажу.
  • Третьим продаётся животное \(5\). Животное \(a_5 = 3\) не было продано ранее, а значит, вы получаете \(2 \cdot c_5 = 14\) денег за продажу.
  • Четвёртым продаётся животное \(1\). Животное \(a_1 = 3\) не было продано ранее, а значит, вы получаете \(2 \cdot c_1 = 6\) денег за продажу.
  • Пятым продаётся животное \(3\). Животное \(a_3 = 4\) было продано ранее, а значит, вы получаете \(c_3 = 5\) денег за продажу.

Ваша суммарная прибыль при таком выборе перестановки, равна \(12 + 4 + 14 + 6 + 5 = 41\). Обратите внимание, что \(41\) — не максимально возможная прибыль в этом примере.

\(^\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\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\), \(a_i \neq i\)) — \(a_i\) означает номер животного, которого боится животное \(i\).

Третья строка набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^9\)) — стоимости животных.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите \(n\) целых чисел — перестановку \(p_1, p_2, \ldots, p_n\), обозначающую, в каком порядке нужно продавать животных, чтобы максимизировать прибыль. Если есть несколько возможных ответов, можно вывести любой из них.

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\) к ровно одной из своих цифр.

C. Стрельба по мишени

математика реализация *800

Мишень размером \(10 \times 10\) состоит из пяти «колец», как показано на рисунке. Попадание в каждое кольцо даёт разное количество очков: внешнее кольцо — 1 очко, следующее кольцо — 2 очка, ..., центральное кольцо — 5 очков.

Влад выпустил несколько стрел по мишени. Помогите ему определить, сколько очков он набрал.

Входные данные

Ввод содержит несколько наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Каждый набор состоит из 10 строк, каждая из которых содержит 10 символов. Каждый символ в сетке может быть либо \(\texttt{X}\) (обозначает попадание стрелы), либо \(\texttt{.}\) (обозначает промах).

Выходные данные

Для каждого набора входных данных выведите одно целое число — общее количество очков.

Примечание

В первом примере на внешнем кольце находятся три стрелы, каждая из которых стоит 1 очко, на следующем кольце находятся две стрелы, каждая из которых стоит 3 очка, и на следующем кольце находятся две стрелы, каждая из которых стоит 4 очка. Общий счет равен \(3 \times 1 + 2 \times 3 + 2 \times 4 = 17\).

Во втором примере стрел нет, поэтому счет равен \(0\).

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\).

C. Медуза и EVA

графы дп жадные алгоритмы математика Теория вероятностей *2300

Монстры снова вторглись в город! Асука приглашает свою хорошую подругу, Медузу, сесть за руль EVA вместе с ней.

В стране есть \(n\) городов. Все монстры находятся в городе \(n\). Медуза и Асука сейчас находятся в городе \(1\) и должны переместиться в город \(n\), чтобы победить монстров.

Существует \(m\) дорог. По \(i\)-й дороге можно попасть из города \(a_i\) в город \(b_i\). Все дороги являются направленными. То есть из города \(b_i\) в город \(a_i\) по \(i\)-й дороге попасть нельзя. Интересно, что все дороги удовлетворяют условию \(a_i<b_i\).

Вождение EVA требует совместной работы двух человек. Однако Асука и Медуза ранее не проводили совместных тренировок.

Предположим, что в данный момент EVA находится в городе \(u\). Медуза и Асука выберут неразрушенную дорогу, которая начинается в городе \(u\). Предположим, что Медуза и Асука выбирают дороги, которые заканчиваются в городах \(v_1\) и \(v_2\) соответственно. Если \(v_1 = v_2\), то EVA успешно перемещается в город \(v_1\). В противном случае EVA остается в городе \(u\), а обе выбранные ими дороги будут уничтожены.

Возможна ситуация, когда EVA находится в городе \(u\) (\(u \neq n\)) и нет неразрушенных дорог, начинающихся в городе \(u\). В этом случае миссия будет провалена. А если в итоге они достигнут города \(n\), то миссия будет считаться успешной.

Каждый раз, когда они выбирают дороги, Медуза знает, что Асука выберет дорогу случайным образом. Теперь Медуза хочет знать, если она выбирает дороги оптимально, то какова максимальная вероятность того, что миссия будет успешной.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке содержится количество наборов входных данных \(t\) (\(1 \leq t \leq 2000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа, \(n\) и \(m\) (\(2 \leq n \leq 5000\), \(0 \leq m \leq \min(\frac{n(n-1)}{2}, 2 \cdot 10^5)\)) — количество городов и количество дорог.

В следующих \(m\) строках каждого набора входных данных содержатся по два целых числа \(a\) и \(b\) (\(1 \leq a < b \leq n\)) — дорога из города \(a\) в город \(b\).

Гарантируется, что для каждого набора входных данных каждая дорога встречается не более одного раза.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\), а сумма \(m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите максимальную вероятность того, что миссия будет успешной, если Медуза выбирает дороги оптимально.

Ваш ответ будет принят, если абсолютная или относительная погрешность не превышает \(10^{-9}\). Формально пусть ваш ответ равен \(a\), а ответ жюри — \(b\). Ваш ответ считается правильным, если \(\frac{|a-b|}{\max(1,|b|)} \leq 10^{-9}\).

Примечание

В первом наборе входных данных Медуза выберет \(v_1=3\), а Асука выберет \(v_2=2\) с вероятностью \(0.5\) и \(v_2=3\) с вероятностью \(0.5\). Миссия будет успешной с вероятностью \(0.5\).

D. Медуза и Мику

дп математика разделяй и властвуй Теория вероятностей *2800

Имеется \(n + 1\) городов с номерами от \(0\) до \(n\), соединенные \(n\) дорогами. Дорога \(i\)-го города \((1 \leq i \leq n)\) соединяет города \(i-1\) и \(i\) двунаправленно. После того, как Медуза прилетела обратно в город \(0\), она обнаружила, что оставила свою фуфу Мику в городе \(n\).

Каждая дорога имеет целый положительный уровень красоты. Обозначим красоту \(i\)-й дороги как \(a_i\).

Медуза пытается найти свою фуфу. Из-за плохого чувства направления она не знает, в какую сторону идти. Каждый день она наугад выбирает дорогу, связанную с городом, в котором находится в данный момент, и идет по ней. Пусть \(s\) — сумма красот дорог, ведущих в текущий город. Для каждой дороги, связанной с текущим городом, Медуза пройдет ее с вероятностью \(\frac x s\), где \(x\) — красота дороги, и достигнет города, расположенного на другом конце дороги.

Медуза стартует из города \(0\), и, только достигнув города \(n\), она может воссоединиться со своей фуфу.

Вы хотите выбрать такую красоту дорог, чтобы ожидаемое количество дней, которые потребуются Медузе для поиска своей фуфу, было минимально возможным. Однако из-за ограниченного финансирования сумма красот всех дорог должна быть меньше или равна \(m\).

Найдите минимальное ожидаемое количество дней, которое потребуется Медузе для возвращения своей фуфу, если красота дорог выбрана оптимально.

Входные данные

Первая и единственная строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq m \leq 3000\)) — количество дорог и максимальную сумму красоты дорог.

Выходные данные

Выведите минимальное ожидаемое количество дней, необходимое Медузе для возвращения своей фуфу, если красота дорог выбрана оптимально.

Ваш ответ будет принят, если абсолютная или относительная погрешность не превышает \(10^{-9}\). Формально пусть ваш ответ будет \(a\), а ответ жюри - \(b\). Ваш ответ считается правильным, если \(\frac{|a-b|}{\max(1,|b|)} \leq 10^{-9}\).

Примечание

В первом примере оптимальным назначением красоты является \(a=[1, 2, 5]\). Ожидаемое количество дней, необходимое Медузе для возвращения своей фуфу, составляет \(5.2\).

E. Медуза и взлом

дп математика *3000

Известно, что быстрая сортировка работает путем случайного выбора «разделяющего» элемента из массива и разбиения остальных элементов на два подмассива в зависимости от того, меньше они или больше разделяющего. Но Медуза считает, что выбор случайного элемента — это пустая трата времени, поэтому она всегда выбирает первый элемент в качестве разделяющего. Время, необходимое для выполнения ее кода, можно вычислить с помощью следующего псевдокода:


function fun(A)
if A.length > 0
пусть L[1 ... L.length] и R[1 ... R.length] будут новыми массивами
L.length = R.length = 0
for i = 2 to A.length
if A[i] < A[1]
L.length = L.length + 1
L[L.length] = A[i]
else
R.length = R.length + 1
R[R.length] = A[i]
return A.length + fun(L) + fun(R)
else
return 0

Теперь вы хотите показать ей, что ее код работает медленно. Когда функция \(\mathrm{fun(A)}\) будет больше или равна \(lim\), ее код получит вердикт \(\text{Time Limit Exceeded}\). Вы хотите узнать, сколько различных перестановок \(P\) массива \([1, 2, \dots, n]\) удовлетворяет \(\mathrm{fun(P)} \geq lim\). Поскольку ответ может быть большим, вам нужно найти ответ только по модулю \(10^9+7\).

Входные данные

Единственная строка входных данных содержит два целых числа \(n\) и \(lim\) (\(1 \leq n \leq 200\), \(1 \leq lim \leq 10^9\)).

Выходные данные

Выведите количество различных перестановок, удовлетворяющих условию по модулю \(10^9+7\).

Примечание

В первом примере \(P = [1, 4, 2, 3]\) удовлетворяет условию, так как: \(\mathrm{fun([1, 4, 2, 3]) = 4 + fun([4, 2, 3]) = 7 + fun([2, 3]) = 9 + fun([3]) = 10}\).

Не забудьте вывести ответ по модулю \(10^9+7\).

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. Голы победы

математика *800

В футбольном турнире участвуют \(n\) команд. Каждая команда сыграет с каждой один раз. После каждого матча Пак Чанек получает два целых числа в качестве результата матча - количество голов, забитых обеими командами в ходе матча. Эффективность команды равна общему количеству голов, забитых командой в каждом из матчей, минус общее количество голов, забитых соперником в каждом из матчей.

После окончания турнира Пак Денгклек подсчитывает эффективность каждой команды. Оказывается, что он забыл про эффективность одной из команд. Дана эффективность \(n-1\) команд \(a_1,a_2,a_3,\ldots,a_{n-1}\). Какова эффективность недостающей команды? Можно показать, что эффективность недостающей команды может быть определена однозначно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — количество команд.

Вторая строка содержит \(n-1\) целых чисел \(a_1,a_2,a_3,\ldots,a_{n-1}\) (\(-100\leq a_i\leq100\)) — эффективность \(n-1\) команд.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке число, равное эффективности недостающей команды.

Примечание

В первом наборе входных данных ниже приведен возможный результат турнира:

  • Команда \(1\) против команды \(2\): \(1-2\)
  • Команда \(1\) против команды \(3\): \(3-0\)
  • Команда \(1\) против команды \(4\): \(3-2\)
  • Команда \(2\) против команды \(3\): \(1-4\)
  • Команда \(2\) против команды \(4\): \(1-3\)
  • Команда \(3\) против команды \(4\): \(5-0\)

Эффективность каждой команды равна:

  1. Команда \(1\): \((1+3+3)-(2+0+2)=7-4=3\)
  2. Команда \(2\): \((2+1+1)-(1+4+3)=4-8=-4\)
  3. Команда \(3\): \((0+4+5)-(3+1+0)=9-4=5\)
  4. Команда \(4\): \((2+3+0)-(3+1+5)=5-9=-4\)

Таким образом, эффективность недостающей команды (команды \(4\)) равна \(-4\).

Можно показать, что при любом возможном турнире \(4\) команд, в котором эффективность \(3\) команд равна \(3\), \(-4\) и \(5\), эффективность команды \(4\) всегда будет равна \(-4\).

C. Джойборд

математика теория чисел *1200

Чанека, прирождённый геймер, изобрела новый игровой контроллер под названием «Джойборд». Интересно, что изобретенный ею джойборд можно использовать только для одной игры.

На джойборде имеется экран, содержащий \(n+1\) слотов, пронумерованных от \(1\) до \(n+1\) слева направо. Все \(n+1\) слотов заполняются массивом целых неотрицательных чисел \([a_1,a_2,a_3,\ldots,a_{n+1}]\). Чанека, как игрок, должна присвоить \(a_{n+1}\) целое число от \(0\) до \(m\) включительно. Тогда для каждого \(i\) от \(n\) до \(1\) значение \(a_i\) будет равно остатку от деления \(a_{i+1}\) (соседнего справа значения) на \(i\). Другими словами, \(a_i = a_{i + 1} \bmod i\).

Чанека хочет, чтобы после присвоения каждому слоту целого числа на всем экране (среди всех слотов \(n+1\)) было ровно \(k\) различных значений. Сколько существует допустимых способов присвоения целого неотрицательного числа слоту \(n+1\)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2\cdot10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n \leq 10^9\); \(0 \leq m \leq 10^9\); \(1 \leq k \leq n+1\)): всего имеется \(n+1\) слотов, значение в слоте \(n+1\) не должно быть больше \(m\), и в итоговом массиве должно быть ровно \(k\) различных значений.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите количество допустимых способов присвоения целого неотрицательного числа в слот \(n+1\).

Примечание

В первом наборе входных данных одним из \(2\) возможных способов для Чанеки является выбор \(a_{n+1}=6\). Если она это сделает, то:

  • \(a_4=a_5\bmod 4=6\bmod 4=2\)
  • \(a_3=a_4\bmod 3=2\bmod 3=2\)
  • \(a_2=a_3\bmod 2=2\bmod 2=0\)
  • \(a_1=a_2\bmod 1=0\bmod 1=0\)
  • \(a = [0, 0, 2, 2, 6]\)
  • Существует \(3\) различных значения.

Во втором наборе входных данных для Чанеки возможен \(1\) вариант — выбрать \(a_{n+1}=0\). Если она это сделает, то \(a = [0, 0, 0]\). Существует только \(1\) значение.

В третьем наборе входных данных не существует возможного способа присвоения целого неотрицательного числа в слот \(n+1\).

B. Алекса и стек

Конструктив математика *800

После Сербской олимпиады по информатике Алекса был очень грустен, потому что он не выиграл медаль (он не знал о стеке), поэтому Василий пришёл и дал ему легкую задачу, чтобы сделать его день лучше.

Василий дал Алексе положительное целое число \(n\) (\(n \ge 3\)) и попросил его построить строго возрастающий массив размера \(n\) из положительных целых чисел так, чтобы

  • \(3\cdot a_{i+2}\) не делилось на \(a_i+a_{i+1}\) для каждого \(i\) (\(1\le i \le n-2\)).

Обратите внимание, что строго возрастающий массив \(a\) размера \(n\) - это массив, где \(a_i < a_{i+1}\) для каждого \(i\) (\(1 \le i \le n-1\)).

Поскольку Алекса думает, что он плохой программист, он попросил вас помочь ему найти такой массив.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Можно доказать, что решение существует для любого \(n\). Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных примера \(a_1=6\), \(a_2=8\), \(a_3=12\), поэтому \(a_1+a_2=14\), и \(3 \cdot a_3=36\), поэтому \(a_1+a_2\) не делит \(3 \cdot a_3\).

C. Василий в Чачаке

математика *900

Аца и Милован, два программиста, решили дать Василию задачу, чтобы проверить его навыки.

Василию даны три положительных целых числа: \(n\), \(k\) и \(x\), и он должен определить, может ли он выбрать \(k\) различных целых чисел от \(1\) до \(n\), таких что их сумма равна \(x\).

Поскольку Василий сейчас находится в самом странном городе в Сербии, где живут Аца и Милован, Чачаке, эта задача кажется ему странной. Поэтому ему нужна ваша помощь с этой задачей.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит три целых числа \(n\), \(k\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le n\), \(1 \le x \le 4 \cdot 10^{10}\)) — максимальный элемент, количество элементов, которые он может выбрать, и сумма, которую он должен получить.

Обратите внимание, что сумма \(n\) по всем тестам может превышать \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одну строку: «YES», если возможно выбрать \(k\) различных целых чисел от \(1\) до \(n\), таких что их сумма равна \(x\), и «NO», если невозможно.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом тесте \(n = 5,\ k=3,\ x=10\), поэтому мы можем выбрать числа: \(2\), \(3\), \(5\), сумма которых равна \(10\), поэтому ответ «YES».

Во втором тесте \(n = 5, \ k=3, \ x=3\), нет трех чисел, которые удовлетворяют условию, поэтому ответ «NO». Можно показать, что нет трех чисел, сумма которых равна \(3\).

F. Василий любит теорию чисел

математика Перебор теория чисел *1900

Василий - умный студент, и его преподаватель дискретной математики Соня хорошо преподала ему теорию чисел.

Он дал Огнену положительное целое число \(n\).

Обозначим \(d(n)\) как количество положительных делителей числа \(n\), а \(gcd(a, b)\) как наибольшее целое число \(g\), такое что \(a\) делится на \(g\) и \(b\) делится на \(g\).

После этого он дал Огнену \(q\) запросов, и есть \(2\) типа запросов.

  • \(1\), \(x\) — сделать \(n\) равным \(n \cdot x\), а затем ответить на следующий вопрос: существует ли положительное целое число \(a\), такое что \(gcd(a, n) = 1\), и \(d(n \cdot a) = n\)?
  • \(2\) — сбросить \(n\) до его исходного значения (до применения запросов).

Обратите внимание, что \(n\) не возвращается к своему исходному значению после запроса типа 1.

Поскольку Огнен боится теории чисел, Василий обещал ему, что после каждого запроса \(d(n) \le 10^9\), однако, даже с таким ограничением, ему все равно нужна ваша помощь с этой задачей.

Входные данные

Первая строка содержит положительное целое число \(t\), (\(1 \le t \le 100\))  — количество наборов входных данных.

Первая строка каждого набора содержит \(2\) целых числа, \(n\) и \(q\) (\(1 \le n \le 10^{6}\), \(1\le q \le 1000\)) — число \(n\) и количество запросов.

Следующие \(q\) строк содержат целое число \(k\) (\(1 \le k \le 2\)), если \(k=1\), то в этой строке есть еще одно целое число \(x\) (\(1 \le x \le 10^6\))  — описание запросов.

Гарантируется, что для данного ввода \(d(n)\) в любой момент не превышает \(10^9\).

Гарантируется, что сумма \(q\) по всем наборам входных данных не превышает \(10^3\).

Выходные данные

Для каждого запроса типа 1, вы должны вывести «YES», если существует такое положительное \(a\), что \(gcd(a, n) = 1\) и \(d(n \cdot a)=n\), и «NO» в противном случае.

Вы можете вывести ответ в любом регистре (например, строки «yEs», «yes», «Yes», и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе примера, изначально \(n=1\).

После первого запроса: \(n=1\), \(d(n)=1\), поэтому, взяв \(a = 1\), \(d(n \cdot a) = n\), и ответ на этот запрос «YES».

После второго запроса: \(n=2\), \(d(n)=2\), мы можем снова взять \(a = 1\), \(d(n \cdot a) = n\), и ответ на этот запрос «YES».

После третьего запроса \(n=1\), и это запрос типа \(2\), поэтому мы не отвечаем на него.

После четвертого запроса: \(n=8\), и взяв \(a=3\), \(d(n \cdot a) = d(24) = 8 = n\), поэтому ответ «YES».

После пятого запроса: \(n=72\), теперь мы можем взять \(a=637\), чтобы получить \(n \cdot a = 45864\), и \(d(n \cdot a) = 72 = n\), поэтому ответ «YES».

Во втором наборе примера, изначально \(n=20\).

После первого запроса: \(n=60\), и ответ «YES».

После второго запроса: \(n=20\), это запрос типа \(2\), поэтому мы не отвечаем на него.

После третьего запроса: \(n=140\), и можно доказать, что независимо от того, какое положительное целое число \(a\) мы возьмем, \(d(n \cdot a)\) никогда не будет равно \(n\), поэтому ответ на этот запрос «NO».

После четвертого запроса: \(n=1680\). Можно доказать, что существует положительное целое число \(a\), такое что \(d(n \cdot a) = n\), поэтому ответ «YES».

D. Сумма функций XOR

битмаски дп Комбинаторика математика разделяй и властвуй *1700

Дан массив \(a\) длины \(n\), состоящий из неотрицательных целых чисел.

Необходимо вычислить значение \(\sum_{l=1}^{n} \sum_{r=l}^{n} f(l, r) \cdot (r - l + 1)\), где \(f(l, r)\) равно \(a_l \oplus a_{l+1} \oplus \dots \oplus a_{r-1} \oplus a_r\) (символ \(\oplus\) обозначает побитовое исключающее ИЛИ).

Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9)\).

Выходные данные

Выведите одно целое число — значение \(\sum_{l=1}^{n} \sum_{r=l}^{n} f(l, r) \cdot (r - l + 1)\), взятое по модулю \(998244353\).

Примечание

В первом примере ответ равен \(f(1, 1) + 2 \cdot f(1, 2) + 3 \cdot f(1, 3) + f(2, 2) + 2 \cdot f(2, 3) + f(3, 3) = \) \(= 1 + 2 \cdot 2 + 3 \cdot 0 + 3 + 2 \cdot 1 + 2 = 12\).

C. НОК

*особая задача математика реализация *1400

Наименьшее общее кратное (НОК) двух чисел — это наименьшее целое положительное число, которое делится на каждое из этих чисел. Заданы числа a и b. Найдите их НОК.

Входные данные

Входные данные содержат два целых числа a и b (1 ≤ a, b ≤ 103), разделенных пробелом.

Выходные данные

Выведите НОК(a, b).

B. Три паутинки

математика *900

Однажды бармен Деким нашёл три паутинки и ножницы.

За одну операцию Деким выбирает любую паутинку и разрезает её на две паутинки, длины которых целые положительные числа и их сумма равна длине разрезаемой паутинки.

Например, он может разрезать паутинку длины \(5\) на паутинки длины \(2\) и \(3\), но не может разрезать её на паутинки длины \(2.5\) и \(2.5\) или на паутинки длины \(0\) и \(5\) или на паутинки длины \(3\) и \(4\).

Деким может выполнить не более трёх операций. Разрешено резать паутинки, полученные предыдущими разрезами. Получится ли у него сделать все паутинки равной длины?

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

В единственной строке каждого набора входных данных даны целые числа \(a\), \(b\), \(c\) (\(1 \le a, b, c \le 10^9\)) — длины паутинок.

Выходные данные

Для каждого набора входных данных выведите «YES», если возможно сделать все паутинки равной длины, выполнив не более трёх операций, в противном случае выведите «NO».

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Рассмотрим некоторые наборы входных данных первого теста.

В первом наборе входных данных можно действовать так:

\(1, 3, 2 \to 1, 2, 1, 2 \to 1, 1, 1, 1, 2 \to 1, 1, 1, 1, 1, 1\).

Во втором наборе входных данных можно ничего не делать, нитки уже равной длины.

В третьем наборе входных данных не получится сделать нитки равной длины.

D. Уравняй делением

математика теория чисел *1300

Вам дан массив \(a\), состоящий из \(n\) целых положительных чисел. Вы можете совершать над ним операцию, состоящую из следующей последовательности действий:

  1. выбрать пару элементов \(a_i\) и \(a_j\) (\(1 \le i, j \le n\) и \(i \neq j\));
  2. выбрать один из делителей числа \(a_i\), то есть число \(x\) такое, что \(a_i \bmod x = 0\);
  3. заменить \(a_i\) на \(\frac{a_i}{x}\) и \(a_j\) на \(a_j \cdot x\).
Определите, можно ли, применив операцию к массиву некоторое количество раз (возможно, нулевое) сделать все элементы в массиве одинаковыми?

Например, пусть дан массив \(a\) = [\(100, 2, 50, 10, 1\)], состоящий из \(5\) элементов. Произведем над ним две операции:

  1. Выберем \(a_3 = 50\) и \(a_2 = 2\), \(x = 5\). Заменим \(a_3\) на \(\frac{a_3}{x} = \frac{50}{5} = 10\), \(a_2\) на \(a_2 \cdot x = 2 \cdot 5 = 10\). Получим массив \(a\) = [\(100, 10, 10, 10, 1\)];
  2. Выберем \(a_1 = 100\) и \(a_5 = 1\), \(x = 10\). Заменим \(a_1\) на \(\frac{a_1}{x} = \frac{100}{10} = 10\), \(a_5\) на \(a_5 \cdot x = 1 \cdot 10 = 10\). Получим массив \(a\) = [\(10, 10, 10, 10, 10\)].
После выполнения данных операций все элементы массива \(a\) стали равны \(10\).
Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит единственное целое число \(n\) (\(1 \le n \le 10^4\)) — количество элементов в массиве \(a\).

Вторая строка каждого набора содержит ровно \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^6\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если можно сделать элементы массива равными, применяя операцию некоторое (возможно, нулевое) количество раз;
  • «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии задачи.

A. Утро

математика *800

Вам дан четырехзначный пинкод, состоящий из цифр от \(0\) до \(9\), который нужно набрать. Изначально курсор указывает на цифру \(1\). За одну секунду вы можете сделать ровно одно из следующих двух действий:

  • Нажать на курсор, чтобы вывести данную цифру,
  • Передвинуть курсор на любую соседнюю по стороне цифру.

На картинке выше показано устройство, которым вы пользуетесь для набора пинкода. Например, для цифры \(5\) соседними цифрами являются \(4\) и \(6\), а у цифры \(0\) всего одна соседняя цифра \(9\).

Определите за какое наименьшее количество секунд можно набрать данный вам четырехзначный пинкод.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Единственная строка каждого набора входных данных описывает пинкод как строку длины \(4\), состоящую из цифр от \(0\) до \(9\).

Выходные данные

Для каждого набора входных данных выведите наименьшее количество секунд, которое нужно, чтобы ввести данный пинкод.

Примечание

В первом наборе входных данных курсор нужно нажать \(4\) раза.

Во втором наборе входных данных можно справится за \(9\) секунд следующим образом:

  • Нажать на курсор.
  • Передвинуть курсор в цифру \(2\).
  • Нажать на курсор.
  • Передвинуть курсор в цифру \(3\).
  • Нажать на курсор.
  • Передвинуть курсор в цифру \(4\).
  • Передвинуть курсор в цифру \(5\).
  • Передвинуть курсор в цифру \(6\).
  • Нажать на курсор.

C. Малинки

дп математика *1000

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) и число \(k\) (\(2 \leq k \leq 5\)). За одну операцию вы можете сделать следующее:

  • Выбрать индекс \(1 \leq i \leq n\),
  • Сделать \(a_i = a_i + 1\).

Найдите наименьшее количество операций, которые нужно сделать, чтобы произведение всех чисел массива \(a_1 \cdot a_2 \cdot \ldots \cdot a_n\) делилось на \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 10^5\), \(2 \leq k \leq 5\)) — размер массива \(a\) и число \(k\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее количество операций, которое нужно сделать, чтобы произведение всех чисел массива делилось на \(k\).

Примечание

В первом наборе входных данных нужно два раза выбрать индекс \(i = 2\). После этого массив будет равен \(a = [7, 5]\). Произведение всех чисел массива равно \(35\).

В четвертом наборе входных данных произведение чисел массива равно \(120\), что уже делится на \(5\), поэтому не нужно применять операции.

В восьмом наборе входных данных можно сделать две операции, выбрав \(i = 2\) и \(i = 3\) в любом порядке. После этого массив будет равен \(a = [1, 6, 10]\). Произведение чисел массива равно \(60\).

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\) ответа не существует.

D. Считалочка

дп математика теория чисел *2100

Дан массив целых чисел \(a_1, a_2, \ldots, a_n\).

Пару целых чисел \((i, j)\), таких что \(1 \le i < j \le n\), назовём хорошей, если не существует числа \(k\) (\(1 \le k \le n\)), такого что одновременно \(a_i\) делится на \(a_k\) и \(a_j\) делится на \(a_k\).

Найдите количество хороших пар.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите количество хороших пар.

Примечание

В первом наборе входных данных нет хороших пар.

Во втором наборе входных данных хорошими являются пары \((1, 2)\), \((2, 3)\) и \((2, 4)\).

E. Сложная конструкция

жадные алгоритмы математика реализация *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\).

A. Сумма трех

Конструктив математика Перебор *800

У Монокарпа есть целое число \(n\).

Он хочет представить свое число в виде суммы трех различных целых положительных чисел \(x\), \(y\) и \(z\). При этом Монокарп хочет, чтобы никакое из чисел \(x\), \(y\) и \(z\) не было кратно трем, то есть ни одно из этих чисел не делилось нацело на \(3\).

Перед вами стоит задача помочь Монокарпу и найти любую подходящую тройку различных целых положительных чисел \(x\), \(y\) и \(z\), либо сообщить, что такой тройки не существует.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 10^{9}\)).

Выходные данные

На каждый набор входных данных, если не существует подходящей тройки \(x\), \(y\) и \(z\), в первую строку выведите NO.

В противном случае, в первую строку выведите YES. Во вторую строку выведите подходящую тройку различных целых положительных чисел \(x\), \(y\) и \(z\) таких, что \(x + y + z = n\), и никакое из выведенных чисел не кратно числу \(3\). Если подходящих троек несколько, выведите любую из них.

Примечание

В первом наборе входных данных одна из подходящих троек \(x = 4\), \(y = 5\), \(z = 1\). Никакое из этих чисел не кратно трем, а \(4 + 5 + 1 = 10\).

Во втором наборе не существует ни одной подходящей тройки чисел.

В третьем наборе одна из подходящих троек \(x = 2\), \(y = 8\), \(z = 5\). Никакое из этих чисел не кратно трем, а \(2 + 8 + 5 = 15\).

В четвертом наборе не существует ни одной подходящей тройки чисел.

B. Fear of the Dark

Бинарный поиск геометрия математика *1200

Монокарп пытается добраться домой с работы. В данный момент он находится в точке \(O = (0, 0)\) двумерной координатной плоскости; его дом находится в точке \(P = (P_x, P_y)\).

К сожалению, уже поздний вечер, и поэтому очень темно. Монокарп боится темноты. Он хотел бы идти домой по освещенному пути.

К счастью, есть два фонаря, расположенные в точках \(A = (A_x, A_y)\) и \(B = (B_x, B_y)\). Вы можете выбрать любое неотрицательное число \(w\) и установить мощность обоих фонарей равной \(w\). Если мощность фонаря установлена на \(w\), то он освещает круг радиусом \(w\) с центром в месте расположения фонаря (включая границы круга).

Вам нужно выбрать минимальное неотрицательное значение \(w\) для мощности фонарей таким образом, чтобы существовал полностью освещенный путь от точки \(O\) до точки \(P\). Считайте, что фонари не мешают движению Монокарпа.

Картинка, показывающая первые два набора входных данных
Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • первая строка содержит два целых числа \(P_x\) и \(P_y\) (\(-10^3 \le P_x, P_y \le 10^3\)) — местоположение дома Монокарпа;
  • вторая строка содержит два целых числа \(A_x\) и \(A_y\) (\(-10^3 \le A_x, A_y \le 10^3\)) — местоположение первого фонаря;
  • третья строка содержит два целых числа \(B_x\) и \(B_y\) (\(-10^3 \le B_x, B_y \le 10^3\)) — местоположение второго фонаря.

Дополнительное ограничение на входные данные:

  • в каждом наборе входных данных точки \(O\), \(P\), \(A\) и \(B\) не совпадают друг с другом.
Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке — одно вещественное число, равное минимальному значению \(w\), при котором существует полностью освещенный путь от точки \(O\) до точки \(P\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превышает \(10^{-6}\) — формально, если ваш ответ равен \(a\), а ответ жюри равен \(b\), ваш ответ будет принят, если \(\dfrac{|a - b|}{\max(1, b)} \le 10^{-6}\).

D. Монокарп и множество

Комбинаторика математика Структуры данных *2100

У Монокарпа есть \(n\) чисел \(1, 2, \dots, n\) и множество (изначально пустое). Он \(n\) раз добавляет свои числа в это множество в некотором порядке. Во время каждого шага он добавляет новое число (которого ранее не было в множестве). Другими словами, последовательность добавленных чисел является перестановкой длины \(n\).

Каждый раз, когда Монокарп добавляет элемент в множество, кроме первого раза, он записывает символ:

  • если элемент, который Монокарп пытается добавить, становится максимальным элементом в множестве, Монокарп записывает символ >;
  • если элемент, который Монокарп пытается добавить, становится минимальным элементом в множестве, Монокарп записывает символ <;
  • если ни одно из вышеперечисленного не выполняется, Монокарп записывает символ ?.

Дана строка \(s\) из \(n-1\) символов, которая представляет записанные символы Монокарпом (в порядке их записи). Вам нужно обработать \(m\) запросов к строке. Каждый запрос имеет следующий формат:

  • \(i\) \(c\) — заменить \(s_i\) символом \(c\).

Перед всеми запросами и после каждого запроса вам нужно вычислить количество различных способов упорядочить числа \(1, 2, 3, \dots, n\) таким образом, что если Монокарп вставляет числа в множество в этом порядке, он получает строку \(s\). Поскольку ответы могут быть большими, выведите их по модулю \(998244353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le m \le 3 \cdot 10^5\)).

Вторая строка содержит строку \(s\), состоящую из ровно \(n-1\) символов <, > и/или ?.

Затем следуют \(m\) строк. Каждая из них представляет запрос. Каждая строка содержит целое число \(i\) и символ \(c\) (\(1 \le i \le n-1\); \(c\) может быть <, >, или ?).

Выходные данные

Перед всеми запросами и после каждого запроса выведите одно целое число — количество способов упорядочить числа \(1, 2, 3, \dots, n\) таким образом, чтобы, если Монокарп вставляет числа в множество в этом порядке, он получает строку \(s\). Поскольку ответы могут быть большими, выведите их по модулю \(998244353\).

Примечание

В первом примере до обработки запросов есть три способа упорядочить числа:

  • \(3, 1, 2, 5, 4, 6\);
  • \(4, 1, 2, 5, 3, 6\);
  • \(4, 1, 3, 5, 2, 6\).

После последнего запроса есть один способ упорядочить числа:

  • \(3, 5, 4, 6, 2, 1\).

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\)-й проект: сначала количество программистов, затем их индексы в произвольном порядке.

Если есть несколько ответов, выведите любой из них.

D. Разрез

Бинарный поиск Деревья математика разделяй и властвуй снм Структуры данных *2700

Назовём массив \(b_1, b_2, \ldots, b_m\) (\(m \ge 2\)) хорошим, если его можно разрезать на две части так, чтобы все элементы в левой части были строго меньше, чем все элементы в правой части. Другими словами, должен существовать такой индекс \(1 \le i < m\), что любой элемент из \(b_1, \ldots, b_i\) строго меньше любого элемента из \(b_{i+1}, \ldots, b_m\).

Дан массив \(a_1, a_2, \ldots a_n\), состоящий из различных целых чисел от \(1\) до \(n\). Поступают \(q\) запросов. В каждом запросе даны два числа \(l\) и \(r\). Требуется для каждого запроса проверить, является ли массив \(a_l, a_{l+1}, \ldots, a_r\) хорошим.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — размер массива.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_n \le n\)) — элементы массива \(a\).

Третья строка содержит единственное целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i < r_i \le n\)) — описание \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите «Yes» (без кавычек), если массив \(a_l, a_{l+1}, \ldots, a_r\) является хорошим, и «No» (без кавычек) иначе.

Вы можете выводить «Yes» и «No» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом примере:

  • Массив \([3,2,1,4,5]\) можно разрезать на две части \([3,2,1]\) и \([4,5]\).
  • Массив \([3,2,1]\) нельзя разрезать на две части так, чтобы все элементы в левой части были меньше всех элементов в правой части.
  • Массив \([3,2,1,4]\) можно разрезать на две части \([3,2,1]\) и \([4]\).
  • Массив \([3,2]\) нельзя разрезать на две части так, чтобы все элементы в левой части были меньше всех элементов в правой части.
  • Массив \([2,1,4,5]\) можно разрезать на две части \([2,1]\) и \([4,5]\).

Во втором примере:

  • Массив \([2,4,3]\) можно разрезать на две части \([2]\) и \([4,3]\).
  • Массив \([6,2,4,3,5]\) нельзя разрезать на две части так, чтобы все элементы в левой части были меньше всех элементов в правой части.
  • Массив \([4,3,5]\) можно разрезать на две части \([4,3]\) и \([5]\).

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)\).

В четвертом наборе входных данных Дореми вообще не может добавить ни одного ребра.

B. Посчитай ромбы

математика Перебор *1300

Задано два целых положительных числа w и h. Требуется посчитать количество ромбов, которые обладают следующими свойствами:

  • Имеют положительную площадь.
  • Вершины находятся в целочисленных точках.
  • Все вершины ромба находятся внутри или на границе прямоугольника с вершинами в точках (0, 0), (w, 0), (w, h), (0, h). Другими словами, для всех вершин (xi, yi) ромба должны выполняться неравенства 0 ≤ xi ≤ w и 0 ≤ yi ≤ h.
  • Диагонали ромба параллельны осям координат.

Посчитайте сколько таких ромбов.

Напоминаем, что ромбом называется четырёхугольник, у которого все стороны равны.

Входные данные

В первой строке записаны два целых числа w и h (1 ≤ w, h ≤ 4000) — размеры прямоугольника.

Выходные данные

Выведите одно число — количество искомых ромбов.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

В первом примере можно построить только один ромб удовлетворяющий ограничениям. Его вершины находятся в точках (1, 0), (2, 1), (1, 2), (0, 1).

B. Дежавю

математика Перебор сортировки *1100

Дан массив \(a\) длины \(n\), состоящий из целых положительных чисел и массив \(x\) длины \(q\), также состоящий из целых положительных чисел.

Происходят \(q\) изменений. На \(i\)-м изменении (\(1 \leq i \leq q\)) для каждого \(j\) (\(1 \leq j \leq n\)), такого что \(a_j\) делится на \(2^{x_i}\), к \(a_j\) прибавляется \(2^{x_i-1}\). Обратите внимание, \(x_i\) (\(1 \leq x_i \leq 30\)) — целое положительное число, не превосходящее 30.

После всех запросов изменения нужно вывести итоговый массив.

Входные данные

В первой строке содержится единственное число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 10^5\)) — длину массива \(a\) и количество запросов соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\) — элементы массива \(a\) (\(1 \leq a_i \leq 10^9\)).

Третья строка каждого набора входных данных содержит \(q\) целых чисел \(x_1, x_2, x_3, \ldots, x_q\) — элементы массива \(x\) (\(1 \leq x_i \leq 30\)), которые являются запросами изменения.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите массив после всех изменений.

Примечание

В первом наборе входных данных первая операция изменения прибавит \(2\) к числам на позициях \(4\) и \(5\). После этого прибавления массив будет выглядеть так: \([1, 2, 3, 6, 6]\). Остальные операции не будут изменять массив.

Во втором наборе входных данных первая операция не изменит массив. Вторая операция изменения прибавит \(8\) к числу на позиции \(5\), а массив будет выглядеть так: \([7, 8, 12, 36, 56, 6, 3]\). Третья операция изменения прибавит \(2\) к числам на позициях \(2, 3\), \(4\) и \(5\). Массив будет выглядеть так: \([7, 10, 14, 38, 58, 6, 3]\).

D. Подозрительные логарифмы

Бинарный поиск математика Перебор *1900

Пусть \(f\)(\(x\)) — это округленный вниз двоичный логарифм \(x\). То есть \(f\)(\(x\)) — наибольшее такое целое неотрицательное число \(y\), что \(2^y\) не превосходит \(x\).

Пусть \(g\)(\(x\)) — это округленный вниз логарифм числа \(x\) по основанию \(f\)(\(x\)). То есть \(g\)(\(x\)) — наибольшее такое целое неотрицательное число \(z\), что \({f(x)}^{z}\) не превосходит \(x\).

Вам даны \(q\) запросов. \(i\)-й запрос выглядит как два числа \(l_i\), \(r_i\). Ответом на запрос является сумма \(g\)(\(k\)) по всем целым положительным \(k\) таким, что \(l_i \leq k \leq r_i\). Ответы на запросы выводите по модулю \({10^9 + 7}\).

Входные данные

В первой строке дано число \(q\) — число запросов (\(1 \leq q \leq 10^5\)).

В следующих \(q\) строках заданы два числа \(l_i\), \(r_i\) — границы отрезка \(i\)-го запроса (\(4 \leq l_i \leq r_i \leq 10^{18}\)).

Выходные данные

Для каждого запроса выведите ответ на него по модулю \(10^9 + 7\).

Примечание

В таблице снизу приведены значения функций \(f\)(\(x\)) и \(g\)(\(x\)) при целых \(x\), таких что \(1 \leq x \leq 8\).

\(x\)\(1\)\(2\)\(3\)\(4\)\(5\)\(6\)\(7\)\(8\)
\(f\)\(0\)\(1\)\(1\)\(2\)\(2\)\(2\)\(2\)\(3\)
\(g\)\(-\)\(-\)\(-\)\(2\)\(2\)\(2\)\(2\)\(1\)

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\), упростив вторую и четвертую контрольные.

A. Сундук с сокровищами

математика *800

Монокарп нашел карту сокровищ. Карта показывает местоположение сокровища на оси OX. Монокарп находится в точке \(0\), сундук сокровищ находится в точке \(x\), ключ от сундука находится в точке \(y\).

Очевидно, Монокарп хочет открыть сундук. Он может выполнять следующие действия:

  • пойти на \(1\) влево или \(1\) вправо (затратив \(1\) секунду);
  • поднять ключ или сундук, если Монокарп находится в той же точке, что и объект (затратив \(0\) секунд);
  • опустить сундук в текущей точке (затратив \(0\) секунд);
  • открыть сундук, если Монокарп находится в той же точке, что и сундук, и он подобрал ключ ранее (затратив \(0\) секунд).

Монокарп может нести сундук, но сундук довольно тяжелый. Монокарп знает, что может нести его суммарно не более \(k\) секунд (его выносливость не сбросится, если он поднимет и опустит сундук).

Какое минимальное время потребуется Монокарпу, чтобы открыть сундук?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны три целых числа \(x, y\) и \(k\) (\(1 \le x, y \le 100\); \(x \neq y\); \(0 \le k \le 100\)) — точки, где находятся сундук и ключ, и максимальное время, которое Монокарп может нести сундук.

Выходные данные

Для каждого теста выведите одно целое число — минимальное время, необходимое Монокарпу, чтобы открыть сундук.

Примечание

В первом наборе входных данных Монокарп может открыть сундук за \(7\) секунд с помощью следующей последовательности действий:

  • пойти \(5\) раз вправо (\(5\) секунд);
  • поднять сундук (\(0\) секунд);
  • пойти \(2\) раза вправо (\(2\) секунды);
  • поднять ключ (\(0\) секунд);
  • опустить сундук (\(0\) секунд);
  • открыть сундук (\(0\) секунд).

Он несет сундук только \(2\) секунды, что не превышает его выносливости.

Во втором наборе Монокарп может поднять ключ по пути к сундуку.

В третьем наборе Монокарп не может использовать стратегию из первого тестового случая, потому что он должен был бы нести сундук в течение \(3\) секунд, в то время как его выносливости хватает только на \(2\) секунды. Таким образом, он несет сундук до \(7\), опускает его, идет на \(1\) вправо, чтобы поднять ключ, и возвращается на \(1\) влево, чтобы открыть сундук.

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\).

C. Порванный счастливый билет

дп математика Перебор реализация хэши *1400

Билет — это непустая строка из цифр от \(1\) до \(9\).

Счастливый билет — это такой билет, у которого:

  • четная длина;
  • сумма цифр в первой половине равна сумме цифр во второй половине.

У вас есть \(n\) частей билетов \(s_1, s_2, \dots, s_n\). Сколько пар \((i, j)\) (для \(1 \le i, j \le n\)) существует таких, что \(s_i + s_j\) является счастливым билетом? Обратите внимание, что возможно \(i=j\).

Здесь оператор + обозначает конкатенацию двух строк. Например, если \(s_i\) — это 13, а \(s_j\) — это 37, то \(s_i + s_j\) будет 1337.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество частей билетов.

Вторая строка содержит \(n\) непустых строк \(s_1, s_2, \dots, s_n\), каждая длиной не более \(5\) и состоящая только из цифр от \(1\) до \(9\).

Выходные данные

Выведите одно целое число — количество пар \((i, j)\) (для \(1 \le i, j \le n\)), таких что \(s_i + s_j\) является счастливым билетом.

D. XOR-конструктив

битмаски Деревья Конструктив математика строковые суфф. структуры Структуры данных *1900

Даны \(n-1\) целых чисел \(a_1, a_2, \dots, a_{n-1}\).

Ваша задача — построить массив \(b_1, b_2, \dots, b_n\) такой, что:

  • каждое целое число от \(0\) до \(n-1\) встречается в \(b\) ровно один раз;
  • для каждого \(i\) от \(1\) до \(n-1\), \(b_i \oplus b_{i+1} = a_i\) (где \(\oplus\) обозначает побитовое исключающее ИЛИ).
Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n-1\) целых чисел \(a_1, a_2, \dots, a_{n-1}\) (\(0 \le a_i \le 2n\)).

Дополнительное ограничение на входные данные: возможно построить как минимум один допустимый массив \(b\) для заданной последовательности \(a\).

Выходные данные

Выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\). Если существует несколько массивов, подходящих под условие задачи, вы можете вывести любой из них.

F. Красивые массивы

дп Комбинаторика математика матрицы *2600

Назовем массив \(a\) из \(n\) неотрицательных целых чиселкрасивым, если выполняются следующие условия:

  • массив содержит хотя бы одно из чисел \(x\), \(x + 1\), ..., \(x+k-1\);
  • последовательные элементы массива отличаются не более чем на \(k\) (т.е. \(|a_i-a_{i-1}| \le k\) для каждого \(i \in [2, n]\)).

Даны значения \(n\), \(x\) и \(k\). Ваша задача — посчитать количество красивых массивов длины \(n\). Поскольку ответ может быть большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных.

Единственная строка каждого набора содержит три целых числа \(n\), \(x\) и \(k\) (\(1 \le n, k \le 10^9\); \(0 \le x \le 40\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество красивых массивов длины \(n\), взятое по модулю \(10^9+7\).

Примечание

В первом наборе входных данных примера следующие массивы являются красивыми:

  • \([0, 0, 0]\);
  • \([0, 0, 1]\);
  • \([0, 1, 0]\);
  • \([0, 1, 1]\);
  • \([0, 1, 2]\);
  • \([1, 0, 0]\);
  • \([1, 0, 1]\);
  • \([1, 1, 0]\);
  • \([2, 1, 0]\).

D. Единицы и двойки

Бинарный поиск математика разделяй и властвуй Структуры данных *1700

Вам дан массив \(a\) длины \(n\) в \(1\)-нумерации, каждый элемент которого равен \(1\) или \(2\).

Обработайте \(q\) запросов следующих двух типов:

  • «1 s»: проверить, существует ли подотрезок\(^{\dagger}\) массива \(a\), сумма которого равна \(s\).
  • «2 i v»: заменить \(a_i\) на \(v\).

\(^{\dagger}\) Массив \(b\) является подотрезком массива \(a\), если \(b\) может быть получен из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов из начала и нескольких (возможно, нуля или всех) элементов из конца. В частности, массив является подотрезком самого себя.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1\le n,q\le 10^5\)) — длину массива \(a\) и количество запросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(a_i\) равно \(1\) или \(2\)) — элементы массива \(a\).

Каждая из следующих \(q\) строк каждого набора входных данных содержит некоторое количество целых чисел. Первое целое число \(\mathrm{op}\) равно либо \(1\), либо \(2\).

  • Если \(\mathrm{op}\) равно \(1\), то за ним следует одно целое число \(s\) (\(1 \leq s \leq 2n\)).
  • Если \(\mathrm{op}\) равно \(2\), то за ним следуют два целых числа \(i\) и \(v\) (\(1 \leq i \leq n\), \(v\) равно \(1\) или \(2\)).

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превышают \(10^5\).

Выходные данные

Для каждого запроса с \(\mathrm{op}=1\) выведите в отдельной строке «YES», если существует подотрезок \(a\), сумма которого равна \(s\), в противном выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Рассмотрим первый набор входных данных:

  • Ответом на первый запрос будет «YES», потому что \(a_1+a_2+a_3=2+1+2=5\).
  • Ответ на второй запрос — «YES», потому что \(a_1+a_2+a_3+a_4=2+1+2+1=6\).
  • Ответом на третий запрос будет «NO», так как нельзя найти ни одного подотрезка \(a\), сумма которого равна \(7\).
  • После четвертого запроса массив \(a\) становится равным \([2,1,2,2,2]\).
  • Ответом на пятый запрос будет «YES», так как \(a_2+a_3+a_4+a_5=1+2+2+2=7\).

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}\).

H1. Цикличный Хэмминг (простая версия)

бпф дп математика Перебор разделяй и властвуй теория чисел *3400

Это простая версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(k\). Делать взломы можно только в том случае, если решены обе версии задачи.

В этой задаче все строки индексируются с \(0\).

Для двух строк \(a\), \(b\) одинаковой длины \(p\) определим следующие термины:

  • Расстояние Хэмминга между \(a\) и \(b\), обозначаемое как \(h(a, b)\), определяется как количество позиций \(i\) таких, что \(0 \le i < p\) и \(a_i \ne b_i\).
  • \(b\) является циклическим сдвигом \(a\), если существует некоторое число \(0 \leq k < p\) такое, что \(b_{(i+k) \bmod p} = a_i\) для всех \(0 \le i < p\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Даны две бинарные строки \(s\) и \(t\) длиной \(2^{k+1}\) каждая. Обе строки могут содержать пропущенные символы (обозначаются символом «?»). Ваша задача — подсчитать количество способов заменить отсутствующие символы в обеих строках на символы «0» или «1» таким образом, чтобы:

  • каждая строка \(s\) и \(t\) содержала ровно \(2^k\) вхождений каждого символа «0» и «1»;
  • \(h(s, c) \ge 2^k\) для всех строк \(c\), являющихся циклическим сдвигом \(t\).

Поскольку результат может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(k\) (\(1 \le k \le 7\)).

Вторая строка содержит строку \(s\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Третья строка содержит строку \(t\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Гарантируется, что обе строки \(s\) и \(t\) содержат не более \(2^k\) символов «0» или «1».

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом примере можно проверить, что для всех циклических сдвигов \(c\) из \(t\) выполняется условие \(h(s, c) \ge 2^k\). В частности:

  • Для \(c = \mathtt{0101}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{0101}) = 2 \ge 2^1\).
  • Для \(c = \mathtt{1010}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{1010}) = 2 \ge 2^1\).

Во втором примере существует циклический сдвиг \(c\) строки \(t\) такой, что \(h(s, c) < 2^k\) (в частности, \(c = \mathtt{0011}\), и \(h(s, c) = h(\mathtt{0011}, \mathtt{0011}) = 0\)).

В третьем примере существует \(2\) возможных способа восстановления недостающих символов:

  • \(s = \mathtt{0101}\), \(t = \mathtt{0110}\);
  • \(s = \mathtt{0011}\), \(t = \mathtt{0101}\).

В четвертом примере существует \(3\) возможных способа восстановления пропущенных символов:

  • \(s = \mathtt{00011110}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00011011}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00001111}\), \(t = \mathtt{01010101}\).

H2. Цикличный Хэмминг (сложная версия)

бпф дп математика Перебор теория чисел *3500

Это сложная версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(k\). Делать взломы можно только в том случае, если решены обе версии задачи.

В этой задаче все строки индексируются с \(0\).

Для двух строк \(a\), \(b\) одинаковой длины \(p\) определим следующие термины:

  • Расстояние Хэмминга между \(a\) и \(b\), обозначаемое как \(h(a, b)\), определяется как количество позиций \(i\) таких, что \(0 \le i < p\) и \(a_i \ne b_i\).
  • \(b\) является циклическим сдвигом \(a\), если существует некоторое число \(0 \leq k < p\) такое, что \(b_{(i+k) \bmod p} = a_i\) для всех \(0 \le i < p\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Даны две бинарные строки \(s\) и \(t\) длиной \(2^{k+1}\) каждая. Обе строки могут содержать пропущенные символы (обозначаются символом «?»). Ваша задача — подсчитать количество способов заменить отсутствующие символы в обеих строках на символы «0» или «1» таким образом, чтобы:

  • каждая строка \(s\) и \(t\) содержала ровно \(2^k\) вхождений каждого символа «0» и «1»;
  • \(h(s, c) \ge 2^k\) для всех строк \(c\), являющихся циклическим сдвигом \(t\).

Поскольку результат может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(k\) (\(1 \le k \le 12\)).

Вторая строка содержит строку \(s\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Третья строка содержит строку \(t\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Гарантируется, что обе строки \(s\) и \(t\) содержат не более \(2^k\) символов «0» или «1».

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом примере можно проверить, что для всех циклических сдвигов \(c\) из \(t\) выполняется условие \(h(s, c) \ge 2^k\). В частности:

  • Для \(c = \mathtt{0101}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{0101}) = 2 \ge 2^1\).
  • Для \(c = \mathtt{1010}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{1010}) = 2 \ge 2^1\).

Во втором примере существует циклический сдвиг \(c\) строки \(t\) такой, что \(h(s, c) < 2^k\) (в частности, \(c = \mathtt{0011}\), и \(h(s, c) = h(\mathtt{0011}, \mathtt{0011}) = 0\)).

В третьем примере существует \(2\) возможных способа восстановления недостающих символов:

  • \(s = \mathtt{0101}\), \(t = \mathtt{0110}\);
  • \(s = \mathtt{0011}\), \(t = \mathtt{0101}\).

В четвертом примере существует \(3\) возможных способа восстановления пропущенных символов:

  • \(s = \mathtt{00011110}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00011011}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00001111}\), \(t = \mathtt{01010101}\).

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\).

A. Игра с числами

игры математика теория чисел *800

Ваня и Вова играют в игру. Игрокам дано целое число \(n\). На своём ходу игрок может либо прибавить к текущему числу \(1\), либо вычесть \(1\). Игроки ходят по очереди, начинает Ваня. Если после хода Вани число стало делиться нацело на \(3\), то он побеждает. Если после \(10\) ходов Ваня не выиграл, то побеждает Вова.

Напишите программу, которая по целому числу \(n\) определяет, кто победит, если оба игрока играют оптимально.

Входные данные

В первой строке дано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных дано целое число \(n\) (\(1 \leq n \leq 1000\)).

Выходные данные

Для каждого набора входных данных выведите «First» без кавычек, если выиграет Ваня, и «Second» без кавычек иначе.

D. Ярик и ноты

математика теория чисел хэши *1300

Ярик — большой фанат разной музыки. Но Ярик любит не только слушать музыку, но и писать её. Больше всего он любит электронную музыку, поэтому он придумал свою собственную систему нот, которая, по его мнению, лучше всего подходит для неё.

Так как Ярик ещё и увлекается информатикой, то в его системе ноты обозначаются числами вида \(2^k\), где \(k \ge 1\) — целое положительное число. Но, как известно, просто нотами для написания музыки не обойтись, поэтому Ярик использует сочетания из двух нот. Сочетание двух нот \((a, b)\), где \(a = 2^k\) и \(b = 2^l\), он обозначает числом \(a^b\).

Например, если \(a = 8 = 2^3\), \(b = 4 = 2^2\), то сочетание \((a, b)\) обозначается числом \(a^b = 8^4 = 4096\). Обратите внимание, что разные сочетания могут иметь одинаковое обозначение, например сочетание \((64, 2)\) тоже обозначается числом \(4096 = 64^2\).

Ярик уже выбрал \(n\) нот, которые он хочет использовать в своей новой мелодии. Однако, так как их номера могут быть очень большими, он записал их в виде массива \(a\) длины \(n\), тогда нота \(i\) равна \(b_i = 2^{a_i}\). Числа в массиве \(a\) могут повторяться.

Мелодия будет состоять из нескольких сочетаний двух нот. Ярику стало интересно, сколько существует пар нот \(b_i, b_j\) \((i < j)\) таких, что сочетание \((b_i, b_j)\) равно сочетанию \((b_j, b_i)\). Иначе говоря, он хочет посчитать количество пар \((i, j)\) \((i < j)\) таких, что \(b_i^{b_j} = b_j^{b_i}\). Помогите ему найти количество таких пар.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина массива.

В следующей строке даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите искомое количество пар, удовлетворяющих данному условию.

A. Вася и автобусы

жадные алгоритмы математика *1100

Однажды Васе рассказывали историю: «В городе Верхнеберляндске отъезжал от конечной остановки автобус номер 62. В нем было n взрослых и m детей...»

Что было дальше, нам, собственно, и не важно. Вася — бухгалтер и любит считать деньги. Поэтому он захотел узнать, какую максимальную и минимальную сумму денег могли заплатить пассажиры этого автобуса за проезд.

Цена проезда в автобусах Верхнеберляндска — один берляндский рубль. Однако, не все так просто — каждый взрослый пассажир имеет право провезти бесплатно не более одного ребенка. Это значит, что взрослый пассажир, который провозит с собой k (k > 0) детей, платит всего k рублей: за один билет для себя и за (k - 1) билетов для своих детей. Также взрослый может ехать без детей, в этом случае он платит всего один рубль.

Известно, что в Верхнеберляндске дети не могут проезжать в автобусе без сопровождения взрослых.

Помогите Васе посчитать минимальную и максимальную сумму в берляндских рублях, которую могли заплатить пассажиры этого автобуса суммарно.

Входные данные

Входные данные состоят из одной строки, в которой через пробел заданы два целых числа n и m (0 ≤ n, m ≤ 105) — количество взрослых и количество детей в автобусе, соответственно.

Выходные данные

Если в автобусе могли ехать n взрослых и m детей в единственной строке выведите через пробел два числа — минимальную и максимальную возможную стоимость проезда этих людей, соответственно.

В противном случае выведите «Impossible» (без кавычек).

Примечание

В первом примере один взрослый едет с двумя детьми и платит два рубля.

Во втором примере в автобусе только дети, чего случиться не могло.

    В третьем примере могло быть два случая:
  • Каждый из двух пассажиров провозил одного ребенка и заплатил по одному рублю. В этом случае суммарная стоимость проезда — два рубля.
  • Один из пассажиров вез двоих детей и заплатил два рубля, а другой ехал один и заплатил один рубль. Суммарная стоимость — три рубля.

B. Лаура и операции

дп математика *900

Лауре не нравится комбинаторика. Неманья попытается убедить ее в обратном.

Неманья написал на доске несколько цифр. Каждая из них равняется либо \(1\), либо \(2\), либо \(3\). Количество цифр \(1\) равно \(a\), количество цифр \(2\) — \(b\), а количество цифр \(3\) — \(c\). Он сказал Лауре, что за одну операцию она может сделать следующее:

  • Выбрать две различные цифры и стереть их с доски. После этого записать цифру (\(1\), \(2\) или \(3\)), которая отличается от обеих стертых цифр.

Например, пусть были выписаны цифры \(1\), \(1\), \(1\), \(2\), \(3\), \(3\). Она может выбрать цифры \(1\) и \(3\) и стереть их. Тогда доска будет выглядеть следующим образом: \(1\), \(1\), \(2\), \(3\). После этого она должна написать еще одну цифру \(2\), и в конце операции доска будет выглядеть так: \(1\), \(1\), \(2\), \(3\), \(2\).

Неманья спросил Лауру, возможно ли, чтобы после некоторой последовательности операций все цифры на доске оказались одинаковыми. Если да, то какие это могут быть цифры?

Лаура не смогла решить эту задачу и обратилась к вам за помощью. В награду за помощь она уговорит Неманью дать вам немного баллов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(a\), \(b\), \(c\) (\(1 \le a, b, c \le 100\)) — количество единиц, количество двоек и количество троек, соответственно.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(3\) целых числа.

Первое из них должно быть равно \(1\), если существует последовательность операций, которая оставляет на доске только цифры \(1\), и \(0\) в противном случае.

Аналогично, второе число должно быть равно \(1\), если существует последовательность операций, которая оставляет на доске только цифры \(2\), и \(0\) в противном случае.

Аналогично, третье должно быть равно \(1\), если существует последовательность операций, которая оставляет на доске только цифры \(3\), и \(0\) в противном случае.

Примечание

В первом наборе входных данных Лаура может удалить цифры \(2\) и \(3\) и записать цифру \(1\). После этого на доске останется \(2\) цифры \(1\). Проделав аналогичную операцию, она может сделать так, чтобы на доске остались только цифры \(2\) или \(3\).

Во втором наборе входных данных она может удалить цифры \(1\) и \(3\) и записать цифру \(2\). После выполнения этой операции \(2\) раза на доске останутся только цифры \(2\). Можно доказать, что на доске не могут остаться только цифры \(1\) или только цифры \(3\).

В третьем наборе входных данных имеется последовательность операций, в результате которой на доске остаются только цифры \(1\). Можно доказать, что на доске не могут остаться только цифры \(2\) или только цифры \(3\).

D. НОД меньших

битмаски дп математика Перебор теория чисел *2000

Пусть \(a\), \(b\) и \(c\) — целые числа. Определим функцию \(f(a, b, c)\) следующим образом.

Упорядочить числа \(a\), \(b\), \(c\) таким образом, чтобы выполнялось \(a \le b \le c\). Затем вернуть \(\gcd(a, b)\), где \(\gcd(a, b)\) обозначает наибольший общий делитель (НОД) чисел \(a\) и \(b\).

Иными словами, мы берем \(\gcd\) из \(2\) меньших значений и игнорируем наибольшее.

Вам дан массив \(a\) длины \(n\). Вычислите сумму \(f(a_i, a_j, a_k)\) для всех \(i\), \(j\), \(k\) таких, что \(1 \le i < j < k \le n\).

Более формально, вычислите \(\)\sum_{i = 1}^n \sum_{j = i+1}^n \sum_{k =j +1}^n f(a_i, a_j, a_k).\(\)

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 8 \cdot 10^4\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(8 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно число — сумму из условия.

Примечание

В первом наборе входных данных значения \(f\) следующие:

  • \(i=1\), \(j=2\), \(k=3\), \(f(a_i,a_j,a_k)=f(2,3,6)=\gcd(2,3)=1\);
  • \(i=1\), \(j=2\), \(k=4\), \(f(a_i,a_j,a_k)=f(2,3,12)=\gcd(2,3)=1\);
  • \(i=1\), \(j=2\), \(k=5\), \(f(a_i,a_j,a_k)=f(2,3,17)=\gcd(2,3)=1\);
  • \(i=1\), \(j=3\), \(k=4\), \(f(a_i,a_j,a_k)=f(2,6,12)=\gcd(2,6)=2\);
  • \(i=1\), \(j=3\), \(k=5\), \(f(a_i,a_j,a_k)=f(2,6,17)=\gcd(2,6)=2\);
  • \(i=1\), \(j=4\), \(k=5\), \(f(a_i,a_j,a_k)=f(2,12,17)=\gcd(2,12)=2\)
  • \(i=2\), \(j=3\), \(k=4\), \(f(a_i,a_j,a_k)=f(3,6,12)=\gcd(3,6)=3\);
  • \(i=2\), \(j=3\), \(k=5\), \(f(a_i,a_j,a_k)=f(3,6,17)=\gcd(3,6)=3\);
  • \(i=2\), \(j=4\), \(k=5\), \(f(a_i,a_j,a_k)=f(3,12,17)=\gcd(3,12)=3\);
  • \(i=3\), \(j=4\), \(k=5\), \(f(a_i,a_j,a_k)=f(6,12,17)=\gcd(6,12)=6\).
Сумма по всем тройкам равна \(1+1+1+2+2+2+3+3+3+6=24\).

Во втором наборе входных данных существует \(56\) способов выбора значений \(i\), \(j\), \(k\). Сумма по всем \(f(a_i,a_j,a_k)\) равна \(203\).

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\)-го монстра.

Выходные данные

Выведите одно целое число — минимальную силу заклинания, необходимую для убийства всех монстров, если Вася выберет первую цель заклинания оптимально, а порядок ударов заклинания может быть любым возможным, удовлетворяющим правилам задачи.

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}\).

F. Снова деревья и XOR-запросы

графы Деревья математика поиск в глубину и подобное разделяй и властвуй реализация Структуры данных *2400

Вам дано дерево, состоящее из \(n\) вершин. На каждой вершине написано целое число; на \(i\)-й вершине написано число \(a_i\).

Вам необходимо обработать \(q\) запросов. \(i\)-й запрос состоит из трех целых чисел \(x_i\), \(y_i\) и \(k_i\). Для этого запроса вы должны ответить, возможно ли выбрать набор вершин \(v_1, v_2, \dots, v_m\) (возможно, пустой) так, чтобы:

  • каждая вершина \(v_j\) находилась на простом пути между \(x_i\) и \(y_i\) (в том числе можно использовать концы пути);
  • \(a_{v_1} \oplus a_{v_2} \oplus \dots \oplus a_{v_m} = k_i\), где \(\oplus\) обозначает оператор побитового исключающего ИЛИ.
Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2^{20} - 1\)).

Затем следуют \(n-1\) строк. Каждая из них содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\); \(u \ne v\)), обозначающие ребро дерева.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем следуют \(q\) строк. В \(i\)-й из них содержатся три целых числа \(x_i\), \(y_i\) и \(k_i\) (\(1 \le x_i, y_i \le n\); \(0 \le k_i \le 2^{20} - 1\)).

Выходные данные

Для каждого запроса выведите YES, если возможно сформировать набор вершин, удовлетворяющий ограничениям. В противном случае выведите NO.

Каждую букву можно выводить в любом регистре.

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}\).

Примечание

Приведенные примеры не обязательно демонстрируют оптимальные стратегии или правильный выбор игрока.

На рисунке ниже вы можете увидеть ходы, которые сделал каждый игрок в первом примере. Первый игрок — красный, а второй — черный.

A. Конструктивные задачи

Конструктив математика *800

Гридландия была затронута наводнением, и теперь в ней придётся восстанавливать все города. Гридландию можно описать матрицей размера \(n \times m\).

Изначально все её города находятся в экономическом кризисе. Правительство может выбрать определённые города и восстановить их. Кроме того, любой разрушенный город, у которого есть хотя бы один соседний по вертикали восстановленный город и хотя бы один соседний по горизонтали восстановленный город, может попросить помощи у них и стать восстановленным без помощи правительства. Формально, разрушенный город, находящийся на позиции \((i, j)\), может быть восстановлен, если оба из следующих условий выполнены:

  • Хотя бы один из городов на позициях \((i + 1, j)\) и \((i - 1, j)\) восстановлен;
  • Хотя бы один из городов на позициях \((i, j + 1)\) и \((i, j - 1)\) восстановлен.

Если город находится на границе матрицы и имеет только один соседний по горизонтали или по вертикали город, то мы рассматриваем только этот город.

Иллюстрация двух возможных способов восстановления городов при помощи соседних. Белые ячейки — разрушенные города, желтые ячейки — изначально восстановленные города (либо правительством, либо при помощи соседних), и оранжевые ячейки — восстановленные города при помощи соседних.

Правительство хочет знать минимальное количество городов, которые ему нужно восстановить, чтобы через некоторое время все города были восстановлены.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 100\)) — размеры Гридландии.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество городов, которые правительству нужно восстановить.

Примечание

В первом наборе входных данных достаточно, чтобы правительство восстановило города \((1, 2)\) и \((2, 1)\).

Во втором наборе входных данных достаточно, чтобы правительство восстановило города \((1, 4)\), \((2, 2)\), \((3, 1)\), \((3, 6)\), \((4, 3)\), \((5, 5)\), \((5, 7)\).

D. Циклический MEX

математика реализация Структуры данных *2000

Для массива \(a\) определим его стоимость как \(\sum_{i=1}^{n} \operatorname{mex} ^\dagger ([a_1,a_2,\ldots,a_i])\).

Вам дана перестановка\(^\ddagger\) \(p\) множества \(\{0,1,2,\ldots,n-1\}\). Найдите максимальную стоимость среди всех циклических сдвигов \(p\).

\(^\dagger\operatorname{mex}([b_1,b_2,\ldots,b_m])\) — это наименьшее неотрицательное целое число \(x\), такое что \(x\) не встречается среди \(b_1,b_2,\ldots,b_m\).

\(^\ddagger\)Перестановкой множества \(\{0,1,2,...,n-1\}\) является массив, состоящий из \(n\) различных целых чисел от \(0\) до \(n-1\) в произвольном порядке. Например, \([1,2,0,4,3]\) — перестановка, но \([0,1,1]\) не перестановка (\(1\) встречается дважды в массиве), и \([0,2,3]\) тоже не перестановка (\(n=3\), но есть \(3\) в массиве).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — длина перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(0 \le p_i < n\)) — элементы перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную стоимость среди всех циклических сдвигов \(p\).

Примечание

В первом наборе входных данных циклическим сдвигом, дающим максимальную стоимость, является \([2,1,0,5,4,3]\) со стоимостью \(0+0+3+3+3+6=15\).

Во втором наборе входных данных циклическим сдвигом, дающим максимальную стоимость, является \([0,2,1]\) со стоимостью \(1+1+3=5\).

E. One-X

Деревья дп Комбинаторика математика поиск в глубину и подобное *2400

В этом грустном мире, полном недостатков, существуют уродливые деревья отрезков.

Дерево отрезков — это дерево, где каждая вершина соответствует некоторому отрезку и имеет свой номер. Дерево отрезков для массива из \(n\) элементов можно построить рекурсивно. Пусть функция \(\operatorname{build}(v,l,r)\) строит дерево отрезков, корневая вершина которого имеет номер \(v\) и соответствует отрезку \([l,r]\).

Теперь давайте определим \(\operatorname{build}(v,l,r)\):

  • Если \(l=r\), то вершина \(v\) является листом, поэтому мы прекращаем добавление новых рёбер;
  • Иначе, мы добавляем рёбра \((v, 2v)\) и \((v, 2v+1)\). Пусть \(m=\lfloor \frac{l+r}{2} \rfloor\). Затем мы вызываем \(\operatorname{build}(2v,l,m)\) и \(\operatorname{build}(2v+1,m+1,r)\).

Таким образом, всё дерево строится путём вызова \(\operatorname{build}(1,1,n)\).

Теперь Ибти построит дерево отрезков для массива из \(n\) элементов. Он хочет найти сумму всех \(\operatorname{lca}^\dagger(S)\), где \(S\) — непустое подмножество листьев. Обратите внимание, что существует ровно \(2^n - 1\) возможных подмножеств. Поскольку эта сумма может быть очень большой, выведите её по модулю \(998\,244\,353\).

\(^\dagger\operatorname{lca}(S)\) — номер наименьшего общего предка для вершин, находящихся в \(S\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^{18}\)) — длина массива, для которого строится дерево отрезков.

Выходные данные

Для каждого набора входных данных выведите одно целое число — требуемую сумму по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

Давайте рассмотрим все подмножества листьев.

  • \(\operatorname{lca}(\{2\})=2\);
  • \(\operatorname{lca}(\{3\})=3\);
  • \(\operatorname{lca}(\{2,3\})=1\).

Таким образом, ответ равен \(2+3+1=6\).

Во втором наборе входных данных:

Давайте рассмотрим все подмножества листьев.

  • \(\operatorname{lca}(\{4\})=4\);
  • \(\operatorname{lca}(\{5\})=5\);
  • \(\operatorname{lca}(\{3\})=3\);
  • \(\operatorname{lca}(\{4,5\})=2\);
  • \(\operatorname{lca}(\{4,3\})=1\);
  • \(\operatorname{lca}(\{5,3\})=1\);
  • \(\operatorname{lca}(\{4,5,3\})=1\);

Таким образом, ответ равен \(4+5+3+2+1+1+1=17\).

K. Deck-Building Game

математика разделяй и властвуй *2500

You are playing a deck-building game with your friend. There are \(N\) cards, numbered from \(1\) to \(N\). Card \(i\) has the value of \(A_i\).

You want to build two decks; one for you and one for your friend. A card cannot be inside both decks, and it is allowed to not use all \(N\) cards. It is also allowed for a deck to be empty, i.e. does not contain any cards.

The power of a deck is represented as the bitwise XOR of the value of the cards in the deck. The power of an empty deck is \(0\).

The game is balanced if both decks have the same power.

Determine the number of ways to build two decks such that the game is balanced. Two ways are considered different if one of the decks contains at least one different card. Since the answer can be very large, calculate the answer modulo \(998\,244\,353\).

Input

The first line consists of an integer \(N\) (\(2 \le N \le 100\,000\)).

The following line consists of \(N\) integers \(A_i\) (\(1 \le A_i \le 100\,000\)).

Output

Output an integer representing the number of ways to build two decks such that the game is balanced. Output the answer modulo \(998\,244\,353\).

Note

Explanation for the sample input/output #1

Denote \(S\) and \(T\) as the set of cards in your deck and your friend's deck, respectively. There are \(9\) ways to build the decks such that the game is balanced.

  • \(S = \{\}\) and \(T = \{\}\). Both decks have the power of \(0\).
  • \(S = \{2, 3, 4\}\) and \(T = \{\}\). Both decks have the power of \(0\).
  • \(S = \{\}\) and \(T = \{2, 3, 4\}\). Both decks have the power of \(0\).
  • \(S = \{2, 4\}\) and \(T = \{3\}\). Both decks have the power of \(4\).
  • \(S = \{3\}\) and \(T = \{2, 4\}\). Both decks have the power of \(4\).
  • \(S = \{2, 3\}\) and \(T = \{4\}\). Both decks have the power of \(8\).
  • \(S = \{4\}\) and \(T = \{2, 3\}\). Both decks have the power of \(8\).
  • \(S = \{3, 4\}\) and \(T = \{2\}\). Both decks have the power of \(12\).
  • \(S = \{2\}\) and \(T = \{3, 4\}\). Both decks have the power of \(12\).

Explanation for the sample input/output #2

The only way to make the game balanced is to have both decks empty.

Explanation for the sample input/output #3

There are \(5\) ways to build the decks such that the game is balanced.

  • \(S = \{\}\) and \(T = \{\}\). Both decks have the power of \(0\).
  • \(S = \{1, 2\}\) and \(T = \{\}\). Both decks have the power of \(0\).
  • \(S = \{\}\) and \(T = \{1, 2\}\). Both decks have the power of \(0\).
  • \(S = \{1\}\) and \(T = \{2\}\). Both decks have the power of \(1\).
  • \(S = \{2\}\) and \(T = \{1\}\). Both decks have the power of \(1\).

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\) «». Обратите внимание, что при другом порядке удалений строка не станет пустой.

A. Различные кнопки

математика реализация *800

Вы находитесь в точке \((0, 0)\) бесконечной координатной плоскости. У вас есть контроллер с \(4\) кнопками, выполняющими следующие операции:

  • \(\texttt{U}\): перемещение из \((x, y)\) в \((x, y+1)\);
  • \(\texttt{R}\): перемещение из \((x, y)\) в \((x+1, y)\);
  • \(\texttt{D}\): перемещение из \((x, y)\) в \((x, y-1)\);
  • \(\texttt{L}\): перемещение из \((x, y)\) в \((x-1, y)\).

К сожалению, контроллер сломан. Если нажать все \(4\) кнопки (в любом порядке), контроллер перестанет работать. Это значит, что за всю поездку можно нажать не более \(3\) различных кнопок (любое количество раз, в любом порядке).

На плоскости есть \(n\) особых точек с целочисленными координатами \((x_i, y_i)\).

Можете ли вы посетить все особые точки (в любом порядке), не сломав контроллер?

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 1000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество особых точек.

Каждая из следующих \(n\) строк содержит по два целых числа \(x_i\), \(y_i\) (\(-100 \leq x_i, y_i \leq 100\)) — координаты особой точки \((x_i, y_i)\).

Обратите внимание, что на сумму \(n\) по всем наборам входных данных нет никаких ограничений.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если вы можете достичь всех особых точек, не сломав контроллер, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных вы можете перемещаться следующим образом:

  • вы начинаете с \((0, 0)\);
  • вы посещаете специальную точку \((x_2, y_2) = (0, 0)\);
  • Вы нажимаете \(\texttt{R}\), и перемещаетесь из \((0, 0)\) в \((1, 0)\);
  • вы нажимаете \(\texttt{D}\), и вы перемещаетесь из \((1, 0)\) в \((1, -1)\);
  • вы посещаете особую точку \((x_1, y_1) = (1, -1)\);
  • вы посещаете особую точку \((x_3, y_3) = (1, -1)\).

Таким образом, вы можете посетить все особые точки, используя только кнопки \(\texttt{R}\), \(\texttt{D}\), поэтому контроллер не сломается.

Обратите внимание, что особые точки могут совпадать.

Во втором наборе входных данных можно показать, что можно посетить все особые точки, используя только кнопки \(\texttt{U}\), \(\texttt{D}\), \(\texttt{L}\).

В третьем наборе входных данных можно показать, что для посещения всех точек необходимо нажать все кнопки (\(\texttt{U}\), \(\texttt{R}\), \(\texttt{D}\), \(\texttt{L}\)), поэтому контроллер сломается.

B. Сделать почти равными по модулю

битмаски Конструктив математика теория чисел *1200

Вам дан массив различных целых положительных чисел \(a_1, a_2, \dots, a_n\). Вы должны выполнить следующую операцию ровно один раз:

  • выбрать целое положительное число \(k\);
  • для каждого \(i\) от \(1\) до \(n\) заменить \(a_i\) на \(a_i \text{ mod } k^\dagger\).

Найдите такое значение \(k\), такое что \(1 \leq k \leq 10^{18}\), чтобы массив \(a_1, a_2, \dots, a_n\) содержал ровно \(2\) различных значения после применения операции. Можно показать, что при ограничениях задачи хотя бы одно такое \(k\) всегда существует. Если существует несколько решений, выведите любое из них.

\(^\dagger\) \(a \text{ mod } b\) обозначает остаток от деления \(a\) на \(b\). Например:

  • \(7 \text{ mod } 3=1\), так как \(7 = 3 \cdot 2 + 1\)
  • \(15 \text{ mod } 4=3\), так как \(15 = 4 \cdot 3 + 3\)
  • \(21 \text{ mod } 1=0\), так как \(21 = 21 \cdot 1 + 0\)
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{17}\)) — начальные числа в массиве. Гарантируется, что все \(a_i\) различны.

Обратите внимание, что нет никаких ограничений на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите одно целое число: значение \(k\) (\(1 \leq k \leq 10^{18}\)) такое, что массив \(a_1, a_2, \dots, a_n\) будет содержать ровно \(2\) различных значения после применения операции.

Примечание

В первом наборе входных данных можно выбрать \(k = 7\). Массив станет равным \([8 \text{ mod } 7, 15 \text{ mod } 7, 22 \text{ mod } 7, 30 \text{ mod } 7] = [1, 1, 1, 2]\) и будет содержать ровно \(2\) различных значения (\(\{1, 2\}\)).

Во втором наборе входных данных можно выбрать \(k = 30\). Массив станет равным \([0, 0, 8, 0, 8]\), то есть будет содержать ровно \(2\) различных значения (\(\{0, 8\}\)). Заметим, что выбор \(k = 10\) также будет корректным решением.

В последнем наборе входных данных можно выбрать \(k = 10^{18}\). Массив станет равным \([2, 1]\) и будет содержать ровно \(2\) различных значения (\(\{1, 2\}\)). Заметим, что выбор \(k = 10^{18} + 1\) не будет корректным, так как должно выполняться \(1 \leq k \leq 10^{18}\).

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\}\).

В четвертом и пятом наборе входных данных можно показать, что невозможно сделать все числа на доске одинаковыми.

E. Несколько ламп

битмаски Конструктив математика Перебор теория чисел *2400

У вас есть \(n\) ламп, пронумерованных от \(1\) до \(n\). Изначально все лампы выключены.

У вас также есть \(n\) кнопок. Кнопка \(i\) переключает все лампы, чей индекс кратен \(i\). Когда лампа переключается, если она была выключена, то она включается, а если была включена, то выключается.

Вы должны нажать несколько кнопок в соответствии со следующими правилами.

  • Вы должны нажать хотя бы одну кнопку.
  • Вы не можете нажимать одну и ту же кнопку несколько раз.
  • Вам даны \(m\) пар \((u_i, v_i)\). Если вы нажмете кнопку \(u_i\), вы также должны нажать кнопку \(v_i\) (либо до, либо после нажатия кнопки \(u_i\)). Обратите внимание, что если вы нажимаете кнопку \(v_i\), то вам не нужно нажимать кнопку \(u_i\).

Вы не хотите тратить слишком много электричества. Найдите способ нажимать кнопки так, чтобы в конце горело не более \(\lfloor n/5 \rfloor\) ламп, или выведите \(-1\), если это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\), \(0 \leq m \leq 2 \cdot 10^5\)) — количество ламп и количество пар, соответственно.

Каждая из следующих \(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)\) различны.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Если не существует набора кнопок, после нажатия на которые горят не более \(\lfloor n/5 \rfloor\) ламп, выведите одну строку, содержащую \(-1\).
  • В противном случае выведите две строки. Первая строка должна содержать целое число \(k\) (\(1 \le k \le n\)) — количество нажатых кнопок. Вторая строка должна содержать \(k\) целых чисел \(b_1, b_2, \dots, b_k\) (\(1 \le b_i \le n\)) — индексы нажатых кнопок (в любом порядке). Индексы \(b_i\) должны быть различными, и в конце должно быть включено не более \(\lfloor n/5 \rfloor\) ламп.
Примечание

В первом наборе входных данных требуется оставить включенными не более \(\lfloor 4/5 \rfloor\) ламп, а это значит, что ни одна лампа не может остаться включенной в конце. Можно показать, что при нажатии хотя бы одной кнопки в конце не может оказаться \(0\) включенных ламп.

Во втором наборе входных данных можно нажать кнопки \(3\), \(5\), \(1\), \(2\).

  • Изначально все лампы выключены;
  • после нажатия кнопки \(3\), лампы, чей индекс кратен \(3\) (т.е. \(3\)), переключаются, так что лампа \(3\) включается;
  • после нажатия кнопки \(5\), лампы, чей индекс кратен \(5\) (т.е. \(5\)) переключаются, поэтому лампы \(3\), \(5\) включены;
  • после нажатия кнопки \(1\), лампы, чей индекс кратен \(1\) (т.е. \(1\), \(2\), \(3\), \(4\), \(5\)) переключаются, поэтому становятся включенными лампы \(1\), \(2\), \(4\);
  • после нажатия кнопки \(2\), лампы, чей индекс кратен \(2\) (т.е. \(2\), \(4\)) переключаются, поэтому остается включенной только лампа \(1\).

Это решение корректно, потому что

  • вы нажали хотя бы одну кнопку;
  • вы нажали каждую кнопку не более одного раза;
  • вы нажали кнопку \(u_2 = 5\), что означает, что вы должны были также нажать кнопку \(v_2 = 1\), и кнопка \(1\) была нажата;
  • в конце горит только лампа \(1\).

В третьем наборе входных данных нажатие кнопок \(8\), \(9\), \(10\) включает только лампы \(8\), \(9\), \(10\).

F1. Небольшая задачка про перестановки (простая версия)

дп Комбинаторика математика Перебор *2200

В простой версии задачи \(a_i\) находятся в диапазоне \([0, n]\); в сложной версии \(a_i\) находятся в диапазоне \([-1, n]\) и определение хорошей перестановки немного отличается. Вы можете делать взломы, только если обе версии задачи решены.

Вам дано целое число \(n\) и массив \(a_1, a_2 \dots, a_n\) целых чисел в диапазоне \([0, n]\).

Перестановка \(p_1, p_2, \dots, p_n\) элементов \([1, 2, \dots, n]\) называется хорошей, если для каждого \(i\) верно следующее утверждение:

  • количество значений \(\leq i\) в \([p_1, p_2, \dots, p_i]\) в точности равно \(a_i\).

Посчитайте количество хороших перестановок \([1, 2, \dots, n]\) по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)), которые описывают критерии хорошей перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую количество хороших перестановок по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных единственной хорошей перестановкой является \([1, 2, 3, 4, 5]\).

Во втором наборе входных данных существует \(4\) хороших перестановки: \([2, 1, 5, 6, 3, 4]\), \([2, 1, 5, 6, 4, 3]\), \([2, 1, 6, 5, 3, 4]\), \([2, 1, 6, 5, 4, 3]\). Например, \([2, 1, 5, 6, 3, 4]\) — хорошая, потому что:

  • \(a_1 = 0\), и в \([p_1] = [2]\) есть \(0\) значений \(\leq 1\);
  • \(a_2 = 2\), и есть \(2\) значения \(\leq 2\) в \([p_1, p_2] = [2, 1]\);
  • \(a_3 = 2\), и есть \(2\) значения \(\leq 3\) в \([p_1, p_2, p_3] = [2, 1, 5]\);
  • \(a_4 = 2\), и есть \(2\) значения \(\leq 4\) в \([p_1, p_2, p_3, p_4] = [2, 1, 5, 6]\);
  • \(a_5 = 4\), и есть \(4\) значения \(\leq 5\) в \([p_1, p_2, p_3, p_4, p_5] = [2, 1, 5, 6, 3]\);
  • \(a_6 = 6\), и есть \(6\) значений \(\leq 6\) в \([p_1, p_2, p_3, p_4, p_5, p_6] = [2, 1, 5, 6, 3, 4]\).

В третьем наборе входных данных нет хороших перестановок, потому что не существует перестановок с \(a_6 = 5\) значениями \(\leq 6\) в \([p_1, p_2, p_3, p_4, p_5, p_6]\).

F2. Небольшая задачка про перестановки (сложная версия)

дп Комбинаторика математика *2500

В простой версии задачи \(a_i\) находятся в диапазоне \([0, n]\); в сложной версии \(a_i\) находятся в диапазоне \([-1, n]\) и определение хорошей перестановки немного отличается. Вы можете делать взломы, только если обе версии задачи решены.

Вам дано целое число \(n\) и массив \(a_1, a_2, \dots, a_n\) целых чисел в диапазоне \([-1, n]\).

Перестановка \(p_1, p_2, \dots, p_n\) в \([1, 2, \dots, n]\) называется хорошей, если для каждого \(i\) верно следующее утверждение:

  • если \(a_i \neq -1\), то количество значений \(\leq i\) в \([p_1, p_2, \dots, p_i]\) в точности равно \(a_i\).

Посчитайте количество хороших перестановок \([1, 2, \dots, n]\) по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-1 \le a_i \le n\)), которые описывают критерии хорошей перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую количество хороших перестановок по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных все перестановки длины \(5\) являются хорошими, поэтому существует \(120\) хороших перестановок.

Во втором наборе входных данных единственной хорошей перестановкой является \([1, 2, 3, 4, 5]\).

В третьем наборе входных данных существует \(4\) хороших перестановки: \([2, 1, 5, 6, 3, 4]\), \([2, 1, 5, 6, 4, 3]\), \([2, 1, 6, 5, 3, 4]\), \([2, 1, 6, 5, 4, 3]\). Например, \([2, 1, 5, 6, 3, 4]\) — хорошая, потому что:

  • \(a_1 = 0\), и в \([p_1] = [2]\) есть \(0\) значений \(\leq 1\);
  • \(a_2 = 2\), и есть \(2\) значения \(\leq 2\) в \([p_1, p_2] = [2, 1]\);
  • \(a_3 = 2\), и есть \(2\) значения \(\leq 3\) в \([p_1, p_2, p_3] = [2, 1, 5]\);
  • \(a_4 = 2\), и есть \(2\) значения \(\leq 4\) в \([p_1, p_2, p_3, p_4] = [2, 1, 5, 6]\);
  • \(a_5 = -1\), поэтому на \([p_1, p_2, p_3, p_4, p_5]\) нет ограничений;
  • \(a_6 = -1\), поэтому на \([p_1, p_2, p_3, p_4, p_5, p_6]\) нет ограничений;

I. Короткая задача о перестановке

бпф дп Комбинаторика математика *1900

Вам дано целое число \(n\).

Для каждой пары \((m, k)\) такой, что \(3 \leq m \leq n+1\) и \(0 \leq k \leq n-1\), посчитайте количество перестановок элементов \([1, 2, ..., n]\) таких, что \(p_i + p_{i+1} \geq m\) для ровно \(k\) индексов \(i\), по модулю \(998\,244\,353\).

Входные данные

Входные данные состоят из одной строки, которая содержит два целых числа \(n\), \(x\) (\(2 \leq n \leq 4000\), \(1 \leq x < 1\,000\,000\,007\)).

Выходные данные

Пусть \(a_{m,k}\) - ответ для пары \((m, k)\), по модулю \(998\,244\,353\).

Пусть \(\)\large S = \sum_{m=3}^{n+1} \sum_{k=0}^{n-1} a_{m,k}x^{mn+k}\phantom{0}.\(\)

Выведите единственную строку с целым числом: \(S\) по модулю \(1\,000\,000\,007\).

Обратите внимание, что использование двух разных модулей является намеренным. Мы хотим, чтобы вы вычислили все \(a_{m,k}\) по модулю \(998\,244\,353\), затем обработали их как целые числа в диапазоне \([0, 998\,244\,352]\), и хэшировали их по модулю \(1\,000\,000\,007\).

Примечание

В первом примеры ответы для всех \((m, k)\) приведены в следующей таблице:

\(k = 0\)\(k = 1\)\(k = 2\)
\(m = 3\)\(0\)\(0\)\(6\)
\(m = 4\)\(0\)\(4\)\(2\)
  • Ответ для \((m, k) = (3, 2)\) равен \(6\), потому что для каждой перестановки длины \(3\), \(a_i + a_{i+1} \geq 3\) ровно \(2\) раза.
  • Ответ для \((m, k) = (4, 2)\) равен \(2\). Действительно, существует \(2\) перестановки длины \(3\) такие, что \(a_i + a_{i+1} \geq 4\) ровно \(2\) раза: \([1, 3, 2]\), \([2, 3, 1]\).

Таким образом, значение для вывода равно \(2^9 \cdot 0 + 2^{10} \cdot 0 + 2^{11} \cdot 6 + 2^{12} \cdot 0 + 2^{13} \cdot 4 + 2^{14} \cdot 2 \equiv 77\,824 \phantom{0} (\text{mod} \phantom{0} 1\,000\,000\,007)\).

Во втором примере ответы для всех \((m, k)\) приведены в следующей таблице:

\(k = 0\)\(k = 1\)\(k = 2\)\(k = 3\)
\(m = 3\)\(0\)\(0\)\(0\)\(24\)
\(m = 4\)\(0\)\(0\)\(12\)\(12\)
\(m = 5\)\(0\)\(4\)\(16\)\(4\)
  • Ответ для \((m, k) = (5, 1)\) — \(4\). Действительно, существует \(4\) перестановки длины \(4\) такие, что \(a_i + a_{i+1} \geq 5\) ровно \(1\) раз: \([2, 1, 3, 4]\), \([3, 1, 2, 4]\), \([4, 2, 1, 3]\), \([4, 3, 1, 2]\).

В третьем примере ответы для всех \((m, k)\) представлены в следующей таблице:

\(k = 0\)\(k = 1\)\(k = 2\)\(k = 3\)\(k = 4\)\(k = 5\)\(k = 6\)\(k = 7\)
\(m = 3\)\(0\)\(0\)\(0\)\(0\)\(0\)\(0\)\(0\)\(40320\)
\(m = 4\)\(0\)\(0\)\(0\)\(0\)\(0\)\(0\)\(10080\)\(30240\)
\(m = 5\)\(0\)\(0\)\(0\)\(0\)\(0\)\(1440\)\(17280\)\(21600\)
\(m = 6\)\(0\)\(0\)\(0\)\(0\)\(480\)\(8640\)\(21600\)\(9600\)
\(m = 7\)\(0\)\(0\)\(0\)\(96\)\(3456\)\(16416\)\(16896\)\(3456\)
\(m = 8\)\(0\)\(0\)\(48\)\(2160\)\(12960\)\(18240\)\(6480\)\(432\)
\(m = 9\)\(0\)\(16\)\(1152\)\(9648\)\(18688\)\(9648\)\(1152\)\(16\)

B. Подготовка к соревнованию

Конструктив математика *800

Монокарп практикуется перед большим соревнованием. Он планирует решить \(n\) задач, чтобы убедиться, что он хорошо подготовлен. У каждой из этих задач есть уровень сложности: первая задача имеет уровень сложности \(1\), вторая задача имеет уровень сложности \(2\), и так далее до последней (\(n\)-й) задачи, которая имеет уровень сложности \(n\).

Монокарп выберет некоторый порядок, в котором он собирается решить все \(n\) задач. Каждый раз, когда он решает более сложную задачу, чем предыдущая решенная им, он радуется, так как ощущает свой прогресс. Монокарп никогда не радуется во время решения первой задачи в выбранном порядке.

Например, если Монокарп решает задачи в порядке \([3, \underline{5}, 4, 1, \underline{6}, 2]\), он радуется дважды (соответствующие задачи подчеркнуты).

Монокарп хочет порадоваться ровно \(k\) раз во время своей тренировочной сессии. Помогите ему выбрать порядок, в котором он должен решать задачи!

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 50\); \(0 \le k \le n - 1\)).

Выходные данные

Для каждого теста выведите \(n\) различных целых чисел от \(1\) до \(n\), обозначающих порядок, в котором Монокарп должен решать задачи. Если существует несколько ответов, выведите любой из них.

Можно показать, что при ограничениях задачи ответ всегда существует.

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\).

G1. Лампочки (простая версия)

графы Деревья дп Комбинаторика математика Перебор поиск в глубину и подобное снм *2100

Простая и сложная версии этой задачи отличаются друг от друга только ограничениями на \(n\). В простой версии сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\). Кроме того, \(n\) не превосходит \(1000\) в каждом наборе входных данных.

В ряд расположены \(2n\) лампочек. У каждой лампочки есть цвет от \(1\) до \(n\) (ровно по две лампочки каждого цвета).

Изначально все лампочки выключены. Вы выбираете некоторое множество лампочек \(S\), которое вы изначально включите. После этого вы можете выполнять следующие операции в любом порядке любое количество раз:

  • выбрать две лампочки \(i\) и \(j\) одинакового цвета, ровно одна из которых включена, и включить вторую из них;
  • выбрать три лампочки \(i, j, k\), такие, что обе лампочки \(i\) и \(k\) включены и имеют одинаковый цвет, а лампочка \(j\) находится между ними (\(i < j < k\)), и включить лампочку \(j\).

Вы хотите выбрать такое множество лампочек \(S\), которые вы изначально включаете, чтобы путем выполнения описанных операций можно было добиться того, чтобы все лампочки оказались включены.

Посчитайте два числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).
Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 1000\)) — количество пар лампочек.

Во второй строке каждого набора заданы \(2n\) целых чисел \(c_1, c_2, \dots, c_{2n}\) (\(1 \le c_i \le n\)), где \(c_i\) — цвет \(i\)-й лампочки. Для каждого цвета от \(1\) до \(n\) ровно две лампочки имеют этот цвет.

Дополнительное ограничение на входные данные: сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите два целых числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).

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\) единиц сока.

A. 2023

Конструктив математика реализация теория чисел *800

В последовательности \(a\), произведение которой было равно \(2023\), удалили \(k\) чисел и осталась последовательность \(b\) длины \(n\). По получившейся последовательности \(b\) найдите любую подходящую последовательность \(a\) и выведите какие \(k\) элементов из нее удалили, либо скажите, что такой последовательности не могло существовать.

Обратите внимание, что вам не гарантируется, что такой массив существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) (\(1 \le n, k \le 5\)) — размер последовательности \(b\) и количество удаленных чисел из последовательности \(a\).

Во второй строке содержится \(n\) целых чисел \(b_1,b_2, \ldots,b_n\) (\(1 \leq b_i \leq 2023\)) — оставшаяся последовательность. Значения \(b_i\) могут не являться делителями \(2023\).

Выходные данные

Для каждого набора входных данных выведите «YES», если последовательность \(a\) существует, а также в следующей строке выведите \(k\) целых неотрицательных чисел, которые удалили из последовательности \(a\). Если же последовательности \(a\) не существует в единственной строке выведите «NO».

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

В третьем наборе произведение равно \(289 \cdot 7 = 2023\).

В четвертом произведение уже равно \(2023\).

В седьмом произведение равно \(7 \cdot 17 \cdot 17 = 2023\).

B. Два делителя

Конструктив математика теория чисел *1000

Загадано некоторое число \(1 \le x \le 10^9\). Вам даны два целых числа \(a\) и \(b\), которые являются двумя наибольшими делителями числа \(x\). При этом выполняется условие \(1 \le a < b < x\).

По заданным числам \(a\), \(b\) от вас требуется узнать значение \(x\).

\(^{\dagger}\) Число \(y\) является делителем числа \(x\), если существует такое целое число \(k\), что \(x = y \cdot k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(a\), \(b\) (\(1 \le a < b \le 10^9\)).

Гарантируется, что \(a\), \(b\) — два наибольших делителя для некоторого числа \(1 \le x \le 10^9\).

Выходные данные

Для каждого набора входных данных выведите число \(x\), такое что \(a\) и \(b\) — это два наибольших делителя числа \(x\).

Если существует несколько вариантов ответа, выведите любой.

Примечание

Для первого набора входных данных все делители меньшие \(6\) равны \([1, 2, 3]\), среди них двумя наибольшими будут являться \(2\) и \(3\).

Для третьего набора входных данных все делители меньшие \(33\) равны \([1, 3, 11]\), среди них двумя наибольшими будут являться \(3\) и \(11\).

Для пятого набора входных данных все делители меньшие \(20\) равны \([1, 2, 4, 5, 10]\), среди них двумя наибольшими будут являться \(5\) и \(10\).

Для шестого набора входных данных все делители меньшие \(12\) равны \([1, 2, 3, 4, 6]\), среди них двумя наибольшими будут являться \(4\) и \(6\).

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\).

D. Математическое задание

геометрия Конструктив математика Перебор *1700

Математикам 31 лицея было предложено следующее задание:

Вам дано нечетное число \(n\) и вам нужно подобрать \(n\) различных чисел, которые являются квадратами целых чисел. Но не всё так просто. Каждое число должно быть длины \(n\) (и при этом не иметь ведущих нулей) и мультимножество цифр всех чисел должно совпадать. Например, у \(\mathtt{234}\) и \(\mathtt{432}\), \(\mathtt{11223}\) и \(\mathtt{32211}\) мультимножества цифр совпадают, а у \(\mathtt{123}\) и \(\mathtt{112233}\) нет.

Математики не справились с этой задачей, а сможете ли вы?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Следующие \(t\) строк содержат одно целое нечетное число \(n\) (\(1 \leq n \leq 99\)) — количество чисел, которые нужно подобрать и их длина.

Гарантируется, что при заданных ограничениях решение существует.

Гарантируется, что сумма по \(n^2\) не превосходит \(10^5\).

Числа можно выводить в любом порядке.

Выходные данные

Для каждого набора нужно вывести \(n\) чисел длины \(n\) — ответ на задачу.

Если существует несколько вариантов ответа, выведите любой.

Примечание

Ниже показано квадратами каких чисел являются ответы для второго набора входных данных:

\(\mathtt{169}\) = \(\mathtt{13}^2\)

\(\mathtt{196}\) = \(\mathtt{14}^2\)

\(\mathtt{961}\) = \(\mathtt{31}^2\)

Ниже показано квадратами каких чисел являются ответы для третьего набора входных данных:

\(\mathtt{16384}\) = \(\mathtt{128}^2\)

\(\mathtt{31684}\) = \(\mathtt{178}^2\)

\(\mathtt{36481}\) = \(\mathtt{191}^2\)

\(\mathtt{38416}\) = \(\mathtt{196}^2\)

\(\mathtt{43681}\) = \(\mathtt{209}^2\)

H1. Ранг матрицы (Простая версия)

дп Комбинаторика математика матрицы Перебор *2700

Это простая версия задачи. Единственное отличие между двумя версиями этой задачи в ограничениях на \(k\). Вы можете делать взломы только если сданы обе версии задачи.

Вам даны целые числа \(n\), \(p\) и \(k\). Гарантируется, что \(p\) является простым числом.

Для каждого \(r\) от \(0\) до \(k\) найдите количество \(n \times n\) матриц \(A\) над полем\(^\dagger\) целых чисел по модулю \(p\), таких что ранг\(^\ddagger\) матрицы \(A\) в точности равен \(r\). Поскольку эти значения могут быть большими, вам требуется вывести их по модулю \(998\,244\,353\).

\(^\dagger\) https://en.wikipedia.org/wiki/Field_(mathematics)

\(^\ddagger\) https://en.wikipedia.org/wiki/Rank_(linear_algebra)

Входные данные

Первая строка ввода содержит три целых числа \(n\), \(p\) и \(k\) (\(1 \leq n \leq 10^{18}\), \(2 \leq p < 998\,244\,353\), \(0 \leq k \leq 5000\)).

Гарантируется, что \(p\) является простым числом.

Выходные данные

Выведите \(k+1\) целое число, ответы для каждого \(r\) от \(0\) до \(k\).

H2. Ранг матрицы (сложная версия)

дп Комбинаторика математика матрицы строковые суфф. структуры *2700

Это сложная версия задачи. Единственное различие между двумя версиями этой задачи в ограничениях на \(k\). Вы можете использовать взломы только если сданы обе версии задачи.

Вам даны целые числа \(n\), \(p\) и \(k\). Гарантируется, что \(p\) является простым числом.

Для каждого \(r\) от \(0\) до \(k\) найдите количество \(n \times n\) матриц \(A\) над полем\(^\dagger\) целых чисел по модулю \(p\), таких что ранг\(^\ddagger\) матрицы \(A\) в точности равен \(r\). Поскольку эти значения могут быть большими, вам требуется вывести их по модулю \(998\,244\,353\).

\(^\dagger\) https://en.wikipedia.org/wiki/Field_(mathematics)

\(^\ddagger\) https://en.wikipedia.org/wiki/Rank_(linear_algebra)

Входные данные

Первая строка ввода содержит три целых числа \(n\), \(p\) и \(k\) (\(1 \leq n \leq 10^{18}\), \(2 \leq p < 998\,244\,353\), \(0 \leq k \leq 5 \cdot 10^5\)).

Гарантируется, что \(p\) является простым числом.

Выходные данные

Выведите \(k+1\) целое число, ответы для каждого \(r\) от \(0\) до \(k\).

A. Наименьшее произведение

Конструктив математика *800

Вам дан массив целых чисел \(a_1, a_2, \dots, a_n\). Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выбрать любой элемент \(a_i\) из массива и заменить его значение на любое целое число от \(0\) до \(a_i\) (включительно). Более формально, если \(a_i < 0\), заменить \(a_i\) на любое целое число из \([a_i, 0]\), иначе заменить \(a_i\) на любое целое число из \([0, a_i]\).

Пусть \(r\) — минимально возможное произведение всех \(a_i\) после выполнения операции любое число раз.

Найдите минимальное количество операций, необходимое для того, чтобы произведение стало равно \(r\). Также выведите одну такую кратчайшую последовательность операций. Если существует несколько ответов, можете вывести любой из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 100\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)).

Выходные данные

Для каждого набора входных данных:

  • Первая строка должна содержать минимальное количество операций \(k\) (\(0 \leq k \leq n\)).
  • \(j\)-я из следующих \(k\) строк должна содержать два целых числа \(i\) и \(x\), которые описывают \(j\)-ю операцию. Эта операция заключается в замене \(a_i\) на \(x\).
Примечание

В первом примере мы можем заменить значение первого элемента на \(0\), и произведение станет \(0\), что является минимально возможным произведением.

Во втором примере изначально произведение целых чисел равно \(2 \cdot 8 \cdot (-1) \cdot 3 = -48\), что является минимально возможным произведением, поэтому в этом случае ничего делать не нужно.

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\)-й день.

D. Очередная задача про инверсии

дп Комбинаторика математика реализация Структуры данных теория чисел *2300

Вам даны перестановка \(p_0, p_1, \ldots, p_{n-1}\) нечётных чисел от \(1\) до \(2n-1\) и перестановка \(q_0, q_1, \ldots, q_{k-1}\) целых чисел от \(0\) до \(k-1\).

Определим массив \(a_0, a_1, \ldots, a_{nk-1}\) длины \(nk\) в соответствии со следующим правилом:

\(a_{i \cdot k+j}=p_i \cdot 2^{q_j}\) для всех \(0 \le i < n\) и всех \(0 \le j < k\)

Например, если \(p = [3, 5, 1]\) и \(q = [0, 1]\), то \(a = [3, 6, 5, 10, 1, 2]\).

Обратите внимание, что все массивы в условии нумеруются с нуля. Также обратите внимание, что каждый элемент массива \(a\) определён однозначно.

Найдите количество инверсий в массиве \(a\). Так как ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Инверсией в массиве \(a\) называется пара \((i, j)\) (\(0 \le i < j < nk\)), такая что \(a_i > a_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)) — длины массивов \(p\) и \(q\).

Вторая строка каждого набора содержит \(n\) различных целых чисел \(p_0, p_1, \ldots, p_{n-1}\) (\(1 \le p_i \le 2n-1\), \(p_i\) нечётно) — массив \(p\).

Третья строка каждого набора содержит \(k\) различных целых чисел \(q_0, q_1, \ldots, q_{k-1}\) (\(0 \le q_i < k\)) — массив \(q\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и что сумма \(k\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество инверсий в массиве \(a\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных массив \(a\) равен \([3, 6, 5, 10, 1, 2]\). В нём есть \(9\) инверсий: \((0, 4)\), \((0, 5)\), \((1, 2)\), \((1, 4)\), \((1, 5)\), \((2, 4)\), \((2, 5)\), \((3, 4)\), \((3, 5)\). Обратите внимание, что здесь перечислены пары \((i, j)\), такие что \(i < j\) и \(a_i > a_j\).

Во втором наборе входных данных массив \(a\) равен \([8, 4, 1, 2, 24, 12, 3, 6, 40, 20, 5, 10]\). В нём \(25\) инверсий.

В третьем наборе входных данных массив \(a\) равен \([1, 2, 4, 8, 16]\). В нём нет инверсий.

E. Постройте матрицу

Конструктив математика *2500

Вам дано четное целое число \(n\) и целое число \(k\). Ваша задача — построить матрицу размера \(n \times n\), состоящую из чисел \(0\) и \(1\) таким образом, чтобы выполнялись следующие условия, или сообщить, что это невозможно:

  • сумма всех чисел в матрице равна ровно \(k\);
  • побитовый \(\texttt{XOR}\) всех чисел в строке \(i\) одинаков для каждого \(i\);
  • побитовый \(\texttt{XOR}\) всех чисел в столбце \(j\) одинаков для каждого \(j\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 130\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных описывается одной строкой, содержащей два целых числа \(n\) и \(k\) (\(2 \leq n \leq 1000\), \(n\) чётно, \(0 \leq k \leq n^2\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{Yes}\), если возможно построить матрицу, удовлетворяющую всем условиям задачи, и \(\texttt{No}\) в противном случае.

Если матрицу построить возможно, то \(i\)-я из следующих \(n\) строк должна содержать \(n\) целых чисел, представляющих элементы в \(i\)-й строке матрицы.

Примечание

В первом примере все условия выполнены:

  • сумма всех чисел в матрице равна ровно \(0\);
  • побитовый \(\texttt{XOR}\) всех чисел в строке \(i\) равен \(0\) для каждого \(i\);
  • побитовый \(\texttt{XOR}\) всех чисел в столбце \(j\) равен \(0\) для каждого \(j\).

В третьем примере можно показать, что найти матрицу, удовлетворяющую всем условиям задачи, невозможно.

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\).

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\).

G. Перестановка от исходного

Конструктив математика *2700

Вам дали всего одно число \(n\). Оно не показалось вам интересным, и вы задумались над вопросом: можно ли придумать такой массив длины \(n\) из целых чисел без нулей, что если каждый элемент массива заменить на сумму соседних (крайние элементы заменяются просто на соседние), получится перестановка чисел в исходном массиве.

Входные данные

Каждый набор входных данных содержит всего одно число \(n\) (\(2 \leq n \leq 10^6\)).

Выходные данные

Если ответ существует, выведите «YES» (без кавычек), а затем массив \(a\) (\(-10^9 \leq a_i \leq 10^9, a_i \neq 0\)), удовлетворяющий условию задачи. Если вариантов ответов несколько, выведите любой.

Если подходящего массива нет, выведите «NO» (без кавычек).

Слова «YES» и «NO» можно выводить в любом регистре, например, «YES», «Yes», «yEs», и так далее.

Примечание

В первом тесте массив [\(1, 2, -2, -1\)] подходит, так как если заменить каждый элемент на сумму соседних, то получится массив [\(2, -1, 1, -2\)], который является перестановкой от исходного.

Во втором тесте можно показать, что ответа не существует.

A. Обмен кошельками

игры математика *800

Алисе и Бобу стало скучно, и они решили поиграть в игру со своими кошельками. У Алисы в кошельке есть \(a\) монет, а у Боба — \(b\) монет.

Игроки ходят по очереди, причем первый ход делает Алиса. Каждый ход текущий игрок выполняет следующие действия по очереди:

  1. Решить, обменяться кошельками с соперником или же оставить свой текущий кошелек.
  2. Вынуть \(1\) монету из своего текущего кошелька. Перед выполнением этого шага в кошельке не может быть \(0\) монет.

Игрок, который не может сделать корректный ход, проигрывает. Определите, кто победит в игре, если и Алиса, и Боб играют оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)) — количество монет в кошельках Алисы и Боба соответственно.

Выходные данные

Для каждого набора входных данных выведите «Alice», если в игре победит Алиса, и «Bob», если в игре победит Боб.

Примечание

Пример игры для первого набора входных данных:

  • Алиса решает не обмениваться кошельками с Бобом на 1 шаге своего хода. Теперь \(a=0\) и \(b=1\).
  • Поскольку кошелёк Алисы пуст, Боб должен решить не обмениваться кошельками на 1 шаге своего хода. Теперь \(a=0\) и \(b=0\).
  • Поскольку кошельки Алисы и Боба пусты, Алиса не может сделать ход. Следовательно, Боб выигрывает.

Пример игры для второго набора входных данных:

  • Алиса решает поменяться кошельками с Бобом на 1 шаге своего хода. Теперь \(a=3\) и \(b=1\).
  • Боб решает поменяться кошельками с Алисой на 1 шаге своего хода. Теперь \(a=1\) и \(b=2\).
  • Алиса решает не обмениваться кошельками с Бобом на 1 шаге своего хода. Теперь \(a=0\) и \(b=2\).
  • Поскольку кошелёк Алисы пуст, Боб может выбрать только не обмениваться кошельками с Алисой на 1 шаге своего хода. Теперь \(a=0\) и \(b=1\).
  • Поскольку кошелёк Алисы пуст, Алиса может выбрать только обмен кошельками с Бобом на 1 шаге своего хода. Теперь \(a=0\) и \(b=0\).
  • Поскольку и кошелёк Алисы, и кошелёк Боба пусты, Боб не может сделать ход. Следовательно, Алиса выигрывает.

E. Подсчёт префиксов

дп Комбинаторика Конструктив математика реализация *2600

Есть неизвестный массив \(a\) длины \(n\), состоящий только из \(1\) и \(-1\). Пусть \(p\) — массив префиксных сумм массива \(a\). Более формально, \(p\) — это массив длины \(n\), в котором \(p_i = a_1 + a_2 + \ldots + a_i\). После этого массив \(p\) сортируется в неубывающем порядке. Например, если \(a = [1, -1, -1, 1, 1]\), то \(p = [1, 0, -1, 0, 1]\) до сортировки и \(p = [-1, 0, 0, 1, 1]\) после сортировки.

Вам дан массив префиксных сумм \(p\) после сортировки, но вы не знаете, чему был равен массив \(a\). Ваша задача — посчитать количество исходных массивов \(a\), для которых в результате сортировки массива префиксных сумм получается заданный массив \(p\). Поскольку это число может быть большим, от вас требуется только найти его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — длину неизвестного массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(|p_i| \le n\)) — \(n\) префиксных сумм массива \(a\), отсортированных в порядке неубывания.

Гарантируется, что \(p_1 \le p_2 \le \ldots \le p_n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите ответ по модулю \(998\,244\,353\).

Примечание

В первых двух наборах входных данных единственными возможными массивами \(a\) для \(n = 1\) являются \(a = [1]\) и \(a = [-1]\). Соответствующие им отсортированные массивы префиксных сумм \(p\) — \(p = [1]\) и \(p = [-1]\). Следовательно, не существует массива \(a\), который может привести к отсортированному массиву префиксных сумм \(p = [0]\). Но существует ровно \(1\) массив \(a\), который может привести к отсортированному массиву префиксных сумм \(p = [1]\).

В третьем наборе входных данных можно доказать, что не существует массива \(a\), который мог бы привести к отсортированному массиву префиксных сумм \(p = [-1, 1, 2]\).

В четвертом наборе входных данных существует \(3\) возможных массива \(a\), которые могут привести к отсортированному массиву префиксных сумм \(p = [-1, 0, 0, 1, 1]\).

  • \(a = [1, -1, 1, -1, -1]\). Массив префиксных сумм до сортировки равен \(p = [1, 0, 1, 0, -1]\), а после сортировки \(p = [-1, 0, 0, 1, 1]\).
  • \(a = [1, -1, -1, 1, 1]\). Массив префиксных сумм до сортировки равен \(p = [1, 0, -1, 0, 1]\), а после сортировки \(p = [-1, 0, 0, 1, 1]\).
  • \(a = [-1, 1, 1, -1, 1]\). Массив префиксных сумм до сортировки равен \(p = [-1, 0, 1, 0, 1]\), а после сортировки \(p = [-1, 0, 0, 1, 1]\).

Для пятого набора входных данных единственным возможным массивом \(a\), который может привести к отсортированному массиву префиксных сумм \(p = [-4, -3, -3, -2, -1]\), является \(a = [-1, -1, -1, -1, 1]\).

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\).

C. Разбиение массива

математика Перебор теория чисел *1600

У Аллена есть массив \(a_1, a_2,\ldots,a_n\). Для каждого положительного целого числа \(k\), которое является делителем \(n\), Аллен делает следующее:

  • Он разбивает массив на \(\frac{n}{k}\) непересекающихся подмассивов длины \(k\). Другими словами, он разбивает массив на следующие подмассивы: \(\)[a_1,a_2,\ldots,a_k],[a_{k+1}, a_{k+2},\ldots,a_{2k}],\ldots,[a_{n-k+1},a_{n-k+2},\ldots,a_{n}]\(\)
  • Аллен получает одно очко, если существует некоторое положительное целое число \(m\) (\(m \geq 2\)), такое что, если он заменит каждый элемент массива на его остаток при делении на \(m\), тогда все подмассивы будут одинаковыми.

Помогите Аллену найти количество очков, которое он заработает.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2,\ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество очков, которое заработает Аллен.

Примечание

В первом наборе входных данных \(k=2\) приносит очко, так как Аллен может выбрать \(m = 2\), и оба подмассива будут равны \([1, 0]\). \(k=4\) также приносит очко, так как независимо от выбора \(m\) у Аллена будет только один подмассив, и следовательно, все подмассивы будут равны.

Во втором наборе входных данных Аллен зарабатывает \(1\) очко при \(k=3\), и при этом выбор \(m\) не имеет значения.

D. Повторение в массиве

Бинарный поиск математика Перебор реализация снм *1900

У Джейдена есть массив \(a\), который изначально пуст. Ему необходимо выполнить \(n\) операций двух типов в заданном порядке.

  1. Джейден добавляет целое число \(x\) (\(1 \leq x \leq n\)) в конец массива \(a\).
  2. Джейден добавляет \(x\) копий массива \(a\) в конец массива \(a\). Другими словами, массив \(a\) становится равным \([a,\underbrace{a,\ldots,a}_{x}]\). Гарантируется, что перед этим была выполнена хотя бы одна операция первого типа.

У Джейдена есть \(q\) запросов. Для каждого запроса вы должны сообщить ему \(k\)-й элемент массива \(a\). Элементы массива нумеруются с \(1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 10^5\)) — количество операций и количество запросов.

Следующие \(n\) строк описывают операции. Каждая строка содержит два целых числа \(b\) и \(x\) (\(b \in \{1, 2\}\)), где \(b\) обозначает тип операции. Если \(b=1\), то \(x\) (\(1 \leq x \leq n\)) является целым числом, которое Джейден добавляет в конец массива. Если \(b=2\), то \(x\) (\(1 \leq x \leq 10^9\)) является количеством копий, которые Джейден добавляет в конец массива.

Следующая строка каждого набора входных данных содержит \(q\) целых чисел \(k_1, k_2, \ldots, k_q\) (\(1 \leq k_i \leq \min(10^{18}, c)\)), которые обозначают запросы, где \(c\) — размер массива после выполнения всех \(n\) операций.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — ответы на запросы Джейдена.

Примечание

В первом наборе входных данных:

  • После первой операции \(a = [1]\);
  • После второй операции \(a = [1, 2]\);
  • После третьей операции \(a = [1, 2, 1, 2]\);
  • После четвёртой операции \(a = [1, 2, 1, 2, 3]\);
  • После пятой операции \(a = [1, 2, 1, 2, 3, 1, 2, 1, 2, 3, 1, 2, 1, 2, 3, 1, 2, 1, 2, 3]\).

В четвёртом наборе входных данных после всех операций \(a = [1, 2]\).

E. Подсчёт бинарных строк

дп Комбинаторика математика *2100

Патрик называет подстроку\(^\dagger\) бинарной строки\(^\ddagger\) хорошей, если эта подстрока содержит ровно одну 1.

Помогите Патрику посчитать количество бинарных строк \(s\), таких что \(s\) содержит ровно \(n\) хороших подстрок и не имеет хороших подстрок длины строго больше \(k\). Обратите внимание, что подстроки различаются по их расположению в строке, например, если \(s =\) 1010, вы должны посчитать оба вхождения 10.

\(^\dagger\) Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

\(^\ddagger\) Бинарная строка — это строка, которая содержит только символы 0 и 1.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2500\), \(1 \leq k \leq n\)) — количество требуемых хороших подстрок и максимальная допустимая длина хорошей подстроки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество бинарных строк \(s\), таких что \(s\) содержит ровно \(n\) хороших подстрок и не имеет хороших подстрок длины строго больше \(k\). Поскольку это число может быть слишком большим, выведите его по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных единственной подходящей бинарной строкой является 1. Строка 01 не подходит, потому что она содержит подстроку 01 длины \(2 > 1\).

Во втором наборе входных данных подходящими бинарными строками являются 011, 110 и 111.

В третьем наборе входных данных подходящими бинарными строками являются 101, 0110, 0111, 1110, 1111.

A. Квадрат

жадные алгоритмы математика *800

На координатной плоскости расположен квадрат положительной (строго большей \(0\)) площади, со сторонами, параллельными осям координат. Вам даны координаты его углов в случайном порядке. Ваша задача — найти площадь квадрата.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит четыре строки, каждая строка содержит два целых числа \(x_i, y_i\) (\(-1000\le x_i, y_i\le 1000\)), координаты углов квадрата.

Гарантируется, что существует квадрат со сторонами, параллельными осям координат, с положительной (строго большей \(0\)) площадью, углы которого находятся в заданных точках.

Выходные данные

Для каждого набора входных данных выведите одно целое число — площадь квадрата.

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\).

Последний (шестой) набор примера может упасть, если в вашем решении есть переполнение целочисленного типа.

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» будут приняты как победа Боба.

F. Сумма на прогрессии

дп математика Перебор реализация Структуры данных *1900

Дан массив \(a\) из \(n\) чисел. Также есть \(q\) запросов вида \(s, d, k\).

Для каждого из \(q\) запросов найдите сумму элементов \(a_s + a_{s+d} \cdot 2 + \dots + a_{s + d \cdot (k - 1)} \cdot k\). Иными словами, для каждого запроса нужно найти сумму \(k\) элементов массива с индексами начиная с \(s\)-го, делая шаги, равные \(d\), умножая на порядковый номер элемента в полученной последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит два числа \(n, q\) (\(1 \le n \le 10^5, 1 \le q \le 2 \cdot 10^5\)) — количество чисел в массиве \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, ... a_n\) (\(-10^8 \le a_1, ..., a_n \le 10^8\)) — элементы массива \(a\).

Следующие \(q\) строк содержат по три целых числа \(s\), \(d\) и \(k\) (\(1 \le s, d, k \le n\), \(s + d\cdot (k - 1) \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам не превосходит \(10^5\), и что сумма значений \(q\) по всем наборам не превосходит \(2 \cdot 10^5 \).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(q\) чисел — желаемые суммы, разделенные пробелом.

B. Формирование треугольников

Комбинаторика Конструктив математика сортировки *1200

У вас есть \(n\) палочек, пронумерованных от \(1\) до \(n\). Длина \(i\)-й палочки равна \(2^{a_i}\).

Вы хотите выбрать ровно \(3\) палочки из заданных \(n\) палочек и образовать из них невырожденный треугольник, используя палочки в качестве сторон треугольника. Треугольник называется невырожденным, если его площадь строго больше \(0\).

Вам нужно посчитать количество способов выбрать ровно \(3\) палочки, чтобы из них можно было образовать треугольник. Обратите внимание, что порядок выбора палочек не имеет значения (например, выбрать \(1\)-ю, \(2\)-ю и \(4\)-ю палочку — это то же самое, что и выбрать \(2\)-ю, \(4\)-ю и \(1\)-ю палочку).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\));
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le n\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — количество способов выбрать ровно \(3\) палочки, чтобы из них можно было составить треугольник.

Примечание

В первом наборе входных данных примера можно выбрать любые три палочки из заданных \(7\).

Во втором наборе входных данных примера можно выбрать \(1\)-ю, \(2\)-ю и \(4\)-ю палочку, или \(1\)-ю, \(3\)-ю и \(4\)-ю палочку.

В третьем наборе входных данных примера нельзя образовать треугольник из заданных палочек длиной \(2\), \(4\) и \(8\).

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\).

D. Безумные монстры

математика Перебор реализация снм Структуры данных *1900

Монокарп играет в компьютерную игру (опять). Угадайте, что он делает? Правильно, убивает монстров.

В ряд стоят \(n\) монстров, пронумерованных от \(1\) до \(n\). У \(i\)-го монстра есть два параметра: значение атаки, равное \(a_i\), и значение защиты, равное \(d_i\). Чтобы убить этих монстров, Монокарп наложил на них заклинание безумия, так что они атакуют друг друга, а не персонажа Монокарпа.

Бой состоит из \(n\) раундов. В каждом раунде происходит следующее:

  • сначала каждый живой монстр \(i\) наносит \(a_i\) урона ближайшему живому монстру слева (если он существует) и ближайшему живому монстру справа (если он существует);
  • затем каждый живой монстр \(j\), который получил больше \(d_j\) урона в течение этого раунда, умирает. Т.е. \(j\)-й монстр умирает тогда и только тогда, когда его значение защиты \(d_j\) строго меньше суммарного урона, который он получил в этом раунде.

Для каждого раунда вычислите количество монстров, которые умрут во время этого раунда.

Входные данные

Первая строка содержит одно целое число \(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\) целых чисел \(d_1, d_2, \dots, d_n\) (\(1 \le d_i \le 10^9\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел. \(i\)-е целое число должно быть равно количеству монстров, которые умрут в \(i\)-м раунде.

Примечание

Объяснение для первого примера:

Во время первого раунда происходит следующее:

  • монстр \(1\) наносит \(3\) урона монстру \(2\);
  • монстр \(2\) наносит \(4\) урона монстру \(1\) и монстру \(3\);
  • монстр \(3\) наносит \(7\) урона монстру \(2\) и монстру \(4\);
  • монстр \(4\) наносит \(5\) урона монстру \(3\) и монстру \(5\);
  • монстр \(5\) наносит \(10\) урона монстру \(4\);
  • монстр \(1\) не умирает, так как он получил \(4\) урона и его защита равна \(4\);
  • монстр \(2\) умирает, так как он получил \(10\) урона и его защита равна \(9\);
  • монстр \(3\) умирает, так как он получил \(9\) урона и его защита равна \(1\);
  • монстр \(4\) не умирает, так как он получил \(17\) урона и его защита равна \(18\);
  • монстр \(5\) умирает, так как он получил \(5\) урона и его защита равна \(1\).

После первого раунда остаются в живых монстры \(1\) и \(4\).

Во время второго раунда происходит следующее:

  • монстр \(1\) наносит \(3\) урона монстру \(4\);
  • монстр \(4\) наносит \(5\) урона монстру \(1\);
  • монстр \(1\) умирает, так как он получил \(5\) урона и его защита равна \(4\);
  • монстр \(4\) не умирает, так как он получил \(3\) урона и его защита равна \(18\).

В следующих трех раундах остается в живых только монстр \(4\), поэтому ничего не происходит.

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]\).

B. Космическая гавань

математика реализация сортировки Структуры данных *2100

На прямой линии расположены \(n\) точек, пронумерованных от \(1\) до \(n\). Изначально существует \(m\) гаваней, причем \(i\)-я гавань находится в точке \(X_i\) и имеет значение \(V_i\). Гарантируется, что в точках \(1\) и \(n\) существуют гавани. На каждой из \(n\) точек находится ровно один корабль. Стоимость перемещения корабля с его текущего местоположения до следующей гавани равна произведению значения ближайшей гавани слева и расстояния до ближайшей гавани справа. В частности, если корабль уже находится в гавани, стоимость перемещения его до следующей гавани равна \(0\).

Кроме того, имеется \(q\) запросов, каждый из которых является одним из \(2\) типов:

  • \(1\) \(x\) \(v\) — Добавить гавань в точке \(x\) со значением \(v\). Гарантируется, что перед добавлением в точке \(x\) там еще нет гавани.
  • \(2\) \(l\) \(r\) — Вывести сумму стоимости перемещения всех кораблей с точек от \(l\) до \(r\) до их следующих гаваней. Обратите внимание, что вам нужно только вычислить стоимость перемещения кораблей, но не перемещать их фактически.
Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(2 \le m \le n \le 3 \cdot 10^5\), \(1 \le q \le 3 \cdot 10^5\)) — количество точек, гаваней и запросов соответственно.

Вторая строка содержит \(m\) различных целых чисел \(X_1, X_2, \ldots, X_m(1 \le X_i \le n)\) — позиции \(i\)-й гавани.

Третья строка содержит \(m\) целых чисел \(V_1, V_2, \ldots, V_m(1 \le V_i \le 10^7)\) — значения \(i\)-й гавани.

Каждая из следующих \(q\) строк содержит три целых числа. Первое целое число \(t\) (\(1\le t \le 2\)) — тип запроса. Если \(t=1\), то следующие два целых числа \(x\) и \(v\) (\(2 \le x \le n - 1\), \(1 \le v \le 10^7\)) — запрос первого типа. Если \(t=2\), то следующие два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — запрос второго типа.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго типа выведите одно целое число в новой строке — ответ на этот запрос.

Примечание

Для первого запроса типа \(2\), цена для кораблей на позициях \(2\), \(3\), \(4\) и \(5\) будет \(3(3 \times 1)\), \(0\), \(96(24 \times 4)\) и \(72(24 \times 3)\) соответственно.

Для второго запроса типа \(2\), так как корабль в точке \(5\) уже находится в гавани, ответ будет \(0\).

Для третьего запроса типа \(2\), цена для кораблей на позициях \(7\) и \(8\) будет \(15(15 \times 1)\) и \(0\) соответственно.

C. Фрактальное оригами

геометрия математика матрицы *2400

У вас есть квадратный лист бумаги со стороной длиной \(1\) единица. За одну операцию вы складываете каждый угол квадрата к центру, образуя таким образом еще один квадрат со стороной длины \(\dfrac{1}{\sqrt{2}}\) единицы. Взяв этот квадрат в качестве нового квадрата, вы выполняете операцию снова и повторяете этот процесс в общей сложности \(N\) раз.

Выполнение операций для \(N = 2\).

После выполнения всех операций вы раскрываете бумагу той же стороной, с которой начали, и видите на ней некоторые линии сгиба. Каждая линия сгиба является одной из двух типов, горой или долиной, гора — это когда бумага складывается наружу, а долина — когда бумага складывается внутрь.

Вычислите сумму длин всех линий горных изгибов на бумаге и назовите ее \(M\). Аналогично вычислите сумму длин для линий долин и назовите ее \(V\). Необходимо найти значение \(\dfrac{M}{V}\).

Можно доказать, что это значение можно представить в виде \(A + B\sqrt{2}\), где \(A\) и \(B\) — рациональные числа. Пусть \(B\) будет представлено в виде несократимой дроби \(\dfrac{p}{q}\), ваша задача — напечатать \(p*inv(q)\) по модулю \(999\,999\,893\) (обратите внимание на необычный модуль), где \(inv(q)\)модуль, обратный к \(q\).

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \leq t \leq 10^4\)). Далее следует описание тестов.

Единственная строка каждого тестового случая содержит целое число \(N\) (\(1 \leq N \leq 10^9\)), количество операций, которые вы выполняете на квадратной бумаге.

Выходные данные

Для каждого тестового случая напечатайте на новой строке требуемый ответ.

Примечание

Синие линии на предоставленных рисунках представляют горные линии изгиба, а зеленые линии представляют долинные линии изгиба.

Линии изгиба после \(1\) операции \((\dfrac{M}{V} = 0)\).Линии изгиба после \(2\) операций \((\dfrac{M}{V} = \sqrt{2} - 1)\).

D. Сбалансированные подпоследовательности

дп Комбинаторика математика *2700

Последовательность скобок называется сбалансированной, если ее можно превратить в правильное математическое выражение, добавив символы '+' и '1'. Например, последовательности '(())()', '()', и '(()(()))' сбалансированы, в то время как ')(', '(()', и '(()))(' — нет.

Подпоследовательность — это последовательность, которую можно получить из данной последовательности, удалив ноль или более элементов, и не меняя порядок оставшихся элементов.

Даны три целых числа \(n\), \(m\) и \(k\). Найдите количество последовательностей, состоящих из \(n\) '(' и \(m\) ')', таких, что самая длинная сбалансированная подпоследовательность имеет длину \(2 \cdot k\). Поскольку ответ может быть большим, вычислите его по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 3 \cdot 10^3\)). Затем следуют их описания.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m, k \le 2 \cdot 10^3\)).

Выходные данные

Для каждого тестового случая выведите одно целое число — ответ на задачу.

Примечание

Для первого тестового случая "()()", "(())"\(2\) последовательности

Для второго тестового случая невозможна ни одна последовательность.

Для третьего тестового случая "))()(", "))(()", ")())(", "()))("\(4\) последовательности.

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. Хорошее путешествие

дп Комбинаторика математика Теория вероятностей *1900

В классе есть \(n\) детей, \(m\) пар среди них — друзья. \(i\)-я пара друзей имеет значение дружбы \(f_i\).

Учитель должен посетить \(k\) экскурсий, на каждой из которых она выбирает пару детей случайно, равновероятно и независимо. Если выбрана пара друзей, их значение дружбы увеличивается на \(1\) для всех последующих экскурсий (учитель может выбрать пару детей более одного раза). Значение дружбы пары детей, не являющихся друзьями, остается \(0\), и не изменяется для следующих экскурсий.

Найдите ожидаемое значение суммы значений дружбы по всем \(k\) парам, выбранным для экскурсий (в момент времени их выбора). Можно показать, что этот ответ всегда может быть выражен в виде дроби \(\dfrac{p}{q}\) где \(p\) и \(q\) взаимопростые целые числа. Посчитайте \(p\cdot q^{-1} \bmod (10^9+7)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) означающее количество этих наборов. Далее следует описание наборов входных данных.

Первая строка набора входных данных содержит \(3\) целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 10^5\), \(0 \le m \le \min \Big(10^5\), \( \frac{n(n-1)}{2} \Big)\), \(1 \le k \le 2 \cdot 10^5\)) — количество детей, количество пар друзей и количество экскурсий соответственно.

Следующие \(m\) строк содержат по три целых числа — \(a_i\), \(b_i\), \(f_i\) — номера детей, которые дружат, и их изначальное значение дружбы. (\(a_i \neq b_i\), \(1 \le a_i,b_i \le n\), \(1 \le f_i \le 10^9\)). Гарантируется, что все дружащие пары детей различны.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходит \(10^5\) и сумма \(k\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — ответ на задачу.

Примечание

В первом наборе входных данных, нет пар друзей, а значит значение дружбы всегда равно \(0\) и остается \(0\) после выбора экскурсий, следовательно, сумма значений по всем экскурсиям равна \(0\).

Во втором наборе входных данных, только одна возможная пара для выбора \((1, 2)\), и их значение дружбы изначально \(1\), значит их значение дружбы увеличивается каждую экскурсию на \(1\). Таким образом, сумма это \(1+2+3+\ldots+10 = 55\).

В третьем наборе входных данных ответ это \(\frac{7}{9} = 777\,777\,784\bmod (10^9+7)\).

E. Влад и нечётное упорядочение

Бинарный поиск битмаски дп математика реализация Структуры данных теория чисел *1500

У Владислава есть \(n\) карт с номерами \(1, 2, \dots, n\). Он хочет выложить их в ряд следующим образом:

  • Сначала он выкладывает все карты с нечетными номерами от наименьшего к наибольшему.
  • Затем он выкладывает все карты, которые являются удвоенными нечетными числами, от наименьшего к наибольшему (т.е., \(2\) умноженное на нечётное число).
  • Затем он выкладывает все карты, которые являются нечетными числами, умноженными на \(3\), от наименьшего к наибольшему (т.е., \(3\) умноженное на нечётное число).
  • Затем он выкладывает все карты, которые являются нечетными числами, умноженными на \(4\), от наименьшего к наибольшему (т.е., \(4\) умноженное на нечётное число).
  • И так далее, пока все карты не будут выложены.
Какая карта будет \(k\)-й, которую он выложит в этом процессе? После того, как Влад положил карту, он не может использовать ее снова.
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^9\)) — количество карт у Влада и позицию карты, которую нужно вывести.

Выходные данные

Для каждого набора входных данных выведите одно целое число — \(k\)-ю карту, которую выложит Влад.

Примечание

В первых семи наборах входных данных примера \(n=7\). Влад выкладывает карты следующим образом:

  • Сначала — все карты с нечетными номерами в порядке \(1\), \(3\), \(5\), \(7\).
  • Затем — все карты, которые являются удвоенными нечетными числами, в порядке \(2\), \(6\).
  • Затем нет оставшихся карт, которые являются нечетными числами, умноженными на \(3\). (У Влада есть только по одной карте каждого числа.)
  • Затем — все карты, которые являются нечетными числами, умноженными на \(4\), и есть только одна такая карта: \(4\).
  • Больше карт не осталось, поэтому Влад останавливается.
Таким образом, порядок карт будет \(1\), \(3\), \(5\), \(7\), \(2\), \(6\), \(4\).

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\).

E. Каровная перестановка

Конструктив математика *1400

Вам даны два целых числа \(n\) и \(k\) (\(k \le n\)), причём число \(k\) — чётное.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([0,1,2]\) тоже не перестановка (\(n=3\), но в массиве не встречается \(3\)).

Ваша задача построить \(k\)-ровную перестановку длины \(n\).

Перестановка называется \(k\)-ровной, если среди всех сумм непрерывных отрезков длины \(k\) (которых, очевидно, ровно \(n - k + 1\)), любые две суммы отличаются не более чем на \(1\).

Более формально, чтобы определить, является ли перестановка \(p\) \(k\)-ровной, сначала построим массив \(s\) длины \(n - k + 1\), где \(s_i=\sum_{j=i}^{i+k-1} p_j\), то есть \(i\)-й элемент равен сумме \(p_i, p_{i+1}, \dots, p_{i+k-1}\).

Перестановка называется \(k\)-ровной, если \(\max(s) - \min(s) \le 1\).

Найдите любую \(k\)-ровную перестановку длины \(n\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Первая и единственная строка каждого набора содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\), \(k\) — чётное число), где \(n\) — длина искомой перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите любую \(k\)-ровную перестановку длины \(n\).

Гарантируется, что такая перестановка всегда существует при данных ограничениях.

Примечание

Во втором наборе входных данных примера:

  • \(p_1 + p_2 = 3 + 1 = 4\);
  • \(p_2 + p_3 = 1 + 2 = 3\).
Максимум среди сумм равен \(4\), а минимум равен \(3\).

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\)-й.

A. Разрез прямоугольника

геометрия математика *800

У Боба есть прямоугольник размера \(a \times b\). Он пробует разрезать этот прямоугольник на два прямоугольника с целыми сторонами, сделав разрез, параллельный какой-то из сторон исходного прямоугольника. Затем Боб пытается из двух получившихся прямоугольников сложить какой-то другой прямоугольник, при этом он может как угодно поворачивать и двигать эти два прямоугольника.

Обратите внимание, что если два прямоугольника отличаются поворотом на \(90^{\circ}\), то они считаются одинаковыми. Например, прямоугольники \(6 \times 4\) и \(4 \times 6\) считаются одинаковыми.

Таким образом, из прямоугольника \(2 \times 6\) можно получить другой прямоугольник, потому что его можно разрезать на два прямоугольника \(2 \times 3\), после чего из этих двух прямоугольников сложить прямоугольник \(4 \times 3\), который отличается от прямоугольника \(2 \times 6\).

При этом из прямоугольника \(2 \times 1\) нельзя получить другой прямоугольник, потому что его можно разрезать только на два прямоугольника \(1 \times 1\), а из них можно сложить только прямоугольники \(1 \times 2\) и \(2 \times 1\), которые считаются одинаковыми.

Помогите Бобу определить, сможет ли он получить какой-то другой прямоугольник, или он только зря тратит время.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)) — размеры прямоугольника Боба.

Выходные данные

Для каждого набора входных данных выведите «Yes», если Боб может получить другой прямоугольник из прямоугольника \(a \times b\). Иначе выведите «No».

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs»,«yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных прямоугольник \(1 \times 1\) нельзя разрезать на два прямоугольника, поэтому из него нельзя получить другой прямоугольник.

Во четвёртом наборе входных данных прямоугольник \(3 \times 2\) можно разрезать на два прямоугольника \(3 \times 1\), а из них можно сложить прямоугольник \(1 \times 6\).

В пятом наборе входных данных прямоугольник \(2 \times 2\) можно разрезать на два прямоугольника \(1 \times 2\), а из них можно сложить прямоугольник \(1 \times 4\).

C. Урок физкультуры

математика Перебор теория чисел *1600

В известной школе прошёл урок физкультуры. Как полагается, всех построили в шеренгу и попросили рассчитаться на «первый–\(k\)-й».

Как известно, расчёт на «первый–\(k\)-й» происходит следующим образом: первые \(k\) человек имеют номера \(1, 2, 3, \ldots, k\), следующие \(k - 2\) человек имеют номера \(k - 1, k - 2, \ldots, 2\), следующие \(k\) человек имеют номера \(1, 2, 3, \ldots, k\) и т.д. Таким образом, расчёт повторяется через каждые \(2k - 2\) позиции. Примеры расчёта приведены в разделе «Примечание».

Мальчик Вася постоянно всё забывает. Например, он забыл число \(k\), описанное выше. Но он помнит позицию, которую занимал в шеренге, а также какой номер он получил при расчёте. Помогите Васе понять, сколько натуральных чисел \(k\) подходят под данные ограничения.

Обратите внимание, что расчёт существует для всех и только для всех \(k > 1\). В частности, это означает, что не существует расчёта для \(k = 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le x < n \le 10^9\)) — позиция Васи в шеренге и номер, который Вася получил при расчёте.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество различных \(k\), которые подходят под данные ограничения.

Можно доказать, что при данных ограничениях ответ является конечным.

Примечание

В первом наборе входных данных подходят \(k\) равные \(2, 3, 5, 6\).

Пример расчёта для этих \(k\):

\(k\) / №\(1\)\(2\)\(3\)\(4\)\(5\)\(6\)\(7\)\(8\)\(9\)\(10\)
\(2\)\(1\)\(2\)\(1\)\(2\)\(1\)\(2\)\(1\)\(2\)\(1\)\(2\)
\(3\)\(1\)\(2\)\(3\)\(2\)\(1\)\(2\)\(3\)\(2\)\(1\)\(2\)
\(5\)\(1\)\(2\)\(3\)\(4\)\(5\)\(4\)\(3\)\(2\)\(1\)\(2\)
\(6\)\(1\)\(2\)\(3\)\(4\)\(5\)\(6\)\(5\)\(4\)\(3\)\(2\)

Во втором наборе входных данных подходит \(k = 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]\) не подходит.

F. Цифровые узоры

Комбинаторика математика реализация Структуры данных *2900

Аня занимается рукоделием. Сегодня она решила связать платок из полупрозрачных ниток. Каждая нитка характеризуется единственным целым числом — коэффициентом прозрачности.

Платок делается по следующей схеме: выбираются горизонтальные нитки с коэффициентами прозрачности \(a_1, a_2, \ldots, a_n\) и вертикальные с коэффициентами прозрачности \(b_1, b_2, \ldots, b_m\). Затем они переплетаются между собой, как показано на картинке снизу, и образуют кусок ткани размера \(n \times m\), состоящий ровно из \(nm\) узлов:

Пример куска ткани при \(n = m = 4\).

После того, как сплетение затянется и не будет видно зазоров между нитками, каждый узел, образованный горизонтальной ниткой с номером \(i\) и вертикальной ниткой с номером \(j\), превратится в клетку, которую мы будем обозначать как \((i, j)\). Клетка \((i, j)\) будет иметь коэффициент прозрачности \(a_i + b_j\).

Интересностью полученного платка будем называть количество его подквадратов\(^{\dagger}\), в которых нет пары соседних\(^{\dagger \dagger}\) клеток с одинаковыми коэффициентами прозрачности.

Аня ещё не решила, из каких ниток плести платок, поэтому вам будут даны также \(q\) запросов увеличения/уменьшения коэффициентов прозрачностей ниток на некоторых отрезках. После каждого запроса надо вывести интересность полученного платка.

\(^{\dagger}\)Подквадратом куска ткани называется множество всех его клеток \((i, j)\), таких что \(x_0 \le i \le x_0 + d\) и \(y_0 \le j \le y_0 + d\) для некоторых целых чисел \(x_0\), \(y_0\) и \(d\) (\(1 \le x_0 \le n - d\), \(1 \le y_0 \le m - d\), \(d \ge 0\)).

\(^{\dagger \dagger}\)Клетки \((i_1, j_1)\) и \((i_2, j_2)\) считаются соседними, если \(|i_1 - i_2| + |j_1 - j_2| = 1\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 3 \cdot 10^5\), \(0 \le q \le 3 \cdot 10^5\)) — количество горизонтальных ниток, количество вертикальных ниток и количество запросов изменения.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — коэффициенты прозрачности для горизонтальных ниток, нитки пронумерованы сверху-вниз.

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(-10^9 \le b_i \le 10^9\)) — коэффициенты прозрачности для вертикальных ниток, нитки пронумерованы слева-направо.

В последующих \(q\) строках указаны запросы изменения. Каждый из запросов описывается четверкой целых чисел \(t\), \(l\), \(r\) и \(x\) (\(1 \le t \le 2\), \(l \le r\), \(-10^9 \le x \le 10^9\)). В зависимости от параметра \(t\) в запросе требуется сделать следующее:

  • \(t=1\). Коэффициенты прозрачности для горизонтальных ниток на отрезке \([l, r]\) увеличиваются на \(x\) (иными словами, для всех целых \(l \le i \le r\) значение \(a_i\) увеличивается на \(x\));
  • \(t=2\). Коэффициенты прозрачности для вертикальных ниток на отрезке \([l, r]\) увеличиваются на \(x\) (иными словами, для всех целых \(l \le i \le r\) значение \(b_i\) увеличивается на \(x\)).
Выходные данные

Выведите \((q+1)\) строку. В \((i + 1)\)-й строке (\(0 \le i \le q\)) выведите одно целое число — интересность платка после применения первых \(i\) запросов.

Примечание

В первом примере коэффициенты прозрачности клеток в получившемся платке равны:

2334
2334
3445
4556

Тогда есть следующие подквадраты, не содержащие двух соседних по вертикали или по горизонтали клеток с одинаковым коэффициентом прозрачности:

  • Каждая из \(16\) клеток по отдельности;
  • Подквадрат с левым верхним углом в клетке \((3, 1)\) и правым нижним углом в клетке \((4, 2)\);
  • Подквадрат с левым верхним углом в клетке \((2, 3)\) и правым нижним углом в клетке \((3, 4)\);
  • Подквадрат с левым верхним углом в клетке \((2, 1)\) и правым нижним углом в клетке \((3, 2)\);
  • Подквадрат с левым верхним углом в клетке \((3, 3)\) и правым нижним углом в клетке \((4, 4)\).

Во втором примере после первого запроса коэффициенты прозрачности горизонтальных ниток равны \([1, 2, 2]\). После второго запроса коэффициенты прозрачности вертикальных ниток равны \([2, -4, 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\) монету. Но в случае проигрыша он больше не сможет делать ставки, поэтому он не сможет сделать так, чтобы у него гарантированно оказалось сколь угодно много монет.

D. Саша и прогулка по городу

Деревья дп Комбинаторика математика *1900

Саша хочет прогуляться со своей девушкой по городу. Город состоит из \(n\) перекрёстков, пронумерованных от \(1\) до \(n\). Некоторые из них соединены дорогами, причём от любого перекрёстка существует ровно один простой путь\(^{\dagger}\) до любого другого перекрёстка. Другими словами, перекрёстки и дороги между ними образуют дерево.

Некоторые из перекрёстков являются опасными. И так как гулять одним по городу небезопасно, то Саша не хочет за время прогулки посещать три и более опасных перекрёстков.

Саша называет множество перекрёстков хорошим, если выполняется следующее условие:

  • Если в городе опасными являются те и только те перекрёстки, которые содержатся в этом множестве, то любой простой путь в городе содержит не более двух опасных перекрёстков.

Однако Саша не знает, какие из перекрёстков являются опасными, поэтому его интересует количество различных хороших множеств перекрёстков, которые есть в городе. Поскольку это количество может быть очень большим, выведите его по модулю \(998\,244\,353\).

\(^{\dagger}\)Простой путь — это путь, проходящий через каждый перекрёсток не более одного раза.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \leq 3 \cdot 10^5\)) — количество перекрёстков в городе.

Следующие \((n - 1)\) строка описывают дороги. \(i\)-я из них содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)) — номера перекрёстков, которые соединяет \(i\)-я дорога.

Гарантируется, что данные дороги образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших множеств перекрёстков по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных всего есть \(2^3 = 8\) множеств перекрёстков. Все из них являются хорошими, кроме множества \(\{1, 2, 3\}\), потому что, если перекрёстки \(1, 2\) и \(3\) являются опасными, то простой путь \(1 - 2 - 3\) содержит \(3\) опасных перекрёстка. Таким образом, всего есть \(7\) хороших множеств.

Во втором наборе входных данных всего есть \(2^4 = 16\) множеств перекрёстков. При этом множества \(\{1, 2, 3, 4\}\), \(\{1, 2, 3\}\), \(\{1, 3, 4\}\), \(\{2, 3, 4\}\) не являются хорошими. Таким образом, всего есть \(12\) хороших множеств. Ниже изображена схема города:

E. Саша и веселая нарезка дерева

битмаски графы Деревья дп жадные алгоритмы математика Перебор поиск в глубину и подобное *2300

Саше за победу на очередной олимпиаде подарили дерево\(^{\dagger}\) из \(n\) вершин. Но, вернувшись домой после празднования очередной победы, он заметил его потерю. Саша помнит, что он покрасил некоторые рёбра этого дерева. При этом он точно знает, что для любой из \(k\) пар вершин \((a_1, b_1), \ldots, (a_k, b_k)\) он покрасил хотя бы одно ребро на простом пути\(^{\ddagger}\) между вершинами \(a_i\) и \(b_i\).

Саша не помнит, сколько рёбер он точно покрасил, так что он просит вас сказать, какое минимальное количество рёбер он мог покрасить, чтобы выполнялось описанное выше условие.

\(^{\dagger}\)Деревом называется неориентированный связный граф без циклов.

\(^{\ddagger}\)Простой путь — это путь, проходящий через каждую вершину не более одного раза.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество вершин в дереве.

Следующие \((n - 1)\) строка описывают рёбра дерева. \(i\)-я из них содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)) — номера вершин, которые соединяет \(i\)-е ребро.

Следующая строка содержит одно целое число \(k\) (\(1 \leq k \leq 20\)) — количество пар вершин, на простом пути между которыми Саша покрасил хотя бы одно ребро.

Следующие \(k\) строк описывают пары. \(j\)-я из них содержит два целых числа \(a_j\) и \(b_j\) (\(1 \leq a_j, b_j \leq n, a_j \neq b_j\)) — вершины в \(j\)-й паре.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\). Гарантируется, что сумма \(2^k\) по всем наборам входных данных не превосходит \(2^{20}\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество рёбер, которое мог покрасить Саша.

Примечание

В первом наборе входных данных Саша мог покрасить только одно ребро \((1, 2)\). Тогда на простом пути между вершинами \(1\) и \(3\) и вершинами \(4\) и \(1\) будет хотя бы одно покрашенное ребро.

Во втором наборе входных данных Саша мог покрасить рёбра \((1, 6)\) и \((1, 3)\).

F. Саша и свадебное бинарное дерево поиска

Деревья Комбинаторика математика Перебор поиск в глубину и подобное Структуры данных *2300

Пройдя все трудности и невзгоды, Саша наконец решил жениться на своей девушке. Для этого нужно подарить ей обручальное кольцо. Однако его девушке не нравятся подобные романтические жесты, но нравятся бинарные деревья поиска\(^{\dagger}\). Поэтому Саша решил ей подарить такое дерево.

Проведя немало времени на свадебных сайтах для программистов, он нашел идеальное бинарное дерево поиска с корнем в вершине \(1\). В нём значение в вершине \(v\) равно \(val_v\).

Но спустя некоторое время он забыл значения в некоторых вершинах. Пытаясь вспомнить найденное дерево, Саша задался вопросом — сколько существует бинарных деревьев поиска, которые он мог найти на сайте, если известно, что значения во всех вершинах являются целыми числами и принадлежат отрезку \([1, C]\). Поскольку это число может быть очень большим, выведите его по модулю \(998\,244\,353\).

\(^{\dagger}\)Бинарным деревом поиска называется корневое бинарное дерево, у которого для любой вершины \(x\) выполняется свойство: значения всех вершин в левом поддереве вершины \(x\) (если оно существует) меньше или равны значению в вершине \(x\) и значения всех вершин в правом поддереве вершины \(x\) (если оно существует) больше или равны значению в вершине \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(C\) (\(2 \leq n \leq 5 \cdot 10^5\), \(1 \leq C \leq 10^9\)) — количество вершин в дереве и максимально допустимое значение в вершине.

Следующие \(n\) строк описывают вершины дерева. \(i\)-я из них содержит три целых числа \(L_i, R_i\) и \(val_i\) (\(-1 \le L_i, R_i \le n\), \(-1 \le val_i \le C\), \(L_i, R_i, val_i \ne 0\)) — номер левого сына, правого сына и значение в \(i\)-й вершине, соответственно. Если \(L_i = -1\), то у \(i\)-й вершины нет левого сына. Если \(R_i = -1\), то у \(i\)-й вершины нет правого сына. Если \(val_i = -1\), то значение в \(i\)-й вершине неизвестно.

Гарантируется, что существует хотя бы одно подходящее бинарное дерево поиска.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество подходящих бинарных деревьев поиска по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных, бинарное дерево поиска имеет следующий вид:

Тогда возможными значениями в вершинах являются: \([2, 2, 3, 2, 2]\), \([2, 2, 3, 2, 3]\), \([2, 2, 3, 3, 3]\) и \([3, 2, 3, 3, 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. Если возможных наборов с минимальной длиной строк несколько — выведите любой из них.

E. Число Фибоначчи

математика матрицы Перебор *2900

У Джона Доу есть список всех чисел Фибоначчи по модулю 1013. Этот список бесконечен, он начинается с чисел 0 и 1. Каждое число в этом списке, кроме двух первых, является суммой двух предыдущих по модулю 1013, то есть список Джона получается из списка чисел Фибоначчи заменой каждого числа в нем его остатком от деления на 1013.

Теперь Джон загадал число f (0 ≤ f < 1013), и хочет найти его первое вхождение в описанный выше список. Помогите Джону, найдите номер первого вхождения числа f в список или сообщите, что число f в списке не встречается.

Нумерация в списке ведется с нуля. Под номером 0 в списке Джона стоит число 0, под номером 1 — число 1, под номером 2 — число 1, под номером 3 — число 2, под номером 4 — число 3 и так далее. Таким образом, начало списка выглядит следующим образом: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...

Входные данные

В первой строке записано единственное целое число f (0 ≤ f < 1013) — число, позицию которого в списке нужно найти.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное число — номер первого вхождения заданного числа в список Джона или -1, если это число не входит в список Джона.

B. Печать перестановки

Конструктив математика Перебор *1000

Вам дано целое положительное число \(n\).

Найдите перестановку\(^\dagger\) \(p\) длины \(n\) такую, что не существует двух различных индексов \(i\) и \(j\) (\(1 \leq i, j < n\); \(i \neq j\)) таких, что \(p_i\) делит \(p_j\) и \(p_{i+1}\) делит \(p_{j+1}\).

Посмотрите примечание для примеров подходящих перестановок.

Можно доказать, что при ограничениях задачи существует по крайней мере одна подходящая перестановка \(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^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 10^5\)) — длину перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(p_1, p_2, \ldots, p_n\).

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных \(p=[4,1,2,3]\) является допустимой перестановкой. Однако перестановка \(p=[1,2,3,4]\) не является допустимой перестановкой, так как мы можем выбрать \(i=1\) и \(j=3\). Тогда \(p_1=1\) делит \(p_3=3\), а \(p_2=2\) делит \(p_4=4\). Отметим, что и перестановка \(p=[3, 4, 2, 1]\) не является допустимой, так как при выборе \(i=3\) и \(j=2\) будет верно: \(p_3=2\) делит \(p_2=4\) и одновременно \(p_4=1\) делит \(p_3=2\).

Во втором наборе входных данных \(p=[1,2,3]\) является допустимой перестановкой. На самом деле все \(6\) перестановок длины \(3\) являются допустимыми.

E. 2...3...4.... Замечательно! Замечательно!

дп Комбинаторика математика *2400

У Стека есть массив \(a\) длины \(n\) такой, что \(a_i = i\) для всех \(i\) (\(1 \leq i \leq n\)). Он выберет целое положительное число \(k\) (\(1 \leq k \leq \lfloor \frac{n-1}{2} \rfloor\)) и выполнит следующую операцию над \(a\) любое число раз (возможно, \(0\)):

  • Выбрать из \(a\) подпоследовательность\(^\dagger\) \(s\) длины \(2 \cdot k + 1\). Далее, удалить первые \(k\) элементов \(s\) из \(a\). Чтобы все было идеально сбалансировано (как и должно быть), также удалить последние \(k\) элементов \(s\) из \(a\).

Стеку стало интересно, сколько массивов \(a\) он может получить в итоге для каждого \(k\) (\(1 \leq k \leq \lfloor \frac{n-1}{2} \rfloor\)). Поскольку Стек плохо справляется с математическими задачами, ему нужна ваша помощь.

Поскольку количество массивов может быть слишком большим, выведите его по модулю \(998\,244\,353\).

\(^\dagger\) Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов. Например, \([1, 3]\), \([1, 2, 3]\) и \([2, 3]\) являются подпоследовательностями \([1, 2, 3]\). С другой стороны, \([3, 1]\) и \([2, 1, 3]\) не являются подпоследовательностями \([1, 2, 3]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 10^6\)) — длину массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(\lfloor \frac{n-1}{2} \rfloor\) целых чисел, разделенных пробелами, где \(i\)-е число равняется количеству (по модулю \(998\,244\,353\)) массивов, которые Стек может получить, если выберет \(k=i\).

Примечание

В первом наборе входных данных для \(k=1\) возможны два \(a\):

  • \([1,2,3]\);
  • \([2]\).

Во втором наборе входных данных для \(k=1\) возможны четыре \(a\):

  • \([1,2,3,4]\);
  • \([1,3]\);
  • \([2,3]\);
  • \([2,4]\).

В третьем наборе входных данных для \(k=2\) возможны два \(a\):

  • \([1,2,3,4,5]\);
  • \([3]\).

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\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество бурлей, которое придётся потратить, чтобы сделать все элементы массива равными. Можно показать, что это всегда можно сделать.

D. Делимые пары

Комбинаторика математика теория чисел *1300

У Поликарпа есть два любимых числа \(x\) и \(y\) (они могут быть равны), также он нашёл массив \(a\) длины \(n\).

Поликарп считает пару индексов \(\langle i, j \rangle\) (\(1 \le i < j \le n\)) красивой, если:

  • \(a_i + a_j\) делится нацело на \(x\);
  • \(a_i - a_j\) нацело делится на \(y\).

Например, если \(x=5\), \(y=2\), \(n=6\), \(a=\)[\(1, 2, 7, 4, 9, 6\)], то красивыми являются только пары:

  • \(\langle 1, 5 \rangle\): \(a_1 + a_5 = 1 + 9 = 10\) (\(10\) делится на \(5\)) и \(a_1 - a_5 = 1 - 9 = -8\) (\(-8\) делится на \(2\));
  • \(\langle 4, 6 \rangle\): \(a_4 + a_6 = 4 + 6 = 10\) (\(10\) делится на \(5\)) и \(a_4 - a_6 = 4 - 6 = -2\) (\(-2\) делится на \(2\)).
Найдите количество красивых пар в массиве \(a\).
Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит три целых числа \(n\), \(x\) и \(y\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le x, y \le 10^9\)) — размер массива и любимые числа Поликарпа.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество красивых пар в массиве \(a\).

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\). Других возможных ходов у Ани нет, поэтому она проигрывает.

G. Одномерный пазл

Комбинаторика математика теория чисел *2000

У вас есть одномерный пазл, все элементы которого нужно сложить в один ряд, соединяя друг с другом. Все элементы пазла полностью белые и отличимы друг от друга, только если имеют разную форму.

Каждый элемент имеет прямые границы сверху и снизу, а слева и справа имеет соединения, каждое из которых может быть выступом или углублением. Вращать элементы нельзя.

Можно заметить, что существует ровно \(4\) типа элементов. Два элемента можно соединить, если правое соединение левого элемента противоположно левому соединению правого элемента.

Все возможные типы элементов.

Пазл содержит \(c_1, c_2, c_3, c_4\) элементов каждого типа. Пазл считается собранным, если вам удалось объединить все элементы в одну длинную цепочку. Вы хотите узнать, сколькими способами это можно сделать.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Описание каждого набора входных данных содержит \(4\) целых числа \(c_i\) (\(0 \le c_i \le 10^6\)) — количества элементов каждого типа соответственно.

Гарантируется, что сумма \(c_i\) по всем наборам входных данных не превосходит \(4 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество возможных способов собрать пазл.

Два способа считаются различными, если существует \(i\), такое, что типы элементов на \(i\)-й позиции в этих способах различаются.

Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Если пазл собрать невозможно, выведите \(0\).

C. LR-остатки

математика Перебор реализация Структуры данных *1400

Вам задан массив \(a\) длины \(n\), положительное целое число \(m\) и строка команд из \(n\) символов. Каждая команда — это либо символ 'L', либо символ 'R'.

Обработайте все \(n\) команд в порядке их записи в строке \(s\). Обработка команды производится следующим образом:

  • сначала выведите остаток от произведения значений всех элементов массива \(a\) при делении на \(m\),
  • затем, если команда равна 'L', то удалите из массива \(a\) крайний левый элемент, если команда равна 'R', то удалите из массива \(a\) крайний правый элемент.

Обратите внимание, что после каждого хода длина массива \(a\) уменьшается на \(1\) и после обработки всех команд он окажется пустым.

Напишите программу, которая совершит обработку всех команд в порядке из записи в строке \(s\) (слева направо).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Каждый набор входных данных задаётся тремя строками.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2\cdot10^5, 1 \le m \le 10^4\)) — начальная длина массива \(a\) и значение, по которому надо брать остаток.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^4\)) — элементы массива \(a\).

Третья строка состоит из \(n\) букв 'L' и 'R' — строка команд \(s\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\), где \(b_i\) — остаток при делении произведения всех элементов текущего состояния массива \(a\) на \(m\) в начале выполнения \(i\)-й команды.

Примечание

В первом наборе входных данных примера:

  • \(3 \cdot 1 \cdot 4 \cdot 2 \bmod 6 = 24 \bmod 6 = 0\);
  • \(s_1 = \text{L}\), так что удалим первый элемент и получим массив \([1, 4, 2]\);
  • \(1 \cdot 4 \cdot 2 \bmod 6 = 8 \bmod 6 = 2\);
  • \(s_2 = \text{R}\), так что удалим последний элемент и получим массив \([1, 4]\);
  • \(1 \cdot 4 \bmod 6 = 4 \bmod 6 = 4\);
  • \(s_3 = \text{R}\), так что удалим последний элемент и получим массив \([1]\);
  • \(1 \bmod 6 = 1\);
  • \(s_4 = \text{L}\), так что удалим первый элемент и получим пустой массив.

E. Финальный отсчёт

математика реализация теория чисел *1600

Вы находитесь в ядерной лаборатории, которая готовится взорваться и уничтожить Землю. Вы должны спасти Землю, прежде чем финальный отсчёт достигнет нуля.

Отсчёт состоит из \(n\) (\(1 \le n \le 4 \cdot 10^5\)) механических индикаторов, каждый из которых показывает одну десятичную цифру. Вы заметили, что когда отсчёт меняет своё состояние с \(x\) на \(x-1\), это не происходит сразу. Вместо этого каждое изменение одной цифры занимает одну секунду.

Так, например, если отсчёт показывает 42, то он изменится на 41 за одну секунду, потому что изменяется только одна цифра, но если отсчёт показывает 2300, то он изменится на 2299 за три секунды, потому что изменяются три последние цифры.

Узнайте, сколько времени осталось до того, как отсчёт достигнет нуля.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 4\cdot 10^5\)).

Вторая строка содержит строку из \(n\) цифр, текущее состояние отсчёта. Гарантируется, что хотя бы одна цифра не равна нулю.

Сумма \(n\) по всем наборам входных данных теста не превышает \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число без ведущих нулей, количество секунд, оставшихся до того, как отсчёт достигнет нуля. Обратите внимание, что это число может быть огромным.

Примечание

В первом примере есть четыре изменения, которые занимают 2 секунды: 40 до 39, 30 до 29, 20 до 19 и 10 до 09, другие изменения занимают по 1 секунде каждое. Таким образом, общее время составляет \(2\cdot 4 + 1\cdot(42-4) = 46\).

G. Перемещающиеся платформы

графы кратчайшие пути математика теория чисел *2300

Есть игра, в которой вам нужно перемещаться по лабиринту. Лабиринт состоит из \(n\) платформ, соединенных \(m\) проходами.

Каждая платформа находится на уровне \(l_i\), уровни платформ — целые числа от \(0\) до \(H - 1\). За один шаг, если вы находитесь на платформе \(i\), вы можете остаться на ней или перейти на другую платформу \(j\). Чтобы перейти на платформу \(j\), они должны быть соединены проходом, и их уровни должны быть одинаковыми, то есть \(l_i = l_j\).

После каждого шага уровни всех платформ меняются. Новый уровень платформы \(i\) вычисляется как \(l'_i = (l_i + s_i) \bmod H\), для всех \(i\).

Вы начинаете на платформе \(1\). Найдите минимальное количество шагов, необходимых, чтобы добраться до платформы \(n\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), и \(H\) (\(2 \le n \le 10^5\), \(1 \le m \le 10^5\), \(1 \le H \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_i\), начальный уровень каждой платформы (\(0 \le l_i \le H-1\)).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(s_i\), изменение уровня для каждой платформы (\(0 \le s_i \le H-1\)).

Далее следуют \(m\) строк, содержащих описание проходов. Каждый проход описывается парой целых чисел — платформы, соединенные проходом. Есть не более одного прохода, соединяющего каждую пару платформ, и нет прохода, соединяющего платформу с самой собой.

Сумма \(n\) для всех тестов не превышает \(10^5\), сумма \(m\) для всех тестов не превышает \(10^5\).

Выходные данные

Для каждого теста выведите одно целое число, минимальное количество шагов, необходимых, чтобы добраться с платформы \(1\) до платформы \(n\).

Если невозможно добраться до платформы \(n\), выведите \(-1\).

Примечание

Вот как меняются уровни платформ и какие действия нам нужно выполнить в первом примере.

Платформа 1Платформа 2Платформа 3Действие
Шаг 1194Остаться на платформе 1
Шаг 2324Остаться на платформе 1
Шаг 3554Перейти на платформу 2
Шаг 4784Остаться на платформе 2
Шаг 5914Остаться на платформе 2
Шаг 6144Перейти на платформу 3

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).

B. Сделай сумму кратной 3

математика реализация теория чисел *800

Вам дан массив \(a_1, a_2, \ldots, a_n\).

За один ход можно выполнить любую из двух операций:

  • Выбрать элемент из массива и удалить его из массива. В результате длина массива уменьшается на \(1\);
  • Выбрать элемент из массива и увеличить его значение на \(1\).

Вы можете выполнять произвольное количество ходов. Если текущий массив оказался пустым, то больше ходов выполнять нельзя.

Ваша задача — найти минимальное количество ходов, которые необходимо выполнить, чтобы сумма элементов массива \(a\) стала делиться на \(3\). Возможно, вам понадобится \(0\) ходов.

Обратите внимание, что сумма элементов пустого массива (массива длины \(0\)) равна \(0\).

Входные данные

Первая строка ввода содержит одно целое число \(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^4\)).

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное количество ходов.

Примечание

В первом наборе входных данных, изначально \(a = [2, 2, 5, 4]\). Один из оптимальных способов выполнения ходов:

  • удалить \(4\)-й элемент и получить \(a = [2, 2, 5]\);
Таким образом сумма массива \(a\) станет делиться на \(3\) (действительно, \(a_1 + a_2 + a_3 = 2 + 2 + 5 = 9\)).

Во втором наборе входных данных изначально сумма массива равна \(1+3+2 = 6\), что делится на \(3\). Таким образом, ходы не требуются. Следовательно, ответ равен \(0\).

В четвертом наборе входных данных изначально сумма массива равна \(1\), что не делится на \(3\). Удалением его единственного элемента вы получите пустой массив, поэтому его сумма равна \(0\). Следовательно, ответ равен \(1\).

C. Количество значений k

математика Перебор реализация теория чисел *1100

Вам даны три положительных целых числа \(a\), \(b\) и \(l\) (\(a,b,l>0\)).

Можно показать, что всегда существует способ выбрать неотрицательные (т.е. \(\ge 0\)) целые числа \(k\), \(x\) и \(y\) таким образом, что \(l = k \cdot a^x \cdot b^y\).

Ваша задача — найти количество различных возможных значений \(k\) для всех таких способов.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Следующие \(t\) строк содержат три целых числа, \(a\), \(b\) и \(l\) (\(2 \le a, b \le 100\), \(1 \le l \le 10^6\)) — описание набора входных данных.

Выходные данные

Выведите \(t\) строк, где \(i\)-я (\(1 \le i \le t\)) строка содержит целое число — ответ на \(i\)-й набор входных данных.

Примечание

В первом наборе входных данных примера \(a=2, b=5, l=20\). Возможные значения \(k\) (и соответствующие \(x,y\)) следующие:

  • Выберите \(k = 1, x = 2, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 1 \cdot 2^2 \cdot 5^1 = 20 = l\).
  • Выберите \(k = 2, x = 1, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 2 \cdot 2^1 \cdot 5^1 = 20 = l\).
  • Выберите \(k = 4, x = 0, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 4 \cdot 2^0 \cdot 5^1 = 20 = l\).
  • Выберите \(k = 5, x = 2, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 5 \cdot 2^2 \cdot 5^0 = 20 = l\).
  • Выберите \(k = 10, x = 1, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 10 \cdot 2^1 \cdot 5^0 = 20 = l\).
  • Выберите \(k = 20, x = 0, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 20 \cdot 2^0 \cdot 5^0 = 20 = l\).

Во втором наборе входных данных примера \(a=2, b=5, l=21\). Обратите внимание, что \(l = 21\) не делится ни на \(a = 2\), ни на \(b = 5\). Поэтому мы можем установить только \(x = 0, y = 0\), что соответствует \(k = 21\).

В третьем наборе входных данных примера \(a=4, b=6, l=48\). Возможные значения \(k\) (и соответствующие \(x,y\)) следующие:

  • Выберите \(k = 2, x = 1, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 2 \cdot 4^1 \cdot 6^1 = 48 = l\).
  • Выберите \(k = 3, x = 2, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 3 \cdot 4^2 \cdot 6^0 = 48 = l\).
  • Выберите \(k = 8, x = 0, y = 1\). Тогда \(k \cdot a^x \cdot b^y = 8 \cdot 4^0 \cdot 6^1 = 48 = l\).
  • Выберите \(k = 12, x = 1, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 12 \cdot 4^1 \cdot 6^0 = 48 = l\).
  • Выберите \(k = 48, x = 0, y = 0\). Тогда \(k \cdot a^x \cdot b^y = 48 \cdot 4^0 \cdot 6^0 = 48 = l\).

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\). Следовательно, это возможно.

E. Оптимальные тренировки

Бинарный поиск математика реализация Тернарный поиск *1500

Исаак начинает свою тренировку. Доступно \(n\) маршрутов, \(i\)-й маршрут (\(1 \le i \le n\)) состоит из \(a_i\) участков одинаковой длины.

Дано целое число \(u\) (\(1 \le u \le 10^9\)), завершение каждого участка может увеличить способности Исаака на определенное значение:

  • Завершение \(1\)-го участка увеличивает способности Исаака на \(u\).
  • Завершение \(2\)-го участка увеличивает способности Исаака на \(u-1\).
  • Завершение \(3\)-го участка увеличивает способности Исаака на \(u-2\).
  • \(\ldots\)
  • Завершение \(k\)-го участка (\(k \ge 1\)) увеличивает способности Исаака на \(u+1-k\). (Значение \(u+1-k\) может быть отрицательным, что означает, что завершение дополнительного участка уменьшает способности Исаака.)

Также дано целое число \(l\). Вы можете выбрать целое число \(r\), такое что \(l \le r \le n\), и тогда Исаак завершит каждый участок каждого маршрута \(l, l + 1, \dots, r\) (то есть, всего \(\sum_{i=l}^r a_i = a_l + a_{l+1} + \ldots + a_r\) участков).

Ответьте на следующий вопрос: какое оптимальное значение \(r\) вы можете выбрать, чтобы увеличение способностей Исаака было максимальным?

Если существует несколько значений \(r\), которые максимизируют увеличение способностей Исаака, выведите наименьшее значение \(r\).

Для увеличения сложности вам нужно ответить на вопрос для \(q\) различных значений \(l\) и \(u\).

Входные данные

Первая строка ввода содержит одно целое число \(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^4\)).

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)).

Следующие \(q\) строк содержат по два целых числа \(l\) и \(u\) (\(1 \le l \le n, 1 \le u \le 10^9\)) — описания каждого запроса.

Сумма \(n\) по всем наборам входных данных теста не превышает \(2 \cdot 10^5\). Сумма \(q\) по всем наборам входных данных теста не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите \(q\) целых чисел: \(i\)-е целое число содержит оптимальное значение \(r\) для \(i\)-го запроса. Если существует несколько решений, выведите наименьшее из них.

Примечание

Для \(1\)-го запроса в первом тесте:

  • Выбрав \(r = 3\), Исаак завершает \(a_1 + a_2 + a_3 = 3 + 1 + 4 = 8\) участков в общей сложности, поэтому его увеличение способностей составляет \(u+(u-1)+\ldots+(u-7)=8+7+6+5+4+3+2+1 = 36\).
  • Выбрав \(r = 4\), Исаак завершает \(a_1 + a_2 + a_3 + a_4 = 3 + 1 + 4 + 1 = 9\) участков в общей сложности, поэтому его увеличение способностей составляет \(u+(u-1)+\ldots+(u-8)=8+7+6+5+4+3+2+1+0 = 36\).

Оба варианта дают оптимальное увеличение способностей, однако мы хотим выбрать наименьшее значение \(r\). Поэтому мы выбираем \(r = 3\).

Для \(2\)-го запроса в первом тесте, выбрав \(r = 4\), Исаак завершает \(a_2 + a_3 + a_4 = 1 + 4 + 1 = 6\) участков в общей сложности, поэтому его увеличение способностей составляет \(u+(u-1)+\ldots+(u-5)=7+6+5+4+3+2 = 27\). Это оптимальное увеличение способностей.

Для \(3\)-го запроса в первом тесте:

  • Выбрав \(r = 5\), Исаак завершает \(a_5 = 5\) участков в общей сложности, поэтому его увеличение способностей составляет \(u+(u-1)+\ldots+(u-4)=9+8+7+6+5 = 35\).
  • Выбрав \(r = 6\), Исаак завершает \(a_5 + a_6 = 5 + 9 = 14\) участков в общей сложности, поэтому его увеличение способностей составляет \(u+(u-1)+\ldots+(u-13)=9+8+7+6+5+4+3+2+1+0+(-1)+(-2)+(-3)+(-4) = 35\).

Оба варианта дают оптимальное увеличение способностей, однако мы хотим выбрать наименьшее значение \(r\). Поэтому мы выбираем \(r = 5\).

Таким образом, вывод для первого теста: \([3, 4, 5]\).

G. Магический рисунок королевской черепахи

битмаски Комбинаторика Конструктив математика Перебор поиск в глубину и подобное *2300

Черепаха Алиса в настоящее время разрабатывает коробку для печенья с предсказаниями, и она хотела бы включить в нее теорию Лоушу.

Коробку можно рассматривать как таблицу размера \(n \times m\) (\(n, m \ge 5\)), где строки нумеруются \(1, 2, \dots, n\), а столбцы нумеруются \(1, 2, \dots, m\). Каждая клетка может быть либо пустой, либо содержать одно печенье с предсказанием одной из следующих форм: круг или квадрат. Клетка на пересечении \(a\)-й строки \(b\)-го столбца обозначается как \((a, b)\).

Изначально вся таблица пуста. Затем Алиса выполняет \(q\) операций с коробкой для печенья. \(i\)-я операция (\(1 \le i \le q\)) выполняется следующим образом: указывается в настоящее время пустая клетка \((r_i,c_i)\) и форма (круг или квадрат), затем ставится печенье с предсказанием указанной формы в клетку \((r_i,c_i)\). Обратите внимание, что после \(i\)-й операции клетка \((r_i,c_i)\) больше не является пустой.

Перед всеми операциями и после каждой из \(q\) операций Алиса задается вопросом, сколько существует способов разместить печенья с предсказанием во всех оставшихся пустых клетках, так чтобы было удовлетворено следующее требование:

Не существует трёх последовательных клеток с печеньем одинаковой формы в одной строке, одном столбце или на одной диагонали. Формально:

  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n, 1 \le j \le m-2\), таких, что в клетках \((i,j), (i,j+1), (i,j+2)\) есть печенье одинаковой формы.
  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n-2, 1 \le j \le m\), таких, что в клетках \((i,j), (i+1,j), (i+2,j)\) есть печенье одинаковой формы.
  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n-2, 1 \le j \le m-2\), таких, что в клетках \((i,j), (i+1,j+1), (i+2,j+2)\) есть печенье одинаковой формы.
  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n-2, 1 \le j \le m-2\), таких, что в клетках \((i,j+2), (i+1,j+1), (i+2,j)\) есть печенье одинаковой формы.

Все ответы должны быть выведены по модулю \(998\,244\,353\). Также обратите внимание, что после некоторых операций требование уже может не быть удовлетворено с уже размещенными печеньями, в этом случае, вы должны выводить \(0\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\), \(q\) (\(5 \le n, m \le 10^9, 0 \le q \le \min(n \times m, 10^5)\)).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(r_i\), \(c_i\) и одну строку \(\text{shape}_i\) (\(1 \le r_i \le n, 1 \le c_i \le m\), \(\text{shape}_i=\) «circle» или «square»), представляющих операции. Гарантируется, что клетка в \(r_i\)-й строке и \(c_i\)-м столбце изначально пуста. Это означает, что каждая \((r_i,c_i)\) появится не более одного раза в обновлениях.

Сумма \(q\) по всем наборам входных данных теста не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) строк. Первая строка вывода должна содержать ответ до операций, \(i\)-я строка (\(2 \le i \le q+1\)) должна содержать ответ после первых \(i-1\) операций. Все ответы должны быть взяты по модулю \(998\,244\,353\).

Примечание

Во втором примере, после размещения печенья в форме круга в клетках \((1,1)\), \((1,2)\) и \((1,3)\), Требование уже не удовлетворено. Поэтому вы должны вывести \(0\).

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\) для этого запроса.

D. Экзамен в ЦПМ

Бинарный поиск Комбинаторика математика реализация *1800

Центр Помощи Магистрам объявил вступительный экзамен, который заключается в следующем.

Кандидату даётся множество \(s\) размера \(n\), а также некоторое странное число \(c\). Для этого множества нужно посчитать количество пар целых чисел \((x, y)\) таких, что \(0 \leq x \leq y \leq c\), \(x + y\) не содержится в множестве \(s\), а также \(y - x\) не содержится в множестве \(s\).

Ваш друг хочет поступить в Центр. Помогите ему сдать экзамен!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(c\) (\(1 \leq n \leq 3 \cdot 10^5\), \(1 \leq c \leq 10^9\)) — размер множества и странное число.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(s_1, s_2, \ldots, s_{n}\) (\(0 \leq s_1 < s_2 < \ldots < s_{n} \leq c\)) — элементы множества \(s\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих пар целых чисел.

Примечание

В первом наборе входных данных подходят следующие пары: \((0, 0)\), \((2, 2)\), \((3, 3)\).

В третьем наборе входных данных подходят следующие пары: \((0, 1)\), \((0, 2)\), \((0, 4)\), \((1, 3)\), \((2, 6)\), \((3, 4)\), \((3, 5)\), \((4, 5)\), \((4, 6)\), \((5, 6)\).

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\).

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\) максимально возможно.

B. Пинбол

Бинарный поиск математика реализация Структуры данных *2000

Дана полоска из \(n\) клеток. В \(i\)-й клетке полоски находится символ \(s_i\), равный '<' или '>'.

Когда шарик помещают в одну из клеток, он начинает движение в соответствии со следующими правилами:

  • Если шарик находится в \(i\)-й клетке и \(s_i\) равно '<', то шарик за одну секунду сдвигается на одну клетку влево. Если же \(s_i\) равно '>', то шарик сдвигается на одну клетку вправо.
  • После того как шарик сдвинулся, символ \(s_i\) заменяется на противоположный (т. е. если символ \(s_i\) был равен '<', он становится равным '>', и наоборот).
  • Шарик прекращает движение, когда покидает полоску: он выходит за границы либо слева, либо справа.

Вам нужно ответить на \(n\) независимых запросов. В \(i\)-м запросе шарик изначально помещается в \(i\)-ю клетку. Обратите внимание, что шарик всегда помещается на одну из клеток изначальной полоски.

Для каждого запроса посчитайте, сколько пройдёт секунд до момента, когда шарик выйдет за пределы полоски. Можно доказать, что шарик всегда покинет полоску за конечное число шагов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s_1s_2 \ldots s_{n}\) длины \(n\), состоящую из символов '<' и '>'.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, для каждого \(i\) (\(1 \le i \le n\)) выведите ответ, если шарик изначально помещается в \(i\)-ю клетку.

Примечание

В первом наборе входных данных движение шарика для \(i=1\) показано на картинке ниже. Шарику нужно \(3\) секунды, чтобы покинуть полоску.

Движение шарика для \(i=2\) показано на картинке ниже. Шарику нужно \(6\) секунд, чтобы покинуть полоску.

E. Очередная очередная задача про перестановки

бпф математика разделяй и властвуй *3400

Дана перестановка \(p\) длины \(n\).

Найдите количество перестановок \(q\) длины \(n\), которые удовлетворяют следующему условию:

  • для каждого \(1 \le i < n\), \(\max(q_1,\ldots,q_i) \neq \max(p_1,\ldots,p_i)\).

Поскольку ответ может быть очень большим, выведите ответ по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(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\).

Выходные данные

Для каждого набора входных данных выведите одно число — ответ по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных \(p = [2, 1]\). Единственной подходящей \(q\) является \([1, 2]\). Действительно, нам нужно выполнить неравенство \(q_1 \neq p_1\). Оно выполнено только для \(q = [1, 2]\).

Во втором наборе входных данных \(p = [1, 2, 3]\). Так что \(q\) должна удовлетворять двум неравенствам: \(q_1 \neq p_1\) и \(\max(q_1, q_2) \neq \max(1, 2) = 2\). Можно доказать, что это выполняется только для следующих \(3\) перестановок:

  • \(q = [2, 3, 1]\): в этом случае \(q_1 = 2 \neq 1\) and \(\max(q_1, q_2) = 3 \neq 2\);
  • \(q = [3, 1, 2]\): в этом случае \(q_1 = 3 \neq 1\) and \(\max(q_1, q_2) = 3 \neq 2\);
  • \(q = [3, 2, 1]\): в этом случае \(q_1 = 3 \neq 1\) and \(\max(q_1, q_2) = 3 \neq 2\).

A. Перемешиватель

математика реализация *800

Задан массив \(a_1, a_2, \ldots, a_n\). Изначально \(a_i=i\) для всех \(1 \le i \le n\).

Для произвольного целого \(k \ge 2\) операция \(\texttt{swap}(k)\) устроена следующим образом:

  • Пусть \(d\) — наибольший делитель\(^\dagger\) числа \(k\), не равный \(k\). Тогда нужно поменять местами элементы \(a_d\) и \(a_k\).

Выполним операции \(\texttt{swap}(i)\) для каждого \(i=2,3,\ldots, n\) именно в таком порядке. Найдите позицию, на которой в результате окажется число \(1\). Иными словами, найдите такое \(j\), что \(a_j = 1\) после всех операций.

\(^\dagger\) Целое число \(x\) называется делителем числа \(y\), если существует целое \(z\), для которого \(y = x \cdot z\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^9\)) — длину массива \(a\).

Выходные данные

Для каждого набора входных данных выведите позицию, на которой окажется число \(1\).

Примечание

В первом наборе входных данных массив равен \([1]\), и никакие операции не выполняются.

Во втором наборе входных данных \(a\) изменяется следующим образом:

  • Изначально \(a\) равен \([1,2,3,4]\).
  • После выполнения \(\texttt{swap}(2)\) массив \(a\) становится равным \([\underline{2},\underline{1},3,4]\) (элементы, поменянные местами, подчёркнуты).
  • После выполнения \(\texttt{swap}(3)\) массив \(a\) становится равным \([\underline{3},1,\underline{2},4]\).
  • После выполнения \(\texttt{swap}(4)\) массив \(a\) становится равным \([3,\underline{4},2,\underline{1}]\).

Итак, число \(1\) находится на позиции \(4\) (то есть \(a_4 = 1\)). Значит, ответ равен \(4\).

A. Экзамены

математика реализация *900

Однажды автор раунда Codeforces сдавал экзамены. Экзаменов было n штук, при этом за каждый экзамен можно было получить целую оценку от 2 до 5. Каждый экзамен, сданный с оценкой 2, требуется пересдать.

Чтобы получить оценки, сумма которых строго больше k, автору пришлось бы потратить слишком много усилий и раунд Codeforces получился бы так себе. С другой стороны, если получить оценки, сумма которых строго меньше k, мама автора будет весьма недовольна.

Авторы раундов Codeforces очень умны, поэтому они всегда получают за экзамен ту оценку, которую выбрали сами. Кроме всего прочего, авторы раундов Codeforces «ой-как» не любят пересдавать экзамены.

Помогите автору, найдите какое минимальное количество экзаменов придется пересдавать, если он сдаст экзамены так, что сумма оценок за все n экзаменов будет в точности равна k.

Входные данные

В единственной строке через пробел записаны целые числа n и k (1 ≤ n ≤ 50, 1 ≤ k ≤ 250) — количество экзаменов и требуемая сумма оценок.

Гарантируется, что существует способ сдать n экзаменов так, чтобы сумма оценок в точности была равна k.

Выходные данные

Выведите единственное число — минимальное количество экзаменов, по которым автор раундов Codeforces получит 2, при условии, что сумма оценок за все экзамены должна быть равна k.

Примечание

В первом примере чтобы достичь цели, придется сдать все экзамены на 2.

Во втором примере нужно сдать два экзамена на 3 и два на 2.

В третьем примере нужно сдать один экзамен на 3.

B. Квадрат

математика *1200

На бумаге нарисован квадрат со стороной n метров. Джон Доу рисует крестики на периметре квадрата. Первый крестик Джон рисует в левом нижнем углу квадрата. Далее Джон двигается по периметру квадрата по часовой стрелке (сначала вверх, затем вправо, затем вниз, влево и так далее). Через каждые (n + 1) метров Джон ставит крестик (посмотрите картинку для лучшего понимания).

Джон Доу остановится тогда, когда в левом нижнем угле квадрата будет дважды поставлен крестик. Сколько крестиков поставит Джон?

На рисунке показано в каком порядке будут выставлены крестики для квадрата со стороной 4. В левом нижнем углу стоит два крестика. Всего их будет поставлено 17.
Входные данные

В первой строке записано целое число t (1 ≤ t ≤ 104) — количество тестовых примеров.

Во второй строке находится t целых чисел ni (1 ≤ ni ≤ 109), разделенных пробелами, — стороны квадрата для каждого тестового примера.

Выходные данные

Для каждого тестового примера выведите в отдельной строке ответ для него, то есть, количество крестиков, которые поставит Джон, двигаясь по квадрату соответствующего размера. Ответы для примеров выводите в том порядке, в котором примеры заданы во входных данных.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

A. Рудольф и билет

математика Перебор *800

Рудольф собирается в гости к Бернарду, доехать до него он решил на метро. Билет можно купить в автомате, который принимает ровно две монеты, сумма которых не превышает \(k\).

У Рудольфа есть два кармана с монетами. В левом кармане лежат \(n\) монет номиналов \(b_1, b_2, \dots, b_n\). В правом кармане лежат \(m\) монет номиналов \(c_1, c_2, \dots, c_m\). Для оплаты он хочет выбрать ровно одну монету из левого кармана и ровно одну монету из правого кармана (суммарно две монеты).

Помогите Рудольфу узнать, сколько существует способов выбрать такие индексы \(f\) и \(s\), что \(b_f + c_s \le k\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора данных содержит три натуральных числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 100, 1 \le k \le 2000\)) — количество монет в левом и правом карманах и максимальная сумма двух монет для оплаты билета в кассе, соответственно.

Вторая строка каждого набора содержит \(n\) целых чисел \(b_i\) (\(1 \le b_i \le 1000\)) — номиналы монет в левом кармане.

Третья строка каждого набора содержит \(m\) целых чисел \(c_i\) (\(1 \le c_i \le 1000\)) — номиналы монет в правом кармане.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество способов, которыми Рудольф может выбрать две монеты, доставая по одной из каждого кармана, чтобы сумма монет не превышала \(k\).

Примечание

Обратите внимание, в парах указаны индексы монет в массиве, а не их номиналы.

В первом наборе Рудольф может выбрать следующие пары монет: \([1, 1], [1, 2], [1, 4], [2, 1], [2, 2], [2, 4]\).

Во втором наборе Рудольф не может выбрать из двух карманов по одной монете ни одним способом, поскольку сумма любых двух элементов из первого и второго массивов будет превышать значение \(k=4\).

В третьем наборе Рудольф может выбрать: \([1, 1], [2, 1], [3, 1], [4, 1]\).

В четвертом наборе Рудольф может выбрать любую монету из левого кармана и любую монету из правого кармана.

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]\).

A. Челлендж фермера Джона

Конструктив математика *800

Назовем массив \(a\) отсортированным, если \(a_1 \leq a_2 \leq \ldots \leq a_{n - 1} \leq a_{n}\).

Вам даны два любимых целых числа фермера Джона, \(n\) и \(k\). Он просит вас найти любой массив \(a_1, a_2, \ldots, a_{n}\), удовлетворяющий следующим требованиям:

  • \(1 \leq a_i \leq 10^9\) для всех \(1 \leq i \leq n\);
  • Среди всех \(n\) циклических сдвигов \(a\), ровно \(k\) из них отсортированы.\(^\dagger\)

Если такого массива \(a\) не существует, выведите \(-1\).

\(^\dagger\) \(x\)-й (\(1 \leq x \leq n\)) циклический сдвиг массива \(a\) является массивом \(a_x, a_{x+1} \ldots a_n, a_1, a_2 \ldots a_{x - 1}\). Если \(c_{x, i}\) обозначает \(i\)-й элемент \(x\)-го циклического сдвига \(a\), то ровно \(k\) таких значений \(x\) должны удовлетворять \(c_{x,1} \leq c_{x,2} \leq \ldots \leq c_{x, n - 1} \leq c_{x, n}\).

Например, циклические сдвиги для \(a = [1, 2, 3, 3]\) следующие:

  • \(x = 1\): \([1, 2, 3, 3]\) (отсортировано);
  • \(x = 2\): \([2, 3, 3, 1]\) (не отсортировано);
  • \(x = 3\): \([3, 3, 1, 2]\) (не отсортировано);
  • \(x = 4\): \([3, 1, 2, 3]\) (не отсортировано).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^3\)) — длину \(a\) и количество отсортированных циклических сдвигов, которые должны быть у \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

Для каждого набора входных данных выведите одну строку:

  • если существует подходящий массив \(a\), выведите \(n\) целых чисел, равняющихся \(a_1, a_2, \ldots, a_{n}\);
  • в противном случае, выведите \(-1\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных \(a = [1, 1]\) удовлетворяет условиям \(n = 2, k = 2\):

Два циклических сдвига \(a\): \([a_1, a_2]\) и \([a_2, a_1]\), оба равняются \([1, 1]\) и отсортированы.

Во втором наборе входных данных \(a = [69\,420, 69, 420]\) удовлетворяет \(n = 3, k = 1\):

Три циклических сдвига \(a\): \([a_1, a_2, a_3]\), \([a_2, a_3, a_1]\), \([a_3, a_1, a_2]\) равняются \([69\,420, 69, 420]\), \([69, 420, 69\,420]\) и \([420, 69\,420, 69]\) соответственно.

Отсортирован только \([69, 420, 69\,420]\).

B. Бесси и MEX

Конструктив математика *1100

У фермера Джона есть перестановка \(p_1, p_2, \ldots, p_n\), в которой каждое целое число от \(0\) до \(n-1\) встречается ровно один раз. Он дает Бесси массив \(a\) длины \(n\) и просит ее восстановить \(p\) на основе \(a\).

Массив \(a\) строится так: \(a_i\) = \(\texttt{MEX}(p_1, p_2, \ldots, p_i) - p_i\), где \(\texttt{MEX}\) массива — это минимальное целое неотрицательное число, которое не встречается в этом массиве. Например, \(\texttt{MEX}(1, 2, 3) = 0\), а \(\texttt{MEX}(3, 1, 0) = 2\).

Помогите Бесси построить любую перестановку \(p\), удовлетворяющую массиву \(a\). Гарантируется, что вам даются входные данные, для которых существует хотя бы одна допустимая перестановка \(p\). Если существует несколько возможных \(p\), вы можете вывести любую из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину \(p\) и \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-n \leq a_i \leq n\)) — элементы массива \(a\).

Гарантируется, что существует хотя бы одна подходящая перестановка \(p\) для каждого данного набора данных.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n\) целых чисел, являющихся элементами \(p\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных \(p = [0, 1, 4, 2, 3]\) является одним из возможных ответов.

Для этой перестановки \(a\) будет вычисляться так: \(a_1 = \texttt{MEX}(0) - 0 = 1\), \(a_2 = \texttt{MEX}(0, 1) - 1 = 1\), \(a_3 = \texttt{MEX}(0, 1, 4) - 4 = -2\), \(a_4 = \texttt{MEX}(0, 1, 4, 2) - 2 = 1\), \(a_5 = \texttt{MEX}(0, 1, 4, 2, 3) - 3 = 2\).

Таким образом, как и требовалось, \(a\) будет равняться \([1, 1, -2, 1, 2]\).

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\) непересекающихся треугольных куска торта соответственно. Возможные конструкции показаны на следующих рисунках:

Зеленые точки обозначают вершины, которые выбрала Бесси, желтые точки — вершины, которые выбрали вы, синие линии — диагонали, которые проводятся, а красные цифры — треугольники, которые подсчитываются.

F. Любимая функция Фермера Джона

математика Перебор реализация Структуры данных *2700

У Фермера Джона есть массив \(a\) длины \(n\). У него также есть функция \(f\) со следующим рекуррентным соотношением:

  • \(f(1) = \sqrt{a_1}\);
  • Для всех \(i > 1\), \(f(i) = \sqrt{f(i-1)+a_i}\).

Обратите внимание, что \(f(i)\) не обязательно является целым числом.

Он планирует сделать \(q\) обновлений массива. При каждом обновлении он дает вам два целых числа \(k\) и \(x\) и хочет, чтобы вы установили \(a_k = x\). После каждого обновления он хочет узнать \(\lfloor f(n) \rfloor\), где \(\lfloor t \rfloor\) обозначает значение \(t\), округленное вниз до ближайшего целого числа.

Входные данные

Первая строка содержит \(n\) и \(q\) (\(1 \leq n, q \leq 2 \cdot 10^5\)) — длину \(a\) и количество обновлений, которые он будет выполнять.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^{18}\)).

Следующие \(q\) строк содержат по два целых числа \(k\) и \(x\) (\(1 \leq k \leq n\), \(0 \leq x \leq 10^{18}\)) — индекс обновления и элемент, на который он заменит \(a_k\).

Выходные данные

После каждого обновления выведите целое число \(\lfloor f(n) \rfloor\) в отдельной строке.

Примечание

В первом примере массив после первого обновления имеет вид \([4, 14, 0, 7, 6]\). Значения \(f\) следующие:

  • \(f(1)=2\);
  • \(f(2)=4\);
  • \(f(3)=2\);
  • \(f(4)=3\);
  • \(f(5)=3\).

Поскольку \(\lfloor f(5) \rfloor = 3\), ответом будет \(3\).

Массив после второго обновления имеет вид \([3, 14, 0, 7, 6]\). Значения \(f\), округленные до \(6\) знаков после запятой, таковы:

  • \(f(1)\approx 1.732051\);
  • \(f(2)\approx 3.966365\);
  • \(f(3)\approx 1.991573\);
  • \(f(4)\approx 2.998595\);
  • \(f(5)\approx 2.999766\).

Поскольку \(\lfloor f(5) \rfloor = 2\), ответом будет \(2\).

G. Бесси и карты

дп Комбинаторика математика *2800

Бесси недавно начала играть в известную карточную игру. В игре участвует одна колода карт, состоящая из \(a\) карт «взять \(0\) карт», \(b\) карт «взять \(1\) карту», \(c\) карт «взять \(2\) карты» и \(5\) специальных карт. В начале игры все карты лежат в одной перемешанной случайным образом колоде.

Бесси начинает игру, взяв верхние \(5\) карт из колоды. Затем она может играть с руки карты вида «взять \(x\) карт», чтобы взять следующие \(x\) карт с верха колоды. Обратите внимание, что каждая карта может быть сыграна только один раз, специальные карты играть нельзя, а если Бесси использует карту «взять \(2\) карты», когда в колоде осталось всего \(1\) карта, то она просто вытянет оставшуюся карту. Бесси выиграет, если вытянет все \(5\) специальных карт.

Поскольку Бесси не очень хорошо разбирается в математических задачах, она хочет, чтобы вы нашли вероятность того, что она выиграет, учитывая, что колода тасуется случайным образом по всем \((a + b + c + 5)!\) возможным тасовкам. Можно показать, что ответ всегда можно выразить в виде дроби \(\frac{p}{q}\), где \(p\) и \(q\) — взаимно простые целые числа. Выведите \(p \cdot q^{-1}\) по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит три целых числа \(a\), \(b\) и \(c\) (\(0 \le a, b, c \le 2 \cdot 10^5\)) — количество карт «взять \(0\) карт», «взять \(1\) карту» и «взять \(2\) карты», соответственно.

Гарантируется, что сумма \(a\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), сумма \(b\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и сумма \(c\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — вероятность того, что Бесси выиграет, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных у нас есть по \(1\) карте каждого типа «взять» и \(5\) специальных карт. Существует \(30\,720\) стартовых колод, в которых Бесси выиграет, вытянув верхние \(5\) карт, и \(40\,320\) стартовых колод в целом. Таким образом, вероятность выигрыша Бесси равна \(\frac{30\,720}{40\,320} = \frac{16}{21}\).

Одним из примеров выигрышной стартовой колоды является следующая (карты перечислены сверху вниз):

  1. «Специальная»,
  2. «Взять \(1\) карту»,
  3. «Специальная»,
  4. «Специальная»,
  5. «Взять \(0\) карт»,
  6. «Взять \(2\) карты»,
  7. «Специальная»,
  8. «Специальная».

Одним из примеров проигрышной стартовой колоды является:

  1. «Специальная»,
  2. «Взять \(1\) карту»,
  3. «Специальная»,
  4. «Специальная»,
  5. «Взять \(0\) карт»,
  6. «Специальная»,
  7. «Специальная»,
  8. «Взять \(2\) карты».

B. Непалиндромная подстрока

математика реализация Строки хэши *2000

Строка \(t\) считается \(k\)-хорошей, если существует хотя бы одна подстрока\(^\dagger\) длины \(k\), которая не является палиндромом\(^\ddagger\). Пусть \(f(t)\) обозначает сумму всех значений \(k\), при которых строка \(t\) является \(k\)-хорошей.

Вам дана строка \(s\) длины \(n\). Вы должны ответить на \(q\) следующих запросов:

  • Для данных \(l\) и \(r\) (\(l < r\)), найдите значение \(f(s_ls_{l + 1}\ldots s_r)\).

\(^\dagger\) Подстрока строки \(z\) — это последовательность подряд идущих символов строки \(z\). Например, «\(\mathtt{defor}\)», «\(\mathtt{code}\)» и «\(\mathtt{o}\)» являются подстроками «\(\mathtt{codeforces}\)», а «\(\mathtt{codes}\)» и «\(\mathtt{aaa}\)» не являются.

\(^\ddagger\) Палиндром — это строка, которая одинаково читается как слева направо, так и справа налево. Например, строки «\(\texttt{z}\)», «\(\texttt{aa}\)» и «\(\texttt{tacocat}\)» являются палиндромами, а «\(\texttt{codeforces}\)» и «\(\texttt{ab}\)» — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 2 \cdot 10^5, 1 \le q \le 2 \cdot 10^5\)) — длину строки и количество запросов соответственно.

Вторая строка каждого набора содержит строку \(s\). Гарантируется, что строка \(s\) содержит только строчные латинские буквы.

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\)).

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите \(f(s_ls_{l + 1}\ldots s_r)\).

Примечание

В первом запросе первого набора входных данных строка равняется \(\mathtt{aaab}\). Подстроки \(\mathtt{aaab}\), \(\mathtt{aab}\) и \(\mathtt{ab}\) не являются палиндромами и имеют длины \(4\), \(3\) и \(2\) соответственно. Таким образом, строка является \(2\)-хорошей, \(3\)-хорошей и \(4\)-хорошей. Следовательно, \(f(\mathtt{aaab}) = 2 + 3 + 4 = 9\).

Во втором запросе первого набора строка имеет вид \(\mathtt{aaa}\). В ней нет непалиндромных подстрок. Следовательно, \(f(\mathtt{aaa}) = 0\).

В первом запросе второго набора входных данных строка имеет вид \(\mathtt{abc}\). Подстроки \(\mathtt{ab}\), \(\mathtt{bc}\) и \(\mathtt{abc}\) не являются палиндромами и имеют длины \(2\), \(2\) и \(3\) соответственно. Таким образом, строка является \(2\)-хорошей и \(3\)-хорошей. Следовательно, \(f(\mathtt{abc}) = 2 + 3 = 5\). Заметим, что даже если существует \(2\) непалиндромных подстроки длины \(2\), мы считаем их только один раз.

D1. Считать всегда весело (простая версия)

дп Комбинаторика математика Перебор *2400

Это простая версия задачи. Единственное различие между двумя версиями — ограничение на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Массив \(b\) из \(m\) целых неотрицательных чисел считается хорошим, если все элементы \(b\) можно сделать равными \(0\) с помощью применения следующей операции несколько (возможно, ноль) раз:

  • Выбрать два различных индекса \(l\) и \(r\) (\(1 \leq l \color{red}{<} r \leq m\)) и вычесть \(1\) из всех \(b_i\) таких, что \(l \leq i \leq r\).

Вам даны три целых положительных числа \(n\), \(k\) и простое число \(p\).

Среди всех \((k+1)^n\) массивов длины \(n\), таких, что \(0 \leq a_i \leq k\) для всех \(1 \leq i \leq n\), посчитайте количество хороших массивов.

Поскольку число может быть очень большим, от вас требуется найти его только по модулю \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых положительных числа \(n\), \(k\) и \(p\) (\(3 \leq n \leq 400\), \(1 \leq k \leq n\), \(10^8 < p < 10^9\)) — длина массива \(a\), верхняя граница на элементы \(a\) и модуль \(p\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), а \(p\) является простым.

Выходные данные

Для каждого набора входных данных в новой строке выведите количество хороших массивов по модулю \(p\).

Примечание

В первом наборе входных данных \(4\) хорошими массивами \(a\) являются:

  • \([0,0,0]\);
  • \([0,1,1]\);
  • \([1,1,0]\);
  • \([1,1,1]\).

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\) палатку возьмет интроверт. Тогда останется один экстраверт и один универсал. Этот экстраверт никак не сможет поселиться с кем-то втроем.

B. Фейерверки

математика теория чисел *900

Один из дней похода совпал с праздничным днём, поэтому вечером в лагере решили устроить праздничный салют. Для этого организаторы похода купили две установки для запуска салютов и огромное количество снарядов для запуска.

Обе установки включаются одновременно. Первая установка выпускает салют каждые \(a\) минут (то есть через \(a, 2 \cdot a, 3 \cdot a, \dots\) минут после запуска). Вторая установка выпускает салют каждые \(b\) минут (то есть через \(b, 2 \cdot b, 3 \cdot b, \dots\) минут после запуска).

Каждый салют виден на небе \(m + 1\) минуту после запуска, то есть если салют был выпущен через \(x\) минут после запуска установок, то он будет виден в каждую минуту от \(x\) до \(x + m\) включительно. Если один салют был выпущен через \(m\) минут после другого, то в течение одной минуты будут видны оба салюта.

Какое максимальное количество салютов одновременно можно увидеть в небе?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой и единственной строке каждого набора входных данных содержатся натуральные числа \(a\), \(b\), \(m\) (\(1 \le a, b, m \le 10^{18}\)) — периодичность запуска первой установки, второй установки и время, которое салют виден в небе.

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальное число салютов, которые можно увидеть одновременно.

Примечание

В первом наборе входных данных салюты видны в небе в течение \(5\) минут. Так как первая установка запускает фейерверки раз в \(6\) минут, а вторая — раз в \(7\), два фейерверка, запущенные из одной установки, в небе одновременно видны не будут. В то же время спустя \(7\) минут после начала праздника будет видно по одному фейерверку от первого и второго лагеря. Таким образом, одновременно можно увидеть не более \(2\) салютов.

В третьем наборе входных данных спустя \(112\) минут будут видны \(17\) фейерверков:

  • \(9\) фейерверков, запущенных из первой установки в моменты [\(56, 63, 70, 77, 84, 91, 98, 105, 112\)];
  • \(8\) фейерверков, запущенных из второй установки в моменты [\(56, 64, 72, 80, 88, 96, 104, 112\)].

H. НОД больше

математика Перебор Структуры данных теория чисел *2600

Вечерами в походе нужно как-то коротать время, поэтому Кирилл и Антон решили достать из рюкзака массив целых чисел \(a\) длины \(n\) и сыграть с ним в игру. Правила заключаются в следующем:

  1. Кирилл выбирает себе от \(2\)-х до \((n-2)\)-х чисел и обводит их красным цветом.
  2. Антон обводит синим цветом все остальные числа.
  3. Кирилл считает наибольший общий делитель (НОД) всех красных чисел.
  4. Антон считает побитовое И всех синих чисел и прибавляет к результату число \(x\).
  5. Если НОД всех красных чисел строго больше, чем сумма побитового И всех синих чисел и числа \(x\), то Кирилл выигрывает, иначе выигрывает Антон.

Помогите Кириллу обыграть Антона или скажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 20\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(x\) (\(4\le n \le 4\cdot 10^5\), \(0 \le x \le 4\cdot 10^5\)) — количество чисел и число \(x\) соответственно.

Во второй строке вводится массив \(a\) длины \(n\) (\(1 \le a_i \le 4\cdot 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4\cdot 10^5\). Также гарантируется, что сумма максимальных значений \(a_i\) по каждому набору входных данных не превосходит \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке «YES», если выполнить условие возможно, во второй — количество чисел, которые выбирает Кирилл, а также сами числа в любом порядке через пробел, а в третьей — размер второго множества и числа, попавшие в него.

Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

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)\).

E. Девочка-перестановочка

дп Комбинаторика математика теория чисел *2200

Загадана какая-то перестановочка длины \(n\).

Вам даны индексы её префиксных максимумов и суффиксных максимумов.

Напомним, что перестановка длины \(k\) — это такой массив размера \(k\), что в нем встречается каждое целое число от \(1\) до \(k\) ровно один раз.

Префиксные максимумы — элементы, которые являются максимумом на префиксе, заканчивающемся в этом элементе. Более формально, элемент \(a_i\) является префиксным максимумом, если \(a_i > a_j\) для каждого \(j < i\).

Аналогично определяются суффиксные максимумы, элемент \(a_i\) является суффиксным максимумом, если \(a_i > a_j\) для каждого \(j > i\).

Требуется вывести количество различных перестановок, которые могли бы быть загаданы.

Так как это число может быть очень большим, выведите ответ по модулю \(10^9 + 7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m_1\) и \(m_2\) (\(1 \le m_1, m_2 \le n \le 2 \cdot 10^5\)) — длина перестановки, количество префиксных и количество суффиксных максимумов соответственно.

Вторая строка каждого набора входных данных содержит \(m_1\) целых чисел \(p_1 < p_2 < \ldots < p_{m_1}\) (\(1 \le p_i \le n\)) — индексы префиксных максимумов в порядке возрастания.

Третья строка каждого набора входных данных содержит \(m_2\) целых чисел \(s_1 < s_2 < \ldots < s_{m_2}\) (\(1 \le s_i \le n\)) — индексы суффиксных максимумов в порядке возрастания.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — количество подходящих перестановок по модулю \(10^9 + 7\).

Примечание

Во втором наборе входных данных подходят следующие перестановки:

  • \([1, 4, 3, 2]\)
  • \([2, 4, 3, 1]\)
  • \([3, 4, 2, 1]\)

В шестом наборе входных данных подходят следующие перестановки:

  • \([2, 1, 6, 5, 3, 4]\)
  • \([3, 1, 6, 5, 2, 4]\)
  • \([3, 2, 6, 5, 1, 4]\)
  • \([4, 1, 6, 5, 2, 3]\)
  • \([4, 2, 6, 5, 1, 3]\)
  • \([4, 3, 6, 5, 1, 2]\)
  • \([5, 1, 6, 4, 2, 3]\)
  • \([5, 2, 6, 4, 1, 3]\)
  • \([5, 3, 6, 4, 1, 2]\)
  • \([5, 4, 6, 3, 1, 2]\)

F. Редкие монеты

Комбинаторика математика Теория вероятностей *2500

В ряд расположено \(n\) мешков, пронумерованных от \(1\) до \(n\); \(i\)-й мешок содержит \(a_i\) золотых монет и \(b_i\) серебряных монет.

Ценность золотой монеты равна \(1\). Ценность серебряной монеты равна \(0\) или \(1\), и определяется для каждой серебряной монеты независимо (\(0\) с вероятностью \(\frac{1}{2}\) и \(1\) с вероятностью \(\frac{1}{2}\)).

Вам нужно ответить на \(q\) независимых запросов. Каждый запрос имеет следующий формат:

  • \(l\) \(r\) — посчитайте вероятность того, что суммарная ценность монет в мешках с \(l\) по \(r\) строго больше суммарной ценности во всех остальных мешках.
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — количество мешков и количество запросов, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^6\)) — количество золотых монет в \(i\)-м мешке.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i \le 10^6\)) — количество серебряных монет в \(i\)-м мешке.

Далее следуют \(q\) строк запросов. \(j\)-я из следующих \(q\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)) — описание \(j\)-го запроса.

Дополнительные ограничения на входные данные:

  • сумма массива \(a\) не превышает \(10^6\);
  • сумма массива \(b\) не превышает \(10^6\).
Выходные данные

Для каждого запроса выведите одно целое число — вероятность того, что суммарная ценность монет в мешках с \(l\) по \(r\) строго больше суммарной ценности во всех остальных мешках, взятое по модулю \(998244353\).

Вероятность можно выразить в виде несократимой дроби \(\frac{x}{y}\). Вы должны вывести значение \(x \cdot y^{-1} \bmod 998244353\), где \(y^{-1}\) — целое число, такое, что \(y \cdot y^{-1} \bmod 998244353 = 1\).

Примечание

В обоих запросах из первого примера ответ равен \(\frac{1}{4}\).

E. Damage per Second

математика Перебор *2900

You just created a new character in your favourite role-playing game and now have to decide how to skill him.

The two skill attributes to be chosen are: damage per hit and hits per second. Damage per hit is the amount of damage you deal with a single hit, while hits per second is the number of hits you can make in one second. Initially, both skill attributes are set at \(0\). You have \(k\) skill points to distribute as you want; in other words, you can choose the values of the two skills so that they are positive integers with sum at most \(k\).

The tutorial of the game (the boring part you want to finish as soon as possible) consists of \(n\) monsters to be killed one after the other. The \(i\)-th monster has \(h_i\) health points, i.e., it dies after you have inflicted at least \(h_i\) damage.

How can you assign the two skill attributes to minimize the time necessary to kill all the \(n\) monsters?

Input

The first line contains two integers \(n\) and \(k\) (\(1\leq n\leq200\,000\), \(2\leq k\leq200\,000\)) — the number of enemies and the number of skill points.

The second line contains \(n\) integers \(h_i\) (\(1\leq h_i\leq10^{13}\)) — the health of the \(i\)th enemy.

Output

Print two positive integers \(x\) and \(y\) (\(1\le x, y\) and \(x+y\le k\)) — the number of skill points you want to invest in damage per hit and hits per second. If there are multiple optimal solutions, print any of them.

Note

In the first sample, there is only one monster and you have \(7\) skill points to distribute. If you make \(3\) damage per hit, you will need \(5\) hits to kill it. If you do \(4\) hits per second, you will need \(1.25\) seconds to beat the monster. There is no way to beat the monster faster than this.

In the second sample, you will need one hit for each monster and a total time of \(0.8\) seconds if you distribute \(4\) skill points on damage per hit and the remaining \(5\) points on hits per second.

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.

K. Make Triangle

Конструктив математика *2800

You are given \(n\) positive integers \(x_1, x_2, \ldots, x_n\) and three positive integers \(n_a, n_b, n_c\) satisfying \(n_a+n_b+n_c = n\).

You want to split the \(n\) positive integers into three groups, so that:

  • The first group contains \(n_a\) numbers, the second group contains \(n_b\) numbers, the third group contains \(n_c\) numbers.
  • Let \(s_a\) be the sum of the numbers in the first group, \(s_b\) be the sum in the second group, and \(s_c\) be the sum in the third group. Then \(s_a, s_b, s_c\) are the sides of a triangle with positive area.

Determine if this is possible. If this is possible, find one way to do so.

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 100\,000\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains the integers \(n, n_a, n_b, n_c\) (\(3 \leq n \leq 200\,000, 1\leq n_a,n_b,n_c \leq n-2, n_a+n_b+n_c = n\)) — the number of integers to split into three groups, and the desired sizes of the three groups.

The second line of each test case contains \(n\) integers \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_i \leq 10^{9}\)).

It is guaranteed that the sum of \(n\) over all test cases does not exceed \(200\,000\).

Output

For each test case, print \(\texttt{YES}\) if it is possible to split the numbers into three groups satisfying all the conditions. Otherwise, print \(\texttt{NO}\).

If such a split exists, then describe the three groups as follows.

On the next line, print \(n_a\) integers \(a_1, a_2, \ldots, a_{n_a}\) — the numbers in the first group.

On the next line, print \(n_b\) integers \(b_1, b_2, \ldots, b_{n_b}\) — the numbers in the second group.

On the next line, print \(n_c\) integers \(c_1, c_2, \ldots, c_{n_c}\) — the numbers in the third group.

These \(n_a+n_b+n_c=n\) integers should be a permutation of \(x_1, x_2, \ldots, x_n\), and they should satisfy the conditions from the statement.

If there are multiple solutions, print any of them.

Note

In the first test case, we can put two \(1\)s into each group: the sum in each group would be \(2\), and there exists a triangle with positive area and sides \(2\), \(2\), \(2\).

In the second and third test cases, it can be shown that there is no such way to split numbers into groups.

In the fourth test case, we can put number \(16\) into the first group, with sum \(16\), numbers \(12\) and \(1\) into the second group, with sum \(13\), and the remaining five \(1\)s into the third group, with sum \(5\), as there exists a triangle with positive area and sides \(16, 13, 5\).

A. Посмотрим футбол

Бинарный поиск математика Перебор *1000

Валерик и Валерко пропустили последний матч чемпионата Европы по футболу и решили посмотреть основные моменты этого матча в интернете. Им хочется побыстрее начать смотреть, но низкая скорость соединения не позволяет этого сделать. Если сразу включить видео, то оно будет «тормозить» из-за того, что размер данных, необходимых для просмотра одной секунды видео, превышает размер данных, которые можно получить за одну секунду.

Ребята хотят посмотреть все видео целиком без задержек, поэтому они должны подождать некоторое целое количество секунд, пока загрузится часть видео, а потом начинать смотреть. При этом не обязательно чтобы видео загрузилось полностью, оно может продолжать загружаться после включения.

Предположим видео идет c секунд, а Валерик и Валерко подождут перед просмотром t секунд. Тогда необходимо, чтобы для любого момента времени t0, t ≤ t0 ≤ c + t, выполнялось условие, что количество данных, полученных за t0 секунд, не меньше, чем количество данных, необходимых для просмотра t0 - t секунд видео.

Конечно же, ребята хотят ждать как можно меньше, поэтому вам предстоит найти минимальное целое количество секунд, которое необходимо подождать перед включением видео, чтобы можно было посмотреть его без задержек.

Входные данные

В первой строке записаны через пробел три целых числа a, b и c (1 ≤ a, b, c ≤ 1000, a > b). Первое число (a) обозначает количество данных, необходимое для просмотра одной секунды видео, второе (b) — количество данных, которое Валерик и Валерко могут загрузить из интернета за одну секунду, третье (c) — длину видео в секундах.

Выходные данные

Выведите одно целое число — минимальное целое количество секунд, которое Валерик и Валерко должны подождать, чтобы посмотреть футбол без задержек.

Примечание

В первом примере длина видео 1 секунда, чтобы посмотреть 1 секунду видео необходимо загрузить 4 единицы данных, таким образом всего ребятам нужно загрузить 4 · 1 = 4 единиц данных для просмотра всего видео. Наиболее оптимально будет подождать 3 секунды пока загрузится 3 единицы данных, а затем начать смотреть. Пока ребята будут смотреть видео, за одну секунду загрузится еще одна единица данных и к моменту окончания просмотра Валерик и Валерко будут иметь необходимые 4 единицы. При этом в любой момент времени до окончания видео у ребят будет загружено данных больше, чем нужно для просмотра.

Во втором примере ребятам нужно загрузить 2 · 10 = 20 единиц данных, поэтому им нужно подождать 5 секунд, и тогда у них загрузятся необходимые 20 единиц еще до окончания второй секунды. Однако если ребята подождут 4 секунды, то они смогут посмотреть первую секунду видео без задержек, но к концу второй секунды у них загрузится всего 18 единиц, что меньше, чем необходимо.

B. После тренировки

математика реализация Структуры данных *1300

После тренировки одной из команд на чемпионате Европы по футболу Валерику поручили собрать мячи и разложить по корзинам. Всего на стадионе имеется n мячей и m корзин. Корзины расположены в ряд слева направо и пронумерованы, соответственно, числами от 1 до m. Мячи пронумерованы числами от 1 до n.

Валерик решил раскладывать мячи в порядке увеличения их номеров по следующей схеме. Каждый новый мяч он будет класть в ту корзину, где меньше всего мячей. При этом если у него есть несколько вариантов, то Валерик выбирает корзину, которая ближе всего к середине. Это означает, что он выбирает ту корзину, для которой минимально, где i — номер корзины. Если при этом также есть несколько вариантов, тогда он выбирает корзину с минимальным номером.

Выведите для каждого мяча номер корзины, в которую он отправится в соответствии со схемой Валерика.

Обратите внимание, что мячи раскладываются по корзинам в порядке увеличения номеров мячей, то есть сначала первый мяч, потом второй мяч и так далее.

Входные данные

В первой строке через пробел записаны два целых числа n, m (1 ≤ n, m ≤ 105) — количество мячей и корзин, соответственно.

Выходные данные

Выведите n чисел, по одному на каждой строке. В i-ой строке должен содержаться номер корзины, в которую попадет i-ый мяч.

D. Исследование ломаной

геометрия математика сортировки *1900

При просмотре одного из последних матчей чемпионата Европы Валерик и Валерко разбили в спорт-баре кружку. Конечно, они за нее расплатились, но бармен сказал, что разрешит им теперь смотреть футбол у него в баре, только если они помогут его сыну выполнить задание по программированию. Задание состоит в следующем.

Рассмотрим множество функций вида:

Суммой n функций y1(x), ..., yn(x) указанного вида назовем функцию s(x) = y1(x) + ... + yn(x) для любых x. Нетрудно показать, что в этом случае график s(x) является ломаной. Вам задано n функций указанного вида, необходимо найти количество углов, не равных 180 градусам, в графике функции s(x), являющейся суммой заданных функций.

Валерик и Валерко очень хотят посмотреть следующий матч чемпионата Европы, поэтому обратились к вам за помощью.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество функций. Далее в n строках через пробел записано по два целых числа ki, bi ( - 109 ≤ ki, bi ≤ 109), определяющих i-ую функцию.

Выходные данные

Выведите одно число — количество углов, не равных 180 градусам, в графике ломаной, равной сумме заданных функций.

C. Преобразование времени

математика реализация *800

Дано время в формате 24 часа, определите эквивалентное время в формате 12 часов.

  • Формат 24 часа делит сутки на 24 часа от \(00\) до \(23\), каждый из которых имеет 60 минут от \(00\) до \(59\).
  • Формат 12 часов делит сутки на две половины: первая половина — \(\mathrm{AM}\), а вторая — \(\mathrm{PM}\). В каждой половине часы нумеруются в порядке \(12, 01, 02, 03, \dots, 11\). Каждый час имеет 60 минут, нумеруемых от \(00\) до \(59\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1440\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\) длиной \(5\) с форматом hh:mm, представляющую допустимое время в формате 24 часа. hh представляет час от \(00\) до \(23\), а mm представляет минуту от \(00\) до \(59\).

Ввод всегда будет допустимым временем в формате 24 часа.

Выходные данные

Для каждого набора входных данных выведите две строки, разделенные пробелом («hh:mm AM» или «hh:mm PM»), которые являются эквивалентом времени в формате 12 часов для предоставленного времени в наборе входных данных (без кавычек).

Вы должны вывести время точно так, как указано; в частности, вы не должны удалять ведущие нули.

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}\).

В третьем наборе входных данных не нужно выполнять никаких операций.

В четвертом наборе входных данных невозможно выполнить никакую операцию, но нам нужно, чтобы горела первая лампа. Поэтому достичь желаемой конфигурации невозможно.

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}]\).

G. Клацанье шарами

Комбинаторика математика Теория вероятностей *3100

По кругу расставлены \(m\) корзин, пронумерованных от \(1\) до \(m\) по часовой стрелке (корзина \(m\) находится рядом с корзиной \(1\)). Кроме того, имеется \(n\) шаров, причем шар \(i\) первоначально помещен в корзину \(a_i\), и ни одна корзина не содержит более одного шара.

Алисе разрешено выполнять следующую операцию, которая всегда занимает ровно одну секунду, независимо от того, перемещаете/выбрасываете вы шар или нет:

  • Алиса выбирает целое число \(i\) между \(1\) и \(n\) равномерно случайным образом.
  • Если шар \(i\) был выброшен ранее, ничего не делать.
  • В противном случае, шар \(i\) перемещается из корзины, в которой он находится в данный момент, в следующую корзину (по часовой стрелке). Если в корзине, в которую перемещается шар, сейчас находится другой шар \(j\), выбросить шар \(j\).

Она повторяет эту операцию до тех пор, пока не останется ровно один шар. Вычислите математическое ожидание времени (в секундах), необходимого Алисе для завершения процесса.

Можно доказать, что ответ можно представить в виде рационального числа \(\frac{p}{q}\) с простыми \(p\) и \(q\). Вам нужно вывести \(p \cdot q^{-1} \bmod 10^9 + 7\). Можно доказать, что \(10^9 + 7 \nmid q\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 3 \cdot 10^5, n \le m \le 10^9\)) — количество шаров и количество корзин.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le m\), \(a_i\) попарно различны) — начальное положение каждого шара.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: математическое ожидание времени (в секундах), необходимое Алисе для завершения процесса, по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных Алиса могла бы действовать следующим образом (мы определяем \(a_i = -1\), если шар \(i\) был выброшен):

  • Изначально \(a = [5, 1, 4]\).
  • Алиса выбирает \(i = 2\) с вероятностью \(\frac{1}{3}\), и шар \(2\) перемещается в корзину \(2\). После этого \(a = [5, 2, 4]\).
  • Алиса выбирает \(i = 2\) с вероятностью \(\frac{1}{3}\), и шар \(2\) перемещается в корзину \(3\). После этого \(a = [5, 3, 4]\).
  • Алиса выбирает \(i = 2\) с вероятностью \(\frac{1}{3}\), и шар \(2\) перемещается в корзину \(4\). Поскольку в корзине \(4\) ранее находился шар \(3\), этот шар выбрасывается. После этого \(a = [5, 4, -1]\).
  • Алиса выбирает \(i = 3\) с вероятностью \(\frac{1}{3}\). Шар \(3\) уже был выброшен, поэтому ничего не происходит. После этого \(a = [5, 4, -1]\).
  • Алиса выбирает \(i = 2\) с вероятностью \(\frac{1}{3}\), и шар \(2\) перемещается в корзину \(5\), из которой выбрасывается шар \(1\). После этого \(a = [-1, 5, -1]\), и процесс завершается.
Ответ для этого набора входных данных равен \(\frac{189}{5}\).

Ответ для второго набора входных данных равен \(14\) (обратите внимание, что эти два шара находятся рядом друг с другом).

Ответ для третьего набора входных данных равен \(35\).

Ответ для четвертого набора входных данных равен \(\frac{220}{3}\).

В пятом наборе входных данных, поскольку изначально имеется только один шар, ответ равен \(0\).

E. Линейное сканирование

*особая задача игры Комбинаторика математика

Будьте осторожны, чтобы не совершить ошибку. Вам, возможно, придется начать все сначала.
— Кто-то, вероятно
Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 2\)) — массив \(a\).

Выходные данные

Выведите одно целое число — количество решений по модулю \(20240401\).

Примечание

В первом примере массив выглядит следующим образом:

\( \color{blue}{1} \)\( \color{blue}{1} \)\( \color{darkgreen}{2} \)\( \color{blue}{1} \)\( \color{blue}{1} \)\( \color{darkgreen}{2} \)\( \color{gray}{0} \)

Очевидно, что ответ здесь равен \(1 \pmod{20240401}\).

Во втором примере массив выглядит следующим образом:

\( \color{blue}{1} \)\( \color{blue}{1} \)\( \color{darkgreen}{2} \)\( \color{blue}{1} \)\( \color{blue}{1} \)\( \color{blue}{1} \)\( \color{gray}{0} \)

Я не знаю, почему ответ здесь равен \(2 \pmod{20240401}\), мне пришлось догадаться.

В третьем примере массив выглядит следующим образом:

\( \color{gray}{0} \)\( \color{blue}{1} \)\( \color{darkgreen}{2} \)\( \color{blue}{1} \)\( \color{blue}{1} \)\( \color{blue}{1} \)\( \color{gray}{0} \)

Если ответ здесь не равен \(0 \pmod{20240401}\), я буквально взорвусь.

G. Захват математиков

*особая задача Бинарный поиск математика поиск в глубину и подобное

Математик захватил мой компьютер, когда я готовил эту задачу, удалил условие и изменил примеры по своему усмотрению. Основное решение и формат ввода/вывода все еще верны, но примеры неверны.

Я частично исправил задачу, поэтому при отправке вашего решения оно будет тестироваться на правильной версии задачи. Однако я не могу исправить примеры ниже. Как computer scientist, можете ли вы решить правильную задачу?

Входные данные

Единственная строка ввода содержит вещественное число \(x\) (\(1 \leq x \leq 100\)), заданное с точностью до трех десятичных знаков.

Выходные данные

Выведите одно вещественное число — ответ. Ваш ответ считается правильным, если его абсолютная или относительная ошибка не превышает \(10^{-4}\). Формально, пусть ваш ответ будет \(a\), а ответ жюри будет \(b\). Ваш ответ принимается, если и только если \(\frac{|a-b|}{\max(1,|b|)} \le 10^{-4}\).

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\) клеток так, чтобы все клетки имели одинаковый цвет.

B. Сделай его некрасивым

математика реализация *1200

Назовём массив \(a\) красивым, если его можно превратить в массив из одинаковых чисел следующими операциями:

  • выбрать позицию \(i\) (\(2 \le i \le |a| - 1\)) такую, что \(a_{i - 1} = a_{i + 1}\), и заменить \(a_i\) на \(a_{i - 1}\).

Задан красивый массив \(a_1, a_2, \dots, a_n\). Какое минимальное количество элементов надо из него удалить, чтобы он перестал быть красивым? Переставлять элементы местами запрещается. Если это сделать невозможно, то выведите -1.

Входные данные

В первой строке записано одно целое число \(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\)).

Дополнительные ограничения на входные данные:

  • в каждом наборе входных данных массив \(a\) — красивый;
  • сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).
Выходные данные

На каждый набор входных данных выведите одно целое число — минимальное количество элементов, которое надо удалить из массива \(a\), чтобы он стал некрасивым. Если это сделать невозможно, то выведите -1.

Примечание

В первом наборе входных данных массив невозможно сделать так, чтобы массив перестал быть красивым. Массив, состоящий из одинаковых чисел, будет оставаться красивым, сколько бы чисел мы из него не удалили.

Во втором наборе входных данных можно удалить число на позиции \(5\), например.

Полученный массив будет \([1, 2, 1, 2]\). Проверим, красивый ли он. Доступны две операции:

  • Выбрать \(i = 2\): получится массив \([1, 1, 1, 2]\). К нему больше не применишь операций, а числа не все одинаковые.
  • Выбрать \(i = 3\): получится массив \([1, 2, 2, 2]\). К нему тоже больше не применишь операций, и числа все еще не все одинаковые.

Получается, что массив \([1, 2, 1, 2]\) не является красивым.

В четвертом наборе входных данных можно удалить первые три элемента, например. Полученный массив \([5, 3, 3, 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\) после применения операций. Если ответов несколько, выведите любой из них.

D. Цветные шары

дп Комбинаторика математика сортировки *1800

Существуют шары \(n\) различных цветов; количество шаров \(i\)-го цвета равно \(a_i\).

Шары можно объединять в группы. Каждая группа должна содержать не более \(2\) шаров и не более \(1\) шара каждого цвета.

Рассмотрим все \(2^n\) множеств цветов. Для множества цветов обозначим его значение как минимальное количество групп, на которые могут быть разделены шары этих цветов. Например, если есть три цвета с \(3\), \(1\) и \(7\) шарами соответственно, их можно объединить в \(7\) групп (и не менее \(7\)), поэтому значение этого множества цветов равно \(7\).

Ваша задача — вычислить сумму значений по всем \(2^n\) возможным множествам цветов. Поскольку ответ может быть слишком большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — количество цветов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 5000\)) — количество шаров \(i\)-го цвета.

Дополнительное ограничение на входные данные: общее количество шаров не превышает \(5000\).

Выходные данные

Выведите одно целое число — сумму значений всех \(2^n\) множеств цветов, взятую по модулю \(998\,244\,353\).

Примечание

Рассмотрим первый пример. Есть \(8\) множеств цветов:

  • значение пустого множества равно \(0\);
  • значение множества \(\{1\}\) равно \(1\);
  • значение множества \(\{2\}\) равно \(1\);
  • значение множества \(\{3\}\) равно \(2\);
  • значение множества \(\{1,2\}\) равно \(1\);
  • значение множества \(\{1,3\}\) равно \(2\);
  • значение множества \(\{2,3\}\) равно \(2\);
  • значение множества \(\{1,2,3\}\) равно \(2\).

Таким образом, сумма значений по всем \(2^n\) множествам цветов равна \(11\).

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)\) выведите минимальное количество секунд, за которое можно убить всех монстров.

F. Уникальные строки

дп Комбинаторика математика *3100

Назовем две строки \(a\) и \(b\) равными, если можно получить строку \(b\) циклическим сдвигом строки \(a\). Например, строки 0100110 и 1100100 — равны, а строки 1010 и 1100 — не равны.

Вам задана бинарная строка \(s\) длины \(n\). Каждый из ее первых \(c\) символов — это 1, а каждый из последних \(n - c\) символов — это 0.

За одну операцию вы можете заменить один 0 на 1.

Посчитайте количество уникальных строк, которые вы можете получить, используя не более \(k\) операций. Поскольку ответ может быть слишком большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая и единственная строка содержит три целых числа \(n\), \(c\) и \(k\) (\(1 \le n \le 3000\); \(1 \le c \le n\); \(0 \le k \le n - c\)) — длина строки \(s\), длина префикса из 1 и максимальное количество операций.

Выходные данные

Выведите одно целое число — количество уникальных строк, которые вы можете получить, выполнив не более \(k\) операций, по модулю \(10^9 + 7\).

Примечание

В первом тесте возможная строка: 1.

Во втором тесте возможные строки: 100, 110 и 111. Строка 101 равна 110, поэтому мы ее не учитываем.

В третьем тесте возможные строки: 10000, 11000, 10100. Строка 10010 равна 10100, а 10001 равна 11000.

A. Акция на йогурты

математика *800

Цена одного йогурта в магазине «Восьмёрочка» составляет \(a\) бурлей, однако появилась акция, по которой можно купить два йогурта за \(b\) бурлей.

Максиму нужно купить ровно \(n\) йогуртов. При покупке двух йогуртов он может выбрать, взять их по обычной цене или по акции.

Какое минимальное количество бурлей должен потратить Максим, чтобы купить \(n\) йогуртов?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le {10}^{4}\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит три целых числа \(n\), \(a\) и \(b\) (\(1 \le n \le 100\), \(1 \le a, b \le 30\)) — количество йогуртов, которые хочет купить Максим, цена за один йогурт и за два йогурта по акции.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите минимальную стоимость покупки \(n\) йогуртов в «Восьмёрочке».

Примечание

В третьем примере выгоднее купить три йогурта за \(15\) бурлей, чем два за \(11\) и один за \(5\).

В четвёртом примере нужно купить четыре йогурта, каждый по \(5\) бурлей.

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\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите количество потопленных Кракеном кораблей.

F. Нечестная игра

дп жадные алгоритмы игры математика расписания *1800

Алиса и Боб собрались вечером, чтобы поиграть в увлекательную игру на последовательности из \(n\) натуральных чисел, не превосходящих \(4\). Правила игры слишком сложны для их описания, поэтому просто опишем критерий победы — Алиса побеждает, если исключающее ИЛИ всех чисел последовательности отлично от нуля, в противном случае же побеждает Боб.

Ребята позвали Еву, чтобы она выступала в качестве судьи. Изначально Алиса и Боб играют с \(n\) числами. После одной игры Ева удаляет одно из чисел из последовательности, затем Алиса и Боб играют с \(n-1\) числами, Ева снова удаляет одно из чисел, после чего Алиса и Боб играют с \(n - 2\) числами. Так продолжается до тех пор, пока последовательность чисел не пуста.

Еве кажется, что в такой игре Алиса почти всегда побеждает, поэтому она хочет, чтобы Боб выиграл как можно больше раз. Определите, какое максимальное количество раз Боб сможет победить Алису, если Ева будет удалять числа оптимально.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит четыре целых числа \(p_i\) (\(0 \le p_i \le 200\)) — количество единиц, двоек, троек и четвёрок в последовательности в начале игры.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное количество раз, когда выиграет Боб, если Ева будет удалять числа оптимально.

Примечание

В первом примере Боб выигрывает, когда Ева ещё не убрала ни одного числа.

Во втором примере Боб выигрывает, если Ева уберёт одну единицу и одну тройку.

G. НОД на клетчатом поле

дп математика Перебор поиск в глубину и подобное реализация теория чисел *1900

Совсем недавно Егор узнал про алгоритм Евклида нахождения наибольшего общего делителя двух чисел. Наибольшим общим делителем двух чисел \(a\) и \(b\) называется наибольшее число, на которое \(a\) и \(b\) делятся без остатка. С помощью этих знаний Егор может решить задачу, которую он когда-то не решил.

У Василия есть клетчатое поле \(n\) строк на \(m\) столбцов, на пересечении \(i\)-й строки и \(j\)-го столбца находится число \({a_i}_j\). Егор хочет попасть из левого верхнего угла (на пересечении первой строки и первого столбца) в правый нижний угол (на пересечении последней строки и последнего столбца) и узнать, какой НОД у всех чисел на пути. Разрешается двигаться только вниз и вправо. Егор выписал несколько путей и получил разные значения НОД, ему стало интересно, какой максимальный НОД можно получить.

К сожалению, Егор устал считать НОД чисел и поэтому просит Вас помочь ему найти максимальный НОД чисел на пути из левого верхнего угла в правый нижний угол клетчатого поля.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le {10}^{4}\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)) — количество строк и столбцов клетчатого поля.

Далее следует \(n\) строк, \(i\)-я строка содержит \(m\) целых чисел \((1 \le a_{i,j} \le {10}^{6}\)) — числа, записанные в \(i\)-й строке и \(j\)-м столбце клетчатого поля.

Гарантируется, что сумма \(n \cdot m\) не превосходит \(2 \cdot {10}^{5}\) по всем тестовым случаям.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное возможный НОД на пути из клетки левой верхней клетки в правую нижнюю клетку.

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\).

E1. Нина против монстров (простая версия)

математика Перебор реализация *2500

Это простая версия задачи. Единственное отличие между версиями — ограничение на \(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 2 \cdot 10^5\)) — текущие уровни энергии монстров.

Гарантируется, что сумма \(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\)-го монстра ненулевой уровень энергии.

Во втором наборе входных данных у обоих монстров изначально нулевой уровень энергии.

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\)-го монстра ненулевой уровень энергии.

Во втором наборе входных данных у обоих монстров изначально нулевой уровень энергии.

C. Как ходит ладья?

дп Комбинаторика математика *1600

Вам дана шахматная доска размером \(n \times n\), на которой вы и компьютер поочередно расставляете белые и черные ладьи соответственно. Расставляя ладьи, вы должны следить за тем, чтобы никакие две ладьи не атаковали друг друга. Две ладьи атакуют друг друга, если они находятся в одной строке или столбце независимо от цвета.

Правильный ход — установка ладьи на позиции (\(r\), \(c\)) так, чтобы она не атаковала никакую другую ладью.

Вы начинаете первым, и когда вы в свой ход сделаете правильный ход, поставив белую ладью на позицию (\(r\), \(c\)), компьютер отзеркалит ваш ход и в свой ход поставит черную ладью на позицию (\(c\), \(r\)). Если \(r = c\), то компьютер не сможет отзеркалить ваш ход и пропустит его.

Вы уже сыграли с компьютером \(k\) ходов (компьютер отразил и эти ходы), и вы должны продолжать игру, пока не останется ни одного правильного хода. Сколько различных конечных конфигураций можно получить, если продолжить игру после данных \(k\) ходов? Гарантируется, что \(k\) сделанных ходов были правильными. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Две конфигурации считаются различными, если существует координата (\(r\), \(c\)), в которой ладья есть в одной конфигурации, но нет в другой, или цвет ладьи на координате отличается.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 3 \cdot 10^5\), \(0 \leq k \leq n\)) — размер шахматной доски и количество ходов, которое вы уже сыграли соответственно.

Каждая из следующих \(k\) строк набора входных данных содержит по два целых числа \(r_i\) и \(c_i\), описывающих ваш \(i\)-й ход.

Гарантируется, что все \(k\) ходов являются правильными.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно число — общее количество возможных конечных конфигураций по модулю \(10^9+7\).

Примечание

В первом наборе входных данных у нас есть поле \(4 \times 4\), и вы уже сыграли \(1\) ход. После того как вы и компьютер сыграли по одному ходу, на поле есть белая ладья на (\(1\), \(2\)) и черная ладья на (\(2\), \(1\)). Из этого состояния возможны три конфигурации —

  1. Вы ставите белую ладью на (\(3\), \(4\)), а компьютер в ответ ставит черную ладью на (\(4\), \(3\)).
  2. Вы ставите белую ладью на (\(4\), \(3\)), а компьютер в ответ ставит черную ладью на (\(3\), \(4\)).
  3. Вы ставите белую ладью на (\(3\), \(3\)), а затем на (\(4\), \(4\)), или наоборот. Оба варианта приводят к одной и той же конфигурации.

D. Битовое неравенство

битмаски дп математика Перебор *1900

Вам дан массив \(a_1, a_2, \ldots, a_n\). Найдите количество троек чисел (\(x, y, z\)) таких, что:

  • \(1 \leq x \leq y \leq z \leq n\), и
  • \(f(x, y) \oplus f(y, z) > f(x, z)\).

Определим \(f(l, r) = a_l \oplus a_{l + 1} \oplus \ldots \oplus a_{r}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — количество подходящих троек.

Примечание

В первом наборе входных данных для массива \([6, 2, 4]\) есть 4 подходящие тройки чисел:

  • (\(1\), \(2\), \(2\)): \((a_1 \oplus a_2) \oplus (a_2) = 4 \oplus 2 > (a_1 \oplus a_2) = 4\)
  • (\(1\), \(1\), \(3\)): \((a_1) \oplus (a_1 \oplus a_2 \oplus a_3) = 6 \oplus 0 > (a_1 \oplus a_2 \oplus a_3) = 0\)
  • (\(1\), \(2\), \(3\)): \((a_1 \oplus a_2) \oplus (a_2 \oplus a_3) = 4 \oplus 6 > (a_1 \oplus a_2 \oplus a_3) = 0\)
  • (\(1\), \(3\), \(3\)): \((a_1 \oplus a_2 \oplus a_3) \oplus (a_3) = 0 \oplus 4 > (a_1 \oplus a_2 \oplus a_3) = 0\)

Во втором наборе входных данных подходящих троек нет.

E. Карусель комбинаций

дп Комбинаторика математика Перебор теория чисел *2400

Вам дано целое число \(n\). Значение функции \(C(i,k)\) представляет собой количество различных способов, которыми можно выбрать \(k\) различных чисел из множества {\(1, 2, \ldots, i\)} и расположить их по кругу\(^\dagger\).

Найдите значение \(\) \sum\limits_{i=1}^n \sum\limits_{j=1}^i \left( C(i,j) \bmod j \right). \(\) Здесь операция \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Поскольку это значение может быть очень большим, найдите его по модулю \(10^9+7\).

\(^\dagger\) Две последовательности считаются одинаковыми расстановками чисел по кругу, если одну из последовательностей можно циклически сдвинуть так, чтобы она совпала с другой. Например, \([1, 2, 3]\) и \([2, 3, 1]\) являются одинаковыми расстановками по кругу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке одно число — значение вычисляемого выражения по модулю \(10^9+7\).

Примечание

В первом наборе входных данных \(C(1,1) \bmod 1 = 0\).

Во втором наборе входных данных:

  • \(C(1,1)=1\) (способы: \([1]\));
  • \(C(2,1)=2\) (способы: \([1]\), \([2]\));
  • \(C(2,2)=1\) (способы: \([1, 2]\));
  • \(C(3,1)=3\) (способы: \([1]\), \([2]\), \([3]\));
  • \(C(3,2)=3\) (способы: \([1, 2]\), \([2, 3]\), \([3, 1]\));
  • \(C(3,3)=2\) (способы: \([1, 2, 3]\), \([1, 3, 2]\)).
Итого, \(\left(C(1,1) \bmod 1\right) + \left(C(2,1) \bmod 1\right) + \left(C(2,2) \bmod 2\right) + \left(C(3,1) \bmod 1\right) + \left(C(3,2) \bmod 2\right) + \left(C(3,3) \bmod 3\right) = 4\).

B. Часы в бассейне

*особая задача математика *1400

Вы плаваете в бассейне и вам нужно контролировать время плавания.

В бассейне есть часы, которые циклически переключаются между тремя различными режимами: показ температуры воды, показ температуры воздуха и показ времени. В момент времени \(0\) (в секундах) они начинают показывать температуру воды, в момент времени \(k\) они переключаются на показ температуры воздуха. В момент времени \(2k\) они переключаются на показ времени.

В момент времени \(3k\) часы снова начинают показывать температуру воды, в момент времени \(4k\) — температуру воздуха и так далее по циклу.

Вы посмотрели на часы в момент времени \(m\), чтобы проверить время, но может оказаться, что часы сейчас не показывают именно время. Сколько времени вам нужно подождать, чтобы увидеть время на часах?

Ответьте на \(t\) независимых наборов данных.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют сами \(t\) наборов.

В первой и единственной строке каждого набора заданы два целых числа \(k\) и \(m\) (\(1 \le k \le 10^8; 1 \le m \le 10^9\)) — длина периода работы часов и момент времени, когда вы проверяете часы.

Выходные данные

Для каждого набора входных данных выведите одно целое число — время, которое вам нужно подождать с момента \(m\) до момента, когда часы начнут показывать время.

Вы можете считать, что способны мгновенно прочитать время, как только оно появится на часах.

Примечание

В первом наборе входных данных часы начнут показывать время в момент времени \(2\), поэтому вам нужно подождать \(2 - 1 = 1\) секунду.

Во втором наборе часы показывают время с момента \(10\) до момента \(15\), поэтому в момент времени \(14\) они показывают время, и вам не нужно ждать.

В третьем наборе в момент времени \(15\) они уже показывают температуру воды. Поэтому вам нужно подождать до момента \(25\), когда время появится снова. Вам придется подождать \(25 - 15 = 10\) секунд.

В четвертом наборе часы начнут показывать время в момент времени \(110\), поэтому ждать вам \(110 - 110 = 0\) секунд.

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\).

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]\).

B1. Переворотная карта (простая версия)

математика Перебор теория чисел *1400

Две версии задачи — это разные задачи. Возможно, вы захотите прочитать обе версии. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два целых положительных числа \(n\) и \(m\).

Посчитайте количество упорядоченных пар \((a, b)\), удовлетворяющих следующим условиям:

  • \(1\le a\le n\), \(1\le b\le m\);
  • \(a+b\) кратно \(b \cdot \gcd(a,b)\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 2 \cdot 10^6\)).

Гарантируется, что сумма \(n\), а также сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих пар.

Примечание

В первом наборе входных данных только \((1,1)\) удовлетворяет условиям.

В четвертом наборе входных данных условиям удовлетворяют \((1,1),(2,1),(2,2),(3,1),(4,1),(5,1),(6,1),(6,2),(6,3),(7,1),(8,1),(9,1),(10,1),(10,2)\).

B2. Переворотная карта (сложная версия)

математика Перебор теория чисел *2200

Две версии задачи — это разные задачи. Возможно, вы захотите прочитать обе версии. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два целых положительных числа \(n\) и \(m\).

Посчитайте количество упорядоченных пар \((a, b)\), удовлетворяющих следующим условиям:

  • \(1\le a\le n\), \(1\le b\le m\);
  • \(b \cdot \gcd(a,b)\) кратно \(a+b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 2 \cdot 10^6\)).

Гарантируется, что сумма \(n\), а также сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих пар.

Примечание

В первом наборе входных данных ни одна пара не удовлетворяет условиям.

В четвертом наборе входных данных пары \((2,2),(3,6),(4,4),(6,3),(6,6),(8,8)\) удовлетворяют условиям.

C. Дерево Фенвика

битмаски Деревья дп Комбинаторика математика Перебор Структуры данных *2300

Пусть \(\operatorname{lowbit}(x)\) обозначает значение младшего двоичного бита \(x\), например, \(\operatorname{lowbit}(12)=4\), \(\operatorname{lowbit}(8)=8\).

Для массива \(a\) длины \(n\), если массив \(s\) длины \(n\) удовлетворяет условию \(s_k=\left(\sum\limits_{i=k-\operatorname{lowbit}(k)+1}^{k}a_i\right)\bmod 998\,244\,353\) для всех \(k\), то \(s\) называется Деревом Фенвика массива \(a\). Обозначим его как \(s=f(a)\).

Для целого положительного числа \(k\) и массива \(a\), \(f^k(a)\) определяется следующим образом:

\(\) f^k(a)= \begin{cases} f(a)&\textrm{если }k=1\\ f(f^{k-1}(a))&\textrm{иначе.}\\ \end{cases} \(\)

Вам дан массив \(b\) длины \(n\) и целое положительное число \(k\). Найдите массив \(a\), который удовлетворяет условию \(0\le a_i < 998\,244\,353\) и \(f^k(a)=b\). Можно доказать, что ответ всегда существует. Если существует несколько ответов, вы можете вывести любой из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых положительных числа \(n\) (\(1 \leq n \leq 2\cdot 10^5\)) и \(k\) (\(1\le k\le 10^9\)), обозначающих длину массива и количество раз выполнения функции \(f\).

Вторая строка каждого набора входных данных содержит массив \(b_1, b_2, \ldots, b_n\) (\(0\le b_i < 998\,244\,353\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую корректный массив \(a\) длины \(n\).

Примечание

Из первого набора входных данных видно, что \(f^1([1,1,1,1,1,1,1,1])=[1,2,1,4,1,2,1,8]\).

Во втором наборе входных данных видно, что \(f^2([1,2,3,4,5,6])=f^1([1,3,3,10,5,11])=[1,4,3,17,5,16]\).

E1. Снова считаем массивы (простая версия)

бпф дп Комбинаторика математика *3100

Это простая версия задачи. Разница между двумя версиями заключается в ограничениях на \(n, m, b_0\) и ограничении по времени. Вы можете делать взломы, только если обе версии решены.

Малышка R уже посчитала множество множеств, и теперь она решила посчитать массивы.

Малышка R считает, что массив \(b_0, \ldots, b_n\), состоящий из целых неотрицательных чисел, является непрерывным тогда и только тогда, когда для каждого \(i\), такого что \(1 \leq i \leq n\), выполняется \(\lvert b_i - b_{i-1} \rvert = 1\). Ей нравится непрерывность, поэтому она хочет генерировать только непрерывные массивы.

Если малышке R даны \(b_0\) и \(a_1, \ldots, a_n\), то она попытается сгенерировать неотрицательный непрерывный массив \(b\), который не имеет сходства с \(a\). Более формально, для всех \(1 \leq i \leq n\), \(a_i \neq b_i\).

Однако у малышки R нет никакого массива \(a\). Вместо этого она дала вам \(n\), \(m\) и \(b_0\). Она хочет посчитать количество различных целочисленных массивов \(a_1, \ldots, a_n\), удовлетворяющих условиям:

  • \(1 \leq a_i \leq m\);
  • Можно сгенерировать хотя бы один неотрицательный непрерывный массив \(b_0, \ldots, b_n\).

Заметим, что \(b_i \geq 0\), но \(b_i\) может быть произвольно большим.

Поскольку ответ может быть очень большим, выведите ответ по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке указано количество наборов входных данных \(t\ (1 \leq t \leq 10^4)\). Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(b_0\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq m \leq 2 \cdot 10^5\), \(0 \leq b_0 \leq 2\cdot 10^5\)) — длина массива \(a_1, \ldots, a_n\), максимально возможный элемент в \(a_1, \ldots, a_n\), и начальный элемент массива \(b_0, \ldots, b_n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: количество различных массивов \(a_1, \ldots, a_n\), удовлетворяющих условиям, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных, например, когда \(a = [1, 2, 1]\), мы можем задать \(b = [1, 0, 1, 0]\). Когда \(a = [1, 1, 2]\), мы можем задать \(b = [1, 2, 3, 4]\). Всего существует \(6\) допустимых вариантов \(a_1, \ldots, a_n\): можно доказать, что только \(a = [2, 1, 1]\) и \(a = [2, 1, 2]\) делают невозможным построение неотрицательной непрерывного \(b_0, \ldots, b_n\), поэтому ответ равен \(2^3 - 2 = 6\).

E2. Снова считаем массивы (сложная версия)

дп Комбинаторика математика *3500

Это сложная версия задачи. Разница между двумя версиями заключается в ограничениях на \(n, m, b_0\) и ограничении по времени. Вы можете делать взломы, только если обе версии решены.

Малышка R уже посчитала множество множеств, и теперь она решила посчитать массивы.

Малышка R считает, что массив \(b_0, \ldots, b_n\), состоящий из целых неотрицательных чисел, является непрерывным тогда и только тогда, когда для каждого \(i\), такого что \(1 \leq i \leq n\), выполняется \(\lvert b_i - b_{i-1} \rvert = 1\). Ей нравится непрерывность, поэтому она хочет генерировать только непрерывные массивы.

Если малышке R даны \(b_0\) и \(a_1, \ldots, a_n\), то она попытается сгенерировать неотрицательный непрерывный массив \(b\), который не имеет сходства с \(a\). Более формально, для всех \(1 \leq i \leq n\), \(a_i \neq b_i\).

Однако у малышки R нет никакого массива \(a\). Вместо этого она дала вам \(n\), \(m\) и \(b_0\). Она хочет посчитать количество различных целочисленных массивов \(a_1, \ldots, a_n\), удовлетворяющих условиям:

  • \(1 \leq a_i \leq m\);
  • Можно сгенерировать хотя бы один неотрицательный непрерывный массив \(b_0, \ldots, b_n\).

Заметим, что \(b_i \geq 0\), но \(b_i\) может быть произвольно большим.

Поскольку ответ может быть очень большим, выведите ответ по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке указано количество наборов входных данных \(t\ (1 \leq t \leq 10^4)\). Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(b_0\) (\(1 \leq n \leq 2 \cdot 10^6\), \(1 \leq m \leq 2 \cdot 10^6\), \(0 \leq b_0 \leq 2\cdot 10^6\)) — длина массива \(a_1, \ldots, a_n\), максимально возможный элемент в \(a_1, \ldots, a_n\), и начальный элемент массива \(b_0, \ldots, b_n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: количество различных массивов \(a_1, \ldots, a_n\), удовлетворяющих условиям, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных, например, когда \(a = [1, 2, 1]\), мы можем задать \(b = [1, 0, 1, 0]\). Когда \(a = [1, 1, 2]\), мы можем задать \(b = [1, 2, 3, 4]\). Всего существует \(6\) допустимых вариантов \(a_1, \ldots, a_n\): можно доказать, что только \(a = [2, 1, 1]\) и \(a = [2, 1, 2]\) делают невозможным построение неотрицательной непрерывного \(b_0, \ldots, b_n\), поэтому ответ равен \(2^3 - 2 = 6\).

A. Максимизировать?

математика Перебор теория чисел *800

Вам дано целое число \(x\). Ваша задача — найти любое целое число \(y\) \((1\le y<x)\) такое, что \(\gcd(x,y)+y\) максимально возможное.

Обратите внимание, что если существует несколько значений \(y\), удовлетворяющих условию, вы можете выбрать любое из них.

\(\gcd(a,b)\) — наибольший общий делитель чисел \(a\) и \(b\). Например, \(\gcd(6,4)=2\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждая из следующих \(t\) строк содержит одно целое число \(x\) (\(2 \le x \le 1000\)).

Выходные данные

Для каждого набора входных данных выведите любое значение \(y\) (\(1 \le y < x\)), удовлетворяющее условию.

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\)

Как мы видим, счет Боди больше, поэтому он выигрывает игру. Можно показать, что Бодя всегда может выиграть эту игру.

G2. Деление + LCP (сложная версия)

Бинарный поиск дп математика Перебор Строки строковые суфф. структуры Структуры данных хэши *2200

Это cложная версия задачи. В этой версии \(l\le r\).

Дана строка \(s\). Для фиксированного \(k\) рассмотрим деление \(s\) на ровно \(k\) непрерывных подстрок \(w_1,\dots,w_k\). Пусть \(f_k\) — максимально возможное \(LCP(w_1,\dots,w_k)\) среди всех делений.

\(LCP(w_1,\dots,w_m)\) — это длина самого длинного общего префикса строк \(w_1,\dots,w_m\).

Например, если \(s=abababcab\) и \(k=4\), то возможное деление \(\color{red}{ab}\color{blue}{ab}\color{orange}{abc}\color{green}{ab}\). \(LCP(\color{red}{ab},\color{blue}{ab},\color{orange}{abc},\color{green}{ab})\) равно \(2\), так как \(ab\) — самый длинный общий префикс этих четырех строк. Обратите внимание, что каждая подстрока состоит из непрерывного сегмента символов, и каждый символ принадлежит ровно одной подстроке.

Ваша задача — найти \(f_l,f_{l+1},\dots,f_r\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого теста содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \le l \le r \le n \le 2 \cdot 10^5\)) — длина строки и заданный диапазон.

Вторая строка каждого набора содержит строку \(s\) из \(n\) символов, все символы — строчные буквы английского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(r-l+1\) значений: \(f_l,\dots,f_r\).

A. Два друга

Конструктив математика реализация *800

Монокарп хочет устроить вечеринку. У него есть \(n\) друзей, и он хочет, чтобы на его вечеринке было как минимум \(2\) из них.

Лучший друг \(i\)-го друга — это \(p_i\). Все \(p_i\) различны, и для каждого \(i \in [1, n]\), \(p_i \ne i\).

Монокарп может отправлять приглашения друзьям. \(i\)-й друг придет на вечеринку, если приглашение получат и друг \(i\), и друг \(p_i\) (обратите внимание, что друг \(p_i\) не обязан прийти на вечеринку). Каждое приглашение отправляется ровно одному другу.

Например, если \(p = [3, 1, 2, 5, 4]\), и Монокарп отправляет приглашения друзьям \([1, 2, 4, 5]\), то на вечеринку придут друзья \([2, 4, 5]\). Друг \(1\) не придет, так как его лучший друг не получил приглашение; друг \(3\) не придет, так как он не получил приглашение.

Вычислите минимальное количество приглашений, которые Монокарп должен отправить, чтобы как минимум \(2\) друга пришли на вечеринку.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • в первой строке записано одно целое число \(n\) (\(2 \le n \le 50\)) — количество друзей;
  • во второй строке записаны \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\); \(p_i \ne i\); все \(p_i\) различны).
Выходные данные

Выведите одно целое число — минимальное количество приглашений, которые Монокарп должен отправить.

Примечание

В первом наборе входных данных Монокарп может отправить приглашения друзьям \(4\) и \(5\). Оба придут на вечеринку, так как они лучшие друзья друг друга, и у каждого из них есть приглашение.

Во втором наборе Монокарп может отправить приглашения друзьям \(1, 2\) и \(3\), например. Тогда придут друзья \(1\) и \(2\): у друга \(1\) и его лучшего друга \(2\) есть приглашения, у друга \(2\) и его лучшего друга \(3\) есть приглашения. Друг \(3\) не придет, так как его лучший друг \(4\) не имеет приглашения. Невозможно отправить приглашения меньше чем \(3\) друзьям таким образом, чтобы пришло хотя бы \(2\).

В третьем наборе Монокарп может отправить приглашения обоим друзьям \(1\) и \(2\), и оба придут.

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\).

A. Игра с тарелками

игры Конструктив математика *1600

Имеются прямоугольный стол длиной a и шириной b и бесконечное число тарелок радиуса r. Два игрока играют в следующую игру: они по очереди ставят тарелки на стол так, чтобы тарелки не накладывались друг на друга (однако они могут касаться), и чтобы любая точка любой тарелки находилась в пределах стола. В процессе игры уже поставленные тарелки нельзя двигать. Проигрывает тот, кто не может сделать очередной ход. Определите, какой из игроков (тот, который ходит первым или тот, который ходит вторым) победит, если оба будут играть оптимально.

Входные данные

В единственной строке находятся три целых числа a, b, r (1 ≤ a, b, r ≤ 100), записанные через пробел, — размеры стола и радиус тарелок соответственно.

Выходные данные

Если победит игрок, который ходит первым, выведите «First» (без кавычек). Иначе выведите «Second» (без кавычек).

Примечание

В первом примере на столе есть место только для одной тарелки. Первый игрок поставит тарелку на стол, а второй этого сделать не сможет и проиграет.

Во втором примере стол настолько маленький, что туда не помещается даже одна тарелка. Поэтому первый игрок проигрывает, не сделав ни одного хода.

B. Предел

математика *1400

Даны два многочлена:

  • P(x) = a0·xn + a1·xn - 1 + ... + an - 1·x + an и
  • Q(x) = b0·xm + b1·xm - 1 + ... + bm - 1·x + bm.

Вычислите предел .

Входные данные

В первой строке через пробел записаны два целых числа n и m (0 ≤ n, m ≤ 100) — степени многочленов P(x) и Q(x) соответственно.

Во второй строке через пробел записаны n + 1 целых чисел — коэффициенты многочлена P(x): a0, a1, ..., an - 1, an ( - 100 ≤ ai ≤ 100, a0 ≠ 0).

В третьей строке через пробел записаны m + 1 целых чисел — коэффициенты многочлена Q(x): b0, b1, ..., bm - 1, bm ( - 100 ≤ bi ≤ 100, b0 ≠ 0).

Выходные данные

Если предел равен  + ∞, выведите «Infinity» (без кавычек). Если предел равен  - ∞, выведите «-Infinity» (без кавычек).

Если значение предела равно нулю, выведите «0/1» (без кавычек).

Иначе выведите несократимую дробь — значение предела , в формате «p/q» (без кавычек), где p — числитель, q (q > 0) — знаменатель дроби.

Примечание

Рассмотрим все примеры:

Об определении и свойствах пределов можно подробнее прочитать по ссылке: http://ru.wikipedia.org/wiki/Предел_функции

E. Найти машину

Бинарный поиск математика сортировки *1500

Тимур находится в машине, двигающейся по числовой прямой от точки \(0\) до точки \(n\). Машина начинает движение из точки \(0\) в минуту \(0\).

На прямой находится \(k+1\) знак в точках \(0, a_1, a_2, \dots, a_k\), и Тимур знает, что машина прибудет туда в минуты \(0, b_1, b_2, \dots, b_k\) соответственно. Последовательности \(a\) и \(b\) возрастающие, причем \(a_k = n\).

Машина движется с постоянной скоростью между любыми двумя соседними знаками. У Тимура есть \(q\) запросов: каждый запрос будет целым числом \(d\), и Тимур хочет, чтобы вы вывели, сколько минут машина затратит, чтобы добраться до точки \(d\), округленное в меньшую сторону.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(k\) и \(q\), (\(k \leq n \leq 10^9\); \(1 \leq k, q \leq 10^5\)) — конечное местоположение, количество точек, для которых Тимур знает время, и количество запросов соответственно.

Вторая строка каждого набора содержит \(k\) целых чисел \(a_i\) (\(1 \leq a_i \leq n\); \(a_i < a_{i+1}\) для каждого \(1 \leq i \leq k-1\); \(a_k = n\)).

Третья строка каждого набора содержит \(k\) целых чисел \(b_i\) (\(1 \leq b_i \leq 10^9\); \(b_i < b_{i+1}\) для каждого \(1 \leq i \leq k-1\)).

Каждая из следующих \(q\) строк содержит одно целое число \(d\) (\(0 \leq d \leq n\)) — расстояние, для которого Тимур запрашивает количество минут.

Гарантируется, что сумма \(k\) по всем наборам не превышает \(10^5\), и сумма \(q\) по всем наборам не превышает \(10^5\).

Выходные данные

Для каждого запроса выведите одно целое число — количество минут, затраченных на достижение машиной точки \(d\), округленное в меньшую сторону.

Примечание

В первом примере машина проходит от точки \(0\) до точки \(10\) за \(10\) минут, поэтому скорость составляет \(1\) единицу в минуту и:

  • В точке \(0\) время будет \(0\) минут.
  • В точке \(6\) время будет \(6\) минут.
  • В точке \(7\) время будет \(7\) минут.

Во втором примере машина движется со скоростью \(1\) единицу в минуту между точками \(0\) и \(4\), и со скоростью \(2\) единицы в минуту между \(4\) и \(10\) и:

  • В точке \(6\) время будет \(5\) минут.
  • В точке \(4\) время будет \(4\) минут.
  • В точке \(2\) время будет \(2\) минут.
  • В точке \(7\) время будет \(5.5\) минут, поэтому ответ — \(5\).

В четвёртом примере машина движется со скоростью \(1.2\) единицы в минуту, поэтому ответы на запросы:

  • В точке \(2\) время будет \(1.66\dots\) минут, поэтому ответ — \(1\).
  • В точке \(6\) время будет \(5\) минут.
  • В точке \(5\) время будет \(4.16\dots\) минут, поэтому ответ — \(4\).

F. Периметр круга

Бинарный поиск геометрия математика Перебор поиск в глубину и подобное реализация *1600

Дано целое число \(r\), найдите количество решетчатых точек, Евклидово расстояние от которых до \((0, 0)\) больше или равно \(r\), но строго меньше \(r+1\).

Решетчатая точка — это точка с целыми координатами. Евклидово расстояние от \((0, 0)\) до точки \((x,y)\) равно \(\sqrt{x^2 + y^2}\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(r\) (\(1 \leq r \leq 10^5\)).

Сумма \(r\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество решетчатых точек, расстояние от которых до \((0, 0)\) равно \(d\), где \(r \leq d < r+1\).

Примечание

Точки для первых трех наборов входных данных показаны ниже.

A. Шахматы на троих

дп математика Перебор реализация *900

Три друга собрались, чтобы сыграть несколько партий в шахматы.

В каждой партии двое из них играют друг против друга, победитель получает \(2\) очка, а проигравший — \(0\). В случае ничьей оба игрока получают по \(1\) очку. Обратите внимание, что одна и та же пара игроков могла сыграть любое неотрицательное число раз (возможно, ноль). Также возможно, что игр не было вообще.

Вам известно, что их счета после всех игр были равны \(p_1\), \(p_2\) и \(p_3\). Кроме того, гарантируется, что \(p_1 \leq p_2 \leq p_3\).

Найдите максимальное количество игр вничью, которое могли сыграть друзья, и выведите его. Если не существует способа получить \(p_1\), \(p_2\) и \(p_3\) в результате неотрицательного числа партий между тремя игроками, выведите \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(p_1\), \(p_2\) и \(p_3\) (\(0 \leq p_1 \leq p_2 \leq p_3 \leq 30\)) — счета трех игроков, отсортированные по неубыванию.

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное возможное количество игр вничью, которые могли сыграть друзья, или \(-1\), если значения не соответствуют ни одному набору игр и результатов.

Примечание

В первом наборе входных данных не было сыграно ни одной партии, поэтому ничьих также не могло быть.

Во втором наборе входных данных между вторым и третьим игроком была сыграна ровно одна партия, которая закончилась вничью, поэтому ответом будет \(1\).

В третьем наборе входных данных не существует набора партий, в результате которых достигаются такие счета, поэтому ответом будет \(-1\).

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\) максимума — на третьей, пятой и седьмой позициях.

D. Кот, Лиса и максимальное разделение массива

интерактив математика Перебор *2400

Это интерактивная задача.

Лиса дала Коту два целых положительных числа \(n\) и \(k\). У неё есть секретный массив \(a_1, \ldots, a_n\) длины \(n\), такой, что \(1 \leq a_i \leq n\) для каждого \(i\). Она предложила Коту сыграть в следующую игру:

Для любых двух целых чисел \(l, r\) таких, что \(1 \leq l \leq r \leq n\), определим \(f(l, r) = (r - l + 1) \cdot \max\limits_{x=l}^r a_x\). Иными словами, \(f(l, r)\) равно максимуму подмассива \(a_l, \ldots, a_r\), умноженному на его длину.

Кот может задать Лисе не более \(2 n\) вопросов о массиве. За один вопрос он может сообщить ей два целых числа \(l\) и \(x\) (\(1 \leq l \leq n, 1 \leq x \leq 10^9\)), а Лиса в качестве ответа назовет одно целое число \(p\) — наименьшее целое положительное число \(r\), такое, что \(f(l, r) = x\), или \(n+1\), если такого \(r\) не существует.

С помощью этих вопросов Коту нужно найти наибольшее значение \(m\), такое, что существует последовательность \(c_1, \ldots, c_{k-1}\) такая, что \(1 \leq c_1 < \ldots < c_{k-1} < n\) и \(f(1, c_1) = f(c_1 + 1, c_2) = \ldots = f(c_{k-1}+1, n) = m\). Если такого \(m\) не существует, он должен указать на это и принять в качестве ответа \(-1\). Заметьте, что для \(k = 1\), \(m\) всегда равен \(f(1, n)\).

Другими словами, найдите наибольшее \(m\), при котором вы сможете разбить массив ровно на \(k\) подмассивов (\(k\) — константа, данная вам в начале взаимодействия) так, чтобы у всех подмассивов результат умножения их длины на максимум был равен \(m\), или определите, что такого \(m\) не существует. Каждый элемент должен принадлежать ровно одному из подмассивов.

Кот не знает, как решить эту задачу, поэтому он попросил ваc помочь ему.

Протокол взаимодействия

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых положительных числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^4\)) — длину секретного массива и количество подмассивов в желаемом разбиении.

Далее вы можете делать запросы следующим образом: выведите одну строку вида «\(\mathtt{?} \ l \ x\)» (должно выполняться условия \(1 \leq l \leq n\), \(1 \leq x \leq 10^9\)), и вы получите наименьшее целое число \(r\) такое, что \(l \leq r \leq n\) и \(f(l, r) = x\), или \(n + 1\), если такого \(r\) не существует.

Если вы хотите вывести ответ, выведите «\(\mathtt{!} \ m\)» и получите \(1\) в случае правильного ответа и \(-1\) в противном случае. В первом случае взаимодействие продолжается со следующим набором входных данных. Обратите внимание, что вывод ответа не засчитывается в количество сделанных запросов. Обратите внимание, что значения для следующего набора входных данных вы получите не сразу, сначала вам необходимо прочитать, был ли ваш ответ на последний набор входных данных правильным.

Если в любой момент вы получите целое число \(-1\), это означает, что ваша программа сделала некорректный запрос, превысила лимит запросов или дала неправильный ответ. Чтобы получить вердикт Неправильный ответ, ваша программа должна немедленно завершиться. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Взломы

Формат взломов должен быть следующим: первая строка должна содержать одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора входных данных должна содержать два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^4\)) — длину массива \(a\) и количество подмассивов, на которое вы хотите его разбить.

Вторая строка должна содержать \(n\) целых чисел \(a_1, a_2, \ldots, a_n \) (\(1 \leq a_i \leq n \)).

Сумма \(n\) по всем наборам входных данных не должна превышать \(10^4\).

Примечание

Секретными массивами в трех наборах входных данных являются \([1]\), \([1, 2]\) и \([1, 3, 6, 1, 2, 1]\). Во втором наборе входных данных ни одно разбиение не удовлетворяет ограничениям, поэтому ответ равен \(-1\).

Ответ на первый запрос третьего набора входных данных равен \(7\), так как не существует подходящего \(r\). Для второго запроса третьего набора входных данных, поскольку \(2 \cdot \max(1, 3) = 6\), ответом будет \(2\), так как \(r = 1\) не удовлетворяет условию.

Образец взаимодействия правильно угадал все три ответа (\(1, -1\) и \(6\)), поэтому после каждого ответа он получил \(1\).

E. Кот, Лиса и обмены

графы математика сортировки *2500

Лиса нашла массив \(p_1, p_2, \ldots, p_n\), который является перестановкой длины \(n^\dagger\) чисел \(1, 2, \ldots, n\). Она хочет отсортировать элементы в порядке возрастания. Кот хочет помочь Лисе — он может поменять местами любые два числа \(x\) и \(y\) в массиве, но только если \(l \leq x + y \leq r\) (обратите внимание, что ограничение накладывается на значения элементов, а не на их позиции). Он может делать такие обмены любое число раз.

Они не знают числа \(l\), \(r\), но они знают, что \(1 \leq l \leq r \leq 2 \cdot n\).

Вам дано число \(n\) и массив \(p_1, p_2, \ldots, p_n\). Определите, сколько пар \((l, r)\), удовлетворяющих условиям, позволяют отсортировать массив, если разрешается менять местами два числа \((x, y)\) таких, что \(l \leq x + y \leq r\) (произвольное число раз, возможно, \(0\)).

\(^\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 \leq n \leq 10^5\)).

Вторая строка содержит \(n\) целых чисел: массив \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)). Гарантируется, что этот массив является перестановкой длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите количество пар целых чисел \((l, r)\), таких, что \(1 \leq l \leq r \leq 2 \cdot n\), и вы сможете отсортировать массив при данных ограничениях.

Примечание

В первом примере нам нужно иметь возможность поменять местами \(1\) и \(2\), поэтому мы должны иметь возможность поменять местами числа с суммой \(3\). Существует ровно \(6\) пар, удовлетворяющих условию: \((1, 3), (2, 3), (3, 3), (1, 4), (2, 4)\) и \((3, 4)\), поэтому ответ — \(6\).

Во втором примере \(11\) пар, удовлетворяющих условию, — это \((1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6), (4, 5)\) и \((4, 6)\). Например, если мы выберем пару \((3, 4)\), то сначала поменяем местами числа \(1\) и \(2\), а затем \(1\) и \(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\)

Решение для третьего примера может выглядеть следующим образом:

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».

F. Множество

битмаски дп Комбинаторика математика Перебор поиск в глубину и подобное разделяй и властвуй *2600

Определим бинарное кодирование конечного множества целых неотрицательных чисел \(T \subseteq \{0,1,2,\ldots\}\) как \(f(T) = \sum\limits_{i \in T} 2^i\). Например, \(f(\{0,2\}) = 2^0 + 2^2 = 5\) и \(f(\{\}) = 0\). Обратите внимание, что \(f\) — это биекция от всех таких множеств ко всем неотрицательным целым числам. Таким образом, \(f^{-1}\) также определено.

Дано целое число \(n\) и \(2^n-1\) множество \(V_1,V_2,\ldots,V_{2^n-1}\).

Найдите все множества \(S\), которые удовлетворяют следующим ограничениям:

  • \(S \subseteq \{0,1,\ldots,n-1\}\). Заметим, что \(S\) может быть пустым.
  • Для всех непустых \(T \subseteq \{0,1,\ldots,n-1\}\) выполнено \(|S \cap T| \in V_{f(T)}\).

Для экономии входные и выходные данные будут заданы в терминах двоичных кодировок множеств.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 20\)).

Вторая строка содержит \(2^n-1\) целое число \(v_1,v_2,\ldots,v_{2^n-1}\) (\(0 \leq v_i < 2^{n+1}\)) — множества \(V_i\), заданные их двоичными кодированиями, где \(V_i = f^{-1}(v_i)\).

Выходные данные

Первая строка вывода должна содержать целое число \(k\), обозначающее количество подходящих \(S\).

В следующих \(k\) строках вы должны вывести \(f(S)\) для всех подходящих \(S\) в порядке возрастания.

Примечание

В первом примере одним из возможных \(S\) является \(f^{-1}(3) = \{0,1\}\). Все непустые подмножества \(T \subseteq \{0,1,2\}\) и соответствующие им \(|S \cap T|\), \(f(T)\) и \(V_f(T)\) имеют следующий вид:

\(T\)\(|S\cap T|\)\(f(T)\)\(V_{f(T)}\)
\(\{0\}\)\(1\)\(1\)\(\{0,1,2,3\}\)
\(\{1\}\)\(1\)\(2\)\(\{0,1,2,3\}\)
\(\{2\}\)\(0\)\(4\)\(\{0,1,2,3\}\)
\(\{0,1\}\)\(2\)\(3\)\(\{0,1,2,3\}\)
\(\{0,2\}\)\(1\)\(5\)\(\{0,1,2,3\}\)
\(\{1,2\}\)\(1\)\(6\)\(\{0,1,2,3\}\)
\(\{0,1,2\}\)\(2\)\(7\)\(\{2,3\}\)

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.

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\).

A. Маленький Никита

математика *800

Маленькому мальчику Никите подарили кубики. Он решил построить из них башню.

Изначально в башне нет ни одного кубика. За одно действие Никита либо ставит на верх башни ровно \(1\) кубик, либо снимает с верхушки ровно \(1\) кубик. Могло ли так получиться, что после \(n\) действий высота башни стала равна \(m\) кубиков?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если Никита мог получить башню высотой \(m\), и «No» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных, Никита может \(3\) хода подряд ставить на верх башни \(1\) кубик, поэтому ответ «Yes».

Во втором наборе входных данных, Никита может получить только башни либо без кубиков, либо с \(2\)-мя кубиками, поэтому ответ «No».

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\).

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\).

A. О микробах

математика реализация *1700

Взявшись за очередное правительственное задание, рейнджер Йцукен прибыл на планету Марс. В стенах секретной лаборатории рейнджеру нужно провести несколько опытов над бактериями, обладающими странными аномальными свойствами. Работа несложная, но за нее обещали хорошо заплатить.

В начале первого опыта в пробирке находится одна бактерия. Каждую секунду каждая из бактерий в пробирке делится на k бактерий, после чего, в силу аномальных эффектов, в пробирке материализуются еще b бактерий. Таким образом, если в начале какой-либо секунды было x бактерий, то к концу этой секунды становится kx + b бактерий.

Как показал опыт, через n секунд бактерий стало ровно z, и на этом эксперимент завершился.

В ходе второго опыта пробирка будет продезинфицирована, после чего туда будет помещено t бактерий. Йцукен еще не начал проводить опыт, но ему уже интересно, через сколько секунд бактерий станет не меньше, чем z? Рейнджер считает, что бактерии будут делиться по такому же правилу, как и в первом опыте.

Помогите Йцукену, найдите наименьшее количество секунд, через которое количество бактерий во втором опыте станет не меньше, чем z.

Входные данные

В первой строке через пробел записаны четыре целых числа k, b, n и t (1 ≤ k, b, n, t ≤ 106) — параметры размножения бактерий, время, через которое в пробирке оказалось z бактерий в первом опыте, и начальное количество бактерий во втором опыте, соответственно.

Выходные данные

Выведите одно число — наименьшее количество секунд, через которое бактерий станет не меньше, чем z.

A. Генератор задач

математика *800

Влад планирует провести в следующем месяце \(m\) раундов. Каждый раунд должен содержать в себе по одной задаче сложностей 'A', 'B', 'C', 'D', 'E', 'F' и 'G'.

У Влада уже есть банк из \(n\) задач, \(i\)-я задача имеет сложность \(a_i\). Этих задач может не хватить, так что ему придётся придумать ещё несколько задач.

Влад хочет придумать как можно меньше задач, так что просит вас найти минимальное количество задач, которое ему необходимо придумать, чтобы провести \(m\) раундов.

Например, если \(m=1\), \(n = 10\), \(a=\) 'BGECDCBDED', то ему необходимо придумать две задачи: одну сложности 'A' и одну сложности 'F'.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 50\), \(1 \le m \le 5\)) — количество задач в банке и количество предстоящих раундов, соответственно.

Вторая строка каждого набора содержит строку \(a\) из \(n\) символов от 'A' до 'G' — сложности задач в банке.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное число задач, которое нужно придумать для проведения \(m\) раундов.

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} \)

F1. Разделение поля (простая версия)

математика сортировки Структуры данных *1900

Это упрощённая версия задачи, она отличается от усложнённой только поставленным вопросом. Простая версия требует только определить, являются ли некоторые значения ненулевыми. В сложной версии нужно определить сами значения.

Алиса и Боб делят поле. Поле представляет собой прямоугольник \(n \times m\) (\(2 \le n, m \le 10^9\)), строки пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(m\) слева направо. Клетка на пересечении строки \(r\) и столбца \(c\) обозначается как (\(r, c\)).

У Боба есть \(k\) (\(2 \le k \le 2 \cdot 10^5\)) фонтанов, все из них расположены в разных клетках поля. Алиса отвечает за разделение поля, но должна соблюсти несколько условий:

  • для разделения поля Алиса начнёт свой путь в любой свободной (без фонтана) клетке на левой или верхней стороне поля и будет перемещаться, каждый раз двигаясь на соседнюю клетку вниз или вправо, свой путь она закончит на правой или нижней стороне поля;
  • этот путь Алисы разделит поле на две части — одна часть будет принадлежать Алисе (в эту часть включаются клетки её пути), другая — Бобу;
  • Алисе будет принадлежать та часть, которая включает в себя клетку (\(n, 1\));
  • Бобу будет принадлежать та часть, которая включает в себя клетку (\(1, m\)).

Алиса хочет разделить поле так, чтобы получить как можно больше клеток.

Боб хочет сохранить владение всеми фонтанами, но один любой из них подарить Алисе. Выведите сначала целое число \(\alpha\) — максимальный возможный размер участка Алисы, если Боб не подарит ей ни один фонтан (т.е. все фонтаны останутся на участке Боба). Далее выведите \(k\) неотрицательных целых чисел \(a_1, a_2, \dots, a_k\), где:

  • \(a_i=0\), если после того как Боб подарит Алисе \(i\)-й фонтан максимальный возможный размер участка Алисы не увеличится (т.е. останется равным \(\alpha\));
  • \(a_i=1\), если после того как Боб подарит Алисе \(i\)-й фонтан максимальный возможный размер участка Алисы увеличится (т.е. станет больше \(\alpha\)).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 10^9\), \(2 \le k \le 2 \cdot 10^5\)) — размеры поля и количество фонтанов, соответственно.

Далее следуют \(k\) строк, содержащие по два числа \(r_i\) и \(c_i\) (\(1 \le r_i \le n\), \(1 \le c_i \le m\)) — координаты клетки с \(i\)-м фонтаном. Гарантируется, что все клетки различны и среди них нет (\(n, 1\)).

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите \(\alpha\) — максимальный размер участка, который может принадлежать Алисе, если Боб не подарит ей ни один из фонтанов. В следующую строку выведите \(k\) неотрицательных целых чисел \(a_1, a_2, \dots, a_k\), где:

  • \(a_i=0\), если после того как Боб подарит Алисе \(i\)-й фонтан максимальный возможный размер участка Алисы не увеличится, по сравнению со случаем, когда все \(k\) фонтанов принадлежат Бобу;
  • \(a_i=1\), если после того как Боб подарит Алисе \(i\)-й фонтан максимальный возможный размер участка Алисы увеличится, по сравнению со случаем, когда все \(k\) фонтанов принадлежат Бобу.

Если вместо \(1\) вы выведите любое другое положительное число, которое помещается в 64-битный целочисленный знаковый тип, оно также будет распознано как \(1\). Таким образом, решение усложнённой версии этой задачи также проходит тесты упрощённой.

Примечание

Ниже приведены изображения для второго примера:

Зелёным цветом подписаны номера фонтанов. Синим цветом обозначены клетки, принадлежащие Алисе.

Обратите внимание, что если Боб дарит Алисе фонтан \(1\) или фонтан \(3\), то этот фонтан не может находиться на участке Алисы.

F2. Разделение поля (сложная версия)

математика сортировки *2400

Это усложнённая версия задачи, она отличается от упрощённой только поставленным вопросом.

Алиса и Боб делят поле. Поле представляет собой прямоугольник \(n \times m\) (\(2 \le n, m \le 10^9\)), строки пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(m\) слева направо. Клетка на пересечении строки \(r\) и столбца \(c\) обозначается как (\(r, c\)).

У Боба есть \(k\) (\(2 \le k \le 2 \cdot 10^5\)) фонтанов, все из них расположены в разных клетках поля. Алиса отвечает за разделение поля, но должна соблюсти несколько условий:

  • для разделения поля Алиса начнёт свой путь в любой свободной (без фонтана) клетке на левой или верхней стороне поля и будет перемещаться, каждый раз двигаясь на соседнюю клетку вниз или вправо, свой путь она закончит на правой или нижней стороне поля;
  • этот путь Алисы разделит поле на две части — одна часть будет принадлежать Алисе (в эту часть включаются клетки её пути), другая — Бобу;
  • Алисе будет принадлежать та часть, которая включает в себя клетку (\(n, 1\));
  • Бобу будет принадлежать та часть, которая включает в себя клетку (\(1, m\)).

Алиса хочет разделить поле так, чтобы получить как можно больше клеток.

Боб хочет сохранить владение всеми фонтанами, но один любой из них подарить Алисе. Выведите сначала целое число \(\alpha\) — максимальный возможный размер участка Алисы, если Боб не подарит ей ни один фонтан (т.е. все фонтаны останутся на участке Боба).

Далее выведите \(k\) неотрицательных целых чисел \(a_1, a_2, \dots, a_k\), где \(a_i\) это такое значение, что после того как Боб подарит Алисе \(i\)-й фонтан максимальный размер её участка будет равен \(\alpha + a_i\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 10^9\), \(2 \le k \le 2 \cdot 10^5\)) — размеры поля и количество фонтанов, соответственно.

Далее следуют \(k\) строк, содержащие по два числа \(r_i\) и \(c_i\) (\(1 \le r_i \le n\), \(1 \le c_i \le m\)) — координаты клетки с \(i\)-м фонтаном. Гарантируется, что все клетки различны и среди них нет (\(n, 1\)).

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите \(\alpha\) — максимальный размер участка, который может принадлежать Алисе, если Боб не подарит ей ни один из фонтанов. В следующую строку выведите \(k\) неотрицательных целых чисел \(a_1, a_2, \dots, a_k\), где \(a_i\) это такое значение, что после того как Боб подарит Алисе \(i\)-й фонтан максимальный размер её участка будет равен \(\alpha + a_i\).

Примечание

Ниже приведены изображения для второго примера:

Зелёным цветом подписаны номера фонтанов. Синим цветом обозначены клетки, принадлежащие Алисе.

Обратите внимание, что если Боб дарит Алисе фонтан \(1\) или фонтан \(3\), то этот фонтан не может находиться на участке Алисы.

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\).

B. Черепаха и бесконечная последовательность

битмаски математика *1300

Есть последовательность \(a_0, a_1, a_2, \ldots\) бесконечной длины. Изначально \(a_i = i\) для каждого неотрицательного целого \(i\).

Каждый элемент последовательности будет одновременно изменяться через каждую секунду. \(a_i\) изменится на \(a_{i - 1} \mid a_i \mid a_{i + 1}\) для каждого положительного целого \(i\). \(a_0\) изменится на \(a_0 \mid a_1\). Здесь \(|\) обозначает побитовое ИЛИ.

Черепаха должна найти значение \(a_n\) после \(m\) секунд. В частности, если \(m = 0\), то он должен найти начальное значение \(a_n\). Он устал вычислять так много значений, поэтому пожалуйста, помогите ему!

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание тестов.

Первая строка каждого теста содержит два целых числа \(n, m\) (\(0 \le n, m \le 10^9\)).

Выходные данные

Для каждого теста выведите одно целое число — значение \(a_n\) после \(m\) секунд.

Примечание

Через \(1\) секунду, \([a_0, a_1, a_2, a_3, a_4, a_5]\) станет \([1, 3, 3, 7, 7, 7]\).

Через \(2\) секунды, \([a_0, a_1, a_2, a_3, a_4, a_5]\) станет \([3, 3, 7, 7, 7, 7]\).

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\).

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.

B. Гипотеза Коллатца

математика Перебор реализация теория чисел *1200

Недавно первокурсник Максим узнал о гипотезе Коллатца, однако он плохо слушал лекцию, поэтому считает, что в гипотезе упоминается следующий процесс:

Существует переменная \(x\) и константа \(y\). Далее \(k\) раз происходит следующая операция:

  • увеличить \(x\) на \(1\), затем,
  • пока число \(x\) делится нацело на \(y\), делить его на \(y\).
Обратите внимание, что оба этих действия выполняются последовательно в рамках одной операции.

Например, если число \(x = 16\), \(y = 3\) и \(k = 2\), то после одной операции \(x\) станет равен \(17\), а после еще одной операции \(x\) будет равен \(2\), так как после прибавления единицы \(x = 18\) делится два раза на \(3\).

По данным начальным значениям \(x\), \(y\) и \(k\) Максим хочет узнать, какое число \(x\) в итоге получится.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора данных содержит три целых числа \(x\), \(y\) и \(k\) (\(1 \le x, k \le 10^{9}\), \(2 \le y \le 10^{9}\)) — начальная переменная, константа и количество операций.

Выходные данные

Для каждого набора входных данных выведите одно целое число — число, которое получится после применения \(k\) операций.

Примечание

В первом наборе входных данных всего одна операция, которая применяется к \(x = 1\), в результате \(x\) становится равен \(2\).

Во втором наборе входных данных к \(x = 2\) в рамках одной операции прибавляется единица и \(x\) делится на \(y = 3\), в результате \(x\) становится равен \(1\).

В третьем наборе данных \(x\) изменяется так:

  • После первой операции \(x = 1\), так как \(24 + 1 = 25\) и \(25\) делится на \(y = 5\) дважды в рамках одной операции.
  • После второй операции \(x = 2\).
  • После третьей операции \(x = 3\).
  • После четвертой операции \(x = 4\).
  • После пятой операции \(x = 1\).

D. Красота гор

математика Перебор реализация Структуры данных теория чисел *1700

Никита любит горы и наконец-то решил посетить Берляндский горный хребет! Хребет был настолько красив, что Никита решил запечатлеть его на карте. Карта представляет собой таблицу из \(n\) строк и \(m\) столбцов, в каждой клетке записано целое неотрицательное число — высота этой горы.

Также он заметил, что горы бывают двух типов:

  • Со снежными шапками.
  • Без снежных шапок.

Никита — человек очень прагматичный. Он хочет, чтобы сумма всех высот гор со снежными шапками была равна сумме высот гор без них. Он договорился с мэром Берляндии, самим Поликарпом Поликарповичем, чтобы тот разрешил ему трансформировать ландшафт.

Никита может проводить трансформации подматриц размером \(k \times k\) следующим образом: к высотам гор, попавших в этот участок, прибавляется целочисленная константа \(c\), но при этом тип гор не меняется. При этом константу \(c\) Никита может выбирать для каждой трансформации независимо от предыдущих. Обратите внимание, что \(c\) может быть отрицательной.

Прежде чем производить трансформации, Никита просит у вас узнать, возможно ли добиться равенства сумм, или это сделать невозможно. Неважно, какой ценой, даже если горы превратятся в каньоны и будут иметь отрицательную высоту.

Если на карте представлен только один тип гор, то сумма высот другого типа гор принимается равной нулю.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m, k\) (\(1 \le n, m \le 500, 1 \le k \le min(n, m)\)).

Следующие \(n\) строк каждого набора входных данных содержат по \(m\) целых чисел \(a_{i j}\) (\(0 \le a_{i j} \le 10^{9}\)) — изначальные высоты гор.

Следующие \(n\) бинарных строк длины \(m\) каждого набора входных данных определяют тип гор, '\(0\)' — со снежными шапками, '\(1\)' — без них.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(250\,000\).

Выходные данные

Для каждого набора входных данных выведите «YES» без кавычек, если можно уравнять суммы высот гор, иначе выведите «NO» без кавычек. Вы можете вывести каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Горный массив из первого набора данных выглядит так:

Изначально сумма высот гор со снежными шапками равна \(11 + 3 + 4 + 3 + 0 + 1 + 15 = 37\), а без них \(7 + 2 = 9\).

Чтобы уравнять эти суммы, мы можем выполнить две трансформации:

Первая трансформация:

Обратите внимание, что константа \(c\) может быть отрицательной.

После первой трансформации горный массив выглядит так:

Вторая трансформация:

В результате горный массив выглядит так:

Сумма высот гор со снежными шапками равна \(17 + 9 + 9 - 16 - 20 - 19 + 15 = -5\), а без них \(7 - 12 = -5\), таким образом ответ YES.

E. Количество k-хороших подотрезков

meet-in-the-middle битмаски дп Комбинаторика математика Перебор разделяй и властвуй *2300

Обозначим за \(bit(x)\) количество единичных бит в двоичной записи неотрицательного целого числа \(x\).

Назовем подотрезок массива \(k\)-хорошим, если он состоит только из чисел, в которых не более \(k\) единичных бит, то есть подотрезок \((l, r)\) массива \(a\) хороший, если для любого \(i\), такого, что \(l \le i \le r\) выполняется \(bit(a_{i}) \le k\).

У вас есть массив \(a\) длины \(n\), состоящий из последовательных неотрицательных целых чисел начиная с \(0\), то есть \(a_{i} = i\) для \(0 \le i \le n - 1\)\(0\)-индексации). Вам необходимо посчитать количество \(k\)-хороших подотрезков в этом массиве.

Поскольку ответ может быть очень большим, выведите его по модулю \(10^{9} + 7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 10^{18}, 1 \le k \le 60\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — количество \(k\)-хороших подотрезков по модулю \(10^{9} + 7\).

Примечание

Для первого набора входных данных \(a = [0, 1, 2, 3, 4, 5]\), \(k = 1\).

Чтобы найти ответ, давайте запишем все числа в двоичной записи:

\(\)a = [\color{green}{000}, \color{green}{001}, \color{green}{010}, \color{red}{011}, \color{green}{100}, \color{red}{101}]\(\)

Отсюда видно, что числа \(3\) и \(5\) имеют \(2 \ge (k = 1)\) единичных бита в двоичной записи, поэтому в ответ должны войти все подотрезки, в которых нет ни \(3\), ни \(5\), это отрезки (в \(0\)-индексации): (\(0\), \(0\)), (\(0\), \(1\)), (\(0\), \(2\)), (\(1\), \(1\)), (\(1\), \(2\)), (\(2\), \(2\)), (\(4\), \(4\)).

A. Делимость массива

Конструктив математика *800

Массив целых чисел \(a_1,a_2,\cdots,a_n\) является красивым относительно целого числа \(k\), если он удовлетворяет следующему условию:

  • Вычислим сумму \(a_{j}\) по всем \(j\) таким, что \(j\) кратно \(k\) и \(1 \le j \le n \). Тогда данная сумма должна делиться на \(k\).
  • Более формально, если при \(1 \le j \le n\) сумма \(\sum_{k | j} a_{j}\) кратна \(k\), то массив \(a\) является красивым относительно \(k\). Здесь обозначение \({k|j}\) означает, что \(k\) делится на \(j\), то есть \(j\) кратно \(k\).
При заданном \(n\) найдите массив целых положительных ненулевых чисел, в котором каждый элемент меньше или равен \(10^5\), и который является красивым относительно каждого \(1 \le k \le n\).

Можно показать, что ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длину массива.

Выходные данные

Для каждого набора входных данных выведите искомый массив, как описано в условии задачи.

Примечание

Во втором наборе входных данных \(n = 6\). Пусть \(S\) — это множество всех индексов массива, кратных \(k\) (для фиксированного \(k\) из диапазона \(1 \le k \le 6\))

  • При \(k = 1\), \(S = \{1, 2, 3,4,5,6\}\). Значит \(a_1+a_2+a_3+a_4+a_5+a_6=242\) должно быть кратно \(1\).
  • При \(k = 2\), \(S = \{2,4,6\}\). Значит \(a_2+a_4+a_6=92\) должно быть кратно \(2\).
  • При \(k = 3\), \(S = \{3,6\}\). Значит \(a_3+a_6=69\) должно быть кратно \(3\).
  • При \(k = 4\), \(S = \{4\}\). Значит \(a_4=32\) должно делиться на \(4\).
  • При \(k = 5\), \(S = \{5\}\). Значит \(a_5=125\) должно делиться на \(5\).
  • При \(k = 6\), \(S = \{6\}\). Значит \(a_6=54\) должно делиться на \(6\).

Массив \(a = [10, 6, 15, 32, 125, 54]\) удовлетворяет всем указанным условиям. Следовательно, \(a\) является допустимым массивом.

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\) с помощью любого числа вышеупомянутых операций.

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\).

E. Я люблю шары

Комбинаторика математика Теория вероятностей *2300

Алиса и Боб играют в игру. Имеется \(n\) шаров, из которых \(k\) — особенные. Каждый шар имеет свою стоимость.

Игроки играют по очереди. В каждый ход игрок случайным образом выбирает шар и прибавляет его стоимость к своему счету, который в начале игры равен \(0\). Выбранный шар удаляется из игры. Если шар был особенным, следующий ход делает тот же игрок, если в игре остался хотя бы один шар. Если выбранный шар не был особенным, следующий игрок делает свой ход.

Они играют так до тех пор, пока в игре не останется ни одного шара. Алиса ходит первой.

Найдите ожидаемое количество очков, которое оба игрока получат в конце игры, по модулю \(10^9+7\).

Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 4 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел: \(v_1, v_2, \ldots, v_n\) — стоимости шаров. Первые \(k\) шаров являются особенными (\(1 \le v_i \le 10^7\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке по два целых числа: ожидаемый счёт Алисы и ожидаемый счёт Боба по модулю \(10^9+7\).

Примечание

В первом наборе входных данных ожидаемый счёт Алисы равен \(45\), а Боба — \(30\).

B. Большое сложение

математика реализация *1100

Цифра называется большой, если она находится между \(5\) и \(9\), включительно. Целое положительное число называется большим, если все его цифры большие.

Вам дано целое число \(x\). Может ли оно быть представлено в виде суммы двух больших целых положительных чисел с одинаковым количеством цифр?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(x\) (\(10 \leq x \leq 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{YES}\), если \(x\) удовлетворяет условию, и \(\texttt{NO}\) в противном случае.

Вы можете выводить каждую букву \(\texttt{YES}\) или \(\texttt{NO}\) в любом регистре (строчную или заглавную). Например, строки \(\texttt{yEs}\), \(\texttt{yes}\) и \(\texttt{Yes}\) будут приняты как положительный ответ.

Примечание

В первом наборе входных данных можно получить \(658 + 679 = 1337\).

Во втором наборе входных данных можно показать, что никакие числа одинаковой длины, состоящие только из больших цифр, не могут дать в сумме \(200\).

В третьем наборе входных данных мы можем получить \(696\,969 + 696\,969 = 1\,393\,938\).

В четвертом наборе входных данных мы можем получить \(777 + 657 = 1434\).

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\) возможных способов.

D. Задача про строку "a"

математика Перебор реализация Строки строковые суфф. структуры хэши *2000

Вам дана строка \(s\), состоящая из строчных латинских букв. Подсчитайте количество непустых строк \(t \neq\) «\(\texttt{a}\)», таких, что можно разбить\(^{\dagger}\) \(s\) на некоторые подстроки, удовлетворяющие следующим условиям:

  • каждая подстрока равна либо \(t\), либо «\(\texttt{a}\)», и
  • хотя бы одна подстрока равна \(t\).

\(^{\dagger}\) Разбиение строки \(s\) — это упорядоченная последовательность некоторых \(k\) строк \(t_1, t_2, \ldots, t_k\) (называемых подстроками), таких, что \(t_1 + t_2 + \ldots + t_k = s\), где \(+\) обозначает операцию конкатенации строк.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\), состоящую из строчных латинских букв (\(2 \leq |s| \leq 2 \cdot 10^5\)).

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество непустых строк \(t \neq\) «\(\texttt{a}\)», удовлетворяющих всем ограничениям.

Примечание

В первом наборе входных данных \(t\) может быть «\(\texttt{aa}\)», «\(\texttt{aaa}\)», «\(\texttt{aaaa}\)» или всей строкой.

Во втором наборе входных данных \(t\) может быть «\(\texttt{b}\)», «\(\texttt{bab}\)», «\(\texttt{ba}\)» или всей строкой.

В третьем наборе входных данных единственной подходящей \(t\) является вся строка.

F. Реконструкция

дп математика Перебор *2500

Имеется секретный массив \(a_1, a_2, \ldots, a_n\) длины \(n\), элементами которого являются целые числа от \(-m\) до \(m\) включительно.

Даны массивы \(b_1, b_2, \ldots, b_n\) длины \(n\) и строка \(s\) длины \(n\), состоящая из символов \(\texttt{P}\), \(\texttt{S}\) и \(\texttt{?}\).

Для каждого \(i\) от \(1\) до \(n\) включительно, должно выполняться следующее:

  • Если \(s_i = \texttt{P}\), то \(b_i\) — это сумма элементов с \(a_1\) по \(a_i\).
  • Если \(s_i = \texttt{S}\), то \(b_i\) — это сумма элементов с \(a_i\) по \(a_n\).

Выведите количество способов заменить все \(\texttt{?}\) в \(s\) на \(\texttt{P}\) или \(\texttt{S}\) так, чтобы существовал массив \(a_1, a_2, \ldots, a_n\) с элементами, не превышающими \(m\) по абсолютному значению, удовлетворяющий ограничениям, заданным массивом \(b_1, b_2, \ldots, b_n\) и строкой \(s\).

Поскольку ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 2 \cdot 10^3\), \(2 \leq m \leq 10^{9}\)) — длина секретного массива \(a_1, a_2, \ldots, a_n\) и максимальное абсолютное значение элемента \(a_i\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из символов \(\texttt{P}\), \(\texttt{S}\) и \(\texttt{?}\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(|b_i| \leq m \cdot n\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество способов заменить все \(\texttt{?}\) в \(s\) на \(\texttt{P}\) или \(\texttt{S}\), которые приводят к существованию допустимого массива \(a_1, a_2, \ldots, a_n\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных мы видим, что следующий массив удовлетворяет всем ограничениям, поэтому ответ — \(1\):

  1. \(\texttt{P}\) — \({[\color{red}{\textbf{1}},3,4,2]}\): сумма \(1\).
  2. \(\texttt{S}\) — \({[1,\color{red}{\textbf{3},4,2}]}\): сумма \(9\).
  3. \(\texttt{P}\) — \({[\color{red}{1,3,\textbf{4}},2]}\): сумма \(8\).
  4. \(\texttt{P}\) — \({[\color{red}{1,3,4,\textbf{2}}]}\): сумма \(10\).

Во втором наборе входных данных можно показать, что ни один массив \(a\) со всеми \(|a_i| \leq m = 10^9\) не удовлетворяет ограничениям.

B. Максимальная сумма кратных чисел

математика Перебор теория чисел *800

Дано целое число \(n\), найдите целое число \(x\) такое, что:

  • \(2 \leq x \leq n\).
  • Сумма чисел, кратных \(x\), которые меньше или равны \(n\), максимальна. Формально, \(x + 2x + 3x + \dots + kx\), где \(kx \leq n\), максимальна среди всех возможных значений \(x\).
Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Каждый набор входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите целое число, оптимальное значение \(x\). Можно показать, что существует только один подходящий ответ.

Примечание

Для \(n = 3\) возможные значения \(x\) равны \(2\) и \(3\). Сумма всех чисел, кратных \(2\), меньших или равных \(n\), равна \(2\), а сумма всех чисел, кратных \(3\), меньших или равных \(n\), равна \(3\). Следовательно, оптимальное значение \(x\) равно \(3\).

Для \(n = 15\) оптимальное значение \(x\) равно \(2\). Сумма всех кратных чисел \(2\), меньших или равных \(n\), равна \(2 + 4 + 6 + 8 + 10 + 12 + 14 = 56\), что можно доказать как максимальное значение среди всех других возможных значений \(x\).

D. Манхэттенский круг

математика реализация *900

Дана матрица размера \(n\) на \(m\), состоящая из символов '.' и '#'. На сетке существует целый манхэттенский круг. Левый верхний угол сетки имеет координаты \((1,1)\), а правый нижний угол имеет координаты \((n, m)\).

Точка (\(a, b\)) принадлежит манхэттенскому кругу с центром в точке (\(h, k\)), если \(|h - a| + |k - b| < r\), где \(r\) — положительная константа.

В матрице точки, которые являются частью манхэттенского круга, обозначены символом '#'. Найдите координаты центра круга.

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 1000\))  — количество наборов входных данных.

Первая строка каждого набора содержит \(n\) и \(m\) (\(1 \leq n \cdot m \leq 2 \cdot 10^5\)) — высоту и ширину сетки соответственно.

Следующие \(n\) строк содержат \(m\) символов '.' или '#'. Если символ '#', то точка является частью манхэттенского круга.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и на сетке существует целый манхэттенский круг.

Выходные данные

Для каждого набора входных данных выведите два целых числа, координаты центра круга.

E. Секретный ящик

Комбинаторика математика Перебор *1200

У Ntarsis есть ящик \(B\) с длиной сторон \(x\), \(y\) и \(z\). Он находится в трехмерной координатной плоскости, простираясь от \((0,0,0)\) до \((x,y,z)\).

У Ntarsis есть секретный ящик \(S\). Он хочет выбрать его размеры так, чтобы все длины сторон были положительными целыми числами, и объем \(S\) был равен \(k\). Он может разместить \(S\) где-то внутри \(B\) так, что:

  • \(S\) параллелен всем осям.
  • каждый угол \(S\) лежит на целочисленной координате.

\(S\) волшебный, поэтому, когда он размещен в целочисленных координатах внутри \(B\), он не упадет на землю.

Среди всех возможных способов выбора размеров \(S\) определите максимальное количество различных мест, где он может разместить свой секретный ящик \(S\) внутри \(B\). Ntarsis не поворачивает \(S\), когда выбраны его длины сторон.

Входные данные

Первая строка состоит из целого числа \(t\), количество наборов входных данных(\(1 \leq t \leq 2000\)). Затем следуют описания наборов.

Первая и единственная строка каждого набора содержит четыре целых числа \(x, y, z\) и \(k\) (\(1 \leq x, y, z \leq 2000\), \(1 \leq k \leq x \cdot y \cdot z\)).

Гарантируется, что сумма всех \(x\), сумма всех \(y\) и сумма всех \(z\) не превышают \(2000\) для всех наборов входных данных.

Обратите внимание, что \(k\) может не поместиться в стандартный 32-битный целочисленный тип данных.

Выходные данные

Для каждого набора входных данных выведите ответ в виде целого числа на новой строке. Если нет способа выбрать размеры \(S\), чтобы он поместился в \(B\), выведите \(0\).

Примечание

Для первого примера оптимально выбрать \(S\) с длиной сторон \(2\), \(2\) и \(2\), что дает объем \(2 \cdot 2 \cdot 2 = 8\). Можно показать, что есть \(8\) способов поместить \(S\) внутри \(B\).

Координаты с наименьшими значениями \(x\), \(y\) и \(z\) для каждого возможного расположения \(S\):

  1. \((0, 0, 0)\)
  2. \((1, 0, 0)\)
  3. \((0, 1, 0)\)
  4. \((0, 0, 1)\)
  5. \((1, 0, 1)\)
  6. \((1, 1, 0)\)
  7. \((0, 1, 1)\)
  8. \((1, 1, 1)\)

Расположение \(S\) с координатой \((0, 0, 0)\) изображено ниже:

Для второго примера оптимально выбрать \(S\) с длиной сторон \(2\), \(3\) и \(3\).

G. D-Функция

Комбинаторика математика теория чисел *1600

Пусть \(D(n)\) представляет собой сумму цифр числа \(n\). Для скольких целых чисел \(n\), \(10^{l} \leq n < 10^{r}\), выполняется условие \(D(k \cdot n) = k \cdot D(n)\)? Выведите ответ по модулю \(10^9+7\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Каждый набор содержит три целых числа \(l\), \(r\) и \(k\) (\(0 \leq l < r \leq 10^9\), \(1 \leq k \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите целое число — ответ, по модулю \(10^9 + 7\).

Примечание

Для первого примера единственные значения \(n\), удовлетворяющие условию, — это \(1\) и \(2\).

Для второго примера единственные значения \(n\), удовлетворяющие условию, — это \(1\), \(10\) и \(11\).

Для третьего примера все значения \(n\) от \(10\) включительно до \(100\) исключительно удовлетворяют условию.

A. Ось X

геометрия математика Перебор сортировки *800

Вам дано три точки с целочисленными координатами \(x_1\), \(x_2\) и \(x_3\) на оси \(X\) (\(1 \leq x_i \leq 10\)). Вы можете выбрать произвольную точку с целочисленной координатой \(a\) на оси \(X\). Обратите внимание, что точка \(a\) может совпадать с \(x_1\), \(x_2\) или \(x_3\). Пусть \(f(a)\) — это суммарное расстояние от данных точек до точки \(a\). Найдите наименьшее значение \(f(a)\).

Расстояние между точками \(a\) и \(b\) равно \(|a - b|\). Например, расстояние между точками \(a = 5\) и \(b = 2\) равно \(3\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следуют их описания.

Единственная строка каждого набора входных данных содержит три целых числа \(x_1\), \(x_2\) и \(x_3\) (\(1 \leq x_i \leq 10\)) — координаты точек.

Выходные данные

Для каждого набора входных данных выведите наименьшее значение \(f(a)\).

Примечание

В первом наборе входных данных при \(a = 1\) достигается наименьшее значение \(f(a)\): \(f(1) = |1 - 1| + |1 - 1| + |1 - 1| = 0\).

Во втором наборе входных данных при \(a = 5\) достигается наименьшее значение \(f(a)\): \(f(5) = |1 - 5| + |5 - 5| + |9 - 5| = 8\).

В третьем наборе входных данных при \(a = 8\) достигается наименьшее значение \(f(a)\): \(f(8) = |8 - 8| + |2 - 8| + |8 - 8| = 6\).

В четвертом наборе входных данных при \(a = 9\) достигается наименьшее значение \(f(a)\): \(f(10) = |10 - 9| + |9 - 9| + |3 - 9| = 7\).

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]\), который является красивым.

В восьмом наборе входных данных не существует набора операций и способа перемешать элементы, чтобы сделать массив красивым.

В девятом наборе входных данных массив уже является красивым.

G1. Задача на перестановку (простая версия)

Бинарный поиск Комбинаторика математика Перебор Структуры данных теория чисел *2200

Это простая версия задачи. Единственное различие состоит в том, что в этой версии \(n \leq 10^5\) и сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Вам дана перестановка \(p\) длины \(n\). Посчитайте количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Перестановка — это последовательность из \(n\) целых чисел, в которой каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1]\), \([3,5,2,1,4]\), \([1,3,2]\) — перестановки, а \([2,3,2]\), \([4,3,1]\), \([0]\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длина перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановку \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Примечание

В первом наборе входных данных нет ни одной пары индексов, так как размер перестановки равен \(1\).

Во втором наборе входных данных есть одна пара индексов \((1, 2)\) и она подходит.

В третьем наборе входных данных подходит пара индексов \((1, 2)\).

В четвертом наборе входных данных подходят пары индексов \((1, 2)\), \((1, 5)\) и \((2, 5)\).

G2. Задача на перестановку (сложная версия)

математика Перебор Структуры данных теория чисел хэши *2500

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(n \leq 5 \cdot 10^5\) и сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Вам дана перестановка \(p\) длины \(n\). Посчитайте количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Перестановка — это последовательность из \(n\) целых чисел, в которой каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1]\), \([3,5,2,1,4]\), \([1,3,2]\) — перестановки, а \([2,3,2]\), \([4,3,1]\), \([0]\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(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\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество пар индексов \(1 \leq i < j \leq n\), таких что \(p_i \cdot p_j\) делится без остатка на \(i \cdot j\).

Примечание

В первом наборе входных данных нет ни одной пары индексов, так как размер перестановки равен \(1\).

Во втором наборе входных данных есть одна пара индексов \((1, 2)\) и она подходит.

В третьем наборе входных данных подходит пара индексов \((1, 2)\).

В четвертом наборе входных данных подходят пары индексов \((1, 2)\), \((1, 5)\) и \((2, 5)\).

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\) гигабайта загруженной памяти.

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\) операций в общей сложности, мы достигаем цели.

F. Пульс

бпф дп Комбинаторика математика *3000

Для массива \(u_1, u_2, \ldots, u_n\) определим

  • префиксный максимум как такой индекс \(i\), что \(u_i>u_j\) для всех \(j<i\);
  • суффиксный максимум как такой индекс \(i\), что \(u_i>u_j\) для всех \(j>i\);
  • подъем как такой индекс \(i\) (\(i>1\)), что \(u_i>u_{i-1}\).

У вас есть три массива стоимостей: \([a_1, a_2, \ldots, a_n]\), \([b_1, b_2, \ldots, b_n]\) и \([c_0, c_1, \ldots, c_{n-1}]\).

Определим стоимость массива, имеющего \(x\) префиксных максимумов, \(y\) суффиксных максимумов и \(z\) подъемов, как \(a_x\cdot b_y\cdot c_z\).

Пусть сумма стоимости всех перестановок \(1,2,\ldots,n\) равна \(f(n)\). Найдите \(f(1)\), \(f(2)\), ..., \(f(n)\) по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит целое число \(n\) (\(1\le n\le 700\)).

Вторая строка содержит \(n\) целых чисел \(a_1,\ldots,a_n\) (\(0\le a_i<998\,244\,353\)).

Третья строка содержит \(n\) целых чисел \(b_1,\ldots,b_n\) (\(0\le b_i<998\,244\,353\)).

Четвертая строка содержит \(n\) целых чисел \(c_0,\ldots,c_{n-1}\) (\(0\le c_i<998\,244\,353\)).

Выходные данные

Выведите \(n\) целых чисел: \(i\)-е из них — \(f(i)\) по модулю \(998\,244\,353\).

Примечание

Во втором примере:

  • Рассмотрим перестановку \([1,2,3]\). Индексы \(1,2,3\) являются префиксными максимумами. Индекс \(3\) — единственный суффиксный максимум. Индексы \(2,3\) — подъемы. В итоге, у нее \(3\) префиксных максимума, \(1\) суффиксный максимум и \(2\) подъема. Поэтому ее стоимость равна \(a_3b_1c_2=12\).
  • Перестановка \([1,3,2]\) имеет \(2\) префиксных максимума, \(2\) суффиксных максимума и \(1\) подъем. Ее стоимость равна \(6\).
  • Перестановка \([2,1,3]\) имеет \(2\) префиксных максимума, \(1\) суффиксный максимум и \(1\) подъем. Ее стоимость равна \(4\).
  • Перестановка \([2,3,1]\) имеет \(2\) префиксных максимума, \(2\) суффиксных максимума и \(1\) подъем. Ее стоимость равна \(6\).
  • Перестановка \([3,1,2]\) имеет \(1\) префиксный максимум, \(2\) суффиксных максимума и \(1\) подъем. Ее стоимость равна \(3\).
  • Перестановка \([3,2,1]\) имеет \(1\) префиксный максимум, \(3\) суффиксных максимума и \(0\) подъемов. Ее стоимость равна \(3\).

Сумма стоимостей всех перестановок равна \(34\), поэтому \(f(3)=34\).

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\) очков опыта.

E. Расстояние до различных

дп Комбинаторика математика *2300

Рассмотрим массив \(a\) из \(n\) целых чисел, где каждый элемент находится в диапазоне от \(1\) до \(k\), и каждое целое число от \(1\) до \(k\) встречается как минимум один раз.

Массив \(b\) строится следующим образом: для \(i\)-го элемента массива \(a\) значение \(b_i\) — это расстояние до ближайшего элемента в \(a\), который не равен \(a_i\). Другими словами, \(b_i = \min \limits_{j \in [1, n], a_j \ne a_i} |i - j|\).

Например, если \(a = [1, 1, 2, 3, 3, 3, 3, 1]\), то \(b = [2, 1, 1, 1, 2, 2, 1, 1]\).

Вычислите количество различных массивов \(b\), которые можно получить, если рассмотреть все возможные массивы \(a\), и выведите его по модулю \(998244353\).

Входные данные

В единственной строке входных данных содержатся два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(2 \le k \le \min(n, 10)\)).

Выходные данные

Выведите одно целое число — количество различных массивов \(b\), которые можно получить, взятое по модулю \(998244353\).

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\).

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\).

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\) невырожденных треугольника.

H. Игра в простые разделения

битмаски бпф дп игры математика теория чисел *3300

Алиса и Боб играют в игру с \(n\) кучками камней, где \(i\)-я кучка содержит \(a_i\) камней. Игроки делают ходы по очереди, причем Алиса ходит первой.

На каждом ходу игрок выполняет следующие три шага:

  1. Выбирает целое число \(k\) (\(1 \leq k \leq \frac n 2\)). Обратите внимание, что значение \(k\) может быть разным для разных ходов.
  2. Удаляет \(k\) куч камней.
  3. Выбирает еще \(k\) кучек камней и разделяет каждую кучку на две кучки. Количество камней в каждой новой куче должно быть простым числом.

Игрок, который не сможет сделать ход, проигрывает.

Определите, кто выиграет, если оба игрока играют оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество куч камней.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — количество камней в кучах.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Alice» (без кавычек), если Алиса выиграет, и «Bob» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «alIcE», «Alice» и «alice» будут считаться одинаковыми.

Примечание

В первом наборе входных данных есть \(2\) кучи камней с количествами камней \(2\) и \(1\) соответственно. Поскольку ни \(1\), ни \(2\) не могут быть разделены на два простых числа, Алиса не может сделать ход, поэтому Боб выигрывает.

Во втором наборе входных данных есть \(3\) кучи камней с \(3\), \(5\) и \(7\) камнями соответственно. Алиса может выбрать \(k = 1\), удалить кучу из \(7\) камней, а затем разделить кучу из \(5\) камней на две кучи камней с простыми количествами \(2\) и \(3\). В итоге получится \(3\) кучки камней с \(3\), \(2\) и \(3\) камнями соответственно, в результате чего у Боба не остается ни одного допустимого хода, и Алиса выигрывает.

В третьем наборе входных данных есть \(4\) кучи камней с \(4\), \(6\), \(8\) и \(10\) камнями соответственно. Алиса может выбрать \(k = 2\) и удалить две кучи камней \(8\) и \(10\). Далее она делит кучу камней \(4\) на две кучи камней с простыми количествами \(2\) и \(2\), а кучу камней \(6\) — на две кучи камней \(3\) и \(3\). После этого у Боба не остается допустимых ходов, и Алиса выигрывает.

В четвертом наборе входных данных есть \(5\) куч камней, каждая из которых содержит \(8\) камней. Можно показать, что если оба игрока играют оптимально, то победит Боб.

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.

C. Горилла и перестановка

Конструктив математика *900

Горилла и Noobish_Monk нашли три числа \(n\), \(m\) и \(k\) (\(m < k\)). Они решили построить перестановку\(^{\dagger}\) длины \(n\).

Для перестановки Noobish_Monk придумал следующую функцию: \(g(i)\) равно сумме всех чисел перестановки на префиксе длины \(i\), не больших \(m\). Аналогично, Горилла придумал функцию \(f\), \(f(i)\) равно сумме всех чисел перестановки на префиксе длины \(i\), не меньшие \(k\). Префиксом длины \(i\) называется массив, состоящий из первых \(i\) элементов исходного.

Например, если \(n = 5\), \(m = 2\), \(k = 5\), а перестановка равна \([5, 3, 4, 1, 2]\), то:

  • \(f(1) = 5\), так как \(5 \ge 5\); \(g(1) = 0\), так как \(5 > 2\);
  • \(f(2) = 5\), так как \(3 < 5\); \(g(2) = 0\), так как \(3 > 2\);
  • \(f(3) = 5\), так как \(4 < 5\); \(g(3) = 0\), так как \(4 > 2\);
  • \(f(4) = 5\), так как \(1 < 5\); \(g(4) = 1\), так как \(1 \le 2\);
  • \(f(5) = 5\), так как \(2 < 5\); \(g(5) = 1 + 2 = 3\), так как \(2 \le 2\).

Помогите им найти такую перестановку, для которой значение \(\left(\sum_{i=1}^n f(i) - \sum_{i=1}^n g(i)\right)\) будет максимально.

\(^{\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\), \(m\), \(k\) (\(2\le n \le 10^5\); \(1 \le m < k \le n\))  — размер искомой перестановки, два числа.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите перестановку  — набор чисел, который удовлетворяет условиям задачи. Если существует несколько решений, выведите любое из них.

Примечание

В первом примере \(\left(\sum_{i=1}^n f(i) - \sum_{i=1}^n g(i)\right) = 5 \cdot 5 - (0 \cdot 3 + 1 + 3) = 25 - 4 = 21\)

E. Ошибка новичка

Конструктив математика Перебор реализация Строки *1700

Одна из первых задач K1o0n по программированию выглядела так: «У Noobish_Monk есть \(n\) \((1 \le n \le 100)\) друзей. На день рождения каждый из них подарил \(a\) \((1 \le a \le 10000)\) яблок. Обрадовавшись такому подарку, Noobish_Monk вернул \(b\) \((1 \le b \le \min(10000, a \cdot n))\) яблок друзьям. Сколько яблок осталось у Noobish_Monk?»

K1o0n написал решение, но случайно считал значение \(n\) как строку, поэтому значение \(n \cdot a - b\) было посчитано по-другому. Конкретно:

  • при умножении строки \(n\) на число \(a\) он получит строку \(s=\underbrace{n + n + \dots + n + n}_{a\ \text{раз}}\)
  • при вычитании из строки \(s\) числа \(b\), из неё удалятся последние \(b\) символов, если \(b\) больше или равно длине строки \(s\), то она станет пустой.

Узнав об этом, ErnKor стало интересно, сколько для данного \(n\) существует пар \((a, b)\), удовлетворяющих ограничениям задачи, на которых решение K1o0n выдаёт правильный ответ.

«Решение выдаёт правильный ответ» означает, что оно выводит непустую строку, и эта строка при переводе в целое число равна правильному ответу, то есть значению \(n \cdot a - b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных.

В единственной строке каждого набора входных данных вводится целое число \(n\) (\(1 \le n \le 100\))

Гарантируется, что во всех наборах данных \(n\) различны.

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

В первой строке выведите число \(x\) — количество плохих тестов для заданного \(n\).

В следующих \(x\) строках выведите по два числа \(a_i\) и \(b_i\) — такие числа, что решение K1o0n выдает на тест «\(n\) \(a_i\) \(b_i\)» выдаёт правильный ответ.

Примечание

В первом примере \(a = 20\), \(b = 18\) подходят, так как «\(\text{2}\)» \(\cdot 20 - 18 =\) «\(\text{22222222222222222222}\)» \(- 18 = 22 = 2 \cdot 20 - 18\)

G. Ультра-мяу

дп Комбинаторика математика *2000

K1o0n подарил вам массив \(a\) длины \(n\), состоящий из чисел \(1, 2, \ldots, n\). Принять? Конечно, да! Но что с ним делать? Конечно же посчитать \(\text{MEOW}(a)\).

Пусть \(\text{MEX}(S, k)\) — \(k\)-е целое положительное число в порядке возрастания, отсутствующее в множестве \(S\). Обозначим за \(\text{MEOW}(a)\) сумму \(\text{MEX}(b, |b| + 1)\), по всем различным подмножествам \(b\) массива \(a\).

Примеры значений \(\text{MEX}(S, k)\) для множеств:

  • \(\text{MEX}(\{3,2\}, 1) = 1\), т. к. \(1\) — первое целое положительное число, отсутствующее в множестве;
  • \(\text{MEX}(\{4,2,1\}, 2) = 5\), т. к. первые два целые положительные числа, которых нет в множестве, это \(3\) и \(5\);
  • \(\text{MEX}(\{\}, 4) = 4\), т. к. в пустом множестве нет никаких чисел, следовательно первые целые положительные \(4\) числа, которых в нём нет, это \(1, 2, 3, 4\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных вводится целое число \(n\) (\(1 \le n \le 5000\)), размер массива подаренных чисел.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(25 \cdot 10^6\)

Выходные данные

Для каждого набора входных данных выведите одно число — \(\text{MEOW}(a)\). Поскольку оно может оказаться очень большим, выведите его по модулю \(10^9 + 7\).

C. Переключатели света

математика реализация *1400

Есть квартира, состоящая из \(n\) комнат, каждая из которых имеет свет, изначально выключенный.

Чтобы управлять светом в этих комнатах, владелец квартиры решил установить чипы в комнатах так, чтобы в каждой комнате был один чип, и каждый чип устанавливался в разное время. Более конкретно, времена установки представлены массивом \(a_1, a_2, \ldots, a_n\), где \(a_i\) — это момент времени (в минутах), в который чип устанавливается в \(i\)-ю комнату.

Как только чип установлен, он меняет статус света в комнате каждые \(k\) минут — включает свет на \(k\) минут, затем выключает его на следующие \(k\) минут, затем снова включает на следующие \(k\) минут и так далее. Другими словами, статус света меняется чипом в минуты \(a_i\), \(a_i + k\), \(a_i + 2k\), \(a_i + 3k\), \(\ldots\) для \(i\)-й комнаты.

Какой самый ранний момент, когда все комнаты в квартире будут с включенным светом?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \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\) вместо этого.

Примечание

В первом наборе входных данных все переключатели будут включены в минуту \(5\), ни один из них не успеет выключиться к этой минуте. Ответ — \(5\).

Во втором наборе входных данных, поскольку \(k=3\), свет в \(1\)-й комнате будет включен в минуты \(2, 3, 4, 8, 9, 10, 14, \ldots\); в то время как свет в \(4\)-й комнате будет включен в минуты \(5, 6, 7, 11, 12, 13, 17, \ldots\). Эти две последовательности не имеют общих чисел, поэтому свет в этих комнатах никогда не будет включен одновременно.

В третьем наборе входных данных можно заметить, что свет в \(1\)-й и \(2\)-й комнатах будет выключен в минуты \(6\) и \(7\), но чипы снова включат его в минуты \(9\) и \(10\). Свет в \(3\)-й и \(4\)-й комнатах также будет включен в минуту \(10\), поэтому ответ — \(10\).

F1. Динамически управляемый робот (Легкая версия)

китайская теорема об остатках Конструктив математика Перебор теория чисел *2400

Это легкая версия задачи. Единственное отличие заключается в том, что в этой версии \(k \le n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Дан прямоугольник размером \(w \times h\) на плоскости \(Oxy\), с точками \((0, 0)\) в нижнем левом углу и \((w, h)\) в верхнем правом углу прямоугольника.

У вас также есть робот, изначально находящийся в точке \((0, 0)\), и сценарий \(s\) из \(n\) символов. Каждый символ является L, R, U или D, что указывает роботу двигаться влево, вправо, вверх или вниз соответственно.

Робот может двигаться только внутри прямоугольника; в противном случае он изменит сценарий \(s\) следующим образом:

  • Если он пытается выйти за вертикальную границу, он меняет все символы L на R (и наоборот, все R на L).
  • Если он пытается выйти за горизонтальную границу, он меняет все символы U на D (и наоборот, все D на U).

Затем он продолжит двигаться, следуя измененному сценарию, начиная с того символа, который не смог выполнить.

Пример процесса движения робота, \(s = \texttt{"ULULURD"}\)

Сценарий \(s\) будет выполняться \(k\) раз подряд. Все изменения в строке \(s\) будут сохраняться даже при повторении. В процессе выполнения, сколько раз робот переместится в точку \((0, 0)\)? Обратите внимание, что начальная позиция не учитывается.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(k\), \(w\) и \(h\) (\(1 \le n, w, h \le 10^6\); \(1 \le k \le n\)).

Вторая строка содержит строку \(s\) размера \(n\) (\(s_i \in \{\texttt{L}, \texttt{R}, \texttt{U}, \texttt{D}\}\)) — сценарий, который необходимо выполнить.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество раз, когда робот переместится в \((0, 0)\) при выполнении сценария \(s\) \(k\) раз подряд.

Примечание

В первом наборе входных данных робот движется только вверх и вправо. В конце он занимает позицию \((2, 2)\), но никогда не посещает \((0, 0)\). Поэтому ответ равен \(0\).

Во втором наборе входных данных каждый раз при выполнении сценария робот посещает начало координат дважды. И поскольку \(k=2\), он посещает начало координат \(2 \cdot 2 = 4\) раза в общей сложности.

В третьем наборе входных данных визуализация показана ниже:

F2. Динамически управляемый робот (Сложная версия)

китайская теорема об остатках математика теория чисел *2800

Это сложная версия задачи. Единственное отличие заключается в том, что в этой версии \(k \le 10^{12}\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Дан прямоугольник размером \(w \times h\) на плоскости \(Oxy\), с точками \((0, 0)\) в нижнем левом углу и \((w, h)\) в верхнем правом углу прямоугольника.

У вас также есть робот, изначально находящийся в точке \((0, 0)\), и сценарий \(s\) из \(n\) символов. Каждый символ является L, R, U или D, что указывает роботу двигаться влево, вправо, вверх или вниз соответственно.

Робот может двигаться только внутри прямоугольника; в противном случае он изменит сценарий \(s\) следующим образом:

  • Если он пытается выйти за вертикальную границу, он меняет все символы L на R (и наоборот, все R на L).
  • Если он пытается выйти за горизонтальную границу, он меняет все символы U на D (и наоборот, все D на U).

Затем он продолжит двигаться, следуя измененному сценарию, начиная с того символа, который не смог выполнить.

Пример процесса движения робота, \(s = \texttt{"ULULURD"}\)

Сценарий \(s\) будет выполняться \(k\) раз подряд. Все изменения в строке \(s\) будут сохраняться даже при повторении. В процессе выполнения, сколько раз робот переместится в точку \((0, 0)\)? Обратите внимание, что начальная позиция не учитывается.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(k\), \(w\) и \(h\) (\(1 \le n, w, h \le 10^6\); \(1 \le k \le 10^{12}\)).

Вторая строка содержит строку \(s\) размера \(n\) (\(s_i \in \{\texttt{L}, \texttt{R}, \texttt{U}, \texttt{D}\}\)) — сценарий, который необходимо выполнить.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество раз, когда робот переместится в \((0, 0)\) при выполнении сценария \(s\) \(k\) раз подряд.

Примечание

В первом наборе входных данных робот движется только вверх и вправо при первых двух исполнениях сценария. После этого он занимает позицию \((2, 2)\). При следующих двух исполнениях он двигается вниз и влево и заканчивает в \((0, 0)\). Поэтому ответ равен \(1\).

Во втором наборе входных данных каждый раз при выполнении сценария робот посещает начало координат дважды. И поскольку \(k=2\), он посещает начало координат \(2 \cdot 2 = 4\) раза в общей сложности.

В третьем наборе входных данных визуализация показана ниже:

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\) (\(|\) обозначает побитовое ИЛИ).

В третьем наборе входных данных нужно удалить все дерево.

G. Minecraft

битмаски графы дп математика Перебор *2600

После победы в очередной игре в Bed Wars, Маша и Оля захотели отдохнуть и решили поиграть в новую игру. Маша дает Оле массив \(a\) длины \(n\) и число \(s\). Теперь задача Оли найти такое неотрицательное число \(x\), что \(\displaystyle\sum_{i=1}^{n} a_i \oplus x = s\). Но она очень устала после напряженного раунда, поэтому, пожалуйста, помогите ей в этом.

Но такая задача показалась им слишком простой, поэтому они решили сделать числа большими (до \(2^k\)) и предоставить вам их двоичное представление.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k, n \cdot k \le 2 \cdot 10^6\)) — длина массива \(a\) и длина битовой записи всех чисел.

Вторая строка содержит строку длины \(k\), состоящую из нулей и единиц — битовая запись числа \(s\), начиная со старших битов.

Следующие \(n\) строк также содержат строки длины \(k\), состоящие из нулей и единиц, \(i\)-я из этих строк содержит битовую запись числа \(a_i\), начиная со старших битов.

Гарантируется, что сумма значений \(n \cdot k\) по всем наборам входных данных не превосходит \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите строку длины \(k\), состоящую из нулей или единиц — битовую запись любого подходящего числа \(x\) (\(x \ge 0\)), начиная со старших битов, или \(-1\), если такого \(x\) не существует.

Примечание

В первом наборе входных данных \(s = 11, a = [14, 6, 12, 15]\), если \(x = 14\), то \(\displaystyle\sum_{i=1}^{n} a_i \oplus x = (14 \oplus 14) + (6 \oplus 14) + (12 \oplus 14) + (15 \oplus 14) = 0 + 8 + 2 + 1 = 11 = s\).

Во втором наборе входных данных \(s = 41, a = [191, 158]\), если \(x = 154\), то \(\displaystyle\sum_{i=1}^{n} a_i \oplus x = (191 \oplus 154) + (158 \oplus 154) = 37 + 4 = 41 = s\).

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 диагоналей в любой допустимой расстановке.

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]\).

A. Ноги

Бинарный поиск математика Тернарный поиск *800

Снова прекрасный день на ферме Фермера Джона.

После того, как Фермер Джон прибыл на свою ферму, он насчитал \(n\) ног. Известно, что на ферме живут только куры и коровы, причем у куриц по \(2\) ноги, а у коров по \(4\).

Какое минимальное количество животных может быть у Фермера Джона на его ферме, если он посчитал количество ног у всех животных?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Каждый набор содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^3\), \(n\) четное).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество животных у Фермера Джона на его ферме.

D. Веселье

Бинарный поиск Комбинаторика математика Перебор теория чисел *1500

Подсчёт — это весело!
— satyam343

Даны два целых числа \(n\) и \(x\), найдите количество троек (\(a,b,c\)) положительных целых чисел, таких, что \(ab + ac + bc \le n\) и \(a + b + c \le x\).

Обратите внимание, что порядок имеет значение (например, (\(1, 1, 2\)) и (\(1, 2, 1\)) считаются разными) и \(a\), \(b\), \(c\) должны быть строго больше \(0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\))  — количество наборов входных данных.

Каждый набор содержит два целых числа \(n\) и \(x\) (\(1 \leq n,x \leq 10^6\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\) и сумма \(x\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Выведите одно целое число — количество троек (\(a,b,c\)) положительных целых чисел, таких, что \(ab + ac + bc \le n\) и \(a + b + c \le x\).

Примечание

В первом примере подходящие тройки это (\(1, 1, 1\)), (\(1, 1, 2\)), (\(1, 2, 1\)) и (\(2, 1, 1\)).

Во втором примере подходящие тройки это (\(1, 1, 1\)), (\(1, 1, 2\)), (\(1, 1, 3\)), (\(1, 2, 1\)), (\(1, 2, 2\)), (\(1, 3, 1\)), (\(2, 1, 1\)), (\(2, 1, 2\)), (\(2, 2, 1\)) и (\(3, 1, 1\)).

E. Декодирование

Комбинаторика математика реализация Структуры данных *1600

В отчаянной попытке получить своего waifu любимого персонажа, вы взломали исходный код игры. После дней борьбы вы наконец нашли двоичную строку, которая кодирует систему гача в игре. Чтобы раскодировать ее, вам сначала нужно решить следующую задачу.

Дана двоичная строка \(s\) длиной \(n\). Для каждой пары целых чисел \((l, r)\) \((1 \leq l \leq r \leq n)\) посчитайте количество пар \((x, y)\) \((l \leq x \leq y \leq r)\) таких, что количество \(\mathtt{0}\) равно количеству \(\mathtt{1}\) в подстроке \(s_xs_{x+1}...s_y\).

Выведите сумму подсчетов для всех возможных \((l, r)\) по модулю \(10^9+7\).

Входные данные

В первой строке содержится \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Каждый набор входных данных содержит двоичную строку \(s\) (\(1 \leq |s| \leq 2 \cdot 10^5\)). Гарантируется, что \(s\) содержит только символы \(\mathtt{0}\) и \(\mathtt{1}\).

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число — ответ по модулю \(10^9+7\).

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\) операций.

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)\).

A. Найти K различных точек с фиксированным центром

Конструктив математика реализация *800

Я не смог придумать хорошее название для этой задачи, поэтому решил поучиться у LeetCode.
— Сунь-Цзы, Искусство войны

Вам даны три целых числа \(x_c\), \(y_c\) и \(k\). (\(-100 \leq x_c, y_c \leq 100\), \(1 \leq k \leq 1000\)).

Найдите такой набор из \(k\) различных точек (\(x_1, y_1\)), (\(x_2, y_2\)), \(\ldots\), (\(x_k, y_k\)) с целочисленными координатами на двумерной координатной плоскости, такой, что

  • центр\(^{\text{∗}}\) этого набора имеет координаты (\(x_c, y_c\)).
  • \(-10^9 \leq x_i, y_i \leq 10^9\) для всех \(i\) от \(1\) до \(k\)

Можно доказать, что всегда существует хотя бы один набор из \(k\) различных точек, удовлетворяющий этим условиям.

\(^{\text{∗}}\)Центром набора из \(k\) точек (\(x_1, y_1\)), (\(x_2, y_2\)), \(\ldots\), (\(x_k, y_k\)) является точка \(\left( \frac{x_1 + x_2 + \ldots + x_k}{k}, \frac{y_1 + y_2 + \ldots + y_k}{k} \right)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит три целых числа \(x_c\), \(y_c\) и \(k\) (\(-100 \leq x_c, y_c \leq 100\), \(1 \leq k \leq 1000\)) — координаты центра и количество различных точек, которое необходимо вывести.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите \(k\) строк, где \(i\)-я строка содержит два разделенных пробелом целых числа \(x_i\) и \(y_i\) (\(-10^9 \leq x_i, y_i \leq 10^9\)) — положение \(i\)-й точки.

Если ответов несколько, выведите любой из них. Можно показать, что при заданных ограничениях решение всегда существует.

Примечание

В первом наборе входных данных \(\left( \frac{10}{1}, \frac{10}{1} \right) = (10, 10)\).

Во втором наборе входных данных \(\left( \frac{-1 + 5 - 4}{3}, \frac{-1 -1 + 2}{3} \right) = (0, 0)\).

B. Минимизируйте подмассивы с одинаковой суммой

Конструктив математика теория чисел *1000

Как известно Фермер Джон любит перестановки, но мне они тоже нравятся!
— Сунь-Цзы, Искусство построения перестановок

Вам дана перестановка\(^{\text{∗}}\) \(p\) длины \(n\).

Найдите перестановку \(q\) длины \(n\), которая минимизирует количество пар (\(i, j\)) (\(1 \leq i \leq j \leq n\)) таких, что \(p_i + p_{i+1} + \ldots + p_j = q_i + q_{i+1} + \ldots + q_j\).

\(^{\text{∗}}\)Перестановкой длины \(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\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Следующая строка содержит \(n\) разделенных пробелом целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановка \(p\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую любую перестановку \(q\) длины \(n\) такую, что \(q\) минимизирует количество пар.

Примечание

В первом наборе входных данных существует только одна пара (\(i, j\)) (\(1 \leq i \leq j \leq n\)) такая, что \(p_i + p_{i+1} + \ldots + p_j = q_i + q_{i+1} + \ldots + q_j\): пара (\(1, 2\)). Можно доказать, что не существует перестановки \(q\), для которой не существует пар.

A. Снова A+B?

математика реализация *800

Дано двузначное положительное целое число \(n\), найдите сумму его цифр.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 90\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно двузначное положительное целое число \(n\) (\(10 \leq n \leq 99\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — сумму цифр числа \(n\).

E. Тройные операции

дп математика реализация *1300

На доске Иви записаны все целые числа от \(l\) до \(r\), включительно.

В операции она делает следующее:

  • выбирает два числа \(x\) и \(y\) на доске, стирает их и на их месте записывает числа \(3x\) и \(\lfloor \frac{y}{3} \rfloor\). (Здесь \(\lfloor \bullet \rfloor\) обозначает округление вниз до ближайшего целого числа).

Какое минимальное количество операций необходимо Иви, чтобы сделать все числа на доске равными \(0\)? У нас есть доказательство, что это всегда возможно.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(1 \leq l < r \leq 2 \cdot 10^5\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы сделать все числа на доске равными \(0\).

Примечание

В первом наборе входных данных мы можем выполнить \(5\) операций следующим образом: \(\) 1,2,3 \xrightarrow[x=1,\,y=2]{} 3,0,3 \xrightarrow[x=0,\,y=3]{} 1,0,3 \xrightarrow[x=0,\,y=3]{} 1,0,1 \xrightarrow[x=0,\,y=1]{} 0,0,1 \xrightarrow[x=0,\,y=1]{} 0,0,0 .\(\)

F. Ожидаемая медиана

Комбинаторика математика *1500

Арул имеет бинарный массив\(^{\text{∗}}\) \(a\) длины \(n\).

Он возьмет все подпоследовательности\(^{\text{†}}\) длины \(k\) (\(k\) — нечетное) этого массива и найдет их медиану.\(^{\text{‡}}\)

Какова сумма всех этих значений?

Поскольку эта сумма может быть очень большой, выведите ее по модулю \(10^9 + 7\). Другими словами, напечатайте остаток этой суммы при делении на \(10^9 + 7\).

\(^{\text{∗}}\)Бинарный массив — это массив, состоящий только из нулей и единиц.

\(^{\text{†}}\)Массив \(b\) является подпоследовательностью массива \(a\), если \(b\) может быть получен из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов. Элементы подпоследовательности не обязаны быть соседними.

\(^{\text{‡}}\)Медиана массива нечётной длины \(k\) — это \(\frac{k+1}{2}\)-й элемент в отсортированном виде.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\), \(k\) нечетное) — длина массива и длина подпоследовательности соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_i\) (\(0 \leq a_i \leq 1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сумму по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных есть четыре подпоследовательности массива \([1,0,0,1]\) длины \(k=3\):

  • \([1,0,0]\): медиана \(= 0\).
  • \([1,0,1]\): медиана \(= 1\).
  • \([1,0,1]\): медиана \(= 1\).
  • \([0,0,1]\): медиана \(= 0\).
Сумма результатов равна \(0+1+1+0=2\).

Во втором наборе входных данных все подпоследовательности длины \(1\) имеют медиану \(1\), поэтому ответ равен \(5\).

B. Наименее круглый путь

дп математика *2000

Задана квадратная матрица n × n, состоящая из неотрицательных целых чисел. Вам надо найти такой путь на ней, который

  1. начинается в левой верхней ячейке матрицы;
  2. каждой следующей ячейкой имеет правую или нижнюю от текущей;
  3. заканчивается в правой нижней клетке.

Кроме того, если перемножить все числа вдоль пути и посмотреть на получившиеся произведение, то это число должно быть как можно менее «круглым». Иными словами оно должно заканчиваться на наименьшее возможное количество нулей.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 1000), n — размер заданной матрицы. Далее в n строках содержатся элементы матрицы (целые неотрицательные числа, не превосходящие 109).

Выходные данные

В первую строку выведите искомое наименьшее количество концевых нулей в произведении чисел вдоль пути. Во вторую выведите сам путь.

B. Уравнение

математика *2000

Задано уравнение вида Ax2 + Bx + C = 0. Ваша задача найти все его вещественные корни.

Входные данные

В первой строке записаны через пробел целые числа A, B и C ( - 105 ≤ A, B, C ≤ 105). Любой из коэффициентов может обращаться в 0.

Выходные данные

Если корней бесконечно много, выводите -1. В противном случае в первую строку выведите неотрицательное целое число K — количество различных корней уравнения. Далее в K строках запишите все корни в строго возрастающем порядке (кратные корни выводить не следует), значения округляйте не менее чем к 5-му знаку. Если корней не существует, то K = 0.

B. Напитки

математика реализация *800

Маленький мальчик Вася очень любит апельсиновый сок, и поэтому в любом продукте и напитке у него на кухне обязательно содержится апельсиновый сок. В его холодильнике хранятся n напитков, объемная доля апельсинового сока в i-ом напитке составляет pi процентов.

Однажды Вася решил приготовить себе апельсиновый коктейль, и для этого он взял в равных пропорциях каждого из n напитков и смешал. После этого ему стало интересно, как много апельсинового сока содержится в его коктейле.

Найдите объемную долю апельсинового сока в получившемся напитке.

Входные данные

В первой строке входного файла содержится единственное целое число n (1 ≤ n ≤ 100) — количество апельсиновых напитков в холодильнике у Васи. Во второй строке находятся n целых чисел pi (0 ≤ pi ≤ 100) — объемная доля в процентах апельсинового сока в i-ом напитке. Числа разделены пробелом.

Выходные данные

Выведите объемную долю в процентах апельсинового сока в коктейле Васи. Ответ будет считаться верным, если его абсолютная или относительная погрешность не превышает 10  - 4.

Примечание

Пояснение к первому примеру: пусть Вася возьмет из холодильника каждого напитка по x миллилитров. Тогда количество чистого сока, которое будет в коктейле равно миллилитров. Общий объем коктейля равен x миллилитров, значит, объемная доля сока в коктейле равна , то есть, 66.(6) процентов.

E. Тракторный институт

математика реализация теория чисел Тернарный поиск *2400

Пока большинство студентов все еще сдает экзамены, в тракторном институте сессия уже завершилась. В этом институте студенты изучают всего одну дисциплину — искусство тракторного дела. Поэтому за целую сессию в зачетку студента ставится всего одна оценка — тройка, четверка или пятерка. Двоечников, к сожалению, отчисляют.

В институте учится n студентов, и, как ни странно, каждый из них может получать стипендию. Каждый семестр размер стипендии меняется. Поскольку сессия толька завершилась, то самое время определить размер стипендии до конца следующего семестра.

Месячный бюджет стипендии тракторного института составляет s рублей. Чтобы распределить этот бюджет оптимально, необходимо придерживаться следующих правил:

  • Студенты, получившие одинаковые оценки за сессию, должны получать одинаковую стипендию;
  • Обозначим размер стипендии (в рублях) студентов, получивших оценки 3, 4 и 5 за экзамен, k3, k4 и k5 соответственно. Величины k3, k4 и k5 должны быть целыми числами и удовлетворять неравенствам 0 ≤ k3 ≤ k4 ≤ k5;
  • Пусть c3, c4, c5 — количество студентов, получивших оценку за сессию 3, 4 и 5 соответственно. Бюджет стипендии нужно потратить полностью, то есть c3·k3 + c4·k4 + c5·k5 = s;
  • Введем функцию — величину, показывающую насколько хорошо распределена стипендия между студентами. В оптимальном распределении функция f(k3, k4, k5) принимает минимально возможное значение.

Зная результаты сессии и размер бюджета s, от Вас требуется найти оптимальное распределение стипендии.

Входные данные

В первой строке заданы два целых числа n, s (3 ≤ n ≤ 300, 1 ≤ s ≤ 3·105) — количество студентов и размер бюджета стипендии соответственно. Во второй строке задано n целых чисел, где i-ое число означает оценку за экзамен i-го студента. Гарантируется, что каждую оценку получил хотя бы один студент.

Выходные данные

В единственной строке выведите три целых числа k3, k4 и k5 — искомые величины, обозначающие оптимальное распределение размеров стипендии. Если оптимальных ответов несколько, выведите любой из них. Если ответа не существует, выведите -1.

A. Первостепенная задача

математика реализация Строки *800

Дмитрий записал на доске \(t\) чисел, и это хорошо. Он уверен, что потерял среди них важное число \(n\), и это плохо.

Число \(n\) имело вид \(\text{10^x}\) (\(x \ge 2\)), где символ '\(\text{^}\)' обозначает возведение в степень. Что-то пошло не так, и Дмитрий при записи важного числа пропустил символ '\(\text{^}\)'. Например, вместо числа \(10^5\) он бы записал \(105\), а вместо \(10^{19}\) он бы записал \(1019\).

Дмитрий хочет понять, какие из чисел на доске могли быть важным числом, а какие нет.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество чисел на доске.

Далее следуют \(t\) строк, каждая из них содержит число \(a\) (\(1 \le a \le 10000\)) — очередное число с доски.

Выходные данные

Для каждого числа с доски выведите «YES», если оно могло быть важным числом и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

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.

E1. Детерминированная куча (простая версия)

Деревья дп Комбинаторика математика *2400

Это простая версия задачи. Разница между двумя версиями заключается в определении детерминированной max-кучи, ограничении на время и ограничениях на \(n\) и \(t\). Вы можете совершать взломы только в том случае, если решены обе версии задачи..

Рассмотрим полное бинарное дерево размером \(2^n - 1\), с вершинами, пронумерованными от \(1\) до \(2^n-1\), и корнем в \(1\). Для каждой вершины \(v\) (\(1 \le v \le 2^{n - 1} - 1\)) вершина \(2v\) является ее левым ребенком, а вершина \(2v + 1\) — ее правым ребенком. Каждой вершине \(v\) также присвоено значение \(a_v\).

Определим операцию \(\mathrm{pop}\) следующим образом:

  1. инициализировать переменную \(v\) как \(1\);
  2. повторять следующий процесс до тех пор, пока вершина \(v\) не станет листом (т.е. пока не выполняется \(2^{n - 1} \le v \le 2^n - 1\)):
    1. среди дочерних вершин \(v\) выбрать ту, значение которой больше, и обозначить такую вершину \(x\); если значения на них равны (то есть \(a_{2v} = a_{2v + 1}\)), то можно выбрать любую из них;
    2. присвоить \(a_x\) значению \(a_v\) (т.е. \(a_v := a_x\));
    3. присвоить \(x\) переменной \(v\) (т.е. \(v := x\));
  3. присвоить \(-1\) значению \(a_v\) (т.е. \(a_v := -1\)).

Мы говорим, что операция \(\mathrm{pop}\) является детерминированной, если существует единственный способ выполнить такую операцию. Другими словами, \(a_{2v} \neq a_{2v + 1}\) выполняется на каждом шаге операции.

Бинарное дерево называется max-кучей, если для каждой вершины \(v\) (\(1 \le v \le 2^{n - 1} - 1\)) выполняется \(a_v \ge a_{2v}\) и \(a_v \ge a_{2v + 1}\).

Максимальная куча является детерминированной, если операция \(\mathrm{pop}\) детерминирована для кучи, когда мы выполняем ее в первый раз.

Изначально \(a_v := 0\) для каждой вершины \(v\) (\(1 \le v \le 2^n - 1\)), и ваша цель — посчитать количество различных детерминированных max-куч, которые можно получить в результате применения следующей операции \(\mathrm{add}\) ровно \(k\) раз:

  • Выбрать целое число \(v\) (\(1 \le v \le 2^n - 1\)), и для каждой вершины \(x\) на пути между \(1\) и \(v\) прибавить \(1\) к \(a_x\).

Две кучи считаются разными, если есть вершина, которая имеет разные значения в этих кучах.

Поскольку ответ может быть очень большим, выведите его по модулю \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, k, p\) (\(1 \le n, k \le 500\), \(10^8 \le p \le 10^9\), \(p\) — простое).

Гарантируется, что сумма \(n\) и сумма \(k\) по всем наборам входных данных не превосходят \(500\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую целое число: количество различных детерминированных max-куч, которое можно получить в результате применения вышеупомянутой операции \(\mathrm{add}\) ровно \(k\) раз, по модулю \(p\).

Примечание

Для первого набора входных данных существует только один способ сгенерировать \(a\), и такая последовательность является детерминированной max-кучей, поэтому ответ — \(1\).

Для второго набора входных данных, если мы выберем \(v = 1\) и выполним операцию, у нас будет \(a = [1, 0, 0]\), а поскольку \(a_2 = a_3\), мы можем выбрать любой из них при выполнении первой операции \(\mathrm{pop}\), поэтому такая куча не является детерминированной max-кучей.

А если мы выберем \(v = 2\), у нас будет \(a = [1, 1, 0]\), то при выполнении первой операции \(\mathrm{pop}\) произойдет следующее:

  • инициализировать \(v\) как \(1\)
  • поскольку \(a_{2v} > a_{2v + 1}\), выбрать \(2v\) как \(x\), тогда \(x = 2\)
  • присвоить \(a_x\) значению \(a_v\), тогда \(a = [1, 1, 0]\)
  • присвоить \(x\) переменной \(v\), тогда \(v = 2\)
  • поскольку \(v\) является листом, присвоить \(-1\) значению \(a_v\), тогда \(a = [1, -1, 0]\)

Так как первая операция \(\mathrm{pop}\) детерминирована, то это детерминированная max-куча. Также, если мы выберем \(v = 3\), то \(a\) будет детерминированной max-кучей, так что ответ — \(2\).

A. Дистанционная раскраска

Конструктив математика реализация *800

Вы получили сетку размером \(n\times m\) от таинственного источника. Источник также дал вам волшебную целую положительную константу \(k\).

Источник сказал вам покрасить сетку некоторыми цветами, удовлетворяя следующее условие:

  • Если \((x_1,y_1)\), \((x_2,y_2)\) — это две различные клетки одинакового цвета, то \(\max(|x_1-x_2|,|y_1-y_2|)\ge k\).

Вам не нравится использовать слишком много цветов. Пожалуйста, найдите минимальное количество цветов, необходимое для раскрашивания сетки.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(k\) (\(1\le n,m,k\le10^4\)) — размеры сетки и магическая константа.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество цветов, необходимое, чтобы покрасить сетку.

Примечание

В первом наборе входных данных одной из оптимальных конструкций является:

Во втором наборе входных данных цвета всех ячеек должны быть попарно различными, поэтому ответ — \(5\).

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}\) будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных возможный способ передвижения выглядит следующим образом.

F1. Синий двор (простая версия)

дп математика Перебор поиск в глубину и подобное теория чисел *2600

Это простая версия задачи. В этой версии \(n=m\) и ограничение по времени меньше. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Во дворе Синего короля Лелль и Фламм устраивают матч. Матч состоит из нескольких раундов. В каждом раунде побеждает либо Лелль, либо Фламм.

Пусть \(W_L\) и \(W_F\) обозначают количество побед Лелли и Фламма, соответственно. Синий король считает матч успешным тогда и только тогда, когда:

  • после каждого раунда, \(\gcd(W_L,W_F)\le 1\);
  • в конце матча \(W_L\le n, W_F\le m\).

Обратите внимание, что \(\gcd(0,x)=\gcd(x,0)=x\) для каждого целого неотрицательного числа \(x\).

Лелль и Фламм могут прекратить матч, когда захотят, а итоговый счет матча будет следующим: \(l \cdot W_L + f \cdot W_F\).

Пожалуйста, помогите Лелле и Фламму скоординировать свои победы и поражения так, чтобы матч был успешным, а итоговый счет за матч был максимальным.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t \leq 10^3\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит 4 целых числа \(n\), \(m\), \(l\), \(f\) (\(2\leq n\leq m \leq 2\cdot 10^7\), \(1\leq l,f \leq 10^9\), \(\bf{n=m}\)): \(n\), \(m\) обозначают верхнюю границу числа побед Лелли и Фламма соответственно, \(l\) и \(f\) определяют финальный счет матча.

Необычное дополнительное ограничение: гарантируется, что для каждого теста не существует двух наборов входных данных с одинаковой парой \(n\), \(m\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный итоговый счет успешного матча.

Примечание

В первом наборе входных данных возможный матч выглядит так:

  • Фламм выигрывает, \(\gcd(0,1)=1\).
  • Лелль выигрывает, \(\gcd(1,1)=1\).
  • Фламм выигрывает, \(\gcd(1,2)=1\).
  • Фламм выигрывает, \(\gcd(1,3)=1\).
  • Лелль выигрывает, \(\gcd(2,3)=1\).
  • Лелль и Фламм соглашаются прекратить матч.

Итоговый счет: \(2\cdot2+3\cdot5=19\).

В четвертом наборе входных данных возможный матч выглядит так:

  • Фламм выигрывает, \(\gcd(0,1)=1\).
  • Лелль выигрывает, \(\gcd(1,1)=1\).
  • Лелль выигрывает, \(\gcd(2,1)=1\).
  • Лелль выигрывает, \(\gcd(3,1)=1\).
  • Лелль выигрывает, \(\gcd(4,1)=1\).
  • Лелль выигрывает, \(\gcd(5,1)=1\).
  • Фламм выигрывает, \(\gcd(5,2)=1\).
  • Фламм выигрывает, \(\gcd(5,3)=1\).
  • Фламм выигрывает, \(\gcd(5,4)=1\).
  • Лелль и Фламм соглашаются прекратить матч.

Итоговый счет: \(5\cdot2+4\cdot2=18\). Обратите внимание, что Лелль и Фламм могут прекратить матч, даже если ни у одного из них нет \(n\) выигрышей.

F2. Синий двор (сложная версия)

дп математика Перебор теория чисел *2800

Это сложная версия задачи. В этой версии не гарантируется, что \(n=m\), и ограничение по времени выше. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Во дворе Синего короля Лелль и Фламм устраивают матч. Матч состоит из нескольких раундов. В каждом раунде побеждает либо Лелль, либо Фламм.

Пусть \(W_L\) и \(W_F\) обозначают количество побед Лелли и Фламма, соответственно. Синий король считает матч успешным тогда и только тогда, когда:

  • после каждого раунда, \(\gcd(W_L,W_F)\le 1\);
  • в конце матча \(W_L\le n, W_F\le m\).

Обратите внимание, что \(\gcd(0,x)=\gcd(x,0)=x\) для каждого целого неотрицательного числа \(x\).

Лелль и Фламм могут прекратить матч, когда захотят, а итоговый счет матча будет следующим: \(l \cdot W_L + f \cdot W_F\).

Пожалуйста, помогите Лелле и Фламму скоординировать свои победы и поражения так, чтобы матч был успешным, а итоговый счет за матч был максимальным.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t \leq 10^3\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит 4 целых числа \(n\), \(m\), \(l\), \(f\) (\(2\leq n\leq m \leq 2\cdot 10^7\), \(1\leq l,f \leq 10^9\)): \(n\), \(m\) обозначают верхнюю границу числа побед Лелли и Фламма соответственно, \(l\) и \(f\) определяют финальный счет матча.

Необычное дополнительное ограничение: гарантируется, что для каждого теста не существует двух наборов входных данных с одинаковой парой \(n\), \(m\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимальный итоговый счет успешного матча.

Примечание

В первом наборе входных данных возможный матч выглядит так:

  • Фламм выигрывает, \(\gcd(0,1)=1\).
  • Лелль выигрывает, \(\gcd(1,1)=1\).
  • Фламм выигрывает, \(\gcd(1,2)=1\).
  • Фламм выигрывает, \(\gcd(1,3)=1\).
  • Фламм выигрывает, \(\gcd(1,4)=1\).
  • Лелль и Фламм соглашаются прекратить матч.

Итоговый счет: \(1\cdot2+4\cdot5=22\).

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\), которая удовлетворяет обоим условиям.

A. Ближайшая точка

математика реализация *800

Рассмотрим множество точек на прямой. Расстояние между двумя точками \(i\) и \(j\) равно \(|i - j|\).

Точка \(i\) из множества является ближайшей к точке \(j\) из множества, если в множестве нет другой точки \(k\), такой, что расстояние от \(j\) до \(k\) строго меньше расстояния от \(j\) до \(i\). Другими словами, все остальные точки из множества имеют расстояние до \(j\), большее или равное \(|i - j|\).

Например, рассмотрим множество точек \(\{1, 3, 5, 8\}\):

  • для точки \(1\) ближайшей точкой является \(3\) (другие точки имеют расстояние больше, чем \(|1-3| = 2\));
  • для точки \(3\) ближайшими точками являются \(1\) и \(5\);
  • для точки \(5\) ближайшей точкой является \(3\) (но не \(8\), так как расстояние до нее больше, чем \(|3-5|\));
  • для точки \(8\) ближайшей точкой является \(5\).

Вам дано множество точек. Вам нужно добавить целочисленную точку в это множество таким образом, чтобы она отличалась от каждой существующей точки в множестве и стала ближайшей точкой ко всем точкам в множестве. Возможно ли это?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(2 \le n \le 40\)) — количество точек в множестве;
  • вторая строка содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_1 < x_2 < \dots < x_n \le 100\)) — точки из множества.
Выходные данные

Для каждого набора входных данных выведите YES, если возможно добавить новую точку в соответствии с условиями задачи. В противном случае выведите NO.

Примечание

В первом примере точка \(7\) будет ближайшей как к \(3\), так и к \(8\).

Во втором примере невозможно добавить целочисленную точку так, чтобы она стала ближайшей как к \(5\), так и к \(6\), и отличалась от обеих.

E. Это не задача про ним

игры математика Перебор теория чисел *2100

Два игрока, Алиса и Боб, играют в игру. У них есть \(n\) куч камней, в \(i\)-й куче изначально \(a_i\) камней.

За один ход игрок может выбрать любую кучу камней и забрать из нее любое положительное число камней, с одним условием:

  • пусть текущее количество камней в куче равно \(x\). Нельзя забрать из кучи такое число камней \(y\), что наибольший общий делитель \(x\) и \(y\) не равен \(1\).

Тот игрок, который не может сделать ход, проигрывает. Оба игрока играют оптимально (то есть если у игрока есть стратегия, которая позволяет ему выиграть, как бы оппонент ни сопротивлялся, он выигрывает). Алиса ходит первой.

Определите, кто выиграет.

Входные данные

В первой строке задано одно целое число \(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^7\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите Alice, если выигрывает Алиса, или Bob, если выигрывает Боб.

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\).

B. Ирис и дерево

Деревья математика Перебор поиск в глубину и подобное снм Структуры данных *1800

Дано корневое дерево с корнем в вершине \(1\). Для любой вершины \(i\) (\(1 < i \leq n\)) в дереве есть ребро, соединяющее вершины \(i\) и \(p_i\) (\(1 \leq p_i < i\)), вес которого равен \(t_i\).

Ирис не знает значений \(t_i\), но она знает, что \(\displaystyle\sum_{i=2}^n t_i = w\) и любое из \(t_i\) является неотрицательным целым числом.

Вершины дерева пронумерованы особым образом: номера вершин в каждом поддереве представляют собой последовательные целые числа. Другими словами, вершины дерева пронумерованы в порядке обхода в глубину.

Дерево на этой картинке удовлетворяет условию. Например, в поддереве вершины \(2\) номера вершин равны \(2, 3, 4, 5\), то есть являются последовательными целыми числами.
Дерево на этой картинке не удовлетворяет условию, так как в поддереве вершины \(2\) номера вершин \(2\) и \(4\) не являются последовательными целыми числами.

Определим \(\operatorname{dist}(u, v)\) как длину простого пути между вершинами \(u\) и \(v\) в дереве.

Далее произойдёт \(n - 1\) событие:

  • Ирис сообщают целые числа \(x\) и \(y\), обозначающие, что \(t_x = y\).

После каждого события Ирис хочет знать максимальное возможное значение \(\operatorname{dist}(i, i \bmod n + 1)\) независимо для всех \(i\) (\(1\le i\le n\)). Ей достаточно узнать только сумму этих \(n\) значений. Пожалуйста, помогите Ирис быстро получить ответы.

Обратите внимание, что при вычислении максимально возможных значений \(\operatorname{dist}(i, i \bmod n + 1)\) и \(\operatorname{dist}(j, j \bmod n + 1)\) для \(i \ne j\) неизвестные веса рёбер могут быть разными.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(w\) (\(2 \le n \le 2 \cdot 10^5\), \(0 \leq w \leq 10^{12}\)) — количество вершин в дереве и сумма весов рёбер.

Вторая строка каждого набора входных данных содержит \(n - 1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i < i\)) — описание рёбер дерева.

Затем следуют \(n-1\) строк, обозначающих события. Каждая строка содержит два целых числа \(x\) и \(y\) (\(2 \leq x \leq n\), \(0 \leq y \leq w\)), обозначающие, что \(t_x = y\).

Гарантируется, что все \(x\) в событиях различны. Также гарантируется, что сумма всех \(y\) равна \(w\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n-1\) целых числа, каждое из которых представляет ответ после каждого события.

Примечание

В первом наборе входных данных \(\operatorname{dist}(1, 2) = \operatorname{dist}(2, 1) = t_2 = w = 10^{12}\), поэтому \(\operatorname{dist}(1, 2) + \operatorname{dist}(2, 1) = 2 \cdot 10^{12}\)

Во втором наборе входных данных дерево после того, как Ирис узнала все \(t_x\), показано ниже:

\(\operatorname{dist}(1, 2) = t_2\), \(\operatorname{dist}(2, 3) = t_2 + t_3\), \(\operatorname{dist}(3, 4) = t_3 + t_4\), \(\operatorname{dist}(4, 1) = t_4\). После первого события мы узнали, что \(t_2 = 2\), поэтому \(\operatorname{dist}(1, 2) = 2\). В то же время:

  • \(\operatorname{dist}(2, 3)\) максимально, если \(t_3 = 7\), \(t_4 = 0\). Тогда \(\operatorname{dist}(2, 3) = 9\).
  • \(\operatorname{dist}(3, 4)\) и \(\operatorname{dist}(4, 1)\) максимальны, если \(t_3 = 0\), \(t_4 = 7\). Тогда \(\operatorname{dist}(3, 4) = \operatorname{dist}(4, 1) = 7\).

Таким образом, ответ равен \(2 + 9 + 7 + 7 = 25\).

После второго события мы узнали, что \(t_4 = 4\), тогда \(t_3 = w - t_2 - t_4 = 4\). \(\operatorname{dist}(1, 2) = 2\), \(\operatorname{dist}(2, 3) = 2 + 3 = 5\), \(\operatorname{dist}(3, 4) = 3 + 4 = 7\), \(\operatorname{dist}(4, 1) = 4\). Таким образом, ответ равен \(2 + 5 + 7 + 4 = 18\).

C. Эри и расширение множеств

математика разделяй и властвуй Структуры данных теория чисел *2300

Пусть существует множество, содержащее различные положительные целые числа. Чтобы расширить множество и включить в него как можно больше целых чисел, Эри может выбрать два целых числа \(x\neq y\) из множества так, чтобы их среднее \(\frac{x+y}2\) также было целым числом и не содержалось в множестве, и добавить его в множество. Целые числа \(x\) и \(y\) при этом остаются в множестве.

Назовем множество целых чисел последовательным, если, после сортировки элементов, разница между любой парой соседних элементов равна \(1\). Например, множества \(\{2\}\), \(\{2, 5, 4, 3\}\), \(\{5, 6, 8, 7\}\) являются последовательными, в то время как \(\{2, 4, 5, 6\}\), \(\{9, 7\}\) не являются.

Эри любит последовательные множества. Пусть имеется массив \(b\), тогда Эри помещает все элементы из \(b\) в множество. Если после конечного числа описанных выше операций множество может стать последовательным, массив \(b\) называется великолепным.

Обратите внимание, что если одно и то же целое число встречается в массиве несколько раз, мы помещаем его в множество один раз, так как множество всегда содержит различные положительные целые числа.

У Эри есть массив \(a\) из \(n\) положительных целых чисел. Пожалуйста, помогите ему подсчитать количество пар целых чисел \((l,r)\) таких, что \(1 \leq l \leq r \leq n\) и подмассив \(a_l, a_{l+1}, \ldots, a_r\) является великолепным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 4 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество великолепных подмассивов.

Примечание

В первом наборе входных данных массив \(a = [2, 2]\) имеет \(3\) подмассива: \([2]\), \([2]\) и \([2, 2]\). Для всех них множество содержит только одно целое число \(2\), поэтому оно всегда является последовательным. Все эти подмассивы являются великолепными, поэтому ответ равен \(3\).

Во втором наборе входных данных рассмотрим подмассив \([3, 6, 10]\). Мы можем выполнить операции следующим образом:

\(\)\{3,6,10\} \xrightarrow{x=6,y=10} \{3,6,8,10\} \xrightarrow{x=6,y=8} \{3,6,7,8,10\} \xrightarrow{x=3,y=7} \{3,5,6,7,8,10\}\(\) \(\)\xrightarrow{x=3,y=5} \{3,4,5,6,7,8,10\} \xrightarrow{x=8,y=10} \{3,4,5,6,7,8,9,10\}\(\)

\(\{3,4,5,6,7,8,9,10\}\) является последовательным множеством, поэтому подмассив \([3, 6, 10]\) является великолепным.

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\) операций.

C. Дора и C++

математика теория чисел *1500

Дора только что научилась языку программирования C++!

Однако она совершенно неправильно поняла значение C++. Она рассматривает его как два вида операций прибавления для массива \(c\) из \(n\) элементов. У Доры есть два целых числа \(a\) и \(b\). За одну операцию она может выбрать одно из следующих действий:

  • Выбрать целое число \(i\), такое что \(1 \leq i \leq n\), и увеличить \(c_i\) на \(a\).
  • Выбрать целое число \(i\), такое что \(1 \leq i \leq n\), и увеличить \(c_i\) на \(b\).

Обратите внимание, что \(a\) и \(b\) являются константами, и они могут быть одинаковыми.

Определим диапазон массива \(d\) как \(\max(d_i) - \min(d_i)\). Например, диапазон массива \([1, 2, 3, 4]\) равен \(4 - 1 = 3\), диапазон массива \([5, 2, 8, 2, 2, 1]\) равен \(8 - 1 = 7\), а диапазон массива \([3, 3, 3]\) равен \(3 - 3 = 0\).

После любого количества операций (возможно, \(0\)) Дора вычисляет диапазон нового массива. Вам нужно помочь Доре минимизировать это значение, но поскольку Дора любит исследовать всё самостоятельно, вам нужно сказать ей только само минимальное значение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(1 \leq n \leq 10^5\), \(1 \leq a, b \leq 10^9\)) — длина массива \(c\) и значения констант соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_i \leq 10^9\)) — начальные элементы массива \(c\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможный диапазон массива после какого-то количества операций.

Примечание

В первом наборе входных данных мы можем увеличить \(c_1 = 1\) на \(a = 5\). Массив \(c\) станет равным \([6, 3, 4, 4]\), и диапазон равен \(3\). Обратите внимание, что есть более одного способа достичь ответа.

Во втором наборе входных данных мы можем увеличить \(c_1 = 1\) на \(a = 2\), а затем увеличить \(c_1 = 3\) на \(b = 3\). Также мы можем увеличить \(c_2 = 3\) на \(b = 3\) и увеличить \(c_3 = 4\) на \(a = 2\). Массив \(c\) станет равным \([6, 6, 6, 6]\), и диапазон равен \(0\).

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\));

B. Квадрат или нет

математика Перебор Строки *800

Красивая двоичная матрица — это матрица, по краям которой стоят единицы, а внутри нули.

Примеры четырёх красивых двоичных матриц.

Сегодня Сакурако играла с красивой двоичной матрицей размера \(r \times c\) и сделала из неё двоичную строку \(s\), выписав все строки матрицы, начиная с первой и заканчивая \(r\)-й. Более формально, элемент из матрицы в \(i\)-й строке и \(j\)-м столбце совпадает с \(((i-1)*c+j)\)-м элементом строки.

Необходимо проверить, могла ли красивая матрица, из которой получена строка \(s\), быть квадратной. Иными словами, вам надо проверить, могла ли строка \(s\) быть получена из квадратной красивой бинарной матрицы (то есть такой, что \(r=c\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит одно число \(n\) (\(2 \le n \le 2 \cdot 10^5\))  — длина строки.

Вторая строка каждого набора содержит строку \(s\) длины \(n\). Строка всегда является результатом выписывания строк красивой матрицы.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите «Yes», если исходная матрица могла быть квадратной, и «No» иначе.

Примечание

Во втором примере из матрицы можно получить строку 1111:

\(1\)\(1\)
\(1\)\(1\)

В третьем примере строка 111101111 может быть получена из матрицы:

\(1\)\(1\)\(1\)
\(1\)\(0\)\(1\)
\(1\)\(1\)\(1\)

В четвёртом примере не существует квадратной матрицы, из которой можно получить строку.

C. Самый длинный хороший массив

Бинарный поиск математика Перебор *800

Сегодня Сакурако изучал массивы. Массив \(a\) длины \(n\) считается хорошим тогда и только тогда, когда:

  • массив \(a\) является возрастающим, то есть \(a_{i - 1} < a_i\) для всех \(2 \le i \le n\);
  • разности между соседними элементами возрастают, то есть \(a_i - a_{i-1} < a_{i+1} - a_i\) для всех \(2 \le i < n\).

Сакурако придумала границы \(l\) и \(r\) и хочет построить хороший массив максимальной длины, где \(l \le a_i \le r\) для всех \(a_i\).

Помогите Сакурако найти максимальную длину хорошего массива для заданных \(l\) и \(r\).

Входные данные

Первая строка содержит одно число \(t\) (\(1\le t\le 10^4\))  — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(l\) и \(r\) (\(1\le l\le r\le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно число  — длину самого большого хорошего массива Сакурако при заданных \(l\) и \(r\).

Примечание

Для \(l=1\) и \(r=5\) одним из возможных массивов может быть \((1,2,5)\). Можно доказать, что массива длины \(4\) для данных \(l\) и \(r\) не существует.

Для \(l=2\) и \(r=2\) единственным возможным массивом является \((2)\).

Для \(l=10\) и \(r=20\) единственным возможным массивом является \((10,11,13,16,20)\).

D. Хобби Сакурако

графы дп математика снм *1100

Для некоторой перестановки \(p\)\(^{\text{∗}}\) Сакурако называет целое число \(j\) достижимым из целого числа \(i\), если можно сделать так, чтобы \(i\) стало равным \(j\), присваивая \(i=p_i\) некоторое количество раз.

Если \(p=[3,5,6,1,2,4]\), то, например, \(4\) достижимо из \(1\), потому что: \(i=1\) \(\rightarrow\) \(i=p_1=3\) \(\rightarrow\) \(i=p_3=6\) \(\rightarrow\) \(i=p_6=4\). Теперь \(i=4\), так что \(4\) достижимо из \(1\).

Каждое число перестановки окрашено либо в чёрный, либо в белый цвет.

Сакурако определяет функцию \(F(i)\) как количество целых чисел чёрного цвета, которые достижимы из \(i\).

Сакурако интересует \(F(i)\) для каждого \(1\le i\le n\), но вычислить все значения становится очень сложно, поэтому она просит вас, как своего хорошего друга, вычислить это.

\(^{\text{∗}}\)Перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (число \(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой ( \(n=3\), но в массиве есть \(4\)).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\le t\le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\))  — количество элементов массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1\le p_i\le n\))  — элементы перестановки.

Третья строка каждого набора содержит строку \(s\) длины \(n\), состоящую из '0' и '1'. Если \(s_i=0\), то число \(p_i\) окрашено в чёрный цвет, если \(s_i=1\), то число \(p_i\) окрашено в белый цвет.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(F(1), F(2), \dots, F(n)\).

F. Коробка Сакурако

Комбинаторика математика теория чисел *1400

У Сакурако есть коробка, в которой \(n\) мячей. Каждый мяч имеет свою стоимость. Она хочет поспорить со своим другом, что если он наугад выберет из коробки два мяча (это могут быть два разных мяча, но они могут иметь одинаковое значение), то произведение их значений будет равно числу, которое загадала Сакурако.

Так как Сакурако имеет докторскую степень по теории вероятностей, она знает, что наилучшее число для выбора — это математическое ожидание, но она забыла, как его вычислить. Помогите Сакурако и найдите математическое ожидание произведения двух элементов из массива.

Можно показать, что математическое ожидание имеет вид \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа, а \(Q \ne 0\). Сообщите значение \(P \cdot Q^{-1}(\bmod 10^9+7)\).

Входные данные

Первая строка содержит одно целое число \(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\) по всем наборам не превысит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите значение \(P \cdot Q^{-1}(\bmod 10^9+7)\).

Примечание

Для первого теста друг Сакурако может выбрать такие пары шаров: \((a_1,a_2)\), \((a_1,a_3)\), \((a_2,a_3)\). Их произведение равно \(3\cdot 2=6\), \(3\cdot 3=9\), \(3\cdot 2=6\) соответственно, поэтому математическое ожидание равно \(\frac{6+9+6}{3}=7\).

Для второго теста друг Сакурако может выбрать такие пары шаров: \((a_1,a_2)\), \((a_1,a_3)\), \((a_1,a_4)\), \((a_2,a_3)\), \((a_2,a_4)\), \((a_3,a_4)\). Их произведение равно \(2\cdot 2=4\), \(2\cdot 2=4\), \(2\cdot 4=8\), \(2\cdot 2=4\), \(2\cdot 4=8\), \(2\cdot 4=8\) соответственно, поэтому математическое ожидание равно \(\frac{4+4+8+4+8+8}{6}=\frac{36}{6}=6\).

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\) целых чисел  — ответ для каждого запроса.

A. Минимизировать!

математика Перебор *800

Даны два целых числа \(a\) и \(b\) (\(a \leq b\)). Для всех возможных целых значений \(c\) (\(a \leq c \leq b\)) найдите минимальное значение \((c - a) + (b - c)\).

Входные данные

В первой строке содержится \(t\) (\(1 \leq t \leq 55\)) — количество наборов входных данных.

Каждый набор входных данных содержит два целых числа \(a\) и \(b\) (\(1 \leq a \leq b \leq 10\)).

Выходные данные

Для каждого набора входных данных выведите минимально возможное значение \((c - a) + (b - c)\) на новой строке.

Примечание

В первом наборе входных данных вы можете выбрать \(c = 1\) и получить ответ \((1 - 1) + (2 - 1) = 1\). Можно показать, что это минимально возможное значение.

Во втором наборе входных данных вы можете выбрать \(c = 6\) и получить ответ \((6 - 3) + (10 - 6) = 7\). Можно показать, что это минимально возможное значение.

C. Легенда о лягушке Лее

математика реализация *1100

Лягушка Лея путешествует по двумерной координатной плоскости. В данный момент она находится в точке \((0,0)\) и хочет добраться до точки \((x,y)\). За один ход она выбирает целое число \(d\) такое, что \(0 \leq d \leq k\) и прыгает на \(d\) позиций вперед в том направлении, в котором она смотрит.

Изначально она смотрит в положительном направлении оси \(x\). После каждого хода она будет чередовать направление взгляда между положительным направлением оси \(x\) и положительным направлением оси \(y\) (то есть, на втором ходу она будет смотреть в положительном направлении оси \(y\), на третьем ходу — в положительном направлении оси \(x\) и так далее).

Какое минимальное количество ходов ей нужно сделать, чтобы приземлиться в точке \((x,y)\)?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит три целых числа \(x\), \(y\) и \(k\) (\(0 \leq x, y \leq 10^9, 1 \leq k \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите количество прыжков, которые необходимо сделать Лее, в отдельной строке.

Примечание

В первом примере один из оптимальных наборов движений — это если Лея прыгает следующим образом: (\(0,0\)) \(\rightarrow\) (\(2,0\)) \(\rightarrow\) (\(2,2\)) \(\rightarrow\) (\(3,2\)) \(\rightarrow\) (\(3,5\)) \(\rightarrow\) (\(6,5\)) \(\rightarrow\) (\(6,8\)) \(\rightarrow\) (\(9,8\)) \(\rightarrow\) (\(9,11\)). Это занимает 8 прыжков.

D. Сатьям и подсчет

геометрия математика *1400

Сатьяму даны \(n\) различных точек на двумерной координатной плоскости. Гарантируется, что \(0 \leq y_i \leq 1\) для всех заданных точек \((x_i, y_i)\). Сколько различных невырожденных прямоугольных треугольников\(^{\text{∗}}\) можно сформировать, выбрав три различные точки в качестве его вершин?

Два треугольника \(a\) и \(b\) различны, если существует точка \(v\), такая что \(v\) является вершиной \(a\), но не является вершиной \(b\).

\(^{\text{∗}}\)Невырожденный прямоугольный треугольник имеет положительную площадь и внутренний угол \(90^{\circ}\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — количество точек.

Следующие \(n\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(0 \leq x_i \leq n\), \(0 \leq y_i \leq 1\)) — \(i\)-я точка, которую Сатьям может выбрать. Гарантируется, что все \((x_i, y_i)\) попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите целое число для каждого набора входных данных — количество различных невырожденных прямоугольных треугольников, которые можно сформировать, выбрав три точки.

Примечание

Четыре треугольника, о которых идет речь в первом наборе входных данных:

E. СУПЕР ДУПЕР БОЛЬШОЙ Массив Кли!!!

Бинарный поиск математика Тернарный поиск *1400

У Кли есть массив \(a\) длиной \(n\), содержащий целые числа \([k, k+1, ..., k+n-1]\) в этом порядке. Кли хочет выбрать индекс \(i\) (\(1 \leq i \leq n\)) так, чтобы \(x = |a_1 + a_2 + \dots + a_i - a_{i+1} - \dots - a_n|\) был минимален. Обратите внимание, что для произвольного целого числа \(z\), \(|z|\) представляет собой модуль числа \(z\).

Выведите минимально возможное значение \(x\).

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq n, k \leq 10^9\)) — длину массива и начальный элемент массива.

Выходные данные

Для каждого набора входных данных выведите минимальное значение \(x\).

Примечание

В первом примере \(a = [2, 3]\). При выборе \(i = 1\), \(x = |2-3| = 1\). Можно показать, что это минимально возможное значение \(x\).

В третьем примере \(a = [3, 4, 5, 6, 7]\). При выборе \(i = 3\), \(x = |3 + 4 + 5 - 6 - 7| = 1\). Можно показать, что это минимально возможное значение \(x\).

F. Запросы Светлячка

битмаски математика Потоки Структуры данных *1700

Светлячку дан массив \(a\) длины \(n\). Пусть \(c_i\) обозначает \(i\)-й циклический сдвиг\(^{\text{∗}}\) массива \(a\). Она создает новый массив \(b\) так, что \(b = c_1 + c_2 + \dots + c_n\), где \(+\) представляет собой конкатенацию\(^{\text{†}}\).

Затем она задает вам \(q\) запросов. Для каждого запроса выведите сумму всех элементов в подмассиве \(b\), который начинается с \(l\)-го элемента и заканчивается \(r\)-м, включая оба конца.

\(^{\text{∗}}\)Циклический сдвиг \(x\)-й (\(1 \leq x \leq n\)) массива \(a\) равен \(a_x, a_{x+1} \ldots a_n, a_1, a_2 \ldots a_{x - 1}\). Обратите внимание, что \(1\)-й сдвиг — это исходный массив \(a\).

\(^{\text{†}}\)Конкатенация двух массивов \(p\) и \(q\) длины \(n\) (другими словами, \(p + q\)) равна \(p_1, p_2, ..., p_n, q_1, q_2, ..., q_n\).

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 2 \cdot 10^5\)) — длина массива и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) (\(1 \leq a_i \leq 10^6\)).

Следующие \(q\) строк содержат два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n^2\)) — левую и правую границы запроса.

Обратите внимание, что большие входные данные могут потребовать использования 64-битных целых чисел.

Гарантируется, что сумма \(n\) не превышает \(2 \cdot 10^5\), а сумма \(q\) не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите ответ на новой строке.

Примечание

Для первого набора входных данных, \(b = [1, 2, 3, 2, 3, 1, 3, 1, 2]\).

A. Четкая симметрия

дп Конструктив математика *1700

Рассмотрим некоторую квадратную матрицу A со стороной n, состоящую из нулей и единиц. Пронумеруем ее строки от 1 до n сверху вниз и столбцы от 1 до n слева направо. Элемент матрицы, находящийся на пересечении i-ой строки и j-го столбца, будем обозначать Ai, j.

Назовем матрицу A четкой, если никакие две клетки, в которых стоят единицы, не имеют общей стороны.

Назовем матрицу A симметричной, если она в точности совпадает с матрицами, образованными из нее горизонтальным и/или вертикальным отражением. Формально, для любой пары (i, j) (1 ≤ i, j ≤ n) оба следующих условия должны быть выполнены: Ai, j = An - i + 1, j и Ai, j = Ai, n - j + 1.

Остротой матрицы A назовем количество единиц в ней.

Ваша задача — по заданному числу x найти минимальное натуральное число n такое, что существует четкая симметричная матрица A со стороной n и остротой x.

Входные данные

В единственной строке записано целое число x (1 ≤ x ≤ 100) — требуемая острота матрицы.

Выходные данные

Выведите единственное число — искомое значение n.

Примечание

Соответствующие примерам матрицы приведены на рисунке:

B. Угадай автомобиль!

математика Тернарный поиск *1800

Широко известный в узких кругах белорусский олимпиадник Юра владеет громадным количеством информации об автомобилях. В связи с этим его пригласили поучаствовать в ток-шоу «Угадай автомобиль!».

Место проведения ток-шоу представляет собой гигантскую автомобильную стоянку протяженностью 4n метров с севера на юг и 4m метров с запада на восток. На стоянке начерчены n + 1 разделительных полос, проходящих с запада на восток и m + 1 разделительных полос, проходящих с севера на юг, которые разделяют стоянку на n·m квадратов размером 4 на 4 метра. Строго внутри каждого квадрата припаркован автомобиль. Разделительные полосы пронумерованы от 0 до n с севера на юг и от 0 до m с запада на восток. Каждый квадрат имеет координаты (i, j) таким образом, что квадрат в северо-западном углу имеет координаты (1, 1), а квадрат в юго-восточном — координаты (n, m). Смотрите рисунок в примечаниях для уточнения.

Перед началом ток-шоу организаторы предлагают Юре занять любую из (n + 1)·(m + 1) точек пересечения разделительных полос, после чего он приступит к угадыванию. После выбора точки Юре будет запрещено перемещаться по стоянке до окончания ток-шоу. Поскольку Юра является автомобильным гуру, то он все равно угадает все предложенные автомобили, это всего лишь вопрос времени. По себе Юра знает, что на угадывание каждой машины ему нужно потратить время, равное квадрату евклидова расстояния между точкой, где он находится, и центром квадрата, в котором находится эта машина, умноженному на некоторый коэффициент, характеризующий «необычность» машины (более редкие машины сложнее угадывать). Более формально, на угадывание автомобиля, имеющего «необычность» c и находящегося в квадрате, от центра которого до Юры d метров, он потратит c·d2 секунд. Временем, которое Юра тратит на повороты головы, можно пренебречь.

Так уж вышло, что Юра заранее знает «необычность» каждого автомобиля, находящегося на стоянке. Помогите ему выбрать точку для угадывания таким образом, чтобы суммарное время угадывания всех автомобилей было как можно меньше.

Входные данные

В первой строке заданы числа n и m (1 ≤ n, m ≤ 1000) — размеры автомобильной стоянки. Следующие n строк содержат по m чисел каждая: j-е число в i-й строке характеризует «необычность» cij (0 ≤ cij ≤ 100000) автомобиля, находящегося в квадрате с координатами (i, j).

Выходные данные

В первой строке выведите минимальное суммарное время, за которое Юра угадает все предложенные автомобили. Во второй строке выведите два числа li и lj (0 ≤ li ≤ n, 0 ≤ lj ≤ m) — номера разделительных полос, на пересечении которых Юра должен начинать ток-шоу. В случае, если существует несколько оптимальных стартовых точек, выведите точку с меньшим li. Если и таких точек несколько, выведите точку с меньшим lj.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом тесте суммарное время вычисляется как 3·8 + 3·8 + 4·8 + 9·8 + 5·40 + 1·40 = 392

Система координат на поле:

A. Альтернированная сумма чисел

математика Перебор реализация *800

Вам задана последовательность целых чисел. Выведите альтернированную сумму этой последовательности. Иными словами, выведите \(a_1 - a_2 + a_3 - a_4 + a_5 - \dots\). То есть знаки плюс и минус чередуются, начиная с плюса.

Входные данные

Первая строка теста содержит одно целое число \(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 100\)).

Выходные данные

Выведите \(t\) строк. Для каждого набора входных данных выведите искомую альтернированную сумму чисел.

B. Три брата

математика Перебор реализация *800

Три брата договорились о встрече. Пронумеруем братьев следующим образом: пусть старший брат имеет номер 1, средний брат имеет номер 2, а младший брат — номер 3.

Когда пришло время встречи, один из братьев опоздал. По заданным номерам двух братьев, которые пришли вовремя, вам предстоит определить номер опоздавшего брата.

Входные данные

В первой строке входных данных следуют два различных целых числа a и b (1 ≤ a, b ≤ 3, a ≠ b) — номера братьев, которые пришли на встречу вовремя. Номера даны в произвольном порядке.

Выходные данные

Выведите единственное целое число — номер брата, который опоздал на встречу.

A. Блендер Жана

Конструктив математика *800

Сегодня в «РФМШ» прошла ярмарка клубов. Для того чтобы прорекламировать свой клуб кондитеров, Жан решил продемонстрировать мощность своего блендера.

Для того чтобы продемонстрировать мощность своего блендера, у Жана есть \(n\) фруктов.

Блендер может смешивать максимум \(x\) фруктов в секунду.

Каждую секунду Жан может положить в блендер до \(y\) фруктов. После этого блендер будет смешивать \(\min(x, c)\) фруктов, где \(c\) — количество фруктов внутри блендера. После смешивания смешанные фрукты удаляются из блендера.

Помогите Жану определить минимальное количество времени, необходимое для того, чтобы смешать все фрукты.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(0 \le n \le 10^9\)) — количество фруктов у Жана.

Вторая строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^9\)) — количество фруктов, которые блендер может смешивать за секунду, и количество фруктов, которые Жан может положить в блендер за секунду.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество секунд, необходимое для смешивания всех фруктов.

Примечание

В первом наборе входных данных можно сперва положить в блендер \(2\) фрукта. После этого блендер смешает эти \(2\) фрукта, и в итоге в блендере останутся \(0\) фруктов. После этого мы можем положить в блендер \(3\) фрукта, после чего блендер смешает эти \(3\) фрукта.

Во втором наборе входных данных можно \(3\) раза положить в блендер \(1\) фрукт.

В третьем наборе входных данных можно положить в блендер сперва \(3\) фрукта, потом еще \(3\).

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\).

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\).

B. Робин Гуд и Большой Дуб

математика *800

В Шервуде деревья — наше укрытие, и мы все дети леса.

Большой Дуб в Шервуде известен своей величественной листвой, которая предоставляла укрытие Робину Гуду и его компании весёлых мужчин и женщин.

На Большом Дубе вырастает \(i^i\) новых листьев в \(i\)-й год. Он начинает с \(1\) листа в \(1\)-й год.

Листья остаются на дереве в течение \(k\) лет. Другими словами, листья, выросшие в \(i\)-й год, остаются с \(i\) по \(i+k-1\) год включительно.

Робин считает чётные числа удачливыми. Помогите Робину определить, будет ли у Большого Дуба чётное количество листьев в \(n\)-й год.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух целых чисел \(n\), \(k\) (\(1 \le n \le 10^9\), \(1 \le k \le n\)) — запрашиваемый год и количество лет, в течение которых листья остаются.

Выходные данные

Для каждого набора входных данных выведите одну строку, «YES» если в \(n\)-й год на Большом Дубе будет чётное количество листьев и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных есть только \(1\) лист.

Во втором наборе входных данных \(k=1\), так что во \(2\)-й год будет \(2^2=4\) листа.

В третьем наборе входных данных \(k=2\), так что во \(2\)-й год будет \(1+2^2=5\) листов.

В четвертом наборе входных данных \(k=2\), так что в \(3\)-й год будет \(2^2 + 3^3 = 4 + 27 = 31\) лист.

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\) человека оказываются несчастными.

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\).

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]\).

B. Отрезки для всех пар

математика реализация *1200

Вам даны \(n\) точек на оси \(x\) с возрастающими целыми положительными координатами \(x_1 < x_2 < \ldots < x_n\).

Для каждой пары \((i, j)\), такой что \(1 \leq i < j \leq n\), строится отрезок \([x_i, x_j]\). Отрезки замкнуты, т.е. отрезок \([a, b]\) содержит точки \(a, a+1, \ldots, b\).

Вам даны \(q\) запросов. В \(i\)-м запросе задается целое положительное число \(k_i\), и нужно определить, сколько точек с целочисленными координатами содержится в ровно \(k_i\) отрезках.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(q\) (\(2 \le n \le 10^5\), \(1 \le q \le 10^5\)) — количество точек и количество запросов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_1 < x_2 < \ldots < x_n \leq 10^9\)) — координаты \(n\) точек.

Третья строка каждого набора входных данных содержит \(q\) целых чисел \(k_1, k_2, \ldots, k_q\) (\(1 \leq k_i \leq 10^{18}\)) — параметры \(q\) запросов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\), и сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку с \(q\) целыми числами, где \(i\)-е число является ответом на \(i\)-й запрос.

Примечание

В первом наборе входных данных построен только отрезок \([101, 200]\). Ни одна точка не содержится ровно в \(2\) отрезках, и \(100\) точек \(101, 102, \ldots, 200\) содержатся ровно в \(1\) отрезке.

Во втором примере построены \(15\) отрезков: \([1, 2], [1, 3], [1, 5], [1, 6], [1, 7], [2, 3], [2, 5], [2, 6], [2, 7], [3, 5], [3, 6], [3, 7], [5, 6], [5, 7], [6, 7]\). Точки \(1, 7\) содержатся в ровно \(5\) отрезках; точки \(2, 4, 6\) содержатся в ровно \(9\) отрезках; точки \(3, 5\) содержатся в ровно \(11\) отрезках.

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\) и есть ответ на задачу.

B. Да будет свет!

Бинарный поиск математика *1200

У вас есть \(n\) лампочек, пронумерованных числами \(1, 2, \ldots, n\). Изначально все лампочки включены. Под инвертированием состояния лампочки подразумевается её выключение, если она была включена, и её включение, иначе.

Затем вы делаете следующее:

  • для каждого \(i = 1, 2, \ldots, n\), инвертировать состояние всех лампочек \(j\), таких что \(j\) делится на \(i^\dagger\).

После выполнения всех операций некоторые лампочки по-прежнему будут включены. Ваша цель — сделать так, чтобы число таких лампочек было ровно \(k\).

Найдите наименьшее подходящее \(n\), такое что после выполнения всех операций включены будут ровно \(k\) лампочек. Можно показать, что ответ всегда существует.

\(^\dagger\) Целое число \(x\) делится на \(y\), если существует целое \(z\), такое что \(x = y\cdot z\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(k\) (\(1 \le k \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) — наименьшее число лампочек.

Примечание

В первом наборе входных данных наименьшее число лампочек равно \(2\). Будем записывать состояние всех лампочек в виде массива, где \(1\) соответствует включённой лампочке, а \(0\) — выключенной. Изначально массив равен \([1, 1]\).

  • После выполнения операции с \(i = 1\), массив становится равен \([\underline{0}, \underline{0}]\).
  • После выполнения операции с \(i = 2\), массив становится равен \([0, \underline{1}]\).

В итоге включена ровно \(k = 1\) лампочка. Можно показать, что ответ не может быть меньше \(2\).

Во втором наборе входных данных наименьшее число лампочек равно \(5\). Изначально массив равен \([1, 1, 1, 1, 1]\).

  • После выполнения операции с \(i = 1\), массив становится равен \([\underline{0}, \underline{0}, \underline{0}, \underline{0}, \underline{0}]\).
  • После выполнения операции с \(i = 2\), массив становится равен \([0, \underline{1}, 0, \underline{1}, 0]\).
  • После выполнения операции с \(i = 3\), массив становится равен \([0, 1, \underline{1}, 1, 0]\).
  • После выполнения операции с \(i = 4\), массив становится равен \([0, 1, 1, \underline{0}, 0]\).
  • После выполнения операции с \(i = 5\), массив становится равен \([0, 1, 1, 0, \underline{1}]\).

В итоге включены ровно \(k = 3\) лампочки. Можно показать, что ответ не может быть меньше \(5\).

C. Битовый баланс

битмаски математика расписания реализация Тернарный поиск хэши *1400

Даны три неотрицательных целых числа \(b\), \(c\) и \(d\).

Найдите неотрицательное целое число \(a \in [0, 2^{61}]\), такое что \((a\, |\, b)-(a\, \&\, c)=d\), где \(|\) и \(\&\) обозначают операцию побитового ИЛИ и операцию побитового И соответственно.

Если такое \(a\) существует, выведите его значение. Если решения не существует, выведите одно целое число \(-1\). Если существует несколько решений, выведите любое из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(b\), \(c\) и \(d\) (\(0 \le b, c, d \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите значение \(a\) или \(-1\), если решения не существует. Обратите внимание, что \(a\) должно быть неотрицательным и не может превышать \(2^{61}\).

Примечание

В первом наборе входных данных \((0\,|\,2)-(0\,\&\,2)=2-0=2\). Так что \(a = 0\) является корректным ответом.

Во втором наборе входных данных никакое значение \(a\) не удовлетворяет уравнению.

В третьем наборе входных данных \((12\,|\,10)-(12\,\&\,2)=14-0=14\). Так что \(a = 12\) является корректным ответом.

D. Соедини точки

графы Деревья дп математика Перебор снм *1800

Одним уютным вечером Алиса решила сыграть в классическую игру «Соедини точки», но с подвохом.

Чтобы начать игру, Алиса рисует прямую линию и отмечает на ней \(n\) точек, проиндексированных числами от \(1\) до \(n\). Изначально между точками нет рёбер, так что все они попарно не соединены. Затем Алиса выполняет \(m\) операций следующего типа:

  • Она выбирает три целых числа \(a_i\), \(d_i\) (\(1 \le d_i \le 10\)) и \(k_i\).
  • Затем для точек \(a_i, a_i+d_i, a_i+2d_i, a_i+3d_i, \ldots, a_i+k_i\cdot d_i\) Алиса соединяет ребром каждую пару из них.

Алиса хочет узнать, сколько компонент связности\(^\dagger\) образуют эти точки после выполнения всех \(m\) операций.

\(^\dagger\) Считается, что две точки лежат в одной компоненте связности, если между ними есть путь, использующий несколько (возможно, ноль) промежуточных рёбер и вершин.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\)).

В \(i\)-й из следующих \(m\) строк содержится три целых числа \(a_i\), \(d_i\) и \(k_i\) (\(1 \le a_i \le a_i + k_i\cdot d_i \le n\), \(1 \le d_i \le 10\), \(0 \le k_i \le n\)).

Гарантируется, что сумма значений \(n\), а также сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) каждая.

Выходные данные

Для каждого набора входных данных выведите количество компонент связности.

Примечание

В первом наборе входных данных есть \(n = 10\) точек. Первая операция соединяет точки \(1\), \(3\), \(5\), \(7\) и \(9\). Вторая операция соединяет точки \(2\), \(4\), \(6\), \(8\) и \(10\). В итоге получаем две компоненты связности: \(\{1, 3, 5, 7, 9\}\) и \(\{2, 4, 6, 8, 10\}\).

Во втором наборе входных данных есть \(n = 100\) точек. Единственная операция соединяет точки \(19\), \(21\), \(23\), \(25\) и \(27\). Теперь они образуют одну компоненту связности размера \(5\). Остальные \(95\) точек ни с кем не соединены, так что каждая из них образует отдельную компоненту связности. Значит, ответ равен \(1 + 95 = 96\).

В третьем наборе входных данных есть \(n = 100\) точек. После выполнения всех операций все точки с нечётными номерами от \(1\) до \(79\) образуют одну компоненту связности размера \(40\). Остальные \(60\) точек ни с кем не соединены, так что каждая из них образует отдельную компоненту связности. Значит, ответ равен \(1 + 60 = 61\).

E. Матожидание квадрата

битмаски дп математика Теория вероятностей *2000

Дан массив, состоящий из \(n\) целых чисел \(a_1,a_2,\ldots,a_n\). Также дан массив \(p_1, p_2, \ldots, p_n\).

Через \(S\) обозначим случайное мультимножество (т. е. оно может содержать равные элементы), которое строится следующим образом:

  • Изначально \(S\) пусто.
  • Для каждого \(i\) от \(1\) до \(n\) добавить \(a_i\) в \(S\) с вероятностью \(\frac{p_i}{10^4}\). Обратите внимание, что каждый элемент добавляется независимо.

Пусть \(f(S)\) равно результату применения побитового исключающего ИЛИ ко всем элементам \(S\). Найдите математическое ожидание величины \((f(S))^2\). Выведите ответ по модулю \(10^9 + 7\).

Формально, пусть \(M = 10^9 + 7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 1023\)).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(p_1,p_2,\ldots,p_n\) (\(1 \le p_i \le 10^4\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите математическое ожидание \((f(S))^2\) по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных \(a = [1, 2]\), и каждый элемент добавляется в \(S\) с вероятностью \(\frac{1}{2}\), поскольку \(p_1 = p_2 = 5000\) и \(\frac{p_i}{10^4} = \frac{1}{2}\). Поэтому есть всего \(4\) возможных исхода для \(S\), каждый из которых получается с вероятностью \(\frac{1}{4}\):

  • \(S = \varnothing\). В этом случае \(f(S) = 0\), \((f(S))^2 = 0\).
  • \(S = \{1\}\). В этом случае \(f(S) = 1\), \((f(S))^2 = 1\).
  • \(S = \{2\}\). В этом случае \(f(S) = 2\), \((f(S))^2 = 4\).
  • \(S = \{1,2\}\). В этом случае \(f(S) = 1 \oplus 2 = 3\), \((f(S))^2 = 9\).

Значит, ответ равен \(0 \cdot \frac{1}{4} + 1 \cdot \frac{1}{4} + 4\cdot \frac{1}{4} + 9 \cdot \frac{1}{4} = \frac{14}{4} = \frac{7}{2} \equiv 500\,000\,007 \pmod{10^9 + 7}\).

Во втором наборе входных данных \(a = [1, 1]\), \(a_1\) добавляется в \(S\) с вероятностью \(0.1\), а \(a_2\) добавляется в \(S\) с вероятностью \(0.2\). Есть всего \(3\) исхода для \(S\):

  • \(S = \varnothing\). В этом случае \(f(S) = 0\), \((f(S))^2 = 0\). Это происходит с вероятностью \((1-0.1) \cdot (1-0.2) = 0.72\).
  • \(S = \{1\}\). В этом случае \(f(S) = 1\), \((f(S))^2 = 1\). Это происходит с вероятностью \((1-0.1) \cdot 0.2 + 0.1 \cdot (1-0.2) = 0.26\).
  • \(S = \{1, 1\}\). В этом случае \(f(S) = 0\), \((f(S))^2 = 0\). Это происходит с вероятностью \(0.1 \cdot 0.2 = 0.02\).

Значит, ответ равен \(0 \cdot 0.72 + 1 \cdot 0.26 + 0 \cdot 0.02 = 0.26 = \frac{26}{100} \equiv 820\,000\,006 \pmod{10^9 + 7}\).

F. Число листьев

дп математика теория чисел *2900

Пусть \(n\) и \(d\) — положительные целые числа. Построим дерево делителей \(T_{n,d}\) следующим образом:

  • Корень дерева — вершина, в которой записано число \(n\). Она образует \(0\)-й уровень дерева.
  • Для каждого \(i\) от \(0\) до \(d - 1\), для каждой вершины на \(i\)-м уровне, сделаем следующее. Если в текущей вершине записано число \(x\), то нужно создать её детей и записать в них все возможные различные делители\(^\dagger\) числа \(x\). Эти дети будут находиться уже на \((i+1)\)-м уровне.
  • Вершины на \(d\)-м уровне являются листьями дерева.

Например, дерево \(T_{6,2}\) (дерево делителей для \(n = 6\) и \(d = 2\)) выглядит так:

Через \(f(n,d)\) обозначим число листьев в \(T_{n,d}\).

По заданным \(n\), \(k\) и \(d\), найдите \(\sum\limits_{i=1}^{n} f(i^k,d)\), по модулю \(10^9+7\).

\(^\dagger\) В этой задаче мы считаем, что целое число \(y\) является делителем числа \(x\), если \(y \ge 1\) и существует целое \(z\), такое что \(x = y \cdot z\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(d\) (\(1 \le n \le 10^9\), \(1 \le k,d \le 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^9\).

Выходные данные

Для каждого набора входных данных выведите \(\sum\limits_{i=1}^{n} f(i^k,d)\), по модулю \(10^9+7\).

Примечание

В первом наборе входных данных \(n = 6\), \(k = 1\), \(d = 1\). Значит, нам нужно найти суммарное количество листьев во всех следующих деревьях: \(T_{1,1}\), \(T_{2,1}\), \(T_{3,1}\), \(T_{4,1}\), \(T_{5,1}\), \(T_{6,1}\).

  • В \(T_{1,1}\) есть только один лист, в котором записано число \(1\).
  • В \(T_{2,1}\) есть два листа, в них записаны числа \(1\) и \(2\).
  • В \(T_{3,1}\) есть два листа, в них записаны числа \(1\) и \(3\).
  • В \(T_{4,1}\) есть три листа, в них записаны числа \(1\), \(2\) и \(4\).
  • В \(T_{5,1}\) есть два листа, в них записаны числа \(1\) и \(5\).
  • В \(T_{6,1}\) есть четыре листа, в них записаны числа \(1\), \(2\), \(3\) и \(6\).

Суммарное число листьев равно \(1 + 2 + 2 + 3 + 2 + 4 = 14\).

Во втором наборе входных данных \(n = 1\), \(k = 3\), \(d = 3\). Значит, нам нужно найти количество листьев в дереве \(T_{1,3}\), поскольку \(1^3 = 1\). В этом дереве всего один лист, так что ответ равен \(1\).

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\), что является максимумом.

E1. Цифровая деревня (простая версия)

бпф графы Деревья дп жадные алгоритмы математика Перебор поиск в глубину и подобное реализация снм Структуры данных *2300

Это простая версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 400\); \(n-1 \le m \le 400\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n^3\) и сумма \(m^3\) не превосходят \(10^8\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

E2. Цифровая деревня (сложная версия)

графы Деревья дп математика снм Структуры данных *2500

Это сложная версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 5000\); \(n-1 \le m \le 5000\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(5000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

E3. Цифровая деревня (экстремальная версия)

графы Деревья дп жадные алгоритмы математика поиск в глубину и подобное снм Структуры данных *2800

Это экстремальная версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 2 \cdot 10^5\); \(n-1 \le m \le 2 \cdot 10^5\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

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\).

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\).

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\) монет.

В третьем наборе входных данных Алиса не сможет открыть вклад «Выгодный».

B. Биномиальные коэффициенты, ну типа

дп Комбинаторика математика *1100

Недавно акшиМ столкнулся с задачей, для решения которой нужны были биномиальные коэффициенты. Он написал код, который выглядел так:

    for (int n = 0; n < N; n++) { // цикл по n от 0 до N-1 включительно
C[n][0] = 1;
C[n][n] = 1;
for (int k = 1; k < n; k++) // цикл по k от 1 до n-1 включительно
C[n][k] = C[n][k - 1] + C[n - 1][k - 1];
}

К сожалению, он допустил ошибку, так как правильная формула следующая:

            C[n][k] = C[n - 1][k] + C[n - 1][k - 1];

Но его сокомандник, кеблидА, заинтересовался значениями, которые были получены с использованием неправильной формулы. Пожалуйста, помогите ему вычислить эти коэффициенты для \(t\) различных пар \((n_i, k_i)\). Обратите внимание: их необходимо вычислить в соответствии с первой (неправильной) формулой.

Поскольку значения \(C[n_i][k_i]\) могут быть слишком большими, выводите их по модулю \(10^9 + 7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество пар. Далее в двух строках заданы сами \(t\) пар.

Во второй строке заданы \(t\) целых чисел \(n_1, n_2, \dots, n_t\) (\(2 \le n_i \le 10^5\)).

В третьей строке заданы \(t\) целых чисел \(k_1, k_2, \dots, k_t\) (\(1 \le k_i < n_i\)).

Выходные данные

Выведите \(t\) целых чисел \(C[n_i][k_i]\) по модулю \(10^9 + 7\).

D. Проверка характеристик

дп математика Перебор реализация Структуры данных *1800

Представьте себе игру, в которой вы играете за персонажа с двумя характеристиками: «Сила» и «Интеллект», которые изначально находятся на нулевом уровне.

В ходе игры вы получите \(m\) очков характеристик, которые позволят вам поднять их уровни — одно очко увеличивает одну из характеристик на один уровень. Но в процессе игры вы также сталкиваетесь с так называемыми «Проверками характеристик»: если ваша соответствующая характеристика достаточно высока, вы пройдете проверку; в противном случае вы провалите проверку.

Потратив некоторое время, вы наконец подготовили список, который содержит записи обо всех очках, которые вы получили, и всех проверках, с которыми столкнулись. И теперь вы задаетесь вопросом: каково максимальное количество проверок характеристик, которые вы можете пройти за одну игру, если будете разумно тратить очки?

Обратите внимание, что вы не можете изменить порядок записей.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le m \le 5000\); \(m < n \le 2 \cdot 10^6\)) — количество записей в списке и общее количество очков, которые вы получите в ходе игры.

Во второй строке заданы \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(-m \le r_i \le m\)), где \(r_i\) кодирует \(i\)-ю запись:

  • Если \(r_i = 0\), то \(i\)-я запись является записью о получении одного очка характеристик. Вы можете потратить его на повышение уровня либо Силы, либо Интеллекта;
  • Если \(r_i > 0\), то это проверка Интеллекта: если ваш уровень Интеллекта больше или равен \(|r_i|\), вы проходите проверку.
  • Если \(r_i < 0\), то это проверка Силы: если ваш уровень Силы больше или равен \(|r_i|\), вы проходите проверку.

Дополнительное ограничение на входные данные: в заданной последовательности \(r_1, r_2, \dots, r_n\) ровно \(m\) элементов, равных \(0\).

Выходные данные

Выведите одно целое число — максимальное количество проверок, которые вы можете пройти.

Примечание

В первом тесте оптимально вложить каждое очко в Силу, поэтому вы провалите \(2\) проверки Интеллекта, но пройдете \(3\) проверки Силы.

Во втором тесте вы провалите обе проверки, так как первое очко характеристик приходит только после проверок.

В третьем тесте одной из оптимальных стратегий является:

  1. вложить первое очко в Интеллект;
  2. вложить второе очко в Силу;
  3. вложить третье очко в Силу;
В результате вы пройдете \(2\) проверки Интеллекта \(r_3\) и \(r_9\) и \(2\) проверки Силы \(r_7\) и \(r_8\).

E. Карточная игра

бпф дп жадные алгоритмы Комбинаторика математика *2200

В самой популярной карточной игре в Берляндии используется колода из \(n \times m\) карт. У каждой карты есть два параметра: масть и ранг. Масти в игре пронумерованы от \(1\) до \(n\), а ранги пронумерованы от \(1\) до \(m\). Для каждой комбинации масти и ранга существует ровно одна карта в колоде.

Карта с мастью \(a\) и рангом \(b\) может побить карту с мастью \(c\) и рангом \(d\) в одном из двух случаев:

  • \(a = 1\), \(c \ne 1\) (карта масти \(1\) может побить карту любой другой масти);
  • \(a = c\), \(b > d\) (карта может побить любую другую карту той же масти, но ниже рангом).

В игру играют два игрока. Перед началом игры они получают ровно по половине колоды. Первый игрок выигрывает, если для каждой карты второго игрока он может выбрать свою карту, которая ее может побить, и при этом не будет выбирать свои карты повторно (то есть существует такое разбиение на пары карт первого игрока с картами второго игрока так, чтобы в каждой паре карта первого игрока била карту второго игрока). Иначе выигрывает второй игрок.

Ваша задача — посчитать количество способов распределить карты так, чтобы выиграл первый игрок. Два способа считаются различными, если существует такая карта, что в одном она принадлежит первому игроку, а в другом — второму. Количество способов может быть очень большим, поэтому выведите его по модулю \(998244353\).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 500\)).

Дополнительное ограничение на входные данные: \(m\) четно.

Выходные данные

Выведите единственное целое число — количество способов распределить карты так, чтобы выиграл первый игрок, взятое по модулю \(998244353\).

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\) — координаты второго отрезка.

Если существует несколько ответов, выведите любой из них.

Примечание

Ответ для первого набора входных данных показан ниже:

Ответ для второго набора входных данных:
Ответ для третьего набора входных данных:
Ответ для четвертого набора входных данных:

D. Суммы на отрезках

Бинарный поиск дп математика реализация Структуры данных *1900

Дана последовательность целых чисел \([a_1, a_2, \dots, a_n]\). Обозначим \(s(l,r)\) как сумму элементов от \(a_l\) до \(a_r\) (т. е. \(s(l,r) = \sum\limits_{i=l}^{r} a_i\)).

Построим другую последовательность \(b\) размером \(\frac{n(n+1)}{2}\) следующим образом: \(b = [s(1,1), s(1,2), \dots, s(1,n), s(2,2), s(2,3), \dots, s(2,n), s(3,3), \dots, s(n,n)]\).

Например, если \(a = [1, 2, 5, 10]\), то \(b = [1, 3, 8, 18, 2, 7, 17, 5, 15, 10]\).

Вам даны \(q\) запросов. В \(i\)-м запросе вам даны два целых числа \(l_i\) и \(r_i\), и вам нужно вычислить \(\sum \limits_{j=l_i}^{r_i} b_j\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10 \le a_i \le 10\)).

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)).

Затем следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le \frac{n(n+1)}{2}\)).

Выходные данные

Выведите \(q\) целых числа, \(i\)-е из которых должно быть равно \(\sum \limits_{j=l_i}^{r_i} b_j\).

A. Расстановка прямоугольников

геометрия математика реализация *800

Вы раскрашиваете бесконечную клетчатую плоскость, на которой все клетки изначально белые. Для этого вам дается \(n\) штампов. Каждый штамп является прямоугольником ширины \(w_i\) и высоты \(h_i\).

Вы примените каждый штамп ровно один раз, чтобы окрасить в чёрный цвет прямоугольник того же размера, что и штамп. Вы не можете поворачивать штамп; каждая клетка должна быть либо полностью покрыта штампом, либо не покрыта. Вы можете использовать штамп на любом прямоугольнике из клеток плоскости, даже если некоторые или все клетки, покрытые областью штампа, уже черные.

Какую минимальную сумму периметров связных областей черных квадратов можно получить после использования всех штампов?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)).

В \(i\)-й из следующих \(n\) строк содержится по два целых числа \(w_i\) и \(h_i\) (\(1 \le w_i, h_i \le 100\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную сумму периметров связных областей черных квадратов, которую можно получить после использования всех штампов.

Примечание

В первом наборе входных данных можно использовать штампы, как показано слева. Каждый штамп выделен своим цветом для наглядности.

После использования всех штампов осталась одна черная область (как показано справа), периметр которой равен \(20\). Можно показать, что не существует способа использования штампов, который дал бы меньший общий периметр.

Во втором наборе входных данных второй и третий штампы могут быть использованы полностью внутри первого, поэтому ответ — \(8\).

E1. Битовая игра (простая версия)

битмаски игры математика Перебор *2800

Это простая версия задачи. Единственное отличие заключается в том, что в этой версии вам нужно вывести победителя игры, а количество камней в каждой кучке фиксировано. Вы можете совершать взломы только если обе версии задачи решены.

Алиса и Боб играют в знакомую игру, в которой они по очереди вынимают камни из \(n\) кучек. Изначально в \(i\)-й куче находится \(x_i\) камней, и она имеет значение \(a_i\). Игрок может забрать \(d\) камней из \(i\)-й кучи тогда и только тогда, когда выполняются оба следующих условия:

  • \(1 \le d \le a_i\), и
  • \(x \, \& \, d = d\), где \(x\) — текущее количество камней в \(i\)-й куче, а \(\&\) обозначает операцию побитового И.

Алиса ходит первой. Игрок, который не может сделать ход, проигрывает.

Вам даны значения \(a_i\) и \(x_i\) для каждой кучи. Определите, кто выиграет в данной игре, если оба игрока будут действовать оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \le n \le 10^4\)) — количество кучек.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i < 2^{30}\)).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) (\(1 \le x_i < 2^{30}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке имя победителя. Если победила Алиса, выведите «Alice», в противном случае выведите «Bob» (без кавычек).

Примечание

В первом наборе входных данных ни один из игроков не может взять ни одного камня из первой кучки, так как не существует значения \(d\), удовлетворяющего условиям. Из второй кучи в первый ход Алиса может вынуть от \(1\) до \(6\) камней. Независимо от того, какой ход сделает Алиса, Боб сможет вынуть остальные камни в свой ход. После хода Боба Алиса больше не может сделать ни одного хода, поэтому Боб выиграет.

Для второго набора входных данных приведём один пример того, как может проходить игра. Алиса ходит первой и решает взять камни из первой кучи. Она не может взять \(17\) камней, потому что \(17 > 10\), что противоречит первому условию. Она не может взять \(10\) камней, потому что \(25 \, \& \, 10 = 8\), что противоречит второму условию. Один из вариантов — взять \(9\) камней; теперь в куче осталось \(16\) камней. В свой ход Боб решает взять камни из второй кучи; единственный вариант — взять все \(4\). Теперь ни из одной из первых двух куч больше нельзя взять ни одного камня, поэтому Алиса должна взять несколько камней из последней кучи. Она решает взять \(12\) камней, и Боб следует за ней, забирая последние \(2\) камня из этой кучи. Поскольку теперь у Алисы не осталось разрешённых ходов, Боб выигрывает. Можно показать, что независимо от того, какой стратегии придерживается Алиса, Боб всегда сможет выиграть, если будет играть оптимально.

E2. Битовая игра (сложная версия)

битмаски дп математика *3100

Это сложная версия задачи. Единственное отличие заключается в том, что в этой версии количество камней в каждой кучке не фиксировано, и вам нужно вывести количество вариантов игры, в которых выигрывает Боб. Вы можете совершать взломы только если обе версии задачи решены.

Алиса и Боб играют в знакомую игру, в которой они по очереди вынимают камни из \(n\) кучек. Изначально в \(i\)-й куче находится \(x_i\) камней, и она имеет значение \(a_i\). Игрок может забрать \(d\) камней из \(i\)-й кучи тогда и только тогда, когда выполняются оба следующих условия:

  • \(1 \le d \le a_i\), и
  • \(x \, \& \, d = d\), где \(x\) — текущее количество камней в \(i\)-й куче, а \(\&\) обозначает операцию побитового И.

Алиса ходит первой. Игрок, который не может сделать ход, проигрывает.

Вам даны значения \(a_i\) для каждой кучи, но количество камней в \(i\)-й куче еще не определено. Для \(i\)-й кучи \(x_i\) может быть любым целым числом от \(1\) до \(b_i\) включительно. То есть можно выбрать массив \(x_1, x_2, \ldots, x_n\) такой, что условие \(1 \le x_i \le b_i\) выполняется для всех куч.

Ваша задача — найти количество игр, в которых Боб выигрывает, если оба игрока играют оптимально. Две игры считаются различными, если количество камней хотя бы в одной кучке разное, то есть массивы \(x\) различаются хотя бы в одной позиции.

Поскольку ответ может быть очень большим, выведите результат по модулю \(10^9 + 7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \le n \le 10^4\)) — количество кучек.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i < 2^{30}\)).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i < 2^{30}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество игр, в которых Боб выигрывает, по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных, какие бы значения \(x_2\) и \(x_3\) мы ни выбрали, вторая и третья кучи всегда будут выбраны ровно один раз, прежде чем из них больше нельзя будет взять ни одного камня. Если \(x_1 = 2\), то ни один камень не может быть взят из нее, поэтому Боб сделает последний ход. Если \(x_1 = 1\) или \(x_1 = 3\), то на этой куче можно сделать ровно один ход, поэтому последний ход сделает Алиса. Таким образом, Боб выигрывает, если \(x = [2, 1, 1]\) или \(x = [2, 1, 2]\) или \(x = [2, 2, 1]\) или \(x = [2, 2, 2]\).

Во втором наборе входных данных Боб выигрывает, если \(x_1 = 14\) или \(x_1 = 30\), убрав \(14 - k\) камней, где \(k\) — количество камней, убранных Алисой в свой ход. Боб также выигрывает в случае \(x_1 = 16\) или \(x_1 = 32\), поскольку у Алисы нет ни одного хода в начале.

A. Приключения Алисы в "Шахматах"

математика Перебор реализация *900

Алиса пытается встретиться с Красной Королевой за городом! Сейчас Алиса находится в позиции \((0, 0)\), а Красная Королева — в позиции \((a, b)\). Алиса может двигаться только в четырех направлениях (на север, восток, юг или запад).

Более строго, если Алиса находится в точке \((x, y)\), она сделает одно из следующих действий:

  • пойдет на север (обозначается N), перемещаясь в \((x, y+1)\);
  • пойдет на восток (обозначается E), перемещаясь в \((x+1, y)\);
  • пойдет на юг (обозначается S), перемещаясь в \((x, y-1)\); или
  • пойдет на запад (обозначается W), перемещаясь в \((x-1, y)\).

Перемещения Алисы предопределены. У нее есть строка \(s\), представляющая последовательность движений, которые она выполняет слева направо. Как только она достигает конца строки, она бесконечно повторяет ту же последовательность движений.

Можешь ли ты помочь Алисе выяснить, встретится ли она когда-нибудь с Красной Королевой?

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(a\), \(b\) (\(1 \le n\), \(a\), \(b \le 10\)) — длина строки и начальные координаты Красной Королевы.

Вторая строка содержит строку \(s\) длиной \(n\), состоящую только из символов N, E, S или W.

Выходные данные

Для каждого набора входных данных выведите одну строку «YES» или «NO» (без кавычек), обозначающую, встретится ли Алиса в конечном итоге с Красной Королевой.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут признаны положительными ответами.

Примечание

В первом наборе входных данных Алиса следует по пути \((0,0) \xrightarrow[\texttt{N}]{} (0,1) \xrightarrow[\texttt{E}]{} (1,1) \xrightarrow[\texttt{N}]{} (1,2) \xrightarrow[\texttt{E}]{} (2,2)\).

Во втором наборе входных данных Алиса никогда не сможет достичь Красной Королевы.

B. Приключения Алисы в перестановках

Бинарный поиск математика реализация *1400

Алиса перепутала слова трансмутация и перестановка! У неё есть массив \(a\), заданный тремя целыми числами \(n\), \(b\), \(c\): массив \(a\) имеет длину \(n\) и задаётся по правилу \(a_i = b\cdot (i - 1) + c\) для \(1\le i\le n\). Например, если \(n=3\), \(b=2\) и \(c=1\), то \(a=[2 \cdot 0 + 1, 2 \cdot 1 + 1, 2 \cdot 2 + 1] = [1, 3, 5]\).

Алисе очень нравятся перестановки \([0, \ldots, n-1]\)\(^{\text{∗}}\) и она хотела бы преобразовать \(a\) в перестановку. В одной операции Алиса заменяет максимальный элемент массива \(a\) на \(\operatorname{MEX}\)\(^{\text{†}}\) массива \(a\). Если в массиве \(a\) несколько максимальных элементов, Алиса выбирает самый левый для замены.

Можете ли вы помочь Алисе выяснить, сколько операций ей нужно выполнить, чтобы \(a\) впервые стал перестановкой? Если это невозможно, вы должны сообщить об этом.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(0\) до \(n-1\) в произвольном порядке. Обратите внимание, это немного отличается от обычного определения перестановки. Например, \([1,2,0,4,3]\) — перестановка, но \([0,1,1]\) не перестановка (\(1\) встречается в массиве дважды) и \([0,2,3]\) тоже не перестановка (\(n=3\), но в массиве встречается \(3\)).

\(^{\text{†}}\)\(\operatorname{MEX}\) массива — это наименьшее неотрицательное целое число, которое не принадлежит массиву. Например, \(\operatorname{MEX}\) массива \([0, 3, 1, 3]\) равно \(2\), а \(\operatorname{MEX}\) массива \([5]\) равно \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(b\), \(c\) (\(1\le n\le 10^{18}\); \(0\le b\), \(c\le 10^{18}\)) — параметры массива.

Выходные данные

Для каждого набора входных данных, если массив никогда не сможет стать перестановкой, выведите одно целое число \(-1\). В противном случае выведите минимальное количество операций, необходимых для того, чтобы массив стал перестановкой.

Примечание

В первом наборе входных данных массив уже \([0, 1, \ldots, 9]\), поэтому операции не требуются.

В третьем наборе входных данных начальный массив равен \([1, 3, 5, \ldots, 199]\). После первой операции \(199\) преобразуется в \(0\). Во второй операции \(197\) преобразуется в \(2\). Если продолжать, потребуется ровно \(50\) операций, чтобы получить массив \([0, 1, 2, 3, \ldots, 99]\).

В четвертом наборе входных данных требуется две операции: \([1,1,1] \to [0,1,1] \to [0,2,1]\).

В пятом наборе входных данных процесс выглядит следующим образом: \([0,0,0] \to [1,0,0] \to [2,0,0] \to [1,0,0] \to [2,0,0]\). Этот процесс повторяется бесконечно, поэтому массив никогда не становится перестановкой, и ответ равен \(-1\).

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\}\).

E. Общий генератор

Конструктив математика Перебор теория чисел *2100

Для двух целых чисел \(x\) и \(y\) (\(x,y\ge 2\)) назовём \(x\) генератором \(y\), если и только если \(x\) может быть преобразован в \(y\), выполняя следующую операцию некоторое количество раз (возможно, ноль):

  • Выберите делитель \(d\) (\(d\ge 2\)) числа \(x\), затем увеличьте \(x\) на \(d\).

Например:

  • \(3\) является генератором \(8\), так как мы можем выполнить следующие операции: \(3 \xrightarrow{d = 3} 6 \xrightarrow{d = 2} 8\);
  • \(4\) является генератором \(10\), так как мы можем выполнить следующие операции: \(4 \xrightarrow{d = 4} 8 \xrightarrow{d = 2} 10\);
  • \(5\) не является генератором \(6\), так как мы не можем преобразовать \(5\) в \(6\) с помощью вышеуказанной операции.

Теперь Кевин даст вам массив \(a\), состоящий из \(n\) попарно различных целых чисел (\(a_i\ge 2\)).

Вам нужно найти целое число \(x\ge 2\) такое, что для каждого \(1\le i\le n\), \(x\) является генератором \(a_i\), или определить, что такое число не существует.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(2\le a_i\le 4\cdot 10^5\)) — элементы массива \(a\). Гарантируется, что элементы попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(x\) — найденное вами целое число. Выведите \(-1\), если не существует подходящего \(x\).

Если существует несколько ответов, вы можете вывести любой из них.

Примечание

В первом наборе входных данных, для \(x=2\):

  • \(2\) является генератором \(8\), так как мы можем выполнить следующие операции: \(2 \xrightarrow{d = 2} 4 \xrightarrow{d = 4} 8\);
  • \(2\) является генератором \(9\), так как мы можем выполнить следующие операции: \(2 \xrightarrow{d = 2} 4 \xrightarrow{d = 2} 6 \xrightarrow{d = 3} 9\).
  • \(2\) является генератором \(10\), так как мы можем выполнить следующие операции: \(2 \xrightarrow{d = 2} 4 \xrightarrow{d = 2} 6 \xrightarrow{d = 2} 8 \xrightarrow{d = 2} 10\).

Во втором наборе входных данных можно доказать, что невозможно найти общий генератор данных четырёх целых чисел.

D. Удар по мячу

геометрия математика реализация *1700

В то время, когда Валера играл на стадионе в футбол, внезапно пошел дождь. Чтобы не промокнуть, Валера скрылся в коридоре подтрибунного помещения. Однако желание играть было настолько велико, что он решил потренировать удар по мячу прямо в этом коридоре. Валера отошел на достаточно большое расстояние, поставил мяч и совершил удар, после чего мяч, отскакивая от стен, потолка и пола коридора, ударился о выходную дверь. Так как мяч был влажный, он оставил на двери след. Теперь Валера хочет узнать координаты этого следа.

Опишем данное событие более формально. Мяч будем считать точкой в пространстве. Дверь коридора будем считать прямоугольником, расположенным в плоскости xOz таким образом, что левый нижний угол двери расположен в точке (0, 0, 0), а правый верхний — в точке (a, 0, b). Коридор будем считать прямоугольным параллелепипедом, бесконечным в сторону увеличения координаты y. При этом пол коридора будем считать плоскостью xOy, а потолок — плоскостью, параллельной xOy и проходящей через точку (a, 0, b). Будем также считать, что одна из стен — это плоскость yOz, а другая стена — это плоскость, параллельная yOz и проходящая через точку (a, 0, b).

Скажем, что мяч ударился о дверь тогда, когда его координата y стала равна 0. Таким образом координаты следа — это точка (x0, 0, z0), где 0 ≤ x0 ≤ a, 0 ≤ z0 ≤ b. Чтобы исполнить удар, Валера отходит от двери на расстояние m и ставит мяч по центру коридора в точку . После удара мяч летит со скоростью (vx, vy, vz). Это значит, что если мяч имел координаты (x, y, z), то через одну секунду он будет иметь координаты (x + vx, y + vy, z + vz).

Чтобы лучше понять введенную систему координат посмотрите рисунок в примечаниях.

При столкновении с потолком, полом или одной из стен коридора, мяч отскакивает в соответствии с законами отражения (угол падения равен углу отражения). В задаче рассматривается идеальная физическая модель, поэтому можно считать, что отсутствуют сопротивление воздуха, силы трения, какие-либо потери энергии.

Входные данные

В первой строке заданы три целых числа a, b, m (1 ≤ a, b, m ≤ 100), разделенные пробелами. Первые два числа задают точку (a, 0, b), через которую проходят потолок и одна из стен коридора, третье число — расстояние, на которое Валера отошел от двери.

Во второй строке через пробелы заданы три целых числа vx, vy, vz (|vx|, |vy|, |vz| ≤ 100, vy < 0, vz ≥ 0) — скорость мяча после удара.

Гарантируется, что мяч ударится о дверь.

Выходные данные

Выведите два вещественных числа x0, z0 — координаты x и z точки (x0, 0, z0), в которой мяч ударится о выходную дверь. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не будет превышать 10  - 6.

Примечание

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\). Можно показать, что это максимально возможный счёт.

B. Минимизируйте единичность

игры Комбинаторика Конструктив математика *800

Для произвольной бинарной строки \(t\)\(^{\text{∗}}\), пусть \(f(t)\) — количество непустых подпоследовательностей\(^{\text{†}}\) \(t\), которые содержат только символы \(\mathtt{0}\), и пусть \(g(t)\) — это количество непустых подпоследовательностей \(t\), которые содержат хотя бы одну \(\mathtt{1}\).

Обратите внимание, что для \(f(t)\) и \(g(t)\) каждая подпоследовательность считается столько раз, сколько раз она встречается в \(t\). Например, \(f(\mathtt{000}) = 7, g(\mathtt{100}) = 4\).

Назовём единичностью бинарной строки \(t\) значение \(|f(t)-g(t)|\), где \(|z|\) обозначает абсолютное значение \(z\) для любого числа \(z\).

Вам дано целое положительное число \(n\). Найдите бинарную строку \(s\) длины \(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^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длина \(s\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(s\) на отдельной строке. Если существует несколько ответов, выведите любой.

Примечание

В первом наборе входных данных \(f(t)=1\), потому что существует одна подпоследовательность, содержащая только \(\mathtt{0}\) (подпоследовательность \(\mathtt{0}\)), и \(g(t)=0\), потому что нет подпоследовательностей, содержащих хотя бы одну \(1\). Единичность равна \(|1-0|=1\). Строка \(\mathtt{1}\) также является корректным ответом, так как её единичность равна \(|0-1|=1\).

Во втором наборе входных данных \(f(t)=1\), потому что существует одна непустая подпоследовательность, содержащая только \(\mathtt{0}\), и \(g(t)=2\), потому что существуют две непустые подпоследовательности, содержащие хотя бы одну \(\mathtt{1}\) (\(\mathtt{01}\) и \(\mathtt{1}\)). Таким образом, единичность равна \(|1-2|=1\). Можно показать, что \(1\) — это минимально возможное значение единичности среди всех бинарных строк длины \(2\).

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\).

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\).

G2. Уничтожение Вселенной (сложная версия)

Комбинаторика математика *3100

Это сложная версия задачи. В этой версии \(n \leq 10^6\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Орангутаны — могущественные существа — настолько могущественные, что им нужна всего \(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 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^6\)) — количество планет во Вселенной.

Следующие \(n\) строк содержат по два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)) — начальный интервал уязвимости \(i\)-й планеты.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите целое число — сумму счётов всех непустых подмножеств планет во Вселенной, по модулю \(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\).

В третьем наборе входных данных высоты колонн уже являются неубывающими, поэтому никаких операций не требуется.

C. Пенчик и булочки барбекю

Конструктив математика теория чисел *1300

Пенчик любит две вещи: полные квадраты и булочки барбекю в гонконгском стиле! На его день рождения Коханэ хочет объединить их в один подарок: \(n\) булочек барбекю, расположенных слева направо. Существует \(10^6\) доступных начинок для булочек барбекю, пронумерованных от \(1\) до \(10^6\). Чтобы убедиться, что Пенчику понравится этот подарок, Кохане хочет, чтобы выполнялись следующие условия:

  • Ни одна начинка не используется ровно один раз; то есть каждая начинка должна либо не появляться вовсе, либо появляться как минимум дважды.
  • Для любых двух булочек \(i\) и \(j\) с одинаковой начинкой расстояние между ними, равное \(|i-j|\), должно быть полным квадратом\(^{\text{∗}}\).

Помогите Кохане найти подходящий способ выбора начинки для булочек или определите, что выполнить все условия невозможно. Если существует несколько решений, выведите любое из них.

\(^{\text{∗}}\)Целое положительное число \(x\) является полным квадратом, если существует целое положительное число \(y\) такое, что \(x = y^2\). Например, \(49\) и \(1\) — полные квадраты, потому что \(49 = 7^2\) и \(1 = 1^2\) соответственно. С другой стороны, \(5\) не является полным квадратом, так как ни одно целое число в квадрате не равно \(5\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2\cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество булочек барбекю.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если не существует правильного выбора начинок, выведите \(-1\). В противном случае выведите \(n\) целых чисел, где \(i\)-е целое число представляет начинку \(i\)-й булочки барбекю. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных выбор начинок «1 1 1» недопустим, так как булочки \(1\) и \(3\) имеют одинаковую начинку, но находятся на расстоянии \(2\) друг от друга, что не является полным квадратом. Выбор начинок «1 1 2» также недопустим, так как начинка \(2\) используется только один раз.

Во втором наборе входных данных решение корректно, так как ни одна начинка не используется ровно один раз, и любые две булочки с одной и той же начинкой находятся на расстоянии, равном полному квадрату. Например, булочки \(1\) и \(10\) имеют начинку \(1\) и находятся на расстоянии \(9=3^2\). Аналогично, булочки \(5\) и \(9\) имеют начинку \(10\) и находятся на расстоянии \(4=2^2\).

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\).

C. Тройка

Бинарный поиск математика сортировки *1400

Дан массив \(a\) из \(n\) элементов \(a_1, a_2, \ldots, a_n\).

Вы можете выполнить следующую операцию любое количество раз (возможно, \(0\)):

  • Выберите два целых числа \(i\) и \(j\), где \(1 \le i, j \le n\), и присвойте \(a_i := a_j\).

Найдите минимальное количество операций, необходимых для того, чтобы массив \(a\) удовлетворял условию:

  • Для каждой попарно различной тройки индексов \((x, y, z)\) (\(1 \le x, y, z \le n\), \(x \ne y\), \(y \ne z\), \(x \ne z\)) существует невырожденный треугольник со сторонами длиной \(a_x\), \(a_y\) и \(a_z\), т.е. \(a_x + a_y > a_z\), \(a_y + a_z > a_x\) и \(a_z + a_x > a_y\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(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\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для достижения цели.

Примечание

В первом наборе входных данных одна из возможных последовательностей операций может быть следующей:

  • Присвоить \(a_1 := a_4 = 4\). Массив станет \([4, 2, 3, 4, 5, 6, 7]\).
  • Присвоить \(a_2 := a_5 = 5\). Массив станет \([4, 5, 3, 4, 5, 6, 7]\).
  • Присвоить \(a_7 := a_1 = 4\). Массив станет \([4, 5, 3, 4, 5, 6, 4]\).

Можно доказать, что любая тройка элементов с попарно различными индексами в итоговом массиве образует невырожденный треугольник, и нет возможного ответа с использованием менее чем \(3\) операций.

Во втором наборе входных данных мы можем присвоить \(a_1 := a_2 = 3\), чтобы получить массив \(a = [3, 3, 2]\).

В третьем наборе входных данных, поскольку \(3\), \(4\) и \(5\) являются допустимыми длинами сторон треугольника, нам не нужно выполнять никаких операций с массивом.

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]\).

F. Арахис

дп игры Комбинаторика математика *2700

Имея волшебную бобовую палку, Джек в последнее время собирал много арахисов. В конечном итоге он получил \(n\) мешков с арахисом, удобно пронумерованных от \(1\) до \(n\) слева направо. В \(i\)-м мешке находится \(a_i\) арахисов.

Джек и его подруга детства Алиса решили сыграть в игру с арахисом. Сначала Алиса делит мешки на несколько коробок; каждая коробка будет содержать ненулевое количество последовательных мешков, и каждый мешок, очевидно, будет лежать в ровно одной коробке. При этом Алиса не меняет порядок коробок, то есть коробки пронумерованы в порядке возрастания номеров мешков в них.

После этого Алиса и Джек будут по очереди делать ходы, при этом Алиса ходит первой.

На каждом ходе текущий игрок будет забирать положительное количество арахисов из ровно одного мешка, который лежит в самой левой непустой коробке (т.е. самой левой коробке, содержащей хотя бы один непустой мешок). Другими словами, если мы пронумеруем коробки слева направо, то каждый игрок может забирать арахисы из мешка в \(j\)-й коробке (\(j \ge 2\)) только в том случае, если в \((j - 1)\)-й коробке не осталось арахисов. Игрок, который не может сделать допустимый ход, проигрывает.

Алиса уверена, что она выиграет, так как у нее есть преимущество в том, что она сама делит мешки на коробки. Она хочет знать, сколько существует способов разделить мешки на коробки в начале игры, чтобы она выиграла, предполагая, что оба игрока играют оптимально. Можете помочь ей с расчетами?

Поскольку результат может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — количество мешков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — количество арахисов в каждом мешке.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество способов для Алисы разделить мешки на коробки в начале игры, чтобы гарантировать ее победу, предполагая, что оба игрока играют оптимально, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных единственный способ для Алисы выиграть — это разделить мешки на две коробки следующим образом: \(([1, 2], [3])\) (первая коробка содержит первые два мешка, а вторая коробка содержит третий мешок). Алиса выигрывает, забирая оба арахиса из второго мешка, оставляя Джеку \(([1], [3])\). Джек вынужден забрать единственный оставшийся арахис в первой коробке, что позволяет Алисе забрать оставшиеся в второй коробке.

Во втором наборе входных данных выигрышные разделения для Алисы — это \(([1], [2, 3, 1])\), \(([1, 2, 3, 1])\), \(([1, 2], [3], [1])\) и \(([1, 2], [3, 1])\).

В третьем наборе входных данных Алиса всегда выигрывает, независимо от того, как она разделяет мешки на коробки.

В четвертом наборе входных данных Алиса всегда проигрывает, независимо от того, как она разделяет мешки на коробки.

A. Сакурако и Косукэ

Конструктив математика реализация *800

Сакурако и Косукэ решили поиграть в игры с точкой на координатной прямой. Точка в настоящее время находится в позиции \(x=0\). Они будут по очереди делать ходы, и первой ходит Сакурако.

На каждом \(i\)-м ходу текущий игрок переместит точку в каком-то направлении на \(2\cdot i-1\) единиц. Сакурако всегда будет перемещать точку в отрицательном направлении, тогда как Косукэ всегда будет перемещать её в положительном направлении.

Другими словами, произойдет следующее:

  1. Сакурако изменит положение точки на \(-1\), теперь \(x = -1\)
  2. Косукэ изменит положение точки на \(3\), теперь \(x = 2\)
  3. Сакурако изменит положение точки на \(-5\), теперь \(x = -3\)
  4. \(\cdots\)

Они будут продолжать играть, пока абсолютное значение координаты точки не превысит \(n\). Более формально, игра продолжается, пока \(-n\le x\le n\). Можно доказать, что игра всегда закончится.

Ваша задача — определить, кто сделает последний ход.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество игр, в которые сыграли Сакурако и Косукэ.

Каждая игра описывается одним числом \(n\) (\(1 \le n\le 100\)) — числом, которое определяет условие, при котором игра заканчивается.

Выходные данные

Для каждой из \(t\) игр выведите строку с результатом этой игры. Если последний ход сделала Сакурако, выведите «Sakurako» (без кавычек), иначе выведите «Kosuke».

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\) операцию.

F. Лень Косукэ

математика Перебор теория чисел *1800

Косукэ слишком ленив. Он не даст вам никакой легенды, только задачу:

Числа Фибоначчи определяются следующим образом:

  • \(f(1)=f(2)=1\).
  • \(f(n)=f(n-1)+f(n-2)\) \((3\le n)\)
Мы обозначаем \(G(n,k)\) как индекс \(n\)-го числа Фибоначчи, которое делится на \(k\). Для заданных \(n\) и \(k\) вычислите \(G(n,k)\).

Поскольку это число может быть слишком большим, выведите его по модулю \(10^9+7\).

Например: \(G(3,2)=9\), потому что \(3\)-е число Фибоначчи, которое делится на \(2\), равно \(34\). \([1,1,\textbf{2},3,5,\textbf{8},13,21,\textbf{34}]\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^{18}\), \(1 \le k \le 10^5\)).

Гарантируется, что сумма \(k\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите единственное число: значение \(G(n,k)\), взятое по модулю \(10^9+7\).

A. Тайна короля Кей-Хосрова

китайская теорема об остатках математика Перебор теория чисел *800

Ходит легенда о мудром царе Кей-Хосрове, который владел огромной сокровищницей, наполненной сокровищами со всей Персидской империи. Однако, чтобы предотвратить кражу и обеспечить сохранность его богатств, хранилище короля Кей-Хосрова было запечатано магическим замком, который можно было открыть, только разгадав загадку.

Загадка состоит из двух чисел \(a\) и \(b\). Чтобы открыть хранилище, претендент должен определить наименьший ключ \(m\), удовлетворяющий двум условиям:

  • \(m\) должно быть больше или равно, по крайней мере, одному из чисел \(a\) и \(b\).
  • Остаток от деления \(m\) на \(a\) должен быть равен остатку от деления \(m\) на \(b\).

Только найдя наименьшее подходящее значение \(m\), можно открыть хранилище и получить доступ к легендарным сокровищам!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(a\) и \(b\) (\(1 \leq a, b \leq 1000\)).

Выходные данные

Для каждого набора входных данных выведите наименьшее целое число \(m\), удовлетворяющее приведенным выше условиям.

Примечание

В первом наборе входных данных вы можете видеть, что:

  • \(4 \bmod 4 = 0\), но \(4 \bmod 6 = 4\)
  • \(5 \bmod 4 = 1\), но \(5 \bmod 6 = 5\)
  • \(6 \bmod 4 = 2\), но \(6 \bmod 6 = 0\)
  • \(7 \bmod 4 = 3\), но \(7 \bmod 6 = 1\)
  • \(8 \bmod 4 = 0\), но \(8 \bmod 6 = 2\)
  • \(9 \bmod 4 = 1\), но \(9 \bmod 6 = 3\)
  • \(10 \bmod 4 = 2\), но \(10 \bmod 6 = 4\)
  • \(11 \bmod 4 = 3\), но \(11 \bmod 6 = 5\)

Таким образом, ни одно целое число меньше \(12\) не удовлетворяет условиям.

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».

F1. Хайям и Королевский указ (простая версия)

дп Комбинаторика математика сортировки *2500

Это простая версия задачи. В двух версиях отличаются ограничения на \(k\) и на сумму \(k\).

В древней Персии Хайям, умный купец и математик, играет в игру со своим драгоценным сундуком с сокровищами. Сундук содержит \(n\) красных рубинов стоимостью \(2\) динара каждый и \(m\) синих сапфиров стоимостью \(1\) динар каждый. У него также есть мешок, в котором изначально ничего нет, и \(k\) свитков с парами \((r_1, b_1), (r_2, b_2), \ldots, (r_k, b_k)\), описывающими особые состояния.

Игра состоит из \(n + m\) таких ходов:

  1. Хайям случайно равновероятно достает драгоценный камень из сундука.
  2. Он кладет данный камень в свой мешок.
  3. Если существует свиток \(i\) (\(1 \leq i \leq k\)), для которого в сундуке находятся ровно \(r_i\) красных рубинов и \(b_i\) синих сапфиров, то по королевскому указу стоимость всех драгоценных камней в его мешке удваивается в качестве награды за достижение особого состояния.

Обратите внимание, что стоимость некоторых драгоценных камней может быть изменена несколькими указами, и тогда она удваивается несколько раз.

Определите математическое ожидание стоимости камней в мешке Хайяма в конце игры по модулю \(998,244,353\).

Формально, пусть \(M = 998,244,353\). Можно показать, что точный ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), и \(k\) (\(1 \leq n, m \leq 2 \cdot 10^5\), \(0 \leq k \leq 500\)) — количество красных рубинов, количество синих сапфиров и количество свитков, описывающих особые состояния, соответственно.

Каждая из следующих \(k\) строк содержит по два целых числа \(r_i\), \(b_i\) (\(0 \leq r_i \leq n\), \(0 \leq b_i \leq m\), \(1 \leq r_i + b_i \leq n+m-1\)). Гарантируется, что все пары \((r_i, b_i)\) различны.

Гарантируется, что и сумма \(n\), и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\), а сумма \(k\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: математическое ожидание стоимости камней в мешке Хайяма в конце процесса по модулю \(998,244,353\).

Примечание

В первом наборе входных данных, в конце процесса всегда будет \(3\) красных рубина и \(4\) синих сапфира. Ни одно из особых состояний, описанных в свитках, не соблюдено, поэтому стоимость мешка Хайяма остается неизменной. Общая стоимость мешка в конце всегда равна \(2 \cdot 3 + 1 \cdot 4 = 10\).

Во втором наборе входных данных рассмотрим два случая:

  • С вероятностью \(1/2\) Хайям вытянет красный рубин, и стоимость его мешка станет равна \(2\). Затем, с вероятностью \(1\) он вытянет синий сапфир, и стоимость его мешка станет равной \(3\).
  • С вероятностью \(1/2\) Хайям вытянет синий сапфир, и стоимость его мешка станет равной \(1\). На данный момент в сундуке находятся \(r_1 = 1\) красный рубин и \(b_1 = 0\) синих сапфиров, что соответствует особому состоянию, описанному в свитке. В результате стоимость мешка удваивается до \(2 \cdot 1 = 2\). Затем, с вероятностью \(1\), он вытянет красный рубин, и стоимость его мешка возрастёт до \(4\).

Таким образом, ожидаемая стоимость в конце равна \(\frac{1}{2} \cdot 3 + \frac{1}{2} \cdot 4 = \frac{7}{2}\), что равно \(499,122,180\) по модулю \(998,244,353\).

F2. Хайям и Королевский указ (сложная версия)

дп Комбинаторика математика сортировки *2800

Это сложная версия задачи. В двух версиях отличаются ограничения на \(k\) и на сумму \(k\).

В древней Персии Хайям, умный купец и математик, играет в игру со своим драгоценным сундуком с сокровищами. Сундук содержит \(n\) красных рубинов стоимостью \(2\) динара каждый и \(m\) синих сапфиров стоимостью \(1\) динар каждый. У него также есть мешок, в котором изначально ничего нет, и \(k\) свитков с парами \((r_1, b_1), (r_2, b_2), \ldots, (r_k, b_k)\), описывающими особые состояния.

Игра состоит из \(n + m\) таких ходов:

  1. Хайям случайно равновероятно достает драгоценный камень из сундука.
  2. Он кладет данный камень в свой мешок.
  3. Если существует свиток \(i\) (\(1 \leq i \leq k\)), для которого в сундуке находятся ровно \(r_i\) красных рубинов и \(b_i\) синих сапфиров, то по королевскому указу стоимость всех драгоценных камней в его мешке удваивается в качестве награды за достижение особого состояния.

Обратите внимание, что стоимость некоторых драгоценных камней может быть изменена несколькими указами, и тогда она удваивается несколько раз.

Определите математическое ожидание стоимости камней в мешке Хайяма в конце игры по модулю \(998,244,353\).

Формально, пусть \(M = 998,244,353\). Можно показать, что точный ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), и \(k\) (\(1 \leq n, m \leq 2 \cdot 10^5\), \(0 \leq k \leq 5000\)) — количество красных рубинов, количество синих сапфиров и количество свитков, описывающих особые состояния, соответственно.

Каждая из следующих \(k\) строк содержит по два целых числа \(r_i\), \(b_i\) (\(0 \leq r_i \leq n\), \(0 \leq b_i \leq m\), \(1 \leq r_i + b_i \leq n+m-1\)). Гарантируется, что все пары \((r_i, b_i)\) различны.

Гарантируется, что и сумма \(n\), и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\), а сумма \(k\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: математическое ожидание стоимости камней в мешке Хайяма в конце процесса по модулю \(998,244,353\).

Примечание

В первом наборе входных данных, в конце процесса всегда будет \(3\) красных рубина и \(4\) синих сапфира. Ни одно из особых состояний, описанных в свитках, не соблюдено, поэтому стоимость мешка Хайяма остается неизменной. Общая стоимость мешка в конце всегда равна \(2 \cdot 3 + 1 \cdot 4 = 10\).

Во втором наборе входных данных рассмотрим два случая:

  • С вероятностью \(1/2\) Хайям вытянет красный рубин, и стоимость его мешка станет равна \(2\). Затем, с вероятностью \(1\) он вытянет синий сапфир, и стоимость его мешка станет равной \(3\).
  • С вероятностью \(1/2\) Хайям вытянет синий сапфир, и стоимость его мешка станет равной \(1\). На данный момент в сундуке находятся \(r_1 = 1\) красный рубин и \(b_1 = 0\) синих сапфиров, что соответствует особому состоянию, описанному в свитке. В результате стоимость мешка удваивается до \(2 \cdot 1 = 2\). Затем, с вероятностью \(1\), он вытянет красный рубин, и стоимость его мешка возрастёт до \(4\).

Таким образом, ожидаемая стоимость в конце равна \(\frac{1}{2} \cdot 3 + \frac{1}{2} \cdot 4 = \frac{7}{2}\), что равно \(499,122,180\) по модулю \(998,244,353\).

A. Скольжение

математика реализация *800

Красный не был предателем.

Имеется \(n\) строк по \(m\) человек. Пусть позиция в \(r\)-й строке и \(c\)-м столбце обозначается \((r, c)\). Люди пронумерованы по строкам, начиная с \(1\), т.е. человек с номером \((r-1)\cdot m+c\) изначально находится на позиции \((r, c)\).

Человек, находящийся на позиции \((r,c)\), решил уйти. Пусть он имел номер \(i\). Чтобы заполнить пробел, каждый человек с номером \(j>i\) переместится на позицию, на которой изначально находился человек с номером \(j-1\). Ниже приведена иллюстрация для случая, когда \(n=2\), \(m=3\), \(r=1\) и \(c=2\):

Вычислите сумму манхэттенских расстояний перемещения каждого человека. Если человек изначально находился на позиции \((r_0, c_0)\), а затем переместился на позицию \((r_1, c_1)\), то манхэттенское расстояние его перемещения составит \(|r_0-r_1|+|c_0-c_1|\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит \(4\) целых числа \(n\), \(m\), \(r\) и \(c\) (\(1\le r\le n\le 10^6\), \(1 \le c \le m \le 10^6\)), где \(n\) — количество строк, \(m\) — количество столбцов, а \((r,c)\) — позиция, на которой изначально находится ушедший человек.

Выходные данные

Для каждого набора входных данных выведите одно целое число — сумму манхэттенских расстояний.

Примечание

В первом наборе входных данных человек под номером \(2\) уходит, а расстояния перемещений людей под номерами \(3\), \(4\), \(5\) и \(6\) составляют \(1\), \(3\), \(1\) и \(1\) соответственно. Таким образом, ответ равен \(1+3+1+1=6\).

Во втором наборе входных данных человек с номером \(3\) уходит, а человек с номером \(4\) перемещается. Ответ равен \(1\).

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\) — наименьшее.

C. Аля и перестановка

битмаски Конструктив математика *1400

Але досталась сложная задача. К сожалению, она слишком занята баллотированием в студенческий совет. Пожалуйста, решите эту задачу за неё.

Дано целое число \(n\). Постройте перестановку \(p\) целых чисел \(1, 2, \ldots, n\), которая максимизирует значение \(k\) (которое изначально равно \(0\)) после следующего процесса.

Выполняется \(n\) операций, на \(i\)-й операции (\(i=1, 2, \dots, n\)):

  • Если \(i\) нечетно, то \(k=k\,\&\,p_i\), где \(\&\) обозначает операцию побитового И.
  • Если \(i\) четно, то \(k=k\,|\,p_i\), где \(|\) обозначает операцию побитового ИЛИ.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(5\le n\le 2 \cdot 10^5\)) — длина перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное значение \(k\) в первой строке и перестановку \(p_1, p_2,\ldots, p_n\) во второй строке.

Если подходящих перестановок несколько, выведите любую из них.

Примечание

В первом наборе входных данных максимальное значение \(k\) получается следующим образом:

Изначально \(k = 0\).

  • На \(1\)-й операции: \(1\) нечётно, поэтому Аля задает \(k\) равным \(k\&p_1 = 0\&2 = 0\).
  • На \(2\)-й операции: \(2\) чётно, поэтому Аля задает \(k\) равным \(k|p_2 = 0|1 = 1\).
  • На \(3\)-й операции: \(3\) нечетно, поэтому Аля задает \(k\) равным \(k\&p_3 = 1\&3 = 1\).
  • На \(4\)-й операции: \(4\) четно, поэтому Аля задает \(k\) равным \(k|p_4 = 1|4 = 5\).
  • На \(5\)-й операции: \(5\) нечетно, поэтому Аля задает \(k\) равным \(k\&p_5 = 5\&5 = 5\).

Итоговое значение \(k\) равно \(5\). Можно показать, что итоговое значение \(k\) не может превышать \(5\) для всех перестановок длины \(5\). Другой корректный ответ — \([2, 3, 1, 4, 5]\).

Для второго набора входных данных максимальное значение \(k\) равно \(7\). Можно показать, что итоговое значение \(k\) не может быть больше \(7\) для всех перестановок длины \(6\). Другие корректные ответы: \([2, 4, 1, 6, 3, 5]\) и \([5, 2, 6, 1, 3, 4]\).

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\) монет.

G. Библиотека Магии

Бинарный поиск интерактив Конструктив математика разделяй и властвуй теория чисел *2200

Это интерактивная задача.

На кафедре сверхъестественных явлений Оксенфуртской Академии открылась Библиотека Магии, в которую вошли труды величайших чародеев Редании — \(n\) (\(3 \leq n \leq 10^{18}\)) видов книг, пронумерованных от \(1\) до \(n\). У каждой книги номер вида обозначен на переплёте. Более того, книги каждого вида хранятся в библиотеке ровно в двух экземплярах! А библиотекарем назначили Вас.

Однажды ночью Вы просыпаетесь от странного шума и видите существо, покидающее здание через окно. Из рюкзака таинственного вора торчали три толстых тома разных цветов. И перед тем как приступить к их поиску, Вы решили вычислить числа \(a\), \(b\) и \(c\), написанные на переплётах этих книг. Все три числа различны.

Итак, в Вашем распоряжении неупорядоченное множество томов, в котором по одному тому с попарно различными числами \(a\), \(b\) и \(c\) и по два тома для всех чисел от \(1\) до \(n\), кроме \(a\), \(b\) и \(c\). И Вы хотите найти эти значения \(a\), \(b\) и \(c\).

Так как Вы работаете не в простой библиотеке, а в Библиотеке Магии, то для проверки факта нахождения книг на своём месте Вы можете использовать только одно заклинание в виде запроса:

  • «xor l r» — Запрос побитового XOR-а с параметрами \(l\) и \(r\). Пусть \(k\) — количество таких томов в библиотеке, числа на которых больше либо равны \(l\) и меньше либо равны \(r\). Вы получите результат вычисления \(v_1 \oplus v_2 \oplus ... \oplus v_k\), где \(v_1 ... v_k\) — числа на переплётах этих томов, а \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Так как Ваши магические способности как библиотекаря сильно ограничены, Вы можете сделать не более \(150\) запросов.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 300\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \leq n \leq 10^{18}\)) — количество видов томов.

Протокол взаимодействия

Взаимодействие для каждого набора входных данных начинается с чтения целого числа \(n\).

Затем вы можете сделать до \(150\) запросов.

Чтобы сделать запрос, выведите строку в формате «xor l r» (без кавычек) (\(1 \leq l \leq r \leq n\)). После каждого запроса считайте целое число — ответ на ваш запрос.

Чтобы сообщить ответ, выведите строку в формате «ans a b c» (без кавычек), где \(a\), \(b\) и \(c\) — найденные вами числа для ответа на задачу. Вы можете вывести их в любом порядке.

Интерактор не адаптивен, что означает, что ответ известен до того, как участник задаст запросы, и не зависит от запросов, заданных участником.

После того как будет сделано \(150\) запросов, ответ на любой другой запрос будет равен \(-1\). Получив такой ответ, завершите программу, чтобы получить вердикт «WA» (Wrong answer).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «IL» (Idleness limit exceeded). Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) (\(1 \leq t \leq 300\)) — количество наборов входных данных.

Единственная строка каждого набора должна содержать четыре целых числа \(n\), \(a\), \(b\) и \(c\) (\(3 \leq n \leq 10^{18}\), \(1 \le a, b, c \le n\)) — количество книг в библиотеке и номера украденных томов. Числа \(a\), \(b\) и \(c\) должны быть различными.

Примечание

В примере в первом наборе входных данных книги в библиотеке после пропажи выглядят вот так:

Теперь рассмотрим ответы на запросы:

  • На запрос «xor 1 1» вы получаете результат \(1 \oplus 1 = 0\). Указанному в запросе условию удовлетворяет два тома — оба с номером \(1\).
  • На запрос «xor 2 2» вы получаете результат \(2\), так как только один том удовлетворяет указанному условию.
  • На запрос «xor 3 3» вы получаете результат \(3\).
  • На запрос «xor 4 6» вы получаете результат \(4 \oplus 6 \oplus 4 \oplus 5 \oplus 6 = 5\).

Во втором наборе входных данных всего \(3\) вида книг, и нетрудно догадаться, что отсутствующие имеют номера \(1\), \(2\) и \(3\).

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\) все составные. Могут быть и другие правильные конструкции.

F. Пылающее Пламя

Бинарный поиск математика сортировки Структуры данных *2100

Вы получили нового ограниченного персонажа события Шилонен. Вы решаете использовать её в бою.

На линии находится \(n\) врагов. \(i\)-й враг слева имеет здоровье \(h_i\) и в данный момент находится на позиции \(x_i\). У Шилонен есть урон от атаки \(m\), и вы готовы победить врагов с её помощью.

У Шилонен есть мощная атака «удар по земле». Перед тем, как вы выполните какие-либо атаки, вы выбираете целое число \(p\) и размещаете Шилонен там (\(p\) может быть любой целой позицией, включая позицию с врагом в данный момент). После этого, за каждую атаку она наносит \(m\) урона врагу на позиции \(p\) (если таковой имеется), \(m-1\) урона врагам на позициях \(p-1\) и \(p+1\), \(m-2\) урона врагам на позициях \(p-2\) и \(p+2\), и так далее. Враги, находящиеся на расстоянии не менее \(m\) от Шилонен, не получают урона от атак.

Формально, если враг находится на позиции \(x\), она нанесет \(\max(0,m - |p - x|)\) урона этому врагу за каждую атаку. Обратите внимание, что вы не можете выбрать другое \(p\) для разных атак.

Среди всех возможных \(p\) выведите минимальное количество атак, которые Шилонен должна выполнить, чтобы победить как минимум \(k\) врагов. Если невозможно найти \(p\), при котором в конечном итоге будет побеждено как минимум \(k\) врагов, выведите \(-1\) вместо этого. Обратите внимание, что враг считается побежденным, если его здоровье достигает \(0\) или ниже.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) – количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq k \leq n \leq 10^5\), \(1 \leq m \leq 10^9\)).

Следующая строка содержит \(n\) целых чисел \(h_1, h_2, ..., h_n\) (\(1 \leq h_i \leq 10^9\)).

Последняя строка каждого набора содержит \(n\) целых чисел \(x_1, x_2, ..., x_n\) (\(1\leq x_i \leq 10^9\), \(x_i < x_{i+1}\) для всех \(1 \leq i < n\))

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число на новой строке, минимальное количество атак, которые должны быть выполнены, чтобы победить как минимум \(k\) врагов. Если невозможно найти \(p\), при котором в конечном итоге будет побеждено как минимум \(k\) врагов, выведите \(-1\) вместо этого.

Примечание

В первом примере оптимально выбрать \(p=2\). За каждую атаку первый враг получает \(5-|2-1|=4\) урона, второй враг получает \(5\) урона, третий враг получает \(4\) урона, четвертый враг получает \(3\) урона, а пятый враг получает \(2\) урона. После \(2\) атак первые три врага будут побеждены. Можно показать, что невозможно победить \(3\) врага менее чем за \(2\) атаки, независимо от выбранного \(p\).

Во втором примере мы должны убить всех \(9\) врагов. Выбрав \(p=5\), все девять врагов будут побеждены за \(2\) атаки.

В третьем примере мы должны убить обоих врагов. Однако можно показать, что ни одно выбранное \(p\) не повредит обоих врагов одновременно, поэтому ответ будет \(-1\).

В четвертом примере выбор \(p=1\) позволит нам победить первого врага за \(6969697\) атак.

В пятом примере выбор \(p=10\) заставит каждого врага получать \(1\) урон за атаку. Оба врага будут побеждены за \(15\) атак.

G. Исследование Натлана

битмаски дп Комбинаторика математика Структуры данных теория чисел *2000

Вы исследуете потрясающий регион Натлан! Этот регион состоит из \(n\) городов, и каждый город имеет рейтинг привлекательности \(a_i\). Направленное ребро существует от города \(i\) к городу \(j\) тогда и только тогда, когда \(i < j\) и \(\gcd(a_i,a_j)\neq 1\), где \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) целых чисел \(x\) и \(y\).

Начав с города \(1\), ваша задача — определить общее количество различных путей, которыми вы можете добраться до города \(n\), по модулю \(998\,244\,353\). Два пути различны тогда и только тогда, когда множество посещённых городов различно.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество городов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(2 \leq a_i \leq 10^6\)) — привлекательность каждого города.

Выходные данные

Выведите общее количество различных путей, которыми вы можете добраться до города \(n\), по модулю \(998\,244\,353\).

Примечание

В первом примере пять путей следующие:

  • Город \(1\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(3\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(4\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(4\rightarrow\) Город \(5\)

Во втором примере два пути следующие:

  • Город \(1\rightarrow\) Город \(3\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(3\rightarrow\) Город \(5\)

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.

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:

F. Alternative Platforms

бпф Комбинаторика математика сортировки Структуры данных *2500

Suppose you are working in the Ministry of Digital Development of Berland, and your task is to monitor the industry of video blogging.

There are \(n\) bloggers in Berland. Recently, due to the poor state of the main video platform in Berland, two alternative platforms were introduced. That's why bloggers started to reupload their videos to these alternative platforms. You've got the statistics that the \(i\)-th blogger uploaded \(v_i\) videos to the first alternative platform and \(r_i\) videos to the second alternative platform.

You think that a potential user will be upset if even at least one of his favorite bloggers doesn't upload anything. However, if a blogger uploads videos to both platforms, the user will watch that blogger on the platform where more videos are available. So, you've come up with the following function to estimate user experience. Suppose a user watches \(k\) bloggers \(b_1, b_2, \dots, b_k\); then, let user experience be \(\)E(b_1, \dots, b_k) = \max\left(\min_{i=1..k}{v[b_i]}, \min_{i=1..k}{r[b_i]}\right).\(\)

In order to get some statistics, you want to calculate the value \(\mathit{avg}_k\) that is equal to an average experience among all subsets of bloggers of size \(k\). Also, you have to calculate \(\mathit{avg}_k\) for each \(k\) from \(1\) to \(n\).

Since answers may be too large, print them modulo \(998\,244\,353\).

Input

The first line contains a single integer \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — the number of bloggers.

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 number of videos of the \(i\)-th blogger on the first alternative platform.

The third line contains \(n\) integers \(r_1, r_2, \dots, r_n\) (\(0 \le r_i \le 10^6\)), where \(r_i\) is the number of videos of the \(i\)-th blogger on the second alternative platform.

Output

Print \(n\) integers \(\mathit{avg}_1, \mathit{avg}_2, \dots, \mathit{avg}_n\).

It can be proven that \(\mathit{avg}_k\) may be represented as an irreducible fraction \(\dfrac{x}{y}\) where \(y \not\equiv 0 \pmod{998\,244\,353}\). So, print \(\mathit{avg}_k\) in a form \(x \cdot y^{-1} \bmod 998\,244\,353\).

Note

In the first example, \(332748119\) is \(\frac{4}{3}\). In the third example, \(199648873\) is \(\frac{12}{5}\).

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.

C1. Shohag любит XOR (простая версия)

битмаски математика Перебор теория чисел *1200

Это простая версия задачи. Различия между двумя версиями выделены жирным шрифтом. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

У Shohag есть два целых числа \(x\) и \(m\). Помогите ему подсчитать количество целых чисел \(1 \le y \le m\) таких, что \(\mathbf{x \neq y}\) и \(x \oplus y\) является делителем\(^{\text{∗}}\) либо \(x\), либо \(y\), либо сразу обоих чисел. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

\(^{\text{∗}}\)Число \(b\) является делителем числа \(a\), если существует целое число \(c\) такое, что \(a = b \cdot c\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(x\) и \(m\) (\(1 \le x \le 10^6\), \(1 \le m \le 10^{18}\)).

Гарантируется, что сумма \(x\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих \(y\).

Примечание

В первом наборе входных данных, для \(x = 6\) существует \(3\) допустимых значения для \(y\) среди целых чисел от \(1\) до \(m = 9\) — числа \(4\), \(5\) и \(7\).

  • \(y = 4\) подходит, потому что \(x \oplus y = 6 \oplus 4 = 2\) и \(2\) является делителем как \(x = 6\), так и \(y = 4\).
  • \(y = 5\) подходит, потому что \(x \oplus y = 6 \oplus 5 = 3\) и \(3\) является делителем \(x = 6\).
  • \(y = 7\) подходит, потому что \(x \oplus y = 6 \oplus 7 = 1\) и \(1\) является делителем как \(x = 6\), так и \(y = 7\).

Во втором наборе входных данных для \(x = 5\) существует \(2\) допустимых значения для \(y\) среди целых чисел от \(1\) до \(m = 7\) — числа \(4\) и \(6\).

  • \(y = 4\) подходит, потому что \(x \oplus y = 5 \oplus 4 = 1\) и \(1\) является делителем как \(x = 5\), так и \(y = 4\).
  • \(y = 6\) подходит, потому что \(x \oplus y = 5 \oplus 6 = 3\) и \(3\) является делителем \(y = 6\).

C2. Shohag любит XOR (сложная версия)

битмаски математика Перебор теория чисел *1800

Это сложная версия задачи. Различия между двумя версиями выделены жирным шрифтом. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

У Shohag есть два целых числа \(x\) и \(m\). Помогите ему подсчитать количество целых чисел \(1 \le y \le m\) таких, что \(x \oplus y\) делится\(^{\text{∗}}\) либо на \(x\), либо на \(y\), либо сразу на оба числа. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

\(^{\text{∗}}\)Число \(a\) делится на число \(b\), если существует целое число \(c\) такое, что \(a = b \cdot c\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(x\) и \(m\) (\(1 \le x \le 10^6\), \(1 \le m \le 10^{18}\)).

Гарантируется, что сумма \(x\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих \(y\).

Примечание

В первом наборе входных данных для \(x = 7\) существует \(3\) допустимых значения \(y\) среди целых чисел от \(1\) до \(m = 10\) — числа \(1\), \(7\) и \(9\).

  • \(y = 1\) подходит, потому что \(x \oplus y = 7 \oplus 1 = 6\) и \(6\) делится на \(y = 1\).
  • \(y = 7\) подходит, потому что \(x \oplus y = 7 \oplus 7 = 0\) и \(0\) делится как на \(x = 7\), так и на \(y = 7\).
  • \(y = 9\) подходит, потому что \(x \oplus y = 7 \oplus 9 = 14\) и \(14\) делится на \(x = 7\).

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\), то есть они равны, что недопустимо!

E. Shohag любит инверсии

дп Комбинаторика математика реализация *2200

У Shohag есть массив целых чисел \(a\). Изначально \(a = [0, 1]\). Он может выполнять следующую операцию любое количество раз:

  • Пусть \(k\) — количество инверсий\(^{\text{∗}}\) в текущем массиве \(a\).
  • Вставить \(k\) на любую позицию в \(a\), в том числе возможно в начало или конец.

Например, если \(a = [4, 6, 2, 4]\), то количество инверсий равно \(k = 3\). Таким образом, после операции вы можете получить следующие массивы: \([\textbf{3}, 4, 6, 2, 4]\), \([4, \textbf{3}, 6, 2, 4]\), \([4, 6, \textbf{3}, 2, 4]\), \([4, 6, 2, \textbf{3}, 4]\), и \([4, 6, 2, 4, \textbf{3}]\).

По заданному целому числу \(n\), помогите Shohag подсчитать количество различных массивов длины \(n\), которые можно получить после выполнения операций, по модулю \(998\,244\,353\).

\(^{\text{∗}}\)Количество инверсий в массиве \(a\) — это количество пар индексов (\(i\), \(j\)) таких, что \(i < j\) и \(a_i > a_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 10^6\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите целое число — количество массивов по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных можно получить следующие \(5\) массивов (вставленное количество инверсий выделено жирным шрифтом):

  • \([0, 1] \rightarrow [0, \textbf{0}, 1] \rightarrow [0, 0, 1, \textbf{0}]\),
  • \([0, 1] \rightarrow [0, \textbf{0}, 1] \rightarrow [0, 0, \textbf{0}, 1]\),
  • \([0, 1] \rightarrow [0, 1, \textbf{0}] \rightarrow [0, 1, 0, \textbf{1}]\),
  • \([0, 1] \rightarrow [0, 1, \textbf{0}] \rightarrow [0, 1, \textbf{1}, 0]\),
  • \([0, 1] \rightarrow [0, 1, \textbf{0}] \rightarrow [\textbf{1}, 0, 1, 0]\).

F1. Shohag любит считать (простая версия)

дп Комбинаторика математика теория чисел *2800

Это простая версия задачи. Единственные различия между двумя версиями этой задачи — ограничения на \(t\), \(m\) и сумму \(m\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Для массива целых чисел \(a\) длины \(n\) определим \(f(k)\) как наибольший общий делитель (НОД) максимальных значений всех подмассивов\(^{\text{∗}}\) длины \(k\). Например, если массив равен \([2, 1, 4, 6, 2]\), то \(f(3) = \operatorname{gcd}(\operatorname{max}([2, 1, 4]), \operatorname{max}([1, 4, 6]), \operatorname{max}([4, 6, 2])) = \operatorname{gcd}(4, 6, 6) = 2\).

Массив является хорошим, если для всех пар \(1 \le i \lt j \le n\) выполняется \(f(i) \neq f(j)\).

У Shohag есть целое число \(m\). Помогите ему подсчитать количество непустых хороших массивов произвольной длины, каждый элемент которых является целым числом от \(1\) до \(m\), по модулю \(998\,244\,353\).

\(^{\text{∗}}\)Массив \(d\) является подмассивом массива \(c\), если \(d\) можно получить из \(c\) путем удаления нескольких (возможно, нуля или всех) элементов из начала и нескольких (возможно, нуля или всех) элементов из конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит целое число \(m\) (\(1 \le m \le 10^5\)).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число — количество подходящих массивов по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных подходящими массивами являются \([1]\), \([1, 2]\), \([2]\) и \([2, 1]\).

Во втором наборе входных данных всего \(29\) подходящих массивов. В частности, массив \([2, 1, 4]\) длины \(n = 3\) подходит, так как все его элементы принадлежат отрезку от \(1\) до \(m = 5\) и \(f(1)\), \(f(2)\) и \(f(n = 3)\) различны:

  • \(f(1) = \operatorname{gcd}(\operatorname{max}([2]), \operatorname{max}([1]), \operatorname{max}([4])) = \operatorname{gcd}(2, 1, 4) = 1.\)
  • \(f(2) = \operatorname{gcd}(\operatorname{max}([2, 1]), \operatorname{max}([1, 4])) = \operatorname{gcd}(2, 4) = 2.\)
  • \(f(3) = \operatorname{gcd}(\operatorname{max}([2, 1, 4])) = \operatorname{gcd}(4) = 4.\)

G. Shohag любит Пебе

математика теория чисел *3500

У Shohag есть дерево с \(n\) вершинами.

У Пебе есть целое число \(m\). Она хочет присвоить каждой вершине значение — целое число от \(1\) до \(m\). Поэтому она просит Shohag подсчитать количество назначений, таких, что выполняются следующие условия, по модулю \(998\,244\,353\):

Но эта задача слишком сложна для Shohag. Поскольку Shohag любит Пебе, он должен решить эту задачу. Пожалуйста, спасите Shohag!

Входные данные

Первая строка содержит два разделенных пробелом целых числа \(n\) и \(m\) (\(2 \le n \le 10^6\), \(1 \le m \le 10^{9}\)).

Каждая из следующих \(n - 1\) строк содержит по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)), указывающих на наличие ребра между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите одно целое число — количество допустимых способов назначить каждой вершине значение по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных допустимыми назначениями являются \([1, 1, 1, 1, 1, 1]\) и \([1, 1, 1, 1, 1, 5]\).

Во втором наборе входных данных допустимыми назначениями являются \([1, 1]\), \([1, 3]\), \([1, 5]\), \([3, 1]\), \([3, 5]\), \([5, 1]\) и \([5, 3]\).

C. Маленький Слоник и Фурик и Рубик

математика Теория вероятностей *2000

Маленький Слоник очень любит Фурика и Рубика, с которыми он познакомился в мегаполисе городского типа Кременчуге.

У Маленького Слоника есть две строки a и b одинаковой длины, состоящие только из прописных букв латинского алфавита. Маленький Слоник выбирает пару подстрок одинаковой длины — первую из строки a, вторую из строки b. Выбор происходит случайно равновероятно среди всех возможных пар. Обозначим подстроку строки a через x, а подстроку строки b — через y. Строку x Маленький Слоник отдает Фурику, строку y — Рубику.

Пусть f(x, y) — количество таких позиций i (1 ≤ i ≤ |x|), что xi = yi (где |x| — длина строк x и y, а xi, yii-ые символы строк x и y соответственно). Помогите Фурику и Рубику найти математическое ожидание величины f(x, y).

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 2·105) — длина строк a и b. Во второй строке задана строка a, в третьей — строка b. Строки состоят только из прописных букв латинского алфавита. Длина обеих строк равна n.

Выходные данные

В единственной строке выведите вещественное число — ответ на задачу. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не будет превышать 10 - 6.

Примечание

Пусть задана строка a = a1a2... a|a|, тогда обозначим через |a| длину строки, а через aii-й символ строки.

Подстрокой a[l... r] (1 ≤ l ≤ r ≤ |a|) строки a называется строка alal + 1... ar.

Строка a является подстрокой строки b, если существует такая пара целых чисел l и r (1 ≤ l ≤ r ≤ |b|), что b[l... r] = a.

Рассмотрим первый тестовый пример. В первом примере есть 5 возможных пар подстрок: («A», «B»), («A», «A»), («B», «B»), («B», «A»), («AB», «BA»). Для второй и третьей пары знечение f(x, y) равно 1, для остальных — 0. Вероятность выбора каждой пары равна , поэтому ответ равен · 0  +  · 1  +  · 1  +  · 0  +  · 0  =   =  0.4.

A. Игра деления

игры математика *800

Дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и число \(k\).

Играют два игрока. Первый игрок выбирает индекс \(1 \le i \le n\). Затем второй игрок выбирает другой индекс \(1 \le j \le n, i \neq j\). Первый игрок побеждает, если \(|a_i - a_j|\) не делится на число \(k\). В противном случае побеждает второй игрок.

Мы играем за первого игрока. Необходимо определить, можно ли победить, и если да, то какой индекс \(i\) следует для этого выбрать.

Абсолютное значение (или модуль) числа \(x\) обозначается как \(|x|\) и равно \(x\), если \(x \ge 0\), и \(-x\) в противном случае.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\); \(1 \le k \le 100\)) — длина массива и число \(k\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 100\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных, если первому игроку победить невозможно, выведите «NO» (без кавычек).

Иначе выведите «YES» (без кавычек) и на следующей строке подходящий индекс \(1 \le i \le n\). Если есть несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе первый игрок может выбрать \(a_2 = 2\). Тогда:

  • Если второй игрок выберет \(a_1 = 1\), то полученная разность будет \(|2 - 1| = 1\), что не делится на \(k = 2\).
  • Если второй игрок выберет \(a_3 = 3\), то полученная разность будет \(|2 - 3| = 1\), что не делится на \(k = 2\).

Во втором наборе:

  • Если первый игрок выберет \(a_1 = 1\), то второй игрок выберет \(a_4 = 5\), и полученная разность будет \(|1 - 5| = 4\), что делится на \(k = 2\).
  • Если первый игрок выберет \(a_2 = 2\), то второй игрок выберет \(a_3 = 4\), и полученная разность будет \(|2 - 4| = 2\), что делится на \(k = 2\).
  • Если первый игрок выберет \(a_3 = 4\), то второй игрок выберет \(a_2 = 2\), и полученная разность будет \(|4 - 2| = 2\), что делится на \(k = 2\).
  • Если первый игрок выберет \(a_4 = 5\), то второй игрок выберет \(a_1 = 1\), и полученная разность будет \(|5 - 1| = 4\), что делится на \(k = 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]\).

E. Контроль случайности

графы Деревья дп жадные алгоритмы Комбинаторика математика поиск в глубину и подобное Теория вероятностей *2100

Дано дерево с \(n\) вершинами.

В некоторую вершину \(v \ne 1\) посадят робота. Пусть у вас изначально есть \(p\) монет. Рассмотрим следующий процесс, где в \(i\)-й шаг (начиная с \(i = 1\)):

  • Если \(i\) нечётное, робот передвинется в соседнюю вершину в сторону вершины \(1\);
  • Иначе, \(i\) чётное. Можно либо заплатить одну монету (если остались), после чего робот передвинется в соседнюю вершину в сторону вершины \(1\), либо ничего не платить, после чего робот передвинется в равновероятно выбранную соседнюю вершину.

Процесс останавливается, как только робот попадает в вершину \(1\). Определим \(f(v, p)\) как минимально возможное математическое ожидание количества шагов процесса выше (количество использованных монет минимизировать не надо).

Необходимо ответить на \(q\) запросов, в \(i\)-м из которых надо найти значение \(f(v_i, p_i)\) по модулю\(^{\text{∗}}\) \(998\,244\,353\).

\(^{\text{∗}}\) Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(q\) (\(2 \le n \le 2 \cdot 10^3\); \(1 \le q \le 2 \cdot 10^3\)) — количество вершин в дереве и количество запросов.

В следующих \(n - 1\) строках каждого набора входных данных заданы ребра дерева: по одному в строке. В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)), обозначающих ребро между вершинами \(u_i\) и \(v_i\).

В следующих \(q\) строках каждого набора входных данных заданы два целых числа: \(v_i\) и \(p_i\) (\(2 \le v_i \le n\); \(0 \le p_i \le n\)).

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 3\).

Гарантируется, что сумма значений \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 3\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел: значения \(f(v_i, p_i)\) по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Дерево из первого набора показано ниже:

Для первого запроса значение математического ожидания равно \(1\), так как робот начинает движение с вершины \(2\) и первым ходом попадает в вершину \(1\) и завершает перемещение.

Посчитаем значение математического ожидания для второго запроса (\(x\) это количество шагов в процессе):

  • \(P(x < 2) = 0\), расстояние до вершины \(1\) равно \(2\) и робот не может дойти до него за меньшее количество шагов.
  • \(P(x = 2) = \frac{1}{3}\), так как есть только одна последовательность шагов, приводящая к \(x = 2\). Это \(3 \rightarrow_{1} 2 \rightarrow_{0.33} 1\) с вероятностью \(1 \cdot \frac{1}{3}\).
  • \(P(x \bmod 2 = 1) = 0\), так как робот может достичь вершину \(1\) сделав только чётное количество шагов.
  • \(P(x = 4) = \frac{2}{9}\): возможные пути \(3 \rightarrow_{1} 2 \rightarrow_{0.67} [3, 4] \rightarrow_{1} 2 \rightarrow_{0.33} 1\).
  • \(P(x = 6) = \frac{4}{27}\): возможные пути \(3 \rightarrow_{1} 2 \rightarrow_{0.67} [3, 4] \rightarrow_{1} 2 \rightarrow_{0.67} [3, 4] \rightarrow_{1} 2 \rightarrow_{0.33} 1\).
  • \(P(x = i \cdot 2) = \frac{2^{i - 1}}{3^i}\) в общем случае.

В результате \(f(v, p) = \sum\limits_{i=1}^{\infty}{i \cdot 2 \cdot \frac{2^{i - 1}}{3^i}} = 6\).

Дерево из второго набора показано ниже:

F. Количество кубов

дп Комбинаторика математика теория чисел *2700

Рассмотрим прямой параллелепипед с размерами сторон \(a\), \(b\) и \(c\), состоящий из единичных кубиков \(k\) различных цветов. Мы можем делать циклические сдвиги параллелепипеда в любом измерении и в любой комбинации\(^{\text{∗}}\).

Имеется \(d_i\) кубиков \(i\)-го цвета (\(1 \le i \le k\)). Сколько можно составить из этих кубиков различных параллелепипедов с данными размерами сторон, никакие два из которых нельзя совместить комбинацией сдвигов?

\(^{\text{∗}}\)На рисунке:

  • Слева-вверху показан вид сверху у изначального параллелепипеда. Нижние слои будут сдвигаться по аналогии с верхним.
  • Справа-вверху показан вид сверху у параллелепипеда, сдвинутого направо на \(1\).
  • Слева-внизу показан вид сверху у параллелепипеда, сдвинутого вниз на \(2\).
  • Справа-внизу показан вид сверху у параллелепипеда, сдвинутого направо на \(1\) и вниз на \(2\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа: \(a\), \(b\), \(c\) и \(k\) (\(1 \le a, b, c \le 3 \cdot 10^6\); \(a \cdot b \cdot c \le 3 \cdot 10^6\); \(1 \le k \le 10^6\)) — три стороны параллелепипеда и количество цветов единичных кубиков.

Вторая строка каждого набора входных данных содержит \(k\) целых чисел \(d_1, d_2, \ldots, d_k\) (\(1 \le d_1 \le d_2 \le \ldots \le d_k \le 3 \cdot 10^6\)) — элементы массива \(d\): количества кубиков заданного цвета.

Гарантируется, что в каждом наборе входных данных сумма элементов массива \(d\) равна \(a \cdot b \cdot c\).

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(10 ^ 6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных параллелепипедов по модулю \(998\,244\,353\).

Примечание

В первом наборе существует только один параллелепипед, состоящий из одного единичного куба.

Возможные параллелепипеды во втором наборе

B. Bowling Frame

Бинарный поиск математика Перебор *1200

Bowling is a national sport in Taiwan; everyone in the country plays the sport on a daily basis since their youth. Naturally, there are a lot of bowling alleys all over the country, and the competition between them is as intense as you can imagine.

Maw-Shang owns one such bowling alley. To stand out from other competitors in the industry and draw attention from customers, he decided to hold a special event every month that features various unorthodox bowling rules. For the event this month, he came up with a new version of the game called X-pin bowling. In the traditional \(10\)-pin bowling game, a frame is built out of ten bowling pins forming a triangular shape of side length four. The pin closest to the player forms the first row, and the two pins behind it form the second row, and so on. Unlike the standard version, the game of \(X\)-pin bowling Maw-Shang designed allows a much larger number of pins that form a larger frame. The following figure shows a standard \(10\)-pin frame on the left, and on the right it shows a \(21\)-pin frame that forms a triangular shape of side length six which is allowed in the game of \(X\)-pin bowling.

Being the national sport, the government of Taiwan strictly regulates and standardizes the manufacturing of bowling pins. There are two types of bowling pins allowed, one in black and the other in white, and the bowling alley Maw-Shang owns has \(w\) white pins and \(b\) black pins. To make this new game exciting for the customers, Maw-Shang wants to build the largest possible frame from these \(w+b\) pins. However, even though he is okay with using both colors in building the frame, for aesthetic reasons, Maw-Shang still wants the colors of the pins on the same row to be identical. For example, the following figure shows two possible frames of side length six, but only the left one is acceptable to Maw-Shang since the other one has white and black pins mixed in the third row.

The monthly special event is happening in just a few hours. Please help Maw-Shang calculate the side length of the largest frame that he can build from his \(w+b\) pins!

Input

The first line of the input contains a single integer \(t\), the number of test cases. Each of the following \(t\) lines contains two integers \(w\) and \(b\), the number of white and black pins, respectively.

  • \(1 \leq t \leq 100\)
  • \(0 \leq w, b \leq 10^9\)
Output

For each test case, output in a single line the side length \(k\) of the largest pin satisfying Maw-Shang's requirement you can build with the given pins.

E. Beautiful Array

Конструктив математика *1200

Image generated by ChatGPT 4o.

A-Ming's birthday is coming and his friend A-May decided to give him an integer array as a present. A-Ming has two favorite numbers \(a\) and \(b\), and he thinks an array is beautiful if its mean is exactly \(a\) and its median is exactly \(b\). Please help A-May find a beautiful array so her gift can impress A-Ming.

The mean of an array is its sum divided by its length. For example, the mean of array \([3, -1, 5, 5]\) is \(12 \div 4 = 3\).

The median of an array is its middle element after sorting if its length is odd, or the mean of two middle elements after sorting if its length is even. For example, the median of \([1, 1, 2, 4, 8]\) is \(2\) and the median of \([3, -1, 5, 5]\) is \((3 + 5) \div 2 = 4\).

Note that the mean and median are not rounded to an integer. For example, the mean of array \([1, 2]\) is \(1.5\).

Input

The only line contains two integers \(a\) and \(b\).

  • \(-100 \leq a, b \leq 100\).
  • The length of the array must be between \(1\) and \(1000\).
  • The elements of the array must be integers and their absolute values must not exceed \(10^6\).
Output

In the first line, print the length of the array.

In the second line, print the elements of the array.

If there are multiple solutions, you can print any. It can be proved that, under the constraints of the problem, a solution always exists.

H. Sheet Music

дп Комбинаторика математика *2300

Image generated by ChatGPT 4o.

Alice likes singing. As a singing enthusiast, Alice has listened to countless songs and has tried singing them many times. However, occasionally, some songs make Alice feel bored. After some research, Alice believes that this is because even though the songs she chose are all different, due to her instinctive preference, they all turn out to be musically similar to one another.

To thoroughly analyze this, Alice decided to study the sheet music of the songs. For convenience, Alice represented a song of length \(n\) as an integer sequence \(a_1, a_2, \ldots, a_n\), where \(a_i\) is the pitch of the \(i\)-th note. Then she defined the musical equivalence between songs. Two songs \(a_1, a_2, \ldots, a_n\) and \(b_1, b_2, \ldots, b_n\) of length \(n\) are musically equivalent if for all \(1\leq i<n\), both \(a_i, a_{i+1}\) and \(b_{i}, b_{i+1}\) have the same pitch relationship. More specifically, \(a_i, a_{i+1}\) and \(b_i, b_{i+1}\) have the same pitch relationship if either

  • \(a_i < a_{i + 1}\) and \(b_i < b_{i + 1}\),
  • \(a_i = a_{i + 1}\) and \(b_i = b_{i + 1}\), or
  • \(a_i > a_{i + 1}\) and \(b_i > b_{i + 1}\).
For example, \(1, 2, 3, 3, 2\) and \(5, 9, 13, 13, 1\) are musically equivalent, while \(1, 2, 3, 2, 1\) and \(1, 2, 2, 2, 1\) are not.

Having practiced consistently for a long time, Alice is able to sing any note in the range of \([1, k]\). She wants to know how many different songs of length \(n\) within her range there are, if we treat musically equivalent songs as the same one. Can you help her calculate the number?

Since the answer might be large, print the answer modulo \(998244353\).

Input

The only line contains two integers \(n, k\).

  • \(1\leq n\leq 10^6\)
  • \(1\leq k \leq 10^9\)
Output

Output the number of different songs modulo \(998244353\).

A. Преобразование монет

математика Перебор *800

Изначально у вас есть монета номиналом \(n\). Вы можете выполнять следующую операцию любое количество раз (возможно, ноль):

  • преобразовать одну монету номиналом \(x\), где \(x\) больше \(3\) (\(x>3\)), в две монеты номиналом \(\lfloor \frac{x}{4} \rfloor\).

Какое максимальное количество монет вы можете иметь после того, как выполните эту операцию любое количество раз?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей одно целое число \(n\) (\(1 \le n \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество монет, которые вы можете иметь после выполнения операции любое количество раз.

Примечание

В первом примере у вас есть монета номиналом \(1\), и вы ничего не можете с ней сделать. Таким образом, ответ равен \(1\).

Во втором примере вы можете преобразовать монету номиналом \(5\) в две монеты номиналом \(1\).

В третьем примере вы можете преобразовать монету номиналом \(16\) в две монеты номиналом \(4\). Каждую из получившихся монет можно преобразовать в две монеты номиналом \(1\).

B. Цифры

математика теория чисел *1100

Артем записал на доске цифру \(d\) ровно \(n!\) раз подряд. То есть у него получилось число \(dddddd \dots ddd\) (ровно \(n!\) цифр).

Теперь ему интересно, на какие нечетные цифры от \(1\) до \(9\) делится записанное число.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, которая содержит два целых числа \(n\) и \(d\) (\(2 \le n \le 10^9\), \(1 \le d \le 9\)).

Выходные данные

Для каждого набора входных данных выведите искомые цифры в возрастающем порядке.

Примечание

Факториал целого неотрицательного числа \(n\) (\(n!\)) — это произведение всех целых чисел от \(1\) до \(n\). Например, факториал числа \(5\) будет равен \(1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 = 120\).

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]\).

D. Задача про НОД

математика Перебор Потоки теория чисел *1800

Даны три числа \(l\), \(r\) и \(G\). Найдите два числа \(A\) и \(B\) (\(l \le A \le B \le r\)), такие, что их наибольший общий делитель равен \(G\), а расстояние \(|A - B|\) максимально.

Если существует несколько таких пар, выберите ту, где \(A\) минимально. Если подходящих пар нет, выведите «-1 -1».

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, строка содержит три целых числа \(l, r, G\) (\(1 \le l \le r \le 10^{18}\); \(1 \le G \le 10^{18}\)) — границы отрезка и искомый НОД.

Выходные данные

Для каждого набора входных данных выведите два целых числа \(A\) и \(B\) — ответ на задачу, либо «-1 -1», если подходящей пары чисел не существует.

A. Легкая задача

математика Перебор *800

Дано целое число \(n\). Cube хочет знать, сколько существует упорядоченных пар положительных целых чисел \((a,b)\) таких, что \(a=n-b\). Поскольку Cube не очень хороша в математике, пожалуйста, помогите ей!

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 99\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 100\)).

Выходные данные

Для каждого набора входных данных выведите количество упорядоченных пар \((a, b)\) на новой строке.

Примечание

В первом наборе входных данных единственная упорядоченная пара, которая подходит, это \((a,b)=(1,1)\).

Во втором наборе входных данных три упорядоченные пары \((a,b)\), которые подходят: \((3,1), (2,2), (1,3)\).

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)\)

F. Легкая демоническая задача

Бинарный поиск математика Перебор Структуры данных теория чисел *1900

Для произвольной матрицы Robot определяет её красоту как сумму элементов в матрице.

Robot дает вам массив \(a\) длиной \(n\) и массив \(b\) длиной \(m\). Вы строите матрицу \(n\) на \(m\) \(M\), такую что \(M_{i,j}=a_i\cdot b_j\) для всех \(1 \leq i \leq n\) и \(1 \leq j \leq m\).

Затем Robot дает вам \(q\) запросов, каждый из которых состоит из одного целого числа \(x\). Для каждого запроса определите, возможно ли выполнить следующую операцию ровно один раз так, чтобы \(M\) имела красоту \(x\):

  1. Выберите целые числа \(r\) и \(c\) такие, что \(1 \leq r \leq n\) и \(1 \leq c \leq m\).
  2. Установите \(M_{i,j}\) в \(0\) для всех упорядоченных пар \((i,j)\) таких, что \(i=r\), \(j=c\) или оба.

Обратите внимание, что запросы не являются постоянными, что означает, что вы на самом деле не устанавливаете никакие элементы в \(0\) в процессе — вам только нужно вывести, возможно ли найти \(r\) и \(c\) так, чтобы, если вышеуказанная операция будет выполнена, красота матрицы будет равна \(x\). Также обратите внимание, что вы должны выполнять операцию для каждого запроса, даже если красота исходной матрицыуже равна \(x\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \leq n,m \leq 2\cdot 10^5, 1 \leq q \leq 5\cdot 10^4\)) — длина \(a\), длина \(b\) и количество запросов соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq |a_i| \leq n\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0 \leq |b_i| \leq m\)).

Следующие \(q\) строк каждая содержит одно целое число \(x\) (\(1 \leq |x| \leq 2\cdot 10^5\)), красота матрицы, которую вы хотите достичь, установив все элементы в строке и столбце в \(0\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует способ выполнить вышеупомянутую операцию так, чтобы красота была равна \(x\), и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

Во втором примере матрица выглядит следующим образом:

0 -2 5 0 -3

0 4 -10 0 6

0 -6 15 0 -9

0 0 0 0 0

0 0 0 0 0

Выполнив операцию с \(r=4\) и \(c=2\), получим матрицу:

0 0 5 0 -3

0 0 -10 0 6

0 0 15 0 -9

0 0 0 0 0

0 0 0 0 0

которая имеет красоту \(4\). Таким образом, мы выводим YES.

В втором запросе, выбирая \(r=3\) и \(c=5\), получается матрица с красотой \(-3\).

В третьем запросе, выбирая \(r=3\) и \(c=3\), получается матрица с красотой \(5\).

H. Сложная демоническая задача

дп Конструктив математика реализация Структуры данных *2100

Swing открывает фабрику блинов! Хорошая фабрика блинов должна хорошо уметь разравнивать вещи, поэтому Swing собирается протестировать свое новое оборудование на 2D матрицах.

Swing дана матрица \(n \times n\) \(M\), содержащая положительные целые числа. У него есть \(q\) запросов, которые он хочет вам задать.

Для каждого запроса он дает вам четыре целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) и просит вас разровнять подматрицу, ограниченную \((x_1, y_1)\) и \((x_2, y_2)\), в массив \(A\). Формально, \(A = [M_{(x1,y1)}, M_{(x1,y1+1)}, \ldots, M_{(x1,y2)}, M_{(x1+1,y1)}, M_{(x1+1,y1+1)}, \ldots, M_{(x2,y2)}]\).

Следующее изображение иллюстрирует разравнивание подматрицы, ограниченной красными пунктирными линиями. Оранжевые стрелки указывают направление, в котором элементы подматрицы добавляются в конец \(A\), а \(A\) показан внизу изображения.

После этого он спрашивает вас о значении \(\sum_{i=1}^{|A|} A_i \cdot i\) (сумма \(A_i \cdot i\) по всем \(i\)).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Первая строка каждого теста содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 2000, 1 \leq q \leq 10^6\)) — размер \(M\) и количество запросов.

Следующие \(n\) строк содержат по \(n\) целых чисел, \(i\)-я из которых содержит \(M_{(i,1)}, M_{(i,2)}, \ldots, M_{(i,n)}\) (\(1 \leq M_{(i, j)} \leq 10^6\)).

Следующие \(q\) строк содержат четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\) (\(1 \leq x_1 \leq x_2 \leq n, 1 \leq y_1 \leq y_2 \leq n\)) — границы запроса.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2000\), а сумма \(q\) по всем тестовым случаям не превышает \(10^6\).

Выходные данные

Для каждого теста выведите результаты \(q\) запросов на новой строке.

Примечание

Во втором запросе первого набора входных данных, \(A = [9, 5, 5, 2]\). Поэтому сумма равна \(1 \cdot 9 + 2 \cdot 5 + 3 \cdot 5 + 4 \cdot 2 = 42\).

B. ICPC Square

математика теория чисел *2000

ICPC Square is a hotel provided by the ICPC Committee for the accommodation of the participants. It consists of \(N\) floors (numbered from \(1\) to \(N\)). This hotel has a very unique elevator. If a person is currently at floor \(x\), by riding the elevator once, they can go to floor \(y\) if and only if \(y\) is a multiple of \(x\) and \(y - x \leq D\).

You are currently at floor \(S\). You want to go to the highest possible floor by riding the elevator zero or more times. Determine the highest floor you can reach.

Input

A single line consisting of three integers \(N\) \(D\) \(S\) (\(2 \leq N \leq 10^{12}; 1 \leq D \leq N - 1; 1 \leq S \leq N\)).

Output

Output a single integer representing the highest floor you can reach by riding the elevator zero or more times.

Note

Explanation for the sample input/output #1

First, ride the elevator from floor \(3\) to floor \(15\). This is possible because \(15\) is a multiple of \(3\) and \(15 - 3 \leq 35\). Then, ride the elevator from floor \(15\) to floor \(30\). This is possible because \(30\) is a multiple of \(15\) and \(30 - 15 \leq 35\). Finally, ride the elevator from floor \(30\) to floor \(60\). This is possible because \(60\) is a multiple of \(30\) and \(60 - 30 \leq 35\).

F. Grid Game 3-angle

игры математика *3000

Your friends, Anda and Kamu decide to play a game called Grid Game and ask you to become the gamemaster. As the gamemaster, you set up a triangular grid of size \(N\). The grid has \(N\) rows (numbered from \(1\) to \(N\)). Row \(r\) has \(r\) cells; the \(c\)-th cell of row \(r\) is denoted as \((r, c)\).

Before the game starts, \(M\) different cells (numbered from \(1\) to \(M\)) are chosen: at cell \((R_i, C_i)\), you add \(A_i\) stones on it. You then give Anda and Kamu an integer \(K\) and commence the game.

Anda and Kamu will take turns alternately with Anda taking the first turn. A player on their turn will do the following.

  • Choose a cell \((r, c)\) with at least one stone on it.
  • Remove at least one but at most \(K\) stones from the chosen cell.
  • For each cell \((x, y)\) such that \(r + 1 \leq x \leq \min(N, r + K)\) and \(c \leq y \leq c + x - r\), add zero or more stones but at most \(K\) stones to cell \((x, y)\).

The following illustrations show all the possible cells in which you can add stones for \(K = 3\). You choose the cell \((2, 1)\) for the left illustration and the cell \((4, 3)\) for the right illustration.

A player who is unable to complete their turn (because there are no more stones on the grid) will lose the game, and the opposing player wins. Determine who will win the game if both players play optimally.

Input

This problem is a multi-case problem. The first line consists of an integer \(T\) (\(1 \leq T \leq 100\)) that represents the number of test cases.

Each test case starts with a single line consisting of three integers \(N\) \(M\) \(K\) (\(1 \leq N \leq 10^9; 1 \leq M, K \leq 200\,000\)). Then, each of the next \(M\) lines consists of three integers \(R_i\) \(C_i\) \(A_i\) (\(1 \leq C_i \leq R_i \leq N; 1 \leq A_i \leq 10^9\)). The pairs \((R_i, C_i)\) are distinct.

The sum of \(M\) across all test cases does not exceed \(200\,000\).

Output

For each case, output a string in a single line representing the player who will win the game if both players play optimally. Output Anda if Anda, the first player, wins. Otherwise, output Kamu.

Note

Explanation for the sample input/output #1

For the first case, during the first turn, Anda will remove all the stones from cell \((1, 1)\) and then add three stones at \((2, 1)\). The only cell with stones left is now cell \((2, 1)\) with five stones, so Kamu must remove stones from that cell. No matter how many stones are removed by Kamu, Anda can remove all the remaining stones at \((2, 1)\) and win the game.

For the second case, Kamu can always mirror whatever move made by Anda until Anda can no longer complete their turn.

G. X Aura

графы кратчайшие пути математика *2200

Mount ICPC can be represented as a grid of \(R\) rows (numbered from \(1\) to \(R\)) and \(C\) columns (numbered from \(1\) to \(C\)). The cell located at row \(r\) and column \(c\) is denoted as \((r, c)\) and has a height of \(H_{r, c}\). Two cells are adjacent to each other if they share a side. Formally, \((r, c)\) is adjacent to \((r-1, c)\), \((r+1, c)\), \((r, c-1)\), and \((r, c+1)\), if any exists.

You can move only between adjacent cells, and each move comes with a penalty. With an aura of an odd positive integer \(X\), moving from a cell with height \(h_1\) to a cell with height \(h_2\) gives you a penalty of \((h_1 - h_2)^X\). Note that the penalty can be negative.

You want to answer \(Q\) independent scenarios. In each scenario, you start at the starting cell \((R_s, C_s)\) and you want to go to the destination cell \((R_f, C_f)\) with minimum total penalty. In some scenarios, the total penalty might become arbitrarily small; such a scenario is called invalid. Find the minimum total penalty to move from the starting cell to the destination cell, or determine if the scenario is invalid.

Input

The first line consists of three integers \(R\) \(C\) \(X\) (\(1 \leq R, C \leq 1000; 1 \leq X \leq 9; X\) is an odd integer).

Each of the next \(R\) lines consists of a string \(H_r\) of length \(C\). Each character in \(H_r\) is a number from 0 to 9. The \(c\)-th character of \(H_r\) represents the height of cell \((r, c)\), or \(H_{r, c}\).

The next line consists of an integer \(Q\) (\(1 \leq Q \leq 100\,000)\).

Each of the next \(Q\) lines consists of four integers \(R_s\) \(C_s\) \(R_f\) \(C_f\) (\(1 \leq R_s, R_f \leq R; 1 \leq C_s, C_f \leq C\)).

Output

For each scenario, output the following in a single line. If the scenario is invalid, output INVALID. Otherwise, output a single integer representing the minimum total penalty to move from the starting cell to the destination cell.

Note

Explanation for the sample input/output #1

For the first scenario, one of the solutions is to move as follows: \((1, 1) \rightarrow (2, 1) \rightarrow (3, 1) \rightarrow (3, 2) \rightarrow (3, 3) \rightarrow (3, 4)\). The total penalty of this solution is \((3 - 4)^1 + (4 - 3)^1 + (3 - 6)^1 + (6 - 8)^1 + (8 - 1)^1 = 2\).

Explanation for the sample input/output #2

For the first scenario, the cycle \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (1, 2) \rightarrow (1, 1)\) has a penalty of \((1 - 2)^5 + (2 - 0)^5 + (0 - 9)^5 + (9 - 1)^5 = -26250\). You can keep repeating this cycle to make your total penalty arbitrarily small. Similarly, for the second scenario, you can move to \((1, 1)\) first, then repeat the same cycle.

A. Алена и квадратный пазл

математика реализация *800

Алена собирает необычный пазл. Она делает это в течение \(n\) дней следующим образом:

  • В первый день она начинает с того, что кладет центральный кусочек в центр стола.
  • В каждый следующий день она кладет определенное количество кусочков вокруг центрального кусочка по часовой стрелке, всегда полностью завершая каждый квадратный слой перед началом нового.

Так, она ставит первые \(14\) кусочков в следующем порядке:

Цвета обозначают слои. Третий слой еще не завершен.

Алена счастлива, если в конце дня собранная часть головоломки не имеет начатых, но не завершенных слоев. Вам дано количество кусочков, которые она кладет в каждый из дней. Найдите количество дней, когда Алена счастлива.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(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 100\), \(a_1 = 1\)), где \(a_i\) — это количество кусочков, которые Алена собирает в \(i\)-й день.

Гарантируется, что в каждом наборе входных данных в конце \(n\) дней нет незавершенных слоев.

Выходные данные

Для каждого набора входных данных выведите одно целое число: количество дней, когда Алена счастлива.

Примечание

В первом наборе входных данных в единственный день Алена завершает единственный слой.

Во втором наборе входных данных в первый день Алена завершает первый слой, а во второй день она завершает второй слой.

В третьем наборе входных данных она завершает второй слой за несколько дней.

В четвертом наборе входных данных она завершает второй слой и сразу же начинает следующий в тот же день, поэтому она не будет счастливой в этот день. Она счастлива только в первый и последний дни.

В пятом наборе Алена счастлива в первый, четвертый и последний дни.

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\).

F. Кевин и математический класс

Деревья дп математика Перебор разделяй и властвуй реализация Структуры данных *2500

Кевин — студент из Вечно Спящего Города, который в настоящее время посещает математический класс, где учитель задает ему упражнения на деление.

На доске написаны две строки положительных целых чисел, каждая из которых содержит \( n \) чисел. Первая строка — это \( a_1, a_2, \ldots, a_n \), а вторая строка — \( b_1, b_2, \ldots, b_n \).

Для каждого упражнения на деление Кевин может выбрать любой отрезок \( [l, r] \) и найти минимальное значение \( x \) среди \( b_l, b_{l+1}, \ldots, b_r \). Затем он изменит каждое \( a_i \) для \( l \leq i \leq r \) на округление вверх от \( a_i \), деленного на \( x \).

Формально, он выбирает два целых числа \( 1 \leq l \leq r \leq n \), устанавливает \( x = \min_{l \leq i \leq r} b_i \), и изменяет все \( a_i \) для \( l \leq i \leq r \) на \( \lceil \frac{a_i}{x} \rceil \).

Кевин может покинуть класс и вернуться домой, когда все \( a_i \) станут равны \( 1 \). Он стремится уйти и хочет узнать минимальное количество упражнений на деление, необходимых для достижения этого.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \( t \) (\( 1 \le t \le 10^4 \)).

Первая строка каждого набора входных данных содержит целое число \( n \) (\( 1 \le n \leq 2 \cdot 10^5 \)) — длина последовательностей \( a \) и \( b \).

Вторая строка каждого набора входных данных содержит \( n \) целых чисел \( a_1, a_2, \ldots, a_n \) (\( 1 \le a_i \le 10^{18} \)) — первая строка целых чисел на доске.

Третья строка каждого набора входных данных содержит \( n \) целых чисел \( b_1, b_2, \ldots, b_n \) (\( 2 \le b_i \le 10^{18} \)) — вторая строка целых чисел на доске.

Гарантируется, что сумма \( n \) по всем наборам входных данных не превышает \( 2 \cdot 10^5 \).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество упражнений на деление, необходимых для выхода из класса.

Примечание

Для первого примера: \( [{\color{red}{5,4}},2]\xrightarrow[\min(b_1,b_2)=3]{\text{операция на отрезке }[1,2]}[{\color{red}{2,2,2}}]\xrightarrow[\min(b_1,b_2,b_3)=2]{\text{операция на отрезке }[1,3]}[1,1,1] \).

Для второго примера: \( [{\color{red}{3,6,1}},3,2]\xrightarrow[\min(b_1,b_2,b_3)=3]{\text{операция на отрезке }[1,3]}[1,{\color{red}{2,1,3}},2]\xrightarrow[\min(b_2,b_3,b_4)=2]{\text{операция на отрезке }[2,4]}[1,1,1,{\color{red}{2,2}}]\xrightarrow[\min(b_4,b_5)=2]{\text{операция на отрезке }[4,5]}[1,1,1,1,1] \).

G. Кевин и матрицы

дп Комбинаторика математика Перебор *2800

Кевин был доставлен в больницу Святого Cердца, которая содержит все матрицы размером \( n \times m \) с целочисленными значениями из отрезка \( [1,v] \).

Теперь Кевин хочет подружиться с некоторыми матрицами, но он готов подружиться с матрицей \( a \) только в том случае, если выполняется следующее условие:

\(\) \min_{1\le i\le n}\left(\max_{1\le j\le m}a_{i,j}\right)\le\max_{1\le j\le m}\left(\min_{1\le i\le n}a_{i,j}\right). \(\)

Пожалуйста, посчитайте, сколько матриц в больнице могут подружиться с Кевином.

Поскольку Кевин очень дружелюбен, может быть много матриц, которые удовлетворяют этому условию. Поэтому вам нужно вывести результат по модулю \(998\,244\,353\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \( t \) (\( 1 \le t \le 8\cdot 10^3 \)).

Единственная строка каждого набора содержит три целых числа \(n\), \(m\) и \(v\) (\( 1 \le n, v, n \cdot v \leq 10^6\), \(1 \le m \le 10^9 \)).

Гарантируется, что сумма \( n \cdot v \) по всем наборам не превышает \( 10^6 \).

Выходные данные

Для каждого набора выведите одно целое число — количество матриц, которые могут подружиться с Кевином по модулю \(998\,244\,353\).

Примечание

В первом наборе, кроме матриц \( a=\begin{bmatrix}1&2\\2&1\end{bmatrix} \) и \( a=\begin{bmatrix}2&1\\1&2\end{bmatrix} \), которые не удовлетворяют условию, оставшиеся \( 2^{2 \cdot 2} - 2 = 14 \) матриц могут подружиться с Кевином.

I2. Кевин и загадка (сложная версия)

битмаски бпф математика *3500

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии вам необходимо найти количество хороших массивов. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Кевин посещает Красную Церковь и нашел загадку на стене.

Пусть для массива \( a \) величина \( c(l,r) \) обозначает количество различных чисел среди \( a_l, a_{l+1}, \ldots, a_r \). В частности, если \( l > r \), \( c(l,r) = 0 \).

Вам дана строка \( s \) длиной \( n \), содержащая только \( \texttt{L} \) и \( \texttt{R} \). Назовем неотрицательный массив \( a \) хорошим, если для всех \( 1 \leq i \leq n \) выполняются следующие условия:

  • если \(s_i=\verb!L!\), то \(c(1,i-1)=a_i\);
  • если \(s_i=\verb!R!\), то \(c(i+1,n)=a_i\).

Вам нужно найти количество хороших массивов \(a\). Поскольку ответ может быть большим, вам нужно вывести ответ по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t \le 10^4\)) — количество наборов. Далее следует описание наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2\leq n\leq 2\cdot 10^5\)) — длина строки \(s\).

Вторая строка каждого набора содержит строку \(s\) длиной \(n\), содержащую только латинские заглавные буквы \(\verb!L!\) и \(\verb!R!\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество хороших массивов по модулю \(998\,244\,353\).

Примечание

Все массивы, удовлетворяющие условиям, можно найти в простой версии этой задачи.

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»  — также являются корректными выводами.

C. Неинтересное число

дп математика Перебор *1200

Вам дано число \(n\) длины не больше \(10^5\).

Вы можете любое количество раз сделать с ним следующее: выбрать одну из его цифр, возвести её в квадрат и заменить получившейся исходную цифру. При этом результат должен быть цифрой (то есть, если вы выбрали цифру \(x\), то значение \(x^2\) должно быть меньше \(10\)).

Можно ли такими действиями получить из исходного числа такое, которое будет делиться нацело на \(9\)?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит число \(n\), без ведущих нулей. Длина числа не превосходит \(10^5\).

Гарантируется, что сумма длин чисел по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если с помощью описанных операций можно получить число, делящееся на \(9\), и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере из числа \(123\) возможно получить только \(123\), \(143\), \(129\) и \(149\), ни одно из них не делится на \(9\).

Во втором примере нужно заменить вторую цифру на её квадрат, тогда \(n\) станет равно \(342 = 38 \cdot 9\).

В третьем примере число уже делится на \(9\).

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\).

F. Максимальное модульное равенство

математика разделяй и властвуй Структуры данных теория чисел *1700

Дан массив \(a\) длины \(n\) и \(q\) запросов вида \(l\), \(r\).

Для каждого запроса найдите такое максимальное \(m\), что все числа \(a_l\), \(a_{l+1}\), ..., \(a_r\) равны по модулю \(m\). Иными словами, \(a_l \bmod m = a_{l+1} \bmod m = \dots = a_r \bmod m\), где \(a \bmod b\) — это остаток от деления \(a\) на \(b\). В частности, если число \(m\) может быть бесконечно большим, выведите \(0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\), \(q\) (\(1 \le n, q \le 2\cdot 10^5\)) — длину массива и количество запросов.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — элементы массива.

В следующих \(q\) строках каждого набора вводится по два числа \(l\), \(r\) (\(1 \le l \le r \le n\)) — отрезок запроса.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\), как и сумма \(q\) не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого запроса выведите максимальное значение \(m\), описанное в условии.

Примечание

В первом запросе первого примера \(6 \bmod 3 = 3 \bmod 3 = 0\), можно показать, что для больших \(m\) нужное условие выполняться не будет.

В третьем запросе первого примера \(14 \bmod 4 = 2 \bmod 4 = 6 \bmod 4 = 2\), можно показать, что для больших \(m\) нужное условие выполняться не будет.

B. Путешествие

Бинарный поиск математика *800

Монокарп решил отправиться в длинное пешее путешествие.

Он решил, что в первый день пройдет \(a\) километров, во второй день пройдет \(b\) километров, в третий день пройдет \(c\) километров, в четвертый день, как и в первый, пройдет \(a\) километров, в пятый день, как и во второй, пройдет \(b\) километров, в шестой день, как и в третий, пройдет \(c\) километров, и так далее.

Монокарп завершит свое путешествие в тот день, когда он суммарно преодолеет хотя бы \(n\) километров. Перед вами стоит определить номер дня, в который Монокарп завершит свое путешествие.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, в которой задано четыре целых числа \(n\), \(a\), \(b\), \(c\) (\(1 \le n \le 10^9\); \(1 \le a, b, c \le 10^6\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — номер дня, в который Монокарп суммарно преодолеет хотя бы \(n\) километров и завершит свое путешествие.

Примечание

В первом примере за первые четыре дня Монокарп преодолеет \(1 + 5 + 3 + 1 = 10\) километров. В пятый день Монокарп преодолеет еще \(5\) километров, то есть суммарно за пять дней он преодолеет \(10 + 5 = 15\) километров. Так как \(n = 12\), Монокарп завершит свое путешествие в пятый день.

Во втором примере Монокарп за первый день преодолеет \(6\) километров. Так как \(n = 6\), Монокарп завершит свое путешествие в первый же день.

В третьем примере Монокарп за первые шесть дней преодолеет \(3 + 4 + 1 + 3 + 4 + 1 = 16\) километров. Так как \(n = 16\), Монокарп завершит свое путешествие в шестой день.

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\) не образовывают невырожденный треугольник.

C. Очаровательный звездочет

битмаски дп математика разделяй и властвуй *1500

I'm praying for owning a transparent heart; as well as eyes with tears more than enough...

Ирис посмотрела на звезды, и в её голове возникла прекрасная задача. Она приглашает вас решить её, чтобы можно было предсказать метеоритный дождь.

На небе есть \(n\) звезд, расположенных в ряд. У Ирис есть телескоп, с помощью которого она смотрит на них.

Изначально Ирис наблюдает за звездами в отрезке \([1, n]\), и у неё есть значение удачи, равное \(0\). Ирис хочет найти центральную звезду для каждого отрезка \([l, r]\), за которым она наблюдает. Она использует следующую рекурсивную процедуру:

  • Сначала она вычисляет \(m = \left\lfloor \frac{l+r}{2} \right\rfloor\).
  • Если длина отрезка (т.е. \(r - l + 1\)) чётная, Ирис разделяет его на два отрезка одинаковой длины \([l, m]\) и \([m+1, r]\) для дальнейшего наблюдения.
  • В противном случае Ирис наведёт телескоп на звезду \(m\), и её значение удачи увеличится на \(m\); далее, если \(l \neq r\), Ирис продолжит наблюдать за двумя отрезками \([l, m-1]\) и \([m+1, r]\).

Ирис немного ленива. Она определяет свою лень целым числом \(k\): по мере продвижения наблюдения она не станет наблюдать за отрезком \([l, r]\), если его длина строго меньше \(k\). Пожалуйста, предскажите её итоговое значение удачи.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 2\cdot 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — итоговое значение удачи.

Примечание

В первом наборе входных данных, в начале Ирис наблюдает за отрезком \([1, 7]\). Поскольку у \([1, 7]\) нечётная длина, она наводит телескоп на звезду \(4\) и, следовательно, увеличивает своё значение удачи на \(4\). Затем отрезок разбивается на \(2\) новых отрезка: \([1, 3]\) и \([5, 7]\). Отрезок \([1, 3]\) снова имеет нечётную длину, поэтому Ирис прицеливается на звезду \(2\) и увеличивает своё значение удачи на \(2\). Затем он разбивается на \(2\) новых отрезка: \([1, 1]\) и \([3, 3]\), оба из которых имеют длину меньше \(2\), поэтому дальнейшее наблюдение не проводится. Что касается отрезка \([5, 7]\), то прогресс аналогичен, и значение удачи увеличивается на \(6\). Следовательно, итоговое значение удачи равняется \(4 + 2 + 6 = 12\).

В последнем наборе входных данных, Ирис в итоге понаблюдает за всеми звёздами, и итоговым значением удачи будет \(1 + 2 + \cdots + 8\,765\,432 = 38\,416\,403\,456\,028\).

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\), что является максимально возможным значением.

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}\).

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\). Алиса больше не в состоянии двигаться и проигрывает, отдавая победу Бобу. Можно показать, что Боб всегда может выиграть, независимо от ходов Алисы; следовательно, у Алисы нет выигрышной стратегии.

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\).

Можно показать, что это минимально возможное время для обоих наборов входных данных.

F. Космическое разбиение

геометрия математика Перебор Строки хэши *3200

Когда артефакт находится у тебя в руках, ткань реальности уступает место своему истинному хозяину — мужчине из Флориды.

Полимино является связной\(^{\text{∗}}\) фигурой, построенной путем присоединения одного или нескольких равных квадратов \(1 \times 1\) сторона к стороне. Полимино является выпуклым, если для любых двух квадратов в полимино, которые находятся в одной строке или одном столбце, все квадраты между ними также являются частью полимино. Ниже приведены четыре полимино, только первое и второе из которых выпуклые.

Вам дано выпуклое полимино с \(n\) строками и четной площадью. Для каждой строки \(i\) от \(1\) до \(n\) единичные квадраты от столбца \(l_i\) до столбца \(r_i\) являются частью полимино. Другими словами, в \(i\)-й строке находится \(r_i - l_i + 1\) единичных квадратов, которые являются частью полимино: \((i, l_i), (i, l_i + 1), \ldots, (i, r_i-1), (i, r_i)\).

Два полимино являются конгруэнтными тогда и только тогда, когда вы можете точно совместить их друг с другом в результате перемещений. Обратите внимание, что вам не разрешается поворачивать или отражать полимино. Определите, возможно ли разбить данное выпуклое полимино на два непересекающихся связных полимино, конгруэнтных друг другу. Следующие примеры иллюстрируют допустимое разбиение каждого из двух выпуклых полимино, показанных выше:

Полученные части полимино не обязательно должны быть выпуклыми. Каждый единичный квадрат должен принадлежать ровно одной из двух частей разбиения.

\(^{\text{∗}}\)Полимино является связным тогда и только тогда, когда для любых двух единичных квадратов \(u \neq v\), которые являются частью полимино, существует последовательность различных квадратов \(s_1, s_2, \ldots, s_k\), такая, что \(s_1 = u\), \(s_k = v\), все \(s_i\) являются частью полимино, и \(s_i, s_{i+1}\) имеют общую сторону для каждого \(1 \le i \le k - 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество строк полимино.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1\le l_i\le r_i\le 10^9\)) — диапазон столбцов, которые являются частью полимино в \(i\)-й строке.

Гарантируется что площадь полимино является чётной. Другими словами, \(\sum_{i=1}^n r_i - l_i + 1\equiv 0\pmod{2}\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую либо «YES» или «NO» — может ли полимино быть разбито на части, как описано в задаче.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes», и «YES» будут приняты как положительный ответ.

Примечание

Первый и второй наборы входных данных являются полимино, показанными в условиях задачи, и могут быть разбиты, как показано на рисунке из условия.

Можно показать, что полимино в третьем наборе входных данных, показанное ниже, невозможно разбить. Ни одно из следующих разбиений не является корректным:

В разбиении слева полимино нельзя совместить только перемещениями, а в разбиении справа полимино не являются связными.

Можно показать, что полимино в четвертом наборе входных данных, показанное ниже, не поддается разбиению.

Обратите внимание, что хотя вы можете разбить его на два прямоугольника размера \(1 \times 2\), эти прямоугольники нельзя совместить перемещениями.

A. Периметр фигуры

Конструктив математика *800

На бесконечном листе бумаги находится квадратная печать размером \(m\) на \(m\). Изначально левый нижний угол квадратной печати выравнивается по левому нижнему углу листа. Вам даны две целочисленные последовательности \(x\) и \(y\), каждая длиной \(n\). Для каждого шага \(i\) от \(1\) до \(n\) происходит следующее:

  • Переместите печать на \(x_i\) единиц вправо, а затем на \(y_i\) единиц вверх.
  • Прижмите печать к бумаге, оставив цветной квадрат размером \(m\) на \(m\) на месте печати.

Обратите внимание, что элементы последовательностей \(x\) и \(y\) имеют дополнительное ограничение: \(1\le x_i, y_i\le m - 1\).

Обратите внимание, что вы не ставите печать в левом нижнем углу листа. Обратитесь к примечаниям для лучшего понимания.

Можно доказать, что после всех операций цветная фигура на бумаге, сформированная печатями, представляет собой единую связанную область. Найдите периметр этой цветной фигуры.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(2 \le m \le 100\)) — количество выполненных операций и длину стороны квадратной печати.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le m - 1\)) — расстояние, на которое печать будет перемещена вправо и вверх во время \(i\)-й операции соответственно.

Обратите внимание, что нет дополнительного ограничения на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите одно целое число — периметр цветной фигуры на бумаге.

Примечание

В первом наборе входных данных печать имеет длину стороны \(3\) и нажимается \(4\) раза на координатах \((1, 1)\), \((3, 3)\), \((5, 4)\) и \((6, 6)\). После этого лист бумаги выглядит так:

Здесь квадрат, образованный первым нажатием, окрашен в синий цвет, вторым — в красный, третьим — в зеленый, а четвертым — в фиолетовый. Объединённая фигура, периметр которой нам нужно вычислить, выглядит следующим образом:

Периметр этой фигуры равен \(32\).

C. Палиндромные подпоследовательности

Конструктив математика Перебор *1200

Для целочисленной последовательности \(a = [a_1, a_2, \ldots, a_n]\) определим \(f(a)\) как длину самой длинной подпоследовательности\(^{\text{∗}}\) из \(a\), которая является палиндромом\(^{\text{†}}\).

Пусть \(g(a)\) обозначает число подпоследовательностей длины \(f(a)\), которые являются палиндромами. Иными словами, \(g(a)\) подсчитывает количество палиндромных подпоследовательностей в \(a\), которые имеют максимальную длину.

Для данного числа \(n\), ваша задача состоит в том, чтобы найти любую последовательность \(a\) из \(n\) целых чисел, которая удовлетворяет следующим условиям:

  • \(1 \le a_i \le n\) для всех \(1 \le i \le n\).
  • \(g(a) > n\)

Можно доказать, что такая последовательность всегда существует при заданных ограничениях.

\(^{\text{∗}}\)Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

\(^{\text{†}}\)Палиндром — это последовательность, которая читается одинаково слева направо и справа налево. Например, \([1, 2, 1, 3, 1, 2, 1]\), \([5, 5, 5, 5]\), и \([4, 3, 3, 4]\) являются палиндромами, в то время как \([1, 2]\) и \([2, 3, 3, 3, 3]\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(\color{red}{6} \le n \le 100\)) — длина последовательности.

Обратите внимание, что нет дополнительного ограничения на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — массив, удовлетворяющий условиям.

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом примере одним из возможных решений является \(a = [1, 1, 2, 3, 1, 2]\). В этом наборе входных данных \(f(a) = 3\), поскольку самая длинная палиндромная подпоследовательность имеет длину \(3\). Существует \(7\) способов выбрать подпоследовательность длины \(3\), которая является палиндромом, как показано ниже:

  1. \([a_1, a_2, a_5] = [1, 1, 1]\)
  2. \([a_1, a_3, a_5] = [1, 2, 1]\)
  3. \([a_1, a_4, a_5] = [1, 3, 1]\)
  4. \([a_2, a_3, a_5] = [1, 2, 1]\)
  5. \([a_2, a_4, a_5] = [1, 3, 1]\)
  6. \([a_3, a_4, a_6] = [2, 3, 2]\)
  7. \([a_3, a_5, a_6] = [2, 1, 2]\)

\(g(a) = 7\), что больше, чем \(n = 6\). Следовательно, \(a = [1, 1, 2, 3, 1, 2]\) — это верное решение.

Во втором примере одним из возможных решений является \(a = [7, 3, 3, 7, 5, 3, 7, 7, 3]\). В этом наборе входных данных \(f(a) = 5\). Существует \(24\) способа выбрать подпоследовательность длины \(5\), которая является палиндромом. Некоторыми примерами являются \([a_2, a_4, a_5, a_8, a_9] = [3, 7, 5, 7, 3]\) и \([a_1, a_4, a_6, a_7, a_8] = [7, 7, 3, 7, 7]\). Следовательно, \(g(a) = 24\), что больше, чем \(n = 9\). Следовательно, \(a = [7, 3, 3, 7, 5, 3, 7, 7, 3]\) — это верное решение.

В третьем примере \(f(a) = 7\) и \(g(a) = 190\), что больше, чем \(n = 15\).

E. Вложенные отрезки

дп Комбинаторика математика поиск в глубину и подобное снм *2500

Множество \(A\), состоящее из попарно различных отрезков \([l, r]\) с целочисленными концами, называется хорошим, если \(1\le l\le r\le n\), и для любой пары различных отрезков \([l_i, r_i], [l_j, r_j]\) из \(A\) выполняется ровно одно из следующих условий:

  • \(r_i < l_j\) или \(r_j < l_i\) (отрезки не пересекаются)
  • \(l_i \le l_j \le r_j \le r_i\) или \(l_j \le l_i \le r_i \le r_j\) (один отрезок полностью содержится внутри другого)

Вам дано хорошее множество \(S\), состоящее из \(m\) попарно различных отрезков \([l_i, r_i]\) с целочисленными концами. Вы хотите добавить как можно больше дополнительных отрезков к набору \(S\), так, чтобы набор \(S\) остался хорошим.

Поскольку эта задача слишком проста, вам нужно определить количество различных способов добавления максимального числа дополнительных отрезков к \(S\), так, чтобы набор остался хорошим. Два способа считаются разными, если существует отрезок, который добавляется одним из способов, но не другим.

Формально, вам нужно найти количество хороших наборов различных отрезков \(T\), таких, чтобы \(S\) было подмножеством \(T\), и \(T\) имело максимально возможный размер. Поскольку ответ может быть очень большим, вычислите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 2 \cdot 10^5\)) — максимальный правый конец отрезка и размер \(S\).

\(i\)-я из следующих \(m\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезков в наборе \(S\)

Гарантируется, что данное множество \(S\) является хорошим, и отрезки в множестве \(S\) попарно различны.

Гарантируется, что как сумма \(n\), так и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных способов, которыми вы можете добавить максимальное количество дополнительных отрезков к набору \(S\), гарантируя при этом, что набор \(S\) останется хорошим, по модулю \(998\,244\,353\)

Примечание

В первом наборе входных данных единственным возможным отрезком является \([1, 1]\), поэтому \(T = \{[1, 1]\}\) имеет максимальный размер, и это единственное решение.

Во втором наборе входных данных невозможно добавить какие-либо дополнительные отрезки к набору \(S\). Следовательно, единственный способ добавить отрезки к \(S\) — это ничего не добавлять.

В третьем наборе входных данных можно добавить \(7\) дополнительных отрезков к \(S\), гарантируя, что набор останется хорошим. Можно доказать, что добавление более \(7\) дополнительных отрезков к \(S\) невозможно. Существует ровно \(2\) различных способа добавить эти \(7\) отрезков к \(S\), и соответствующие наборы \(T\) показаны ниже:

  • \(\{[1, 1], [1, 3], [1, 4], [1, 5], [2, 2], [2, 3], [3, 3], [4, 4], [5, 5]\}\)
  • \(\{[1, 1], [1, 3], [1, 5], [2, 2], [2, 3], [3, 3], [4, 4], [4, 5], [5, 5]\}\).

В четвертом наборе входных данных существует ровно \(5\) различных способов добавить максимум \(6\) дополнительных отрезков к \(S\), соответствующие наборы \(T\) показаны ниже:

  • \(\{[1, 1], [1, 2], [1, 3], [1, 4], [2, 2], [3, 3], [4, 4]\}\)
  • \(\{[1, 1], [1, 2], [1, 4], [2, 2], [3, 3], [3, 4], [4, 4]\}\)
  • \(\{[1, 1], [1, 3], [1, 4], [2, 2], [2, 3], [3, 3], [4, 4]\}\)
  • \(\{[1, 1], [1, 4], [2, 2], [2, 3], [2, 4], [3, 3], [4, 4]\}\)
  • \(\{[1, 1], [1, 4], [2, 2], [2, 4], [3, 3], [3, 4], [4, 4]\}\)

F1. Xor медиан (простая версия)

битмаски дп Комбинаторика математика Перебор *2700

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\), \(k\) и \(m\) ниже. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Последовательность \(a\) из \(n\) целых чисел называется хорошей, если выполняется следующее условие:

  • Пусть \(\text{cnt}_x\) — количество вхождений \(x\) в последовательность \(a\). Для всех пар \(0 \le i < j < m\), по крайней мере одно из следующих условий должно быть истинным: \(\text{cnt}_i = 0\), \(\text{cnt}_j = 0\) или \(\text{cnt}_i \le \text{cnt}_j\). Другими словами, если и \(i\), и \(j\) присутствуют в последовательности \(a\), то число вхождений \(i\) в \(a\) меньше или равно числу вхождений \(j\) в \(a\).

Вам даны целые числа \(n\) и \(m\). Вычислите значение побитового XOR медиан\(^{\text{∗}}\) всех хороших последовательностей \(a\) длины \(n\), таких, что \(0\le a_i < m\).

Обратите внимание, что значение \(n\) может быть очень большим, поэтому вместо него вам даётся его двоичное представление.

\(^{\text{∗}}\)Медиана последовательности \(a\) длины \(n\) определяется как \(\left\lfloor\frac{n + 1}{2}\right\rfloor\)-е наименьшее значение в последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(k\) и \(m\) (\(1 \le k \le 200\), \(1 \le m \le 500\)) — количество битов в \(n\) и верхнюю границу элементов в последовательности \(a\).

Вторая строка каждого набора входных данных содержит бинарную строку длины \(k\) — двоичное представление \(n\) без ведущих нулей.

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(200\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — побитовый XOR медиан всех хороших последовательностей \(a\) длины \(n\), где \(0\le a_i < m\)

Примечание

В первом наборе входных данных, \(n = 10_2 = 2\) и \(m = 3\). Существуют такие последовательности с элементами меньше \(m\): \([0, 0]\), \([0, 1]\), \([0, 2]\), \([1, 0]\), \([1, 1]\), \([1, 2]\), \([2, 0]\), \([2, 1]\), \([2, 2]\). Все они являются хорошими, поэтому ответ равен \(0 \oplus 0 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 0 \oplus 1 \oplus 2 = 3\).

Во втором наборе входных данных, \(n = 11_2 = 3\) и \(m = 3\). Некоторыми хорошими последовательностями являются \([2, 2, 2]\), \([1, 0, 1]\), и \([2, 0, 1]\). Однако последовательность \([2, 0, 0]\) не является хорошей, потому что \(\text{cnt}_0 = 2\), \(\text{cnt}_2 = 1\). Следовательно, если мы выберем \(i = 0\) и \(j = 2\), то \(i < j\) выполняется, а \(\text{cnt}_i \le \text{cnt}_j\) неверно.

F2. Xor медиан (сложная версия)

битмаски дп Комбинаторика математика Перебор *3000

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\), \(k\) и \(m\) выше. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Последовательность \(a\) из \(n\) целых чисел называется хорошей, если выполняется следующее условие:

  • Пусть \(\text{cnt}_x\) — количество вхождений \(x\) в последовательность \(a\). Для всех пар \(0 \le i < j < m\), по крайней мере одно из следующих условий должно быть истинным: \(\text{cnt}_i = 0\), \(\text{cnt}_j = 0\) или \(\text{cnt}_i \le \text{cnt}_j\). Другими словами, если и \(i\), и \(j\) присутствуют в последовательности \(a\), то число вхождений \(i\) в \(a\) меньше или равно числу вхождений \(j\) в \(a\).

Вам даны целые числа \(n\) и \(m\). Вычислите значение побитового XOR медиан\(^{\text{∗}}\) всех хороших последовательностей \(a\) длины \(n\), таких, что \(0\le a_i < m\).

Обратите внимание, что значение \(n\) может быть очень большим, поэтому вместо него вам даётся его двоичное представление.

\(^{\text{∗}}\)Медиана последовательности \(a\) длины \(n\) определяется как \(\left\lfloor\frac{n + 1}{2}\right\rfloor\)-е наименьшее значение в последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(k\) и \(m\) (\(1 \le k \le 2 \cdot 10^5\), \(1 \le m \le 10^9\)) — количество битов в \(n\) и верхнюю границу элементов в последовательности \(a\).

Вторая строка каждого набора входных данных содержит бинарную строку длины \(k\) — двоичное представление \(n\) без ведущих нулей.

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — побитовый XOR медиан всех хороших последовательностей \(a\) длины \(n\), где \(0\le a_i < m\)

Примечание

В первом наборе входных данных, \(n = 10_2 = 2\) и \(m = 3\). Существуют такие последовательности с элементами меньше \(m\): \([0, 0]\), \([0, 1]\), \([0, 2]\), \([1, 0]\), \([1, 1]\), \([1, 2]\), \([2, 0]\), \([2, 1]\), \([2, 2]\). Все они являются хорошими, поэтому ответ равен \(0 \oplus 0 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 0 \oplus 1 \oplus 2 = 3\).

Во втором наборе входных данных, \(n = 11_2 = 3\) и \(m = 3\). Некоторыми хорошими последовательностями являются \([2, 2, 2]\), \([1, 0, 1]\), и \([2, 0, 1]\). Однако последовательность \([2, 0, 0]\) не является хорошей, потому что \(\text{cnt}_0 = 2\), \(\text{cnt}_2 = 1\). Следовательно, если мы выберем \(i = 0\) и \(j = 2\), то \(i < j\) выполняется, а \(\text{cnt}_i \le \text{cnt}_j\) неверно.

A. Таблица MEX

Конструктив математика *800

В один из дней школьник Марк плохо себя вел, поэтому преподаватель Саша вызвал его к доске.

Саша дал Марку таблицу из \(n\) строк и \(m\) столбцов. Его задача — расставить в таблице числа \(0, 1, \ldots, n \cdot m - 1\) (каждое нужно использовать ровно один раз) так, чтобы максимизировать сумму MEX\(^{\text{∗}}\) по всем строкам и столбцам. Более формально, нужно максимизировать \(\)\sum\limits_{i = 1}^{n} \operatorname{mex}(\{a_{i,1}, a_{i,2}, \ldots, a_{i,m}\}) + \sum\limits_{j = 1}^{m} \operatorname{mex}(\{a_{1,j}, a_{2,j}, \ldots, a_{n,j}\}),\(\) где \(a_{i,j}\) — число в \(i\)-й строке и \(j\)-м столбце.

Сашу не интересует, как Марк расставил числа, поэтому он просит его сказать лишь одно число — максимальную сумму MEX по всем строкам и столбцам, которую можно получить.

\(^{\text{∗}}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(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 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^9\)) — количество строк и столбцов в таблице соответственно.

Выходные данные

Для каждого набора входных данных выведите максимальную возможную сумму \(\operatorname{mex}\) по всем строкам и столбцам.

Примечание

В первом наборе входных данных единственный элемент равен \(0\), сумма \(\operatorname{mex}\) множества чисел первой строки и \(\operatorname{mex}\) множества чисел первого столбца это \(\operatorname{mex}(\{0\}) + \operatorname{mex}(\{0\}) = 1 + 1 = 2\).

Во втором наборе входных данных оптимальная таблица может выглядеть следующим образом:

\(3\)\(0\)
\(2\)\(1\)

Тогда \(\sum\limits_{i = 1}^{n} \operatorname{mex}(\{a_{i,1}, a_{i,2}, \ldots, a_{i,m}\}) + \sum\limits_{j = 1}^{m} \operatorname{mex}(\{a_{1,j}, a_{2,j}, \ldots, a_{n,j}\}) = \operatorname{mex}(\{3, 0\}) + \operatorname{mex}(\{2, 1\})\) \(+ \operatorname{mex}(\{3, 2\}) + \operatorname{mex}(\{0, 1\}) = 1 + 0 + 0 + 2 = 3\).

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\).

G. Секретное сообщение

Конструктив математика поиск в глубину и подобное *3000

Каждую субботу Александр Б., преподаватель параллели X, вечером пишет Александру Г., преподавателю параллели B, секретное сообщение. Так как Александр Г. в это время проводит лекцию, а сообщение очень важное, то Александру Б. приходится писать это сообщение на интерактивной онлайн-доске.

Интерактивная онлайн-доска представляет собой клетчатое поле, состоящее из \(n\) строк и \(m\) столбцов, где каждая клетка имеет размер \(1 \times 1\). Некоторые клетки этой доски уже расписаны, и в них невозможно написать сообщение; такие клетки обозначены символом «.», остальные клетки называются свободными и обозначаются символом «#».

Введем две характеристики онлайн-доски:

  • \(s\) — количество свободных клеток.
  • \(p\) — периметр клетчатой фигуры, которая образована объединением свободных клеток.

Пусть \(A\) — множество свободных клеток. Ваша цель состоит в том, чтобы найти множество клеток \(S \subseteq A\), удовлетворяющее следующим свойствам:

  • \(|S| \le \frac{1}{5} \cdot (s+p)\).
  • Любая клетка из \(A\) либо лежит в \(S\), либо имеет общую сторону с некоторой клеткой из \(S\).

Можно показать, что хотя бы одно множество \(S\), удовлетворяющее этим свойствам, существует; вам требуется отыскать любое подходящее.

Входные данные

В первой строке указано число \(t\) (\(1 \le t \le 80\,000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных указаны числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^6\)) — размеры поля.

В последующих \(n\) строках содержится описание поля.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^6\).

Выходные данные

Для каждого набора выходных данных по \(n\) строк, состоящих из \(m\) символов, где каждый символ кодирует состояние клетки:

  • «#» — клетка содержится в \(A\), но не содержится в \(S\);
  • «S» — клетка содержится и в \(A\), и в \(S\);
  • «.» — клетка не содержится в \(A\) и не содержится в \(S\).
Примечание

В первом примере \(s=5\) и \(p=12\), таким образом, количество клеток в \(S\) не должно превышать \(\frac{1}{5} \cdot (5+12) = 3.4\), то есть \(|S| \le 3\). Заметим, что предъявленное множество \(S\) состоит из \(1\) клетки и, очевидно, удовлетворяет всем ограничениям.

Во втором примере \(s=12\) и \(p=16\), таким образом, количество клеток в \(S\) не должно превышать \(\frac{1}{5} \cdot (12+16)= 5.6\), то есть \(|S| \le 5\). Заметим, что предъявленное множество \(S\) состоит из \(4\) клеток и, очевидно, удовлетворяет всем ограничениям.

На третьем примере мы объясним, что такое периметр, так как это может быть не очевидно. Любая клетчатая фигура имеет границу, которая представляется в виде объединения отрезков, которые не пересекаются по внутренним точкам. Таким образом, на картинке ниже толстой черной линией обозначена граница фигуры, которая получается путем объединения свободных клеток. Суммарная длина этих отрезков равна \(p=24\).

При этом значение \(s=11\) и верхнее ограничение равно \(|S| \le 7\), предъявленное множество имеет размер \(6\) и, очевидно, удовлетворяет всем ограничениям.

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\)-й комнате.

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\).

A. Кевин и арифметика

математика *800

Чтобы развить у юного Кевина арифметические навыки, его мать придумала следующую задачу.

Даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), а также число \(s\), изначально равное \(0\). Кевин выполняет следующую операцию для \(i = 1, 2, \ldots, n\) по порядку:

  • Добавить \(a_i\) к \(s\). Если полученное \(s\) чётное, Кевин зарабатывает очко, а затем делит \(s\) на \(2\) до тех пор, пока оно не станет нечётным.

Обратите внимание, что Кевин может заработать не более одного очка за операцию, даже если он сделал больше одного деления.

Поскольку операции деления считаются наиболее полезными для развития Кевина, его мать хочет переставить элементы \(a\) таким образом, чтобы общее количество баллов у Кевина было максимальным. Определите максимально возможное количество баллов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1\leq n \leq 100\)) — количество целых чисел.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1\leq a_i \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество баллов.

Примечание

В первом наборе входных данных единственной перестановкой элементов \(a\) является \([1]\). \(s\) будет равен \(1\), а Кевин не заработает очков.

Во втором наборе входных данных единственным оптимальным расположением элементов \(a\) является \([2, 1]\). После операций \(s\) последовательно становится равным \(1\) и \(1\). Кевин зарабатывает по очку в обеих операциях.

В третьем наборе входных данных одной из оптимальных перестановок элементов \(a\) является \([2, 4, 6]\). После выполнения операций \(s\) последовательно становится равным \(1\), \(5\) и \(11\). Кевин заработает очко только на первой операции.

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]\).

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\).

Можно доказать, что никакая другая стратегия также не позволяет вам продолжать этот процесс бесконечно.

C. Чирно и операции

математика Перебор *1200

У Чирно есть последовательность \(a\) длины \(n\). Она может выполнять каждую из следующих операций любое количество раз (возможно, ноль). Есть дополнительное условие — перед операцией текущая длина \(a\) не должна быть равна \(1\):

  • Развернуть последовательность. Формально, \([a_1,a_2,\ldots,a_n]\) становится \([a_n,a_{n-1},\ldots,a_1]\) после операции.
  • Заменить последовательность на её разностную последовательность. Формально, \([a_1,a_2,\ldots,a_n]\) становится \([a_2-a_1,a_3-a_2,\ldots,a_n-a_{n-1}]\) после операции.

Найдите максимальную возможную сумму элементов \(a\) после операций.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 50\)) — длина последовательности \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(|a_i|\le 1000\)) — последовательность \(a\).

Выходные данные

Для каждого набора входных данных выведите целое число, представляющее максимальную возможную сумму.

Примечание

В первом наборе входных данных Чирно не может выполнить ни одной операции, поэтому ответ равен \(-1000\).

Во втором наборе входных данных Чирно сначала разворачивает последовательность, затем заменяет последовательность на её разностную последовательность: \([5,-3]\to[-3,5]\to[8]\). Можно доказать, что это максимизирует сумму, поэтому ответ равен \(8\).

В третьем наборе входных данных Чирно может не выполнять операции, поэтому ответ равен \(1001\).

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\).

A. Минимальная взаимная простота

математика теория чисел *800

Сегодня Маленький Джон потратил все свои сбережения, чтобы купить отрезок. Теперь он хочет построить на нём дом.

Отрезок положительных целых чисел \([l,r]\) называется взаимно простым, если числа \(l\) и \(r\) взаимно простые\(^{\text{∗}}\).

Взаимно простой отрезок \([l,r]\) называется минимальным взаимно простым, если он не содержит\(^{\text{†}}\) никаких взаимно простых отрезков, не равных самому себе. Ниже в разделе примечаний приведены примеры минимальных и не минимальных взаимно простых отрезков.

Дан отрезок \([l,r]\) положительных целых чисел, найдите количество минимальных взаимно простых отрезков, содержащихся в \([l,r]\).

\(^{\text{∗}}\)Два целых числа \(a\) и \(b\) являются взаимно простыми, если у них есть только один положительный общий делитель. Так, например, числа \(2\) и \(4\) не являются взаимно простыми, потому что они оба делятся на \(2\) и \(1\), но числа \(7\) и \(9\) являются взаимно простыми, так как их единственный положительный общий делитель \(1\).

\(^{\text{†}}\)Отрезок \([l',r']\) содержится внутри отрезка \([l,r]\), если и только если \(l \le l' \le r' \le r\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого тестового набора состоит из двух целых чисел \(l\) и \(r\) (\(1 \le l \le r \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите количество минимальных взаимно простых отрезков, содержащихся в \([l,r]\), в отдельной строке.

Примечание

В первом наборе входных данных дан отрезок \([1,2]\). Отрезки, содержащиеся в \([1,2]\), следующие:

  • \([1,1]\): Этот отрезок является взаимно простым, так как числа \(1\) и \(1\) являются взаимно простыми, и не содержит никаких других отрезков внутри. Таким образом, \([1,1]\) является минимальным взаимно простым.
  • \([1,2]\): Этот отрезок является взаимно простым. Однако, поскольку он содержит \([1,1]\), который также является взаимно простым, \([1,2]\) не является минимальным взаимно простым.
  • \([2,2]\): Этот отрезок не является взаимно простым, потому что числа \(2\) и \(2\) имеют \(2\) общих положительных делителя: \(1\) и \(2\).

Таким образом, отрезок \([1,2]\) содержит \(1\) минимальный взаимно простой отрезок.

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\).

F1. Считать не весело (Простая версия)

графы Деревья дп Комбинаторика математика поиск в глубину и подобное реализация снм Структуры данных хэши *2400

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\) и \(n\) меньше. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Теперь Маленький Джон богат, и поэтому он наконец-то покупает дом, достаточно большой, чтобы вместить его и его любимую скобочную последовательность. Но каким-то образом он оказался с большим количеством скобок! Разочарованный, он пробивает потолок с помощью «ладони Будды».

Скобочная последовательность называется правильной, если она может быть построена по следующей формальной грамматике:

  1. Пустая последовательность \(\varnothing\) сбалансирована.
  2. Если скобочная последовательность \(A\) правильная, то \(\mathtt{(}A\mathtt{)}\) также является правильной.
  3. Если скобочные последовательности \(A\) и \(B\) правильные, то и их конкатенированная последовательность \(A B\) также правильная.

Например, последовательности «(())()», «()», «(()(()))» и пустая последовательность являются правильными, в то время как «(()» и «(()))(» — нет.

Дана правильная скобочная последовательность \(s\), пара индексов \((i,j)\) (\(i<j\)) называется хорошей, если \(s_i\) — это «(», а \(s_j\) — это «)», и две скобки добавляются одновременно в соответствии с правилом 2 при построении последовательности \(s\). Например, последовательность «(())()» имеет три разные хорошие пары: \((1,4)\), \((2,3)\) и \((5,6)\). Можно показать, что любая правильная скобочная последовательность из \(2n\) скобок содержит ровно \(n\) различных пар скобок, и использование любого порядка правил для построения одной и той же последовательности скобок приведет к одному и тому же набору пар скобок.

Эмили будет играть в игру по угадыванию скобок с Джоном. Игра проходит следующим образом.

Изначально у Джона есть правильная скобочная последовательность \(s\), содержащая \(n\) различных пар скобок, которая не известна Эмили. Джон говорит Эмили значение \(n\) и просит Эмили угадать последовательность.

На протяжении \(n\) ходов Джон дает Эмили следующие подсказки на каждом ходе:

  • \(l\;r\): Последовательность \(s\) содержит пару скобок \((l,r)\).

Гарантируется, что подсказки, которые Джон дает Эмили, попарно различны и не противоречат друг другу.

В какой-то момент Эмили может быть уверена, что правильная скобочная последовательность, удовлетворяющая подсказкам, данным до сих пор, уникальна. Например, предположим, что Эмили знает, что \(s\) имеет \(3\) хорошие пары, и она содержит пару скобок \((2,5)\). Из \(5\) правильных скобочных последовательностей с \(3\) хорошими парами существует только одна такая последовательность «((()))» с парой скобок \((2,5)\). Следовательно, можно увидеть, что Эмили не всегда нужно \(n\) ходов, чтобы угадать \(s\).

Чтобы как можно раньше узнать содержимое \(s\), Эмили хочет знать количество различных правильных скобочных последовательностей, которые соответствуют подсказкам после каждого хода. Конечно, это не легкая задача для Эмили, особенно когда ей дано настолько много хороших пар. Теперь ваша очередь помочь Эмили. Учитывая подсказки, вы должны найти ответ до всех ходов и после каждого хода. Поскольку ответы могут быть огромными, вам нужно найти их по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 5000\)) — количество хороших пар.

Затем каждая из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\), представляющих \(i\)-ю подсказку (\(1 \le l_i < r_i \le 2n\)).

Подсказки в одном наборе входных данных попарно различны и не противоречат друг другу.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора выведите \(n+1\) целых числа в одной строке:

  • Первое целое число — это ответ до всех подсказок, по модулю \(998\,244\,353\).
  • Для всех \(i \ge 1\), \(i+1\)-е целое число — это ответ после \(i\)-й подсказки, по модулю \(998\,244\,353\).
Примечание

Первый пример из примера объясняется в описании задачи.

Третий пример из примера объясняется следующим образом.

Можно показать, что существует \(132\) сбалансированных последовательностей скобок с \(6\) парами скобок. Ответы после каждой подсказки следующие:

  1. Вам дана хорошая пара \((2,3)\). Существует \(42\) правильных скобочных последовательностей, имеющих хорошую пару \((2,3)\).
  2. Вам дана хорошая пара \((1,6)\). Существует \(5\) правильных скобочных последовательностей, имеющих хорошие пары \((2,3)\), \((1,6)\).
  3. Вам дана хорошая пара \((7,8)\). Существуют \(2\) правильных скобочных последовательностей, имеющих три хорошие пары. Это строки «(()())()(())» и «(()())()()()», соответственно.
  4. Вам дана хорошая пара \((9,12)\). Существует только одна правильная скобочная последовательность, содержащая четыре хорошие пары. Таким образом, содержимое \(s\) имеет вид «(()())()(())».

Тогда количество правильных скобочных последовательностей после пятой и шестой подсказки равно \(1\), поскольку вы уже знаете содержимое \(s\).

G. Скибидус и ложь

Комбинаторика математика теория чисел *1700

Скибидус был похищен инопланетянами с Амога! Скибидус пытается выкрутиться, но инопланетяне с Амога не верят ему. Чтобы доказать, что он не врет, инопланетяне с Амога попросили его решить эту задачу:

Целое число \(x\) считается полупростым, если его можно записать в виде \(p \cdot q\), где \(p\) и \(q\) — (не обязательно разные) простые числа. Например, \(9\) является полупростым, так как его можно записать как \(3 \cdot 3\), а \(3\) является простым числом.

Скибидусу был дан массив \(a\), содержащий \(n\) целых чисел. Он должен сообщить количество пар \((i, j)\) таких, что \(i \leq j\) и \(\operatorname{lcm}(a_i, a_j)\)\(^{\text{∗}}\) является полупростым.

\(^{\text{∗}}\)Для двух целых чисел \(x\) и \(y\), \(\operatorname{lcm}(x, y)\) обозначает наименьшее общее кратное \(x\) и \(y\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(2 \leq a_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество упорядоченных пар индексов на новой строке.

Примечание

В первом наборе входных данных \(5\) пар индексов: \((1, 3)\), \((1, 4)\), \((2, 3)\), \((2, 4)\) и \((4, 4)\).

H. Бро считает себя избранным

дп Комбинаторика математика матрицы разделяй и властвуй Структуры данных *2200

Скибидус думает, что он избранный! Он доказал это, решив эту сложную задачу. Сможете ли вы?

Дана двоичная строка\(^{\text{∗}}\) \(t\), \(f(t)\) определяется как минимальное количество смежных подстрок, каждая из которых состоит из одинаковых символов, на которые можно разбить \(t\). Например, \(f(\texttt{00110001}) = 4\), потому что \(t\) можно разбить как \(\texttt{[00][11][000][1]}\), где каждый сегмент в скобках состоит из одинаковых символов.

Скибидус даёт вам двоичную строку \(s\) и \(q\) запросов. В каждом запросе один символ строки переворачивается (т.е. \(\texttt{0}\) меняется на \(\texttt{1}\), а \(\texttt{1}\) меняется на \(\texttt{0}\)), изменения сохраняются после обработки запроса. После каждого запроса выведите сумму по всем \(f(b)\), где \(b\) — это непустая подпоследовательность\(^{\text{†}}\) строки \(s\), по модулю \(998\,244\,353\).

\(^{\text{∗}}\)Двоичная строка состоит только из символов \(\texttt{0}\) и \(\texttt{1}\).

\(^{\text{†}}\)Подпоследовательность строки — это строка, которую можно получить, удалив несколько (возможно, ноль) символов из оригинальной строки.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит двоичную строку \(s\) (\(1 \leq |s| \leq 2 \cdot 10^5\)).

Следующая строка каждого набора содержит целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

Следующая строка содержит \(q\) целых чисел \(v_1, v_2, \ldots, v_q\) (\(1 \leq v_i \leq |s|\)), обозначающих, что \(s_{v_i}\) переворачивается в \(i\)-м запросе.

Гарантируется, что сумма \(|s|\) и сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел в одной строке — ответ после каждого запроса по модулю \(998\,244\,353\).

Примечание

В первом тестовом случае \(s\) становится \(\texttt{001}\) после первого запроса. Давайте посчитаем ответ для каждой подпоследовательности:

  • \(f(s_1) = f(\texttt{0}) = 1\)
  • \(f(s_2) = f(\texttt{0}) = 1\)
  • \(f(s_3) = f(\texttt{1}) = 1\)
  • \(f(s_1 s_2) = f(\texttt{00}) = 1\)
  • \(f(s_1 s_3) = f(\texttt{01}) = 2\)
  • \(f(s_2 s_3) = f(\texttt{01}) = 2\)
  • \(f(s_1 s_2 s_3) = f(\texttt{001}) = 2\)

Сумма этих значений равна \(10\), по модулю \(998\,244\,353\).

C. Битовые горки

битмаски дп Комбинаторика математика *2300

Вам дан массив \(a_1, a_2, \ldots, a_n\). А также три переменные \(P,Q,R\), изначально равные нулю.

Вам необходимо поочерёдно обработать все числа \(a_1, a_2, \ldots, a_n\), в порядке от \(1\) до \(n\). Обрабатывая очередное \(a_i\), вы должны сделать ровно одно из трёх действий на выбор:

  1. \(P := P \oplus a_i\)
  2. \(Q := Q \oplus a_i\)
  3. \(R := R \oplus a_i\)

\(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Выполняя действия, надо соблюдать главное правило: необходимо, чтобы после каждого действия все три числа \(P,Q,R\) не были попарно различны.

Всего есть \(3^n\) способов произвести все \(n\) действий. Сколько из них не нарушают главное правило? Так как ответ может быть достаточно большим, найдите его по модулю \(10^9 + 7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество способов произвести все \(n\) действий, не нарушая главное правило, по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных 3 валидные последовательности операций: PPP, QQQ, RRR

Во втором наборе входных данных 9 валидных последовательностей операций: PPPP, PPPQ, PPPR, QQQP, QQQQ, QQQR, RRRP, RRRQ, RRRR.

D1. Клуб юных авиастроителей (простая версия)

дп Комбинаторика математика *2400

Это easy версия задачи. Отличие между версиями заключается в том, что в этой версии все \(a_i = 0\). Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Есть \(n\)-этажный дом, этажи пронумерованы от \(1\) до \(n\) снизу вверх. На каждом этаже живёт ровно один человек.

У всех жителей дома сегодня есть очень важная цель: запустить всем домом суммарно хотя бы \(c\) бумажных самолётиков. Жители будут запускать самолётики поочерёдно. Когда человек с \(i\)-го этажа запускает самолётик, это видят все жители на этажах от \(1\) до \(i\), пока самолёт опускается на землю.

Если с точки зрения жителя с \(i\)-го этажа уже было запущено хотя бы \(c\) самолётиков, сам он больше не будет запускать самолётики. Также известно, что в конце дня, с точки зрения каждого из жителей дома было запущено хотя бы \(c\) самолётиков, а всего было кинуто \(m\) самолётиков.

Вы внимательно следили за данным флешмобом, и для каждого самолётика записывали, житель какого из этажей его кинул. Но, к сожалению, информация о том, кто именно кидал некоторые самолётики, была утеряна. Найдите количество способов заполнить пропуски, чтобы информация могла быть достоверной. Так как ответ может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

В этой версии задачи была утеряна вся информация, и весь массив состоит из пропусков.

Также возможна ситуация, что вы ошиблись в своих записях, и не существует ни одного возможного способа восстановить пропуски. В таком случае ответ считается равным \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, c, m\) (\(1 \le n \le 100\), \(1 \le c \le 100\), \(c \le m \le n \cdot c\)) — количество этажей в доме, минимально необходимое количество самолётиков и количество реально запущенных самолётиков.

Вторая строка каждого набора входных данных содержит \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) (\(0 \le a_i \le n\)) — \(a_i\) означает, житель какого этажа запускал \(i\)-й по счёту самолётик, \(a_i = 0\) обозначает пропуск.

В этой версии задачи гарантируется, что все \(a_i = 0\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите количество способов заполнить пропуски числами от \(1\) до \(n\), чтобы хронология запуска самолётиков могла быть достоверной, по модулю \(10^9 + 7\).

Примечание

В первом тестовом примере все шесть возможных способов заполнить пропуски таковы:

  1. \([1, 1, 3, 3]\)
  2. \([1, 2, 3, 3]\)
  3. \([1, 3, 2, 3]\)
  4. \([2, 1, 3, 3]\)
  5. \([2, 2, 3, 3]\)
  6. \([3, 1, 2, 3]\)

Обратите внимание, что массив \([2, 3, 1, 3]\) не является валидным способом заполнить пропуски, так как третий самолётик не мог быть запущен человеком с \(1\) этажа, так как с его точки зрения уже было запущено \(c = 2\) самолётика.

Также массив \([1, 1, 2, 3]\) не является валидным способом заполнить пропуски, так как с точки зрения человека с \(3\) этажа всего был запущен только \(1\) самолётик, а \(c = 2\).

D2. Клуб юных авиастроителей (сложная версия)

дп Комбинаторика математика *2900

Это hard версия задачи. Отличие между версиями заключается в том, что в этой версии не обязательно \(a_i = 0\). Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Есть \(n\)-этажный дом, этажи пронумерованы от \(1\) до \(n\) снизу вверх. На каждом этаже живёт ровно один человек.

У всех жителей дома сегодня есть важная цель: запустить всем домом суммарно хотя бы \(c\) бумажных самолётиков. Жители будут запускать самолётики поочерёдно. Когда человек с \(i\)-го этажа запускает самолётик, это видят все жители на этажах от \(1\) до \(i\), пока самолёт опускается на землю. Если с точки зрения жителя с \(i\)-го этажа уже было запущено хотя бы \(c\) самолётиков, сам он больше не будет запускать самолётики. Также известно, что в конце дня, с точки зрения каждого из жителей дома, было запущено хотя бы \(c\) самолётиков, а всего было кинуто \(m\) самолётиков.

Вы внимательно следили за данным флешмобом, и для каждого самолётика записывали, житель какого из этажей его кинул. Но, к сожалению, информация о том, кто именно кидал некоторые самолётики, была утеряна. Найдите количество способов заполнить пропуски, чтобы информация могла быть достоверной. Так как ответ может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

Также возможна ситуация, что вы ошиблись в своих записях, и не существует ни одного возможного способа восстановить пропуски. В таком случае ответ считается равным \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, c, m\) (\(1 \le n \le 100\), \(1 \le c \le 100\), \(c \le m \le n \cdot c\)) — количество этажей в доме, минимально необходимое количество самолётиков и количество реально запущенных самолётиков.

Вторая строка каждого набора входных данных содержит \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) (\(0 \le a_i \le n\)) — \(a_i\) означает, житель какого этажа запускал \(i\)-й по счёту самолётик, \(a_i = 0\) обозначает пропуск.

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите количество способов заполнить пропуски числами от \(1\) до \(n\), чтобы хронология запуска самолётиков могла быть достоверной, по модулю \(10^9 + 7\).

Примечание

В первом тестовом примере все шесть возможных способов заполнить пропуски таковы:

  1. \([1, 1, 3, 3]\)
  2. \([1, 2, 3, 3]\)
  3. \([1, 3, 2, 3]\)
  4. \([2, 1, 3, 3]\)
  5. \([2, 2, 3, 3]\)
  6. \([3, 1, 2, 3]\)

Обратите внимание, что массив \([2, 3, 1, 3]\) не является валидным способом заполнить пропуски, так как третий самолётик не мог быть запущен человеком с \(1\) этажа, так как с его точки зрения уже было запущено \(c = 2\) самолётика.

Также массив \([1, 1, 2, 3]\) не является валидным способом заполнить пропуски, так как с точки зрения человека с \(3\) этажа всего был запущен только \(1\) самолётик, а \(c = 2\).

F. Проклятье

дп Конструктив математика *3300

Вам даны два массива из целых чисел: \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_m\)

Вам нужно определить, возможно ли превратить массив \(a\) в массив \(b\), используя следующую операцию некоторое количество раз.

  • Cреди всех непустых подмассивов\(^{\text{∗}}\) \(a\) выбрать любой с максимальной суммой и заменить этот подмассив на произвольный непустой массив целых чисел.

Если это возможно, вам нужно построить любую возможную последовательность операций. Ограничение: в вашем ответе сумма длин массивов, на которые идёт замена, не должна превышать \(n + m\) по всем операциям. А используемые числа по модулю не должны превышать \(10^9\).

\(^{\text{∗}}\)Массив \(a\) является подмассивом массива \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \le n, m \le 500\)) — длины массива \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^6 \le a_i \le 10^6\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(-10^6 \le b_i \le 10^6\)) — элементы массива \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(500\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно преобразовать массив \(a\) в массив \(b\).

Иначе в первой строке выведите число операций \(0 \leq q \leq n + m\). Далее выведите операции в следующем формате в порядке выполнения:

В первой строке выведите три числа \(l, r, k\) (\(1 \leq l \leq r \leq |a|\)). А во второй строке \(k\) целых чисел \(c_1 \ldots c_k\). что означает замену отрезка \(a_l, \ldots, a_r\) на массив \(c_1, \ldots, c_k\).

Сумма \(k\) по всем \(q\) операциям не должна превышать \(n + m\). Также должно быть выполнено \(-10^9 \leq c_i \leq 10^9\).

Вам не нужно минимизировать число операций.

Примечание

В первом тесте изначальный массив изменяется следующим образом.

\(\) [2, -3, 2, 0] \to [2, -3, -3] \to [-3, -3, -3] \to [-3, -7, -3] \to [-3, -7, 0] \(\)

Вы можете выводить или не выводить пустые строки. В примере пустые строки добавлены для удобства.

A. Соседние суммы цифр

Конструктив математика Перебор *800

Дано два числа \(x, y\). Вам нужно определить, существует ли такое положительное число \(n\), что \(S(n) = x\), \(S(n + 1) = y\). Здесь \(S(a)\) обозначает сумму цифр числа \(a\) в десятичной системе счисления.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(x, y\) (\(1 \le x \le 1000, 1 \le y \le 1000\)).

Выходные данные

Для каждого набора входных данных выведите «NO», если подходящее \(n\) не существует. Иначе выведите «YES».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом тестовом примере подойдёт, например, \(n = 100\). \(S(100) = 1\), \(S(101) = 2\).

Во втором тестовом примере можно показать, что \(S(n) \neq S(n+1)\) для всех \(n\), поэтому ответ No.

В четвёртом тестовом примере подойдёт \(n = 10^{111}-1\), число, состоящее из \(111\) цифр \(9\).

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\).

A. Разноцветные шарики

дп математика *1600

Поликарп играет с красными и синими шариками. Он выложил в ряд слева направо n шариков. Оказалось, что выложенные шарики образуют зеброид.

Непустая последовательность красных и синих шариков называется зеброидом, если цвета шариков в этой последовательности чередуются. Например, последовательности (красный; синий; красный) и (синий) — зеброиды, а последовательность (красный; красный) — нет.

Теперь Поликарпа заинтересовало, сколькими способами можно выбрать из этой последовательности подпоследовательность, которая также будет зеброидом? Помогите ему решить эту задачку, найдите остаток от деления количества способов на 1000000007 (109 + 7).

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 106) — количество шариков в последовательности Поликарпа.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

Примечание

Рассмотрим первый тестовый пример. Пусть изначально у Поликарпа была последовательность (красный; синий; красный), тогда выбрать зеброид можно шестью способами:

  • взять первый шарик;
  • взять второй шарик;
  • взять третий шарик;
  • взять первый и второй шарики;
  • взять второй и третий шарики;
  • взять первый, второй и третий шарики.

Можно доказать, что если в качестве изначальной последовательности Поликарпа взять (синий; красный; синий), то количество способов не изменится.

B. Пиксели

Конструктив математика *2100

Во Флатландии живут пиксели трех цветов: красного, зеленого и синего. Известно, что если в кровопролитной битве встречаются два пикселя разных цветов, то после битвы выживает только один из них (то есть общее количество пикселей уменьшается на один). При этом, если в кровопролитной битве встречались пиксели цвета x и y (x ≠ y), то выживший в битве пиксель мгновенно перекрашивается в цвет z (z ≠ xz ≠ y). Пиксели одного цвета дружат, поэтому битв между ними не случается.

Король Флатландии знает, что когда в его владениях останутся пиксели только одного цвета, наступит мир и благодать. Для каждого из трех цветов Вам задано количество пикселей этого цвета, которые живут во Флатландии. Помогите королю, определите, может ли в результате битв пикселей наступить мир и благодать, и если такое возможно, найдите минимальное количество битв для достижения мира и благодати.

Входные данные

В первой строке записано три целых числа через пробел a, b и c (0 ≤ a, b, c ≤ 231a + b + c > 0) — количество пикселей красного, зеленого и синего цвета соответственно.

Выходные данные

Выведите одно число — минимальное количество битв пикселей для достижения мира и благодати. Если достигнуть мира и благодати никак не получится выведите -1.

Примечание

В первом тестовом примере для достижения мира и благодати нужна всего одна битва. Причем это может быть совершенно любая битва. Например, пусть бьются зеленый и синий пиксели, тогда выживший пиксель будет красного цвета. В итоге, после битвы, получится два красных пикселя. Других пикселей не будет.

Во втором тестовом примере возможна следующая последовательность битв: красный с синим, зеленый с красным, красный с синим. В итоге, после всех битв, останется только один зеленый пиксель.

B. Пересечение

математика реализация *2000

Задано два множества точек на плоскости. Первое из них задается уравнением A1x + B1y + C1 = 0, а второе — уравнением A2x + B2y + C2 = 0.

Выведите мощность пересечения двух заданных множеств.

Входные данные

В первой строке записано три целых числа через пробел A1, B1, C1. Во второй строке записано три целых числа через пробел A2, B2, C2. Все числа от -100 до 100.

Выходные данные

Выведите мощность искомого множества точек. Выведите -1, если пересечение содержит бесконечное число точек.

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.

A. Замощение шестиугольниками

математика реализация *1200

Несколько веков назад Берляндия была королевством. Король Берляндии очень любил математику. Именно поэтому, впервые посетив один из своих многочисленных дворцов, он обратил внимание на пол одного из залов, замощенный шестиугольными плитками.

Как оказалось, зал тоже имеет форму шестиугольника. Король обошел зал по периметру и установил, что к каждой из шести сторон прилегают a, b, c, a, b и c плиток соответственно.

Чтобы лучше понять происходящее, взгляните на картинку, на которой изображен подобный шестиугольник для a = 2, b = 3 и c = 4.

По легенде, получив a, b и c, король Берляндии почти мгновенно вычислил общее количество плиток на полу зала. А вы так сможете?

Входные данные

В первой строке записано три целых числа a, b и c (2 ≤ a, b, c ≤ 1000).

Выходные данные

Выведите единственное число — общее количество плиток на полу зала.

E. Счастье для марсиан

математика теория чисел *2000

Как известно, марсиане пользуются системой счисления с основанием k. Цифра b (0 ≤ b < k) считается счастливой, поскольку именно в b-ом году (по марсианскому летоисчислению) произошел первый контакт марсиан с землянами.

Цифровым корнем d(x) числа x называется число, состоящее из одной цифры, которое получается после каскадного сложения всех цифр числа x. Слово «каскадный» означает, что если после первого сложения получилось число из нескольких цифр, то все цифры складываются вновь, и так далее, пока не получится число из одной цифры.

Например, d(35047) = d((3 + 5 + 0 + 4)7) = d(157) = d((1 + 5)7) = d(67) = 67. В данном примере вычисления производятся в системе счисления с основанием 7.

Число, цифровой корень которого равен b, марсиане также называют счастливым.

Имеется строка s, состоящая из n цифр в k-ичной системе счисления. Требуется найти количество различных подстрок данной строки, которые являются счастливыми числами. Лидирующие нули в числах разрешаются.

Напомним, что подстрокой s[i... j] строки s = a1a2... an (1 ≤ i ≤ j ≤ n) является строка aiai + 1... aj. Две подстроки s[i1... j1] и s[i2... j2] строки s считаются различными, если либо i1 ≠ i2, либо j1 ≠ j2.

Входные данные

В первой строке записаны три целых числа k, b и n (2 ≤ k ≤ 109, 0 ≤ b < k, 1 ≤ n ≤ 105).

Во второй строке записана строка s в виде последовательности из n целых чисел, обозначающих цифры в k-ичной системе счисления: i-ое из этих чисел равно ai (0 ≤ ai < k) — i-ая цифра строки s. Числа в строках разделяются пробелами.

Выходные данные

Выведите единственное целое число — количество подстрок, которые являются счастливыми числами.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере искомый цифровой корень имеют подстроки s[1... 2] = «3 2», s[1... 3] = «3 2 0», s[3... 4] = «0 5», s[4... 4] = «5» и s[2... 6] = «2 0 5 6 1».

B. Фибоначчи на Доске

математика Перебор *2100

Числа Фибоначчи представляют собой последовательность: f0 = 0, f1 = 1, f2 = 1, f3 = 2, f4 = 3, f5 = 5, ..., fn = fn - 2 + fn - 1. Таким образом, каждое следующее число является суммой двух предыдущих.

Байтек разработал изящный способ вычислять числа Фибоначчи на доске. Сначала он пишет 0. Затем под ним он пишет 1. Затем он выполняет две следующих операции:

  • операция «T»: заменяет верхнее число суммой обоих чисел;
  • операция «B»: заменяет нижнее число суммой обоих чисел.

Если он выполнит n операций, начиная с операции «T», чередуя операции «T» и «B» (так, чтобы последовательность операций имела вид «TBTBTBTB...»), то последнее записанное число будет равно fn + 1.

К сожалению, Байтек иногда ошибается и повторяет операцию два или более раз подряд. Например, если Байтек хочет посчитать f7, то ему надо выполнить n = 6 операций: «TBTBTB». Если вместо этого Байтек выполнит последовательность операций «TTTBBT», то он сделает 3 ошибки и получит неверный результат, что седьмое число Фибоначчи равно 10. Количество ошибок в последовательности операций — это количество соседних равных операций («TT» или «BB»).

Вам дано число n — количество операций, выполненных Байтеком в попытке посчитать fn + 1 и число r, результат его вычислений (то есть, последнее написанное на доске число). Найдите наименьшее возможное количество ошибок, сделанных Байтеком, и любую возможную последовательность из n операций с найденным минимальным количеством ошибок, результатом которых было бы число r.

Предположим, что Байтек всегда правильно начинает последовательность операций, с операции «T».

Входные данные

Первая строка содержит два целых числа n и r (1 ≤ n, r ≤ 106).

Выходные данные

Первая строка выходного файла должна содержать единственное число — наименьшее возможное количество ошибок, допущенное Байтеком. Вторая строка должна содержать n символов, начинающихся с «T», описывающих одну из возможных последовательностей операций с таким количеством ошибок. Каждый символ должен быть либо «T», либо «B».

Если искомой последовательности не существует, выведите «IMPOSSIBLE» (без кавычек).

D. Патруль Битоникса

битмаски Комбинаторика математика Перебор поиск в глубину и подобное *2900

Байтляндия пытается отправить космическую миссию на планету Bit-X. Их задачу усложняет то, что орбита планеты регулярно патрулируется Капитаном Битониксом, возглавляющим космические подразделения планеты Bit-X.

Вокруг Bit-X есть n станций пронумерованных по часовой стрелке от 1 до n. Станции равномерно расположены по круговой орбите, то есть станции с номерами i и i + 1 (1 ≤ i < n), а также станции с номерами 1 и n, являются соседними. Расстояние между любой парой соседних станций равняется m космическим милям. Патрулирование Капитана Битоникса заключается в том, что от запрыгивает в свою ракету на одной из станций и летает по кругу, пролетая по меньшей мере одну космическую милю перед тем, как приземлится на некоторой станции (возможно, той, с которой он взлетал).

Ракета Битоникса движется на энергии, получаемой от сжигания баков с топливом. После того, как Битоникс использует x-литровый бак с топливом и выбирает направление (по или против часовой стрелки), ракета пролетает ровно x космических миль по круговой орбите в выбранном направлении. Обратите внимание, что у ракеты нет тормозов; ракета не может остановиться, пока не опустошится бак с топливом.

Например, предположим, что n = 3, m = 60, а у Битоникса есть баки с топливом на 10, 60, 90 и 100 литров. Если Битоникс стартует со станции номер 1 и использует 100-литровый бак, чтобы лететь по часовой стрелке, затем использует 90-литровый бак, чтобы лететь по часовой стрелке, а затем использует 10-литровый бак, чтобы лететь против часовой стрелки, то он приземлится на станции номер 1, совершив корректный патруль. Обратите внимание, что Битоникс не обязан использовать все доступные баки с топливом. В данном примере Битоникс также может просто использовать 60-литровый бак, чтобы долететь до станции 2 или 3.

Однако, если бы n равнялось 3, m равнялось бы 60, а Битониксу были доступны только один бак на 10 литров и один бак на 100 литров, то он никак не смог бы совершить корректный патруль (он бы не смог приземлиться ровно на странции).

Космическое агентство Байтляндии хочет уничтожить некоторые топливные баки Капитана Битоникса таким образом, чтобы он не мог совершить ни одного корректного патруля. Сколькими способами можно уничтожить некоторое подмножество топливных баков Капитана Битоникса таким образом, чтобы он не мог совершить ни одного корректного патруля? Найдите описанное количество способов и выведите остаток от его деления на 1000000007 (109 + 7).

Входные данные

В первой строке записано три целых числа n (2 ≤ n ≤ 1000) — количество станций, m (1 ≤ m ≤ 120) — расстояние между соседними станциями и t (1 ≤ t ≤ 10000) — количество баков с топливом Капитана Битоникса.

Во второй строке записано через пробел t целых чисел от 1 до 109, включительно, — объемы баков с топливом Битоникса.

Выходные данные

Выведите единственное число — количество различных подмножеств топливных баков Капитана Битоникса таких, что их уничтожение не позвонит ему совершать корректные патрули, по модулю 1000000007 (109 + 7).

Примечание

Все топливные баки различны, даже если объемы некоторых из них совпадают.

D. Маленький Слоник и треугольник

геометрия математика *2500

Маленький Слоник играет с декартовой системой координат. Больше всего ему нравится играть с целочисленными точками. Под целочисленной точкой Маленький Слоник подразумевает пару целых чисел (xy) таких, что 0 ≤ x ≤ w и 0 ≤ y ≤ h. Таким образом Маленький Слоник знает только (w + 1)·(h + 1) различных целочисленных точек.

Маленький Слоник хочет нарисовать треугольник с вершинами в целочисленных точках, площадь которого является целым положительным числом. Для этого ему нужно найти количество троек точек, которые образуют такой треугольник. При этом порядок точек в тройке имеет значение, то есть тройка точек (0;0), (0;2), (2;2) не равна тройке (0;2), (0;0), (2;2).

Помогите Маленькому Слонику найти количество троек целочисленных точек, которые образуют невырожденный треугольник с целочисленной площадью.

Входные данные

В единственной строке записано два целых числа w и h (1 ≤ w, h ≤ 4000).

Выходные данные

В единственную строку выходных данных выведите целое число — остаток от деления ответа на задачу на 1000000007 (109 + 7).

A. Маленький Слоник и функция

математика реализация *1000

Маленький Слоник увлекается рекурсивными функциями.

В этот раз это функция сортировки. Пусть есть перестановка a из целых чисел от 1 до n, включительно. Через ai обозначим i-ое число перестановки. Тогда рекурсивная функция Маленького Слоника f(x) для сортировки первых x чисел перестановки работает следующим образом:

  • Если x = 1, то прекратить выполнение функции.
  • Иначе, вызвать f(x - 1), а после этого сделать swap(ax - 1, ax) (поменять местами x-ое и (x - 1)-ое числа перестановки a).

Преподаватель Маленького Слоника считает, что такая функция работает не корректно. Но, что-бы не получить двойку, Маленький Слоник хочет каким-то образом показать работоспособность его функции. Помогите ему — найдите такую перестановку чисел от 1 до n, включительно, что, после выполнения функции Маленького Слоника (а именно вызова f(n)), перестановка будет отсортирована по возрастанию.

Входные данные

В единственной строке записано целое число n (1 ≤ n ≤ 103) — размер перестановки.

Выходные данные

В единственную строку выведите n различных чисел от 1 до n — искомая перестановка. Числа в строке разделяйте пробелами.

Гарантируется, что ответ существует.

C. Сокращение дробей

математика реализация сортировки теория чисел *1800

Для запутывания противников Галактическая Империя использует особый формат представления дробей. Дроби представлены как два набора целых чисел. Произведение чисел из первого набора дает числитель дроби, из второго — знаменатель дроби. Однако, обнаружилось, что программы для работы с дробями в таком представлении неполны, в них отсутствует поддержка операции сокращения дробей. Реализуйте эту операцию, и Империя не забудет вас.

Входные данные

В первой строке входного файла через пробел записаны два целых числа n, m (1 ≤ n, m ≤ 105) — количество чисел в первом наборе (числитель) и во втором наборе (знаменатель) соответственно.

Во второй строке записаны n целых чисел через пробел: a1, a2, ..., an (1 ≤ ai ≤ 107) — числа, произведение которых дает числитель.

В третьей строке записаны m целых чисел через пробел: b1, b2, ..., bm (1 ≤ bi ≤ 107) — числа, произведение которых дает знаменатель.

Выходные данные

Выведите ответ на задачу в формате аналогичном формату входных данных. Количества чисел в выводимых наборах nout, mout должны удовлетворять неравенству 1 ≤ nout, mout ≤ 105, а сами числа в наборах aout, i и bout, i — неравенству 1 ≤ aout, i, bout, i ≤ 107.

Числа в строках разделяйте пробельными символами. Выведенная дробь должна быть сокращена, то есть не должно существовать такого целого x (x > 1), что числитель и знаменатель выведенной дроби делятся на x. Если подходящих ответов несколько — выведите любой.

Примечание

В первом тестовом примере числитель равен 1000, знаменатель — 500. Если сократить дробь 1000/500 на наибольший общий делитель числителя и знаменателя (на 500), получается дробь 2/1.

Во втором тестовом примере числитель равен 2000, знаменатель — 300. Если сократить дробь 2000/300 на наибольший общий делитель числителя и знаменателя (на 100), получается дробь 20/3.

C. Частичные суммы

Комбинаторика математика теория чисел *1900

Дан массив a, состоящий из n целых чисел. Элементы массива проиндексированы от 1 до n. Определим операцию, которая состоит из двух шагов, следующим образом:

  1. Сначала по массиву a строится массив s частичных сумм, состоящий из n элементов. Элемент номер i (1 ≤ i ≤ n) массива s равен . Операция x mod y обозначает взятие остатка от деления числа x на число y.
  2. Затем содержимое массива s записывается в массив a. Элемент номер i (1 ≤ i ≤ n) массива s становится i-ым элементом массива a (ai = si).

Вам же нужно найти массив a после применения ровно k описанных операций.

Входные данные

В первой строке записаны два целых числа через пробел n и k (1 ≤ n ≤ 2000, 0 ≤ k ≤ 109). В следующей строке записаны n целых чисел через пробел a1, a2, ..., an — элементы массива a (0 ≤ ai ≤ 109).

Выходные данные

Выведите n целых чисел  — элементы массива a после проделанных операций. Элементы выводите в порядке увеличения их индексов в массиве a. Выведенные числа разделяйте пробельными символами.

A. Параллелепипед

геометрия математика Перебор *1100

Задан прямоугольный параллелепипед с целочисленными длинами ребер. Известны площади трех его граней, имеющих общую вершину. Требуется найти сумму длин всех 12 ребер этого параллелепипеда.

Входные данные

В первой и единственной строке через пробел записаны три целых числа — площади граней параллелепипеда. Величины площадей положительны ( > 0) и не превосходят 104. Гарантируется, что существует хотя бы один параллелепипед, удовлетворяющий условию задачи.

Выходные данные

Выведите единственное число — сумму длин всех ребер параллелепипеда.

Примечание

В первом примере параллелепипед имеет размеры 1 × 1 × 1, во втором — 2 × 2 × 3.

E. Неразрешимость

математика теория чисел *2100

Рассмотрим уравнение

где записью [a] обозначается целая часть числа a.

Найдем все целые z (z > 0), при которых это уравнение неразрешимо в целых положительных числах. Выражение «неразрешимо в целых положительных числах» означает, что не существует таких целых положительных чисел x и y (x, y > 0), при которых выполняется описанное выше равенство.

Выпишем все такие z в порядке возрастания: z1, z2, z3, и так далее (zi < zi + 1). От вас требуется по числу n найти число zn.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 40).

Выходные данные

Выведите единственное целое число — остаток от деления числа zn на 1000000007 (109 + 7). Гарантируется, что ответ существует.

A. Отсеки летающей тарелки

математика *1400

С планеты ACM-1 на Землю в целях исследования двуногого биологического вида (у представителей которого даже антенн нет на голове!) вылетела экспедиционная группа.

Летающая тарелка, на которой отправились в путь отважные первопроходцы, состоит из трех отсеков. Эти отсеки связаны между собой по цепочке: 1-й отсек соседствует только со 2-м, 2-й — с 1-м и с 3-м, 3-й — только со 2-м. Переходы возможны только между соседними отсеками.

Команда космического аппарата состоит из n инопланетян. Каждому из них присвоен ранг — целое число от 1 до n. Ранги всех астронавтов различны. Правила, установленные на борту космической тарелки, таковы, что инопланетянин может перейти из отсека a в отсек b только в том случае, если он старший по рангу среди всех инопланетян, находящихся в отсеках a и b (кроме того, разумеется, требуется, чтобы отсеки a и b были соседними). На один переход любому инопланетянину требуется ровно 1 минута. Кроме того, правила техники безопасности требуют, чтобы в одну и ту же минуту по корпусу судна передвигалось не более одного инопланетянина.

Инопланетянин A старше инопланетянина B по рангу, если число, обозначающее ранг A, больше соответствующего числа для B.

В данный момент команда тарелки в полном составе находится в 3-м отсеке. Им всем требуется переместиться в 1-й отсек. Один из членов экипажа, инопланетянин с идентификационным номером CFR-140, решил подсчитать, за какое минимальное время (в минутах) они смогут выполнить свою задачу.

Помогите CFR-140, посчитайте, за какое минимальное время (в минутах) все астронавты смогут переместиться из 3-го отсека в 1-ый. Так как это число может быть достаточно большим посчитайте его остаток от деления на число m.

Входные данные

В первой строке записаны два целых числа через пробел: n и m (1 ≤ n, m ≤ 109) — количество инопланетян на тарелке и число, по модулю которого следует вывести ответ, соответственно.

Выходные данные

Выведите единственное число — остаток от деления ответа на задачу на число m.

Примечание

В первом примере единственный член экипажа без проблем переходит вначале из 3-го отсека во 2-й, а затем из 2-го в 1-й. Таким образом, на все перемещения будет затрачено две минуты.

Для того, чтобы кратко описать перемещения во втором примере введем обозначение , которое будет соответствовать переходу инопланетянина с рангом i из того отсека, в котором он находится в настоящий момент, в отсек с номером j. Пользуясь введенными обозначениями, опишем перемещения между отсеками во втором примере: , , , , , , , , , , , , , , , , , , , , , , , , , ; Итого: требуется 26 перемещений. Остаток от деления 26 на 8 равен 2, поэтому ответ на этот тест 2.

C. Юбилей

математика матрицы реализация Структуры данных теория чисел *2400

Меньше 60 лет осталось до того, как исполнится 900 лет со дня рождения известного итальянского математика Леонардо Фибоначчи. Безусловно, к такому важному юбилею надо заранее основательно подготовиться.

Дима убежден, что неплохо было бы к знаменательной дате научиться решать следующую задачу: дано множество A, состоящее из чисел l, l + 1, l + 2, ..., r; рассмотрим все его k-элементные подмножества; для каждого такого подмножества найдем наибольший общий делитель чисел Фибоначчи с порядковыми номерами, заданными элементами подмножества. Среди всех найденных наибольших общих делителей Диму интересует самый большой.

Дима просил напомнить, что числа Фибоначчи — элементы числовой последовательности, в которой F1 = 1, F2 = 1, Fn = Fn - 1 + Fn - 2 для n ≥ 3.

У Димы впереди еще больше полувека, чтобы решить поставленную задачу, а у Вас всего два часа. Посчитайте остаток от деления искомого наибольшего общего делителя на m.

Входные данные

В первой строке записаны четыре целых числа через пробел m, l, r и k (1 ≤ m ≤ 109; 1 ≤ l < r ≤ 1012; 2 ≤ k ≤ r - l + 1).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число — остаток от деления искомого наибольшего общего делителя на m.

C. Треугольники

графы Комбинаторика математика *1900

Алиса и Боб больше не играют ни в какие игры; теперь они дружно изучают свойства различных графов. Алиса придумала следующее занятие: из полного неориентированного графа с n вершинами она выбирает какие-то m ребер и оставляет их себе. Оставшиеся же ребер достаются Бобу.

Алисе и Бобу очень нравятся «треугольники» в графах, то есть циклы длины 3. Поэтому они хотят узнать ответ на такой вопрос: какое суммарное количество треугольников находится в двух графах, образованных ребрами Алисы и ребрами Боба, соответственно?

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 106, 0 ≤ m ≤ 106), разделенные пробелом — количество вершин в изначальном полном графе, а также количество ребер в графе Алисы, соответственно. Далее следуют m строк: i-тая строка содержит два целых числа ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi), разделенные пробелом — номера двух вершин, соединенных i-тым ребром графа Алисы. Гарантируется, что граф Алисы не содержит кратных ребер и петель. Изначальный полный граф также не содержит кратных ребер и петель.

Считайте, что вершины графа пронумерованы некоторым образом от 1 до n.

Выходные данные

Выведите единственное число — суммарное количество циклов длины 3 в графах Алисы и Боба.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере в графе Алисы есть 2 треугольника: (1, 2, 3) и (2, 3, 4). В графе Боба всего 1 треугольник: (1, 4, 5). Поэтому в двух графах всего 3 треугольника.

Во втором примере в графе Алисы всего 1 треугольник: (1, 2, 3). В графе Боба находится 3 треугольника: (1, 4, 5), (2, 4, 5) и (3, 4, 5). В данном случае ответ на задачу — 4.

E. Дары

дп Комбинаторика математика Теория вероятностей *2600

Жил старик со своею старухой у самого синего моря. Однажды, закинув в море невод, старик поймал рыбку, да не простую, а золотую. Рыбка молвила: «Отпусти меня, старче! Взамен я откуплюсь n дарами, какие ты только пожелаешь!». Затем рыбка дала старику список с названиями даров и их ценностями. В списке некоторые дары могут иметь одинаковые названия, но разные ценности, однако не может быть двух даров с одинаковыми названием и ценностями. Также могут быть два дара с разными названиями, но одинаковыми ценностями. Старик может назвать рыбке n названий из этого списка. Если в списке, предоставленном рыбкой, некоторое название встречается ровно p раз, то старик не может среди своих n названий использовать это название более чем p раз.

Старику известно, что если он попросит s даров одинакого названия, то золотая рыбка случайным образом (равновероятно среди всех возможных способов) выберет s даров различной ценности с таким названием из своего списка. Старик не хочет рассердить свою старуху; поэтому он выберет n названий таким способом, что будет иметь возможность получить n даров, имеющих наибольшую ценность. Причем он не очень дальновидный, поэтому, если таких способов несколько, то он выбирает один из них равновероятно.

Старик задумался о том, с какой вероятностью он сможет получить n самых ценных даров. Так как старик не силен в теории вероятности, он просит вашей помощи.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 1000), разделенные пробелом — количество желаний старика и количество различных названий в списке золотой рыбки, соответственно. Далее следуют m строк: i-тая строка содержит сперва целое число ki (ki > 0) — количество различных ценностей даров i-того названия, а затем ki различных целых чисел cij (1 ≤ cij ≤ 109), разделенных пробелами — ценности этих даров.

Гарантируется, что сумма всех ki не превышает 1000. Гарантируется, что n не больше, чем суммарное количество даров.

Выходные данные

В единственной строке выведите вещественное число — вероятность получить n самых ценных даров. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 9.

B. Вечеринка

графы Конструктив математика *1600

На вечеринку пришли N человек. Затем те, у кого не было знакомых среди пришедших, ушли. Затем те, у кого был ровно 1 знакомый среди оставшихся, тоже ушли. Затем аналогично поступали те, у кого было ровно 2, 3, ..., N - 1 знакомых среди оставшихся к моменту их ухода.

Какое наибольшее число людей могло в итоге остаться?

Входные данные

В первой строке входного файла содержится одно число T — количество тестов (1 ≤ T ≤ 105). В каждой из следующих T строк записано одно целое число N (1 ≤ N ≤ 105).

Выходные данные

Для каждого теста выведите в отдельной строке одно число — наибольшее количество людей, которое могло остаться.

D. Четырёхугольник

геометрия математика *2600

Даны середины трёх равных сторон строго выпуклого четырёхугольника. Требуется восстановить исходный четырёхугольник.

Входные данные

В первой строке входного файла содержится одно число T — количество тестов (1 ≤ T ≤ 5·104). В каждой из следующих T строк записаны числа x1, y1, x2, y2, x3, y3 — координаты различных точек, являющихся серединами трёх равных сторон (целые неотрицательные числа, не превосходящие 10).

Выходные данные

Для каждого теста выведите две строки. Если искомый четырёхугольник существует, выведите в первой строке YES, а во второй — четыре пары чисел — координаты вершин многоугольника в порядке обхода. Не забудьте, что четырёхугольник должен быть строго выпуклым, т. е. никакие 3 его точки не должны лежать на одной прямой. Числа выводите с 9 знаками после точки.

Если искомый четырёхугольник не существует, в первой строке выведите NO, а вторую строку оставьте пустой.

B. Т-простые числа

Бинарный поиск математика реализация теория чисел *1300

Известно, что простыми называются целые положительные числа, у которых ровно два различных положительных делителя. По аналогии назовем целое положительное число t Т-простым, если у t ровно три различных положительных делителя.

Вам дан массив, состоящий из n целых положительных чисел. Для каждого из них определите, является ли оно Т-простым или нет.

Входные данные

Первая строка содержит единственное целое число — количество чисел в массиве, n (1 ≤ n ≤ 105). Следующая строка содержит n целых чисел xi (1 ≤ xi ≤ 1012), разделенных пробелами.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите n строк: i-тая строка должна содержать «YES» (без кавычек), если число xi является Т-простым, и «NO» (без кавычек), если не является.

Примечание

В приведенном тесте даны три числа. Первое число 4 имеет ровно три делителя — 1, 2 и 4, поэтому ответ для этого числа — «YES». Второе число 5 имеет два делителя (1 и 5), а третье число 6 — четыре делителя (1, 2, 3, 6), поэтому ответ для них — «NO».

B. Таблица

битмаски дп Комбинаторика математика *1900

У Джона Доу есть таблица размером n × m. Джон Доу может нарисовать в некоторых ячейках таблицы точки, не более одной точки в одной ячейке таблицы. С помощью таких операций Джон Доу хочет добиться того, чтобы в любой квадратной подтаблице размера n × n количество точек было в точности равно k.

Джону Доу стало интересно, сколькими различными способами можно заполнить эту таблицу точками так, чтобы описанное условие выполнялось. Поскольку это число может быть очень велико, Джон Доу просит узнать его остаток от деления на 1000000007 (109 + 7).

Считайте, что Джон всегда рисует точку строго в центре некоторой ячейки. Два способа заполнения таблицы точками считаются различными, если существует ячейка таблицы, в которой в одном способе нарисована точка, а в другом — нет.

Входные данные

В единственной строке через пробел записаны целые числа n, m, k (1 ≤ n ≤ 100; n ≤ m ≤ 1018; 0 ≤ k ≤ n2) — количество строк в таблице, количество столбцов в таблице и количество точек, которое должно быть в каждом квадрате.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственной строке выведите целое число — остаток от деления описанного количества способов на 1000000007 (109 + 7).

Примечание

Рассмотрим первый тестовый пример:

Серая область принадлежит обоим квадратам 5 × 5. Поэтому, если в ней есть одна точка, то больше нигде точек быть не может. Если в одной из белых областей есть точка, то в другой тоже должна быть точка. Таким образом есть 20 вариантов, в которых точка стоит в серой области и 25 вариантов в которых в каждой из белых областей стоит по точке. Всего 45 вариантов.

A. Идеальная перестановка

математика реализация *800

Перестановкой называется упорядоченный набор чисел p1, p2, ..., pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Обозначим i-тый элемент перестановки p через pi. Число n будем называть размером перестановки p1, p2, ..., pn.

Николай очень любит перестановки. Некоторые перестановки особенно нравятся Николаю. Их он называет идеальными. Идеальная перестановка, это такая перестановка p, что для любого i (1 ≤ i ≤ n) (n — размер перестановки) верно, что ppi = i и pi ≠ i. Вас он просит для заданного n вывести любую идеальную перестановку размера n.

Входные данные

В единственной строке записано единственное целое число n (1 ≤ n ≤ 100) — размер перестановки.

Выходные данные

Если идеальной перестановки размера n не существует — выведите единственное число -1. Иначе выведите n различных чисел от 1 до n, p1, p2, ..., pn — перестановку p, являющуюся идеальной. Выведенные числа разделяйте пробельными символами.

B. Неквадратное уравнение

Бинарный поиск математика Перебор *1400

Рассмотрим уравнение:

x2 + s(xx - n = 0, 

где x, n — целые положительные числа, s(x) — функция, равная сумме цифр числа x в десятичной системе счисления.

Вам дано целое число n, найдите наименьший целый положительный корень уравнения x, или определите, что таких корней нет.

Входные данные

В единственной строке записано целое число n (1 ≤ n ≤ 1018) — параметр уравнения.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите -1, если уравнение не имеет целых положительных корней. Иначе выведите такое наименьшее целое x (x > 0), что описанное в условии равенство выполняется.

Примечание

В первом тестовом примере x = 1 является наименьшим корнем. Так как s(1) = 1 и 12 + 1·1 - 2 = 0.

Во втором тестовом примере x = 10 является наименьшим корнем. Так как s(10) = 1 + 0 = 1 и 102 + 1·10 - 110 = 0.

В третьем тестовом примере корней у уравнения нет.

B. Сыграем в Osu!

дп математика Теория вероятностей *2000

Вы играете в игру под названием Osu. Упрощенная версия этой игры заключается вот в чем: в игре надо кликнуть n раз. На каждый Ваш клик система выдает свой вердикт, всего существует два вердикта: верно или неверно. Обозначим вердикт верно символом «O», неверно символом — «X», тогда всю игру можно закодировать последовательностью из n символов «O» и «X».

Счет в игре вычисляется по последовательности, кодирующей игру, следующим образом: для каждого наибольшего блока из идущих подряд «O», длина блока (количество символов «O») возводится в квадрат и прибавляется к счету. Например, если Вашу игру можно представить как «OOXOOOXXOO», то есть три наибольших блока из идущих подряд «O»: «OO», «OOO», «OO», следовательно, Ваш счет составит 22 + 32 + 22 = 17. Если в процессе игры не было ни одного верного клика, счет равняется 0.

Вы знаете, что вероятность верно кликнуть в i-ый (1 ≤ i ≤ n) раз равняется pi. Иными словами, i-ый символ в последовательности, которая кодирует эту игру, может быть «O» с вероятностью pi, или быть «X» с вероятностью 1 - pi. Ваша задача — посчитать ожидаемый счет для Вашей игры.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество кликов. Во второй строке записаны n вещественных чисел через пробел p1, p2, ..., pn (0 ≤ pi ≤ 1).

Гарантируется, что заданные pi содержат не больше шести знаков после десятичной точки.

Выходные данные

Выведите единственное вещественное число — ожидаемый счет Вашей игры. Ваш ответ будет считаться корректным, если его абсолютная или относительная погрешность не превышает 10 - 6.

Примечание

Пояснение к первому примеру. Есть 8 возможных исходов. Вероятность каждого из них составляет 0.125.

  • «OOO»  →  32 = 9;
  • «OOX»  →  22 = 4;
  • «OXO»  →  12 + 12 = 2;
  • «OXX»  →  12 = 1;
  • «XOO»  →  22 = 4;
  • «XOX»  →  12 = 1;
  • «XXO»  →  12 = 1;
  • «XXX»  →  0.

Таким образом, ожидаемый счет составляет .

E. Задача с Числами

дп Комбинаторика математика реализация теория чисел *2600

Обозначим количество делителей положительного целого числа n как d(n). Вам дано три числа a, b и c. Ваша задача — вычислить следующую сумму:

Найдите остаток от деления этой суммы на 1073741824 (230).

Входные данные

В первой строке записаны три целых числа через пробел — a, b и c (1 ≤ a, b, c ≤ 2000).

Выходные данные

Выведите единственное целое число — остаток от деления искомой суммы на 1073741824 (230).

Примечание

Пояснение к первому примеру.

  • d(1·1·1) = d(1) = 1;
  • d(1·1·2) = d(2) = 2;
  • d(1·2·1) = d(2) = 2;
  • d(1·2·2) = d(4) = 3;
  • d(2·1·1) = d(2) = 2;
  • d(2·1·2) = d(4) = 3;
  • d(2·2·1) = d(4) = 3;
  • d(2·2·2) = d(8) = 4.

Следовательно, ответ — 1 + 2 + 2 + 3 + 2 + 3 + 3 + 4 = 20.

A. Шерстяная Последовательность

Конструктив математика *1300

Последовательность неотрицательных целых чисел a1, a2, ..., an длины n называется шерстяной последовательностью тогда и только тогда, когда существует два целых числа l и r (1 ≤ l ≤ r ≤ n), таких, что . Иными словами, шерстяная последовательность содержит подпоследовательность из последовательных элементов, xor которых равен 0.

Выражение означает применение побитовой операции xor к числам x и y. Данная операция существует во всех современных языках программирования, например, в языках C++ и Java она обозначена как «^», в Pascal — как «xor».

В этой задаче Вас попросили подсчитать количество последовательностей, составленных из n чисел от 0 до 2m - 1, не являющихся шерстяными последовательностями. Выведите это количество по модулю 1000000009 (109 + 9).

Входные данные

Единственная строка входных данных содержит через пробел целые числа n и m (1 ≤ n, m ≤ 105).

Выходные данные

В единственной строке выходных данных выведите искомое количество последовательностей по модулю 1000000009 (109 + 9).

Примечание

Последовательности длины 3, сделанные из целых чисел 0, 1, 2 и 3, не являющиеся шерстяными последовательностями, таковы: (1, 3, 1), (1, 2, 1), (2, 1, 2), (2, 3, 2), (3, 1, 3) и (3, 2, 3).

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.

C. Последовательность точек

геометрия математика реализация *1800

Даны точки на плоскости с целыми координатами: M0, A0, A1, ..., An - 1, где n — нечетное число. Определим бесконечную последовательность точек Mi следующим образом: Mi симметрична Mi - 1 относительно (для любого натурального числа i). Точка B симметрична A относительно M, если M — центр отрезка AB. Для заданного j найдите точку Mj.

Входные данные

В первой строке записано нечетное целое число n (1 ≤ n ≤ 105), и целое число j (1 ≤ j ≤ 1018) — индекс требуемой точки последовательности. В следующей строке через пробел записаны два целых числа — координаты точки M0. Далее следуют n строк, в i-ой строке через пробел записаны координаты точки Ai - 1. Все координаты не превосходят по модулю 1000.

Выходные данные

Выведите через пробел координаты точки Mj.

D. Сломанный робот

дп математика Теория вероятностей *2400

Вы получили в подарок очень умного робота, передвигающегося по прямоугольному полю. К сожалению, робот оказался сломан: он ведет себя как-то странно и передвигается случайным образом. Поле состоит из N строк и M столбцов. Изначально робот находится в клетке на пересечении i-ой строки и j-ого столбца. Далее на каждом шаге робот может пойти на другую клетку. Его цель — попасть на самую нижнюю (N-ую) строку. На каждом шаге робот может остаться на своей текущей клетке, перейти влево, вправо, или вниз на соседнюю клетку. Если робот находится в самом левом столбце, он не может пойти влево, а если он находится в самом правом столбце, он не может пойти вправо. На каждом шаге все возможные действия равновероятны. Найдите математическое ожидание числа шагов, требующихся чтобы дойти до самой нижней строки.

Входные данные

В первой строке через пробел записаны два целых числа N и M (1 ≤ N, M ≤ 1000). Во второй строке через пробел записаны еще два целых числа i и j (1 ≤ i ≤ N, 1 ≤ j ≤ M) — номер строки и столбца, на пересечении которых изначально стоит робот. Клетка (1, 1) — левый верхний угол поля, а (N, M) — правый нижний угол.

Выходные данные

Выведите математическое ожидание необходимого числа шагов как минимум с 4 знаками после десятичной точки.

B. Friends

Бинарный поиск битмаски математика Структуры данных *2700

You have n friends and you want to take m pictures of them. Exactly two of your friends should appear in each picture and no two pictures should contain the same pair of your friends. So if you have n = 3 friends you can take 3 different pictures, each containing a pair of your friends.

Each of your friends has an attractiveness level which is specified by the integer number ai for the i-th friend. You know that the attractiveness of a picture containing the i-th and the j-th friends is equal to the exclusive-or (xor operation) of integers ai and aj.

You want to take pictures in a way that the total sum of attractiveness of your pictures is maximized. You have to calculate this value. Since the result may not fit in a 32-bit integer number, print it modulo 1000000007 (109 + 7).

Input

The first line of input contains two integers n and m — the number of friends and the number of pictures that you want to take.

Next line contains n space-separated integers a1, a2, ..., an (0 ≤ ai ≤ 109) — the values of attractiveness of the friends.

Output

The only line of output should contain an integer — the optimal total sum of attractiveness of your pictures.

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) — исходный массив.

Выходные данные

Выведите единственное целое число — какое максимальное количество равных элементов массива можно получить, выполнив произвольное количество указанных операций.

B. Котенок Гав

математика теория чисел *1400

Котенок Гав очень любит играть с числами. Пока он знает только простые числа, которые являются цифрами. Такими числами являются 2, 3, 5 и 7. Но такие числа котенку порядком поднадоели, потому что он придумал не очень много игр, связанных с ними.

Котенок Гав хочет найти минимальное число длины n, такое, что оно одновременно делится на все числа, которые котенок уже знает (2, 3, 5 и 7). Помогите ему в этом.

Длиной числа называется количество разрядов его представления в десятичной записи без лидирующих нулей.

Входные данные

В единственной строке входных данных находится целое число n (1 ≤ n ≤ 105).

Выходные данные

Выведите единственное целое число — ответ на поставленную задачу без лидирующих нулей, или «-1» (без кавычек), если чисел, удовлетворяющих условию задачи не существует.

E. День рождения ослика Иа-Иа

дп математика Теория вероятностей *2600

У ослика Иа-Иа сегодня день рождения. Его друг, Винни-Пух, хочет сделать ему самый лучший подарок — горшочек меда. Конечно, медвежонок понимает, что полный горшочек до ослика донести не удастся, потому что по пути он съест весь мед. А раз уж Винни собрался перекусить по пути, то изначально в горшочке должно быть как можно больше меда.

За день до этого Винни-Пух пополнил свои запасы меда. Дома у Винни-Пуха есть n полок, на каждой из которых находится некоторое, возможно нулевое, количество горшочков с медом. В течение дня Винни q раз подходил к полкам с медом; в i-тый раз он подходил к некоторой полке ui, брал с нее некоторое количество горшочков ki, пробовал мед из каждого из них и ставил все эти горшочки на некоторую полку vi. Выбирая горшочки, Винни руководствовался интуицией, а, значит, можно считать, что среди всех наборов из ki горшочков на полке ui, он равновероятно выбирает один.

Сейчас Винни помнит все действия, которые он выполнял с горшочками меда. На праздник он хочет взять горшочек, который вчера ему не попадался. Для этого ему необходимо знать математическое ожидание m количества полок, на которых нет ни одного нетронутого медвежонком горшочка. Для того, чтобы лучше оценить свои шансы, Винни-Пух хочет знать значение m после каждого выполненного им действия.

Ваша задача — написать программу, которая найдет эти значения за него.

Входные данные

Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 105) — количество полок у Винни-Пуха дома. Вторая строка содержит n целых чисел ai (1 ≤ i ≤ n, 0 ≤ ai ≤ 100) — количество горшочков с медом на полке с номером i.

В следующей строке содержится целое число q (1 ≤ q ≤ 105) — количество действий, которое выполнил Винни за предыдущий день. Далее следует q строк, i-ая из которых описывает очередное в хронологическом порядке действие и содержит три целых числа ui, vi и ki (1 ≤ ui, vi ≤ n, 1 ≤ ki ≤ 5) — номер полки, с которой Винни взял горшочки, номер полки, на которую Винни поставил горшочки после того, как попробовал мед из каждого из них, и количество горшочков, из которых Винни-Пух попробовал мёд, соответственно.

Считайте, что полки с горшочками пронумерованы целыми числами от 1 до n. Гарантируется, что Винни-Пух никогда не пытался брать с полки больше горшков, чем на ней находится.

Выходные данные

Для каждого действия Винни-Пуха выведите величину математического ожидания m на момент окончания выполнения этого действия. Относительная или абсолютная погрешность каждого значения не должна превышать 10 - 9.

D. Ежик и звезды

геометрия дп математика сортировки Структуры данных *2700

По вечерам Ежик ходил к Медвежонку в гости считать звезды. Они усаживались на бревнышке и, прихлебывая чай, смотрели на звездное небо. Оно висело над крышей, прямо за печной трубой. Справа от трубы были звезды Медвежонка, а слева — Ежика. Обычно, Ежик просто считал все звезды, поэтому он знает, что всего их n. В этот раз он решил немного усложнить себе задачу. Он мысленно ввел систему координат: начало координат положил в точке пересечения крыши и трубы, ось OX направил вдоль крыши влево, ось OY — вдоль трубы вверх (см. рисунок). Ежик проводит два луча из начала координат под углами α1 и α2 к оси OX.

Теперь он выбирает любую из звезд, лежащих строго между этими лучами. После этого он опять проводит лучи, выходящие из этой звезды, под теми же углами α1 и α2 к оси OX и выбирает очередную звезду, лежащую строго между новыми лучами. Так он повторяет до тех пор, пока между лучами, выходящими из очередной звезды, есть еще звезды, которые он может выбрать.

В итоге у Ежика получается цепочка звезд, до каждой из которых он может последовательно добраться действуя по установленным правилам.

Ваша задача — найти наибольшее количество звезд m, которое может содержать цепочка, полученная Ежиком.

Обратите внимание, что цепочка обязательно должна начинаться в точке начала координат, которая не учитывается при подсчете количества звезд m в цепочке.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 105) — количество звезд. Во второй строке в виде обыкновенных дробей вам даны отношения «a/b c/d», такие что и (0 ≤ a, b, c, d ≤ 105; ; ; ). Заданные числа a, b, c, d — целые.

В следующих n строках даны пары целых чисел xi, yi (1 ≤ xi, yi ≤ 105)— координаты звезд.

Гарантируется, что все звезды имеют различные координаты.

Выходные данные

В единственной строке выведите число m — ответ на задачу.

Примечание

В примере длиннейшая цепочка, которую может составить Ежик, включает в себя четыре звезды. Обратите внимание, что звезды, лежащие на проводимых Ежиком лучах, не могут быть выбраны.

E. Бесконечная матрица

математика *2600

Алиса Селезнёва, как и любая другая школьница конца 21 века, интересуется наукой. Недавно она посетила МИВ (Московский Институт Времени), где его глава и один из изобретателей машины времени Академик Петров рассказал ей о том, как устроена машина времени.

Во время демонстрации работы машины времени Алиса заметила, что эта машина не обладает высоким быстродействием и заинтересовалась причиной такого недостатка устройства. Как выяснилось при детальном изучении, одна из задач, решение которой необходимо для работы машины времени, решается не оптимальным алгоритмом. Если найти способ решать такую задачу оптимально, то машина времени будет работать быстрее и расходовать меньше энергии.

Задача, которую не может решить оптимально ни один из сотрудников, заключается в следующем. Существует матрица a, которая заполняется по следующему правилу:

Ячейки заполняются последовательными целыми положительными числами, начиная с единицы. Причем ai, j < at, k (i, j, t, k ≥ 1) если:

  1. max(i, j) < max(t, k);
  2. max(i, j) = max(t, k) и j < k;
  3. max(i, j) = max(t, k), j = k и i > t.

Так, после того, как будут поставлены первые 36 чисел, матрица a примет следующий вид:

Для решения задачи необходимо научиться достаточно быстро находить для заданных значений x1, y1, x2 и y2 (x1 ≤ x2, y1 ≤ y2) значение выражения:

Так как значение этого выражения может быть очень большим, достаточно знать только последние 10 цифр искомого значения.

Итак, никто в МИВ не может решить поставленную задачу. Алиса отважилась воспользоваться машиной времени и отправиться в прошлое, чтобы обратиться за помощью к Вам.

Ваша задача — написать программу, которая по заданными значениям x1, y1, x2 и y2 находит последние 10 цифр заданного выражения.

Входные данные

В первой строке входных данных находится единственное целое число t (1 ≤ t ≤ 105) — количество тестовых наборов, для которых необходимо решить задачу.

Каждая из последующих t строк содержит описание очередного тестового набора — четыре целых положительных числа x1, y1, x2 и y2 (1 ≤ x1 ≤ x2 ≤ 109, 1 ≤ y1 ≤ y2 ≤ 109), разделенных пробелами.

Выходные данные

Для каждого из запросов выведите значение выражения, если оно содержит не более 10 знаков. Иначе выведите три символа «.» (без кавычек), а затем десять последних цифр значения выражения. Выводите ответ для каждого запроса на отдельной строке. Как можно более точно придерживайтесь формата, указанного в примере.

B. Игра с перестановками

математика реализация *1800

Маленький Петя очень любит перестановки. Недавно мама подарила ему перестановку q1, q2, ..., qn длины n.

Перестановкой a длины n будем называть последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ n), все числа которой различны.

Больше чем перестановки Петя любит только играть с маленькой Машей. Оказалось, у Маши тоже есть перестановка длины n. Петя решил во что бы то ни стало, получить такую же перестановку. Для этого он придумал игру со следующими правилами:

  • Перед началом игры Петя записывает на доске перестановку 1, 2, ..., n. После чего Петя делает ровно k ходов, описанных ниже.
  • На очередном ходу бросается монета. Если выпал орел, то выполняется пункт 1, если решка — пункт 2.
    1. Пусть на доске в данный момент записана перестановка p1, p2, ..., pn. Тогда записанная на доске перестановка p стирается, а вместо нее записывается следующая: pq1, pq2, ..., pqn. Иными словами, к перестановке p применяется перестановка q, подаренная Пете.
    2. Все действия аналогичны пункту 1, за исключением того что на доску записывается перестановка t, такая что: tqi = pi для всех i от 1 до n. Иными словами, к перестановке p применяется перестановка, обратная к q.

Известно, что после k-го хода на доске оказалась перестановка Маши s1, s2, ..., sn. Кроме того, известно, что в процессе игры до k-го хода перестановка Маши ни разу не встретилась на доске. Обратите внимание, что в игре ровно k ходов, то есть в процессе игры монетка подбрасывалась ровно k раз.

Ваша задача — определить, возможна ли описанная ситуация, либо сообщить, что Петя что-то перепутал. Смотрите примеры из условия и разъяснения к ним для лучшего понимания.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n, k ≤ 100). Во второй строке записаны n целых чисел через пробел q1, q2, ..., qn (1 ≤ qi ≤ n) — перестановка, подаренная Пете. В третьей строке записана Машина перестановка s, в аналогичном формате.

Гарантируется, что заданные последовательности q и s — корректные перестановки.

Выходные данные

Если описанная в условии ситуация возможна, выведите «YES» (без кавычек), иначе — выведите «NO» (без кавычек).

Примечание

В первом примере перестановка Маши совпадает с перестановкой, которая была записана на доске перед началом игры. Следовательно, нарушается условие, что перед выполнением k ходов, перестановка Маши ни разу не встречалась на доске.

Во втором примере описанная ситуация возможна, в случае если после подбрасывания монетки выпала решка.

В третьем примере возможная последовательность выпадений монетки такая: орел-решка-решка.

В четвертом примере возможна следующая последовательность выпадений монетки: орел-орел.

D. Два множества

битмаски математика *2700

Маленький Петя очень любит числа. Недавно мама подарила ему набор из n целых неотрицательных чисел. Больше чем числа Петя любит только играть с маленькой Машей. Он тут же решил поделиться с ней частью своего нового набора. Чтобы вместе детям было еще веселее играть, Петя решил отдать Маше такой набор чисел, для которого выполняются следующие условия:

  • Обозначим через x1 xor всех чисел, которые остались у Пети, а через x2xor всех чисел, которые он отдал Маше. Значение (x1 + x2) должно быть как можно больше.
  • Если существует несколько способов разделить набор чисел так, чтобы предыдущее условие выполнялось, то Петя минимизирует значение x1.

Под операцией xor подразумевается побитовое исключающее «ИЛИ», которое обозначается как «xor» в языке Pascal и «^» в C/C++/Java.

Помогите Пете разделить набор требуемым образом. Если существует несколько подходящих разбиений, найдите любое. Обратите внимание, что после того, как Петя отдаст часть своих чисел Маше, у него их может не остаться вовсе. Возможна и обратная ситуация, когда Петя ничего не отдает Маше. В обоих случаях следует считать, что xor пустого набора чисел равен 0.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 105) — количество чисел, которые мама подарила Пете. Во второй строке заданы сами числа через пробел. Все они целые, неотрицательные и не превосходят 1018.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите n целых чисел через пробел, i-е из которых должно быть равно 1, если Петя оставляет себе i-е по порядку число из набора или 2, если Петя отдает соответствующее число Маше. Числа нумеруются в том же порядке, в котором они заданы во входных данных.

D. Остап и квадрат

Бинарный поиск математика реализация *1800

У Остапа есть электронная таблица размера n × n, каждая клетка которой может быть выключена или включена. Он хочет чтобы на поле были включены не менее чем c клеток, когда это условие будет выполнено — Остап станет счастливым.

Будем считать, что строки таблицы пронумерованы сверху вниз от 1 до n, а столбцы — слева направо от 1 до n. Изначально включена ровно одна клетка с координатами (x, y) (x — номер строки, y — номер столбца), а все остальные клетки находятся в выключенном состоянии. Далее каждую секунду происходит включение выключенных клеток, у которых есть включенные соседние по стороне клетки.

Для клетки с координатами (x, y) соседними по стороне являются клетки с координатами (x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1).

Через сколько секунд Остап станет счастливым?

Входные данные

В первой строке содержится четыре целых числа, разделенных пробелами, n, x, y, c (1 ≤ n, c ≤ 109; 1 ≤ x, y ≤ nc ≤ n2).

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

Примечание

В первом тесте изначально закрашена одна клетка, по этому ответ 0. Во втором тесте все события будут происходить как показано на картинке. .

E. Фурло и Рубло и Игра

игры математика реализация *2200

Фурло и Рубло играют в игру. На столе лежат n кучек монет, в кучке номер i лежит ai монет. Фурло и Рубло делают ходы по очереди, Фурло ходит первым. За один ход разрешается:

  • выбрать какую-то кучку, обозначим текущее количество монет в ней через x;
  • выбрать некоторое целое число y (0 ≤ y < xx1 / 4 ≤ y ≤ x1 / 2) и уменьшить количество монет в этой кучке до y. Другими словами после описанного хода игрока в выбранной кучке останется y монет.

Игрок, который не может сделать ход — проигрывает.

Ваша задача — узнать, кто выиграет в данной игре, если и Фурло и Рубло играют оптимально.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 77777) — количество кучек. В следующей строке заданы n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 777777777777) — размеры кучек. Числа разделены одиночными пробелами.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Если при оптимальной игре обоих выиграет Фурло — выведите «Furlo», иначе выведите «Rublo». Ответы выводите без кавычек.

C. Угол обзора

геометрия математика Перебор *1800

Недавно во Флатландии ввели новый вид проверки зрения для получения водительских прав. Экзамен состоит в том, что на плоскость помещаются манекены, и экзаменуемый должен назвать величину минимального угла, вершина которого находится в начале координат, такого, что все манекены располагаются внутри или на границе этого угла.

Из-за того, что Вы проводите много времени «за монитором», у Вас не очень хорошее зрение. Поэтому Вам необходимо написать программу, которая будет проходить этот тест.

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 105) — количество манекенов.

В следующих n строках находятся по два целых числа, разделенных пробелом: xi, yi (|xi|, |yi| ≤ 1000) — координаты i-того манекена. Гарантируется, что в начале координат нет манекена. Гарантируется, что никакие два манекена не находятся в одной точке плоскости.

Выходные данные

Выведите единственное вещественное число — величину искомого угла в градусах. Ответ будет считаться правильным, если относительная или абсолютная погрешность не будет превышать 10 - 6.

Примечание

Решение для первого примера показано ниже:

Решение для второго примера показано ниже:

Решение для третьего примера показано ниже:

Решение для четвертого примера показано ниже:

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.

C. Маленький Слоник и НОК

Бинарный поиск дп Комбинаторика математика *2000

Маленький Слоник любит операцию НОК (наименьшее общее кратное) непустого множества целых положительных чисел. Результат операции НОК k целых положительных чисел x1, x2, ..., xk — это минимальное целое положительное число, которое делится на каждое из чисел xi.

Пусть задана последовательность целых чисел b1, b2, ..., bn. Обозначим через lcm(b1, b2, ..., bn) их НОК, а через max(b1, b2, ..., bn) — максимальное из них. Маленький Слоник считает последовательность b хорошей, если lcm(b1, b2, ..., bn) = max(b1, b2, ..., bn).

У Маленького Слоника есть последовательность целых чисел a1, a2, ..., an. Помогите ему найти количество хороших последовательностей целых чисел b1, b2, ..., bn таких, что для всех i (1 ≤ i ≤ n) выполняется 1 ≤ bi ≤ ai. Так как ответ может быть довольно большим, выведите остаток от его деления на 1000000007 (109 + 7).

Входные данные

В первой строке записано единственное целое положительное число n (1 ≤ n ≤ 105) — количество чисел в последовательности a. Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 105) — последовательность a.

Выходные данные

В единственной строке выведите одно целое число — ответ на задачу по модулю 1000000007 (109 + 7).

D. Маленький Слоник и сломана сортировка

дп математика Теория вероятностей *2600

Маленький Слоник очень любит перестановки целых чисел от 1 до n. Но больше всего он любит их сортировать. Чтобы отсортировать перестановку Маленький Слоник несколько раз меняет некоторые элементы местами. В результате должна получиться перестановка 1, 2, 3, ..., n.

В этот раз у Маленького Слоника есть перестановка p1, p2, ..., pn. Его программа-сортировка должна выполнить ровно m шагов, на i-ом из которых она меняет местами элементы, расположенные в данный момент на ai-той и bi-той позициях. Так случилось, что программа-сортировка Маленького Слоника сломалась, и теперь на каждом шагу она равновероятно может либо не сделать ничего, либо поменять требуемые элементы местами.

Теперь Маленький Слоник даже не надеется, что программа отсортирует перестановку, но все-таки ему интересно, насколько близка будет полученная в результате выполнения программы перестановка к отсортированной. Для этого помогите Маленькому Слонику найти математическое ожидание количества инверсий перестановки после выполнения всех шагов программы.

Пару целых чисел i, j (1 ≤ i < j ≤ n) назовем инверсией в перестановке p1, p2, ..., pn, если выполняется неравенство pi > pj.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 1000, n > 1) — размер перестановки и количество шагов. Во второй строке заданы n различных целых положительных чисел, не превосходящих n — изначальная перестановка. В следующих m строках заданы по два целых числа: в i-той строке записаны числа ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — позиции меняемых на i-том шаге программы элементов.

Выходные данные

В единственной строке выведите одно действительное число — ответ на задачу. Ответ будет считать правильным, если его относительная или абсолютная погрешность не превосходит 10 - 6.

D. Билеты

Комбинаторика математика Теория вероятностей *2400

Как большой фанат Формулы-1, Чарли очень рад организовывать продажу билетов на следующий Гран-при, который проходит в его городе. К сожалению, в связи с финансовым кризисом в его стране остались купюры только на 10 и 20 евро. Каждый билет на гонку стоит 10 евро, поэтому если кто-то хочет купить один билет на купюру на 20 евро, Чарли должен выдать ему сдачу купюрой на 10 евро. Чарли понимает, что при нехватке купюр на 10 евро, это может стать проблемой. У Чарли есть некоторая информация о покупателях, но он никак не может ее использовать, и ему нужна ваша помощь. Ровно n + m человек придут к нему за билетами. n из них придут с одной купюрой на 10 евро, и остальные m из них придут с одной купюрой на 20 евро. Сейчас у Чарли есть k купюр на 10 евро, которые, если понадобится, он может использовать для выдачи сдачи. Все n + m человек придут в магазин билетов в случайном порядке, все порядки равновероятны. Найдите вероятность того, что продажа всех билетов пройдет гладко, т. е. у Чарли будет сдача для каждого человека с купюрой на 20 евро.

Входные данные

На единственной строке через пробел записаны три целых числа n, m и k (0 ≤ n, m ≤ 105, 0 ≤ k ≤ 10).

Выходные данные

Выведите требуемую вероятность по крайней мере с 4 знаками после десятичной точки.

A. Добавление цифр

математика реализация *1400

У Васи есть два числа: a и b. Однако, число a кажется Васе слишком коротким. По этой причине он решил n раз повторить операцию удлинения числа a.

Одна операция удлинения числа состоит в дописывании к числу ровно одной цифры (в десятичной системе счисления) справа таким образом, чтобы полученное число делилось на Васино число b. Если невозможно получить число, которое делится на b, то операцию удлинения применять нельзя.

Ваша задача состоит в том, чтобы помочь Васе и вывести число, которое может получиться у Васи при применении к числу a операции удлинения n раз.

Входные данные

В первой строке входных данных содержится три целых числа: a, b, n (1 ≤ a, b, n ≤ 105).

Выходные данные

В единственной строке выведите целое число без лидирующих нулей, которое может получиться у Васи при применении к числу a операции удлинения n раз. Если такого числа не существует, то выведите число -1. Если возможных ответов несколько выведите любой.

B. Максим и ресторан

дп математика Теория вероятностей *1900

Максим открыл свой собственный ресторан, в котором стоит огромный стол длины p метров.

Сегодня у Максима праздничный ужин, и к нему придет n гостей. Пронумеруем гостей ресторана Максима от 1 до n. Максим знает размеры всех гостей, которые к нему придут. Размер i-го гостя (ai) обозначает, сколько метров займет гость, если сядет за стол ресторана.

Задолго до ужина гости выстраиваются в очередь перед рестораном в некотором порядке. Затем Максим по очереди запускает гостей в свой ресторан. Максим перестает запускать гостей в ресторан в случае, если очередной гость не помещается за стол ресторана. Очередной гость не помещается за стол ресторана, если сумма размеров всех зашедших в ресторан гостей и размера очередного гостя больше p. В этом случае, чтобы не обидеть гостя, который не поместился за стол, Максим больше никого не пускает в ресторан, даже если один из следующих в очереди гостей помещается за стол ресторана.

Теперь Максиму интересно, чему равно среднее количество зашедших в ресторан гостей по всем n! возможным порядкам гостей в очереди. Помогите Максиму, посчитайте это число.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 50) — количество гостей ресторана. В следующей строке заданы целые числа a1, a2, ..., an (1 ≤ ai ≤ 50) — размеры гостей в метрах. В третьей строке задано целое число p (1 ≤ p ≤ 50) — длина стола в метрах.

Числа в строках разделяются одиночными пробелами.

Выходные данные

В единственную строку выведите вещественное число — ответ на задачу. Ответ будет считаться верным, если абсолютная или относительная погрешность не будет превышать 10 - 4.

Примечание

В первом примере люди могут приходить в таких порядках:

  • (1, 2, 3) — двое человек будет в ресторане;
  • (1, 3, 2) — один человек будет в ресторане;
  • (2, 1, 3) — двое человек будет в ресторане;
  • (2, 3, 1) — один человек будет в ресторане;
  • (3, 1, 2) — один человек будет в ресторане;
  • (3, 2, 1) — один человек будет в ресторане.

В сумме получаем (2 + 1 + 2 + 1 + 1 + 1) / 6 = 8 / 6 = 1.(3).

C. Максим и матрица

дп Конструктив математика *2000

Максим любит заполнять матрицу специальным образом. Ниже приведен псевдокод заполнения матрицы размера (m + 1) × (m + 1):

Максим просит вас посчитать, сколько существует таких чисел m (1 ≤ m ≤ n), что сумма значений ячеек в строке с номером m + 1, полученной матрицы будет равна t.

Выражение (x xor y) обозначает применение операции побитового исключающего «ИЛИ» к числам x и y. Данная операция есть во всех современных языках программирования, например, в языке C++ и Java она обозначается символом «^», в Pascal — «xor».

Входные данные

В единственной строке заданы два целых числа n и t (1 ≤ n, t ≤ 1012, t ≤ n + 1).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

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. Если существует несколько решений, выведите любое.

D. БерДональдс

графы кратчайшие пути математика *2400

В Бертауне собираются открыть кафе известной сети БерДональдс. При этом очень важно правильно выбрать месторасположение нового кафе, чтобы до него было удобно добираться. Система дорог Бертауна представляет собой n перекрестков, соединенных m двусторонними дорогами. Для каждой дороги известна ее длина. Также известно, что от каждого перекрестка по дорогам можно добраться до любого другого.

Ваша задача — найти такое расположение кафе, при котором кратчайшее расстояние по дорогам от кафе до самого дальнего перекрестка будет минимально. Учтите, что кафе может находиться не только на перекрестке, но и в любой точке любой дороги.

Входные данные

В первой строке записаны два целых числа n и m () — количество перекрестков и дорог соответственно. Далее следует m строк — описание всех дорог в Бертауне. Каждая дорога описывается тремя целыми числами ai, bi, wi (1 ≤ ai, bi ≤ n, ai ≠ bi; 1 ≤ wi ≤ 105), где ai и bi — номера перекрестков, которые соединяет i-ая дорога, а wi — длина i-ой дороги.

Гарантируется, что каждая дорога соединяет два различных перекрестка, между любыми двумя перекрестками имеется не более одной дороги, и от любого перекрестка можно добраться до любого другого.

Выходные данные

Выведите единственное вещественное число — кратчайшее расстояние от оптимального положения кафе до самого дальнего перекрестка. Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит 10 - 9.

E. Опять запросы к массиву...

математика Структуры данных *2500

Дан массив, состоящий из n целых чисел: a1, a2, ..., an. Вам необходимо быстро выполнять запросы двух типов:

  1. Присвоить всем элементам от l до r включительно значение x. После такого запроса значения элементов массива al, al + 1, ..., ar становятся равны x.
  2. Посчитать и вывести сумму , где k не превосходит 5. Так как значение суммы может оказаться достаточно большим, нужно выводить остаток от его деления на 1000000007 (109 + 7).
Входные данные

В первой строке записано два целых числа n и m (1 ≤ n, m ≤ 105) — количество чисел в массиве и количество запросов соответственно. Во второй строке записано n целых чисел: a1, a2, ..., an (0 ≤ ai ≤ 109) — начальные значения элементов массива.

Далее следует m запросов, по одному в каждой строке:

  1. Запрос на присвоение имеет следующий формат: «», (1 ≤ l ≤ r ≤ n; 0 ≤ x ≤ 109).
  2. Запрос на подсчет суммы имеет следующий формат: «», (1 ≤ l ≤ r ≤ n; 0 ≤ k ≤ 5).

Все числа во входных данных целые.

Выходные данные

В ответ на каждый запрос на подсчет суммы выведите одно целое число — требуемую сумму по модулю 1000000007 (109 + 7).

A. Вычитания

математика теория чисел *900

Заданы два числа. До тех пор, пока оба они больше нуля, с ними производят одну и ту же операцию: из большего числа вычитают меньшее. Если числа равны, то из одного вычитают другое. Например, из пары (4,17) за одну операцию получается пара (4,13), а из пары (5,5) пара (0,5).

Вам задано некоторое количество пар (ai, bi). Сколько операций будет выполнено для каждой из них?

Входные данные

В первой строке задано количество пар n (1  ≤  n  ≤  1000). Далее идут n строк, каждая содержит пару целых положительных чисел ai, bi (1  ≤  ai,  bi  ≤  109).

Выходные данные

Выведите искомое количество операций для каждой пары на отдельной строке.

C. Транспортный поток в Берляндии

математика матрицы *2700

Транспортный поток в Берляндии — совсем не такой как в других странах. Столица Берляндии состоит из n перекрестков и m дорог. Каждая дорога соединяет пару перекрестков. Между парой перекрестков может быть несколько дорог. Для каждой дороги известна пропускная способность: величина ci — максимальное количество машин, которое может проехать по дороге в любом направлении в единицу времени. Для каждой дороги машины могут двигаться по ней в одном из двух направлений, то есть двигаться как в одном, так и другом направлении одновременно машины не могут. Транспортным потоком для дороги называется количество машин, которое проезжает через нее за единицу времени. Для дороги (ai, bi) эта величина отрицательна, если движение транспорта происходит от bi к ai. Поток для дороги может быть нецелым числом.

В столице есть два особых перекрестка — въезд в город (перекресток 1) и выезд из города (перекресток n). Для всех остальных перекрестков верно, что поток в них никуда не теряется. То есть для всех перекрестков кроме 1 и n сумма потока входящего в перекресток равна сумме исходящего потока.

Необычная особенность дорожного потока в столице Берляндии — для любой пары перекрестков (x, y) сумма потоков вдоль любого пути из x в y не меняется от выбора пути. В такую сумму входят потоки по всем дорогам на пути (возможно со знаком «минус», если движение по дороге направлено против движения по дороге в пути от x в y).

Ваша задача — найти наибольший поток, который может проходить через город за единицу времени, а также соответствующий поток для каждой дороги.

Входные данные

В первой строке записано натуральное число n — количество перекрестков (2 ≤ n ≤ 100). Во второй строке записано целое число m (1 ≤ m ≤ 5000) — количество дорог. Далее в m строках идут описания дорог. Каждая дорога задается тройкой целых чисел ai, bi, ci, где ai, bi — номера перекрестков, которые соединяет данная дорога, а ci (1 ≤ ai, bi ≤ n; ai ≠ bi; 0 ≤ ci ≤ 10000) — наибольший допустимый поток через данную дорогу.

Выходные данные

В первую строку выведите искомый наибольший поток через город. Далее выведите m строк, в каждой из которых выведите поток по соответствующей дороге. Если направление не совпадает с порядком перекрестков, заданным во входных данных, то выводите поток со знаком минус. Числа выводите с точностью не менее пяти знаков после десятичной точки.

Если оптимальных потоков несколько, выведите любой из них.

B. Кнопки

математика реализация *1000

Манао пытается взломать очень любопытный замок. На замке есть n кнопок, которые нужно нажать в определенной последовательности, чтобы открыть его. Когда происходит нажатие на какую-либо кнопку, она либо остается зажатой, что означает, что она действительно является следующей в последовательности, либо она сбрасывается вместе со всеми зажатыми в данный момент кнопками. Когда одновременно оказываются зажаты все кнопки, замок открывается.

Рассмотрим пример с тремя кнопками. Скажем, последовательность нажатия кнопок, открывающая замок, равна: {2, 3, 1}. Если сначала нажать на кнопки 1 или 3, они немедленно сбросятся. Если нажать на кнопку 2, она останется зажатой. Если после нажатия кнопки 2 нажать на кнопку 1, то все кнопки сбросятся. Если же после нажатия кнопки 2 нажать на кнопку 3 — она останется зажатой вместе с кнопкой 2. При двух зажатых кнопках остается лишь нажать на кнопку 1, чтобы замок открылся.

Манао не знает последовательность, в которой нужно нажимать кнопки, чтобы открыть замок. Зато он очень умный и будет действовать оптимально. Вычислите количество нажатий, которое ему придется произвести для открытия замка в худшем случае.

Входные данные

Единственная строка содержит целое число n (1 ≤ n ≤ 2000) — количество кнопок у замка.

Выходные данные

В единственной строке выведите количество нажатий в худшем случае.

Примечание

Рассмотрим первый тестовый пример. Манао может не повезти с первым нажатием и он нажмет не на ту кнопку, на которую надо было нажимать первой. В таком случае вторым ходом он уже может отгадать первую кнопку. А третьим — вторую кнопку. Таким образом, в худшем случае ему понадобится всего 3 нажатия.

E. Плейлист

математика сортировки Теория вероятностей *2100

Друзья Манао часто присылают ему новые песни. Обычно он слушает их не сразу, а собирает их в плейлист. Когда он чувствует, что его ум открыт для новой музыки, он включает этот плейлист и начинает прослушивать песни.

Конечно, Манао нравится далеко не каждая песня. Чтобы получить побольше удовольствия от присланных песен, он придумал следующую процедуру прослушивания плейлиста:

  • Если, прослушав некоторую песню, Манао понял, что она ему понравилась, он запоминает ее и начинает слушать следующую непрослушанную песню.
  • Если, прослушав некоторую песню, Манао понял, что она ему не понравилась, он слушает все понравившиеся ему до этого момента песни и только потом начинает слушать следующую непрослушанную песню.

Например, если у Манао в плейлисте четыре песни A, B, C, D (в соответствующем порядке) и ему в итоге понравятся песни A и C, тогда порядок прослушивания получится следующий:

  1. Манао слушает A, ему она нравится, запоминает.
  2. Манао слушает B, ему она не нравится, поэтому он снова слушает A.
  3. Манао слушает C, песня ему нравится и он ее тоже запоминает.
  4. Манао слушает D, не получает от нее удовольствия и заново слушает песни A и C.

То есть в итоге Манао прослушает три раза песню A, два раза песню C и по одному разу песни B и D. Заметим, что если песня однажды понравилась Манао, она не может разонравиться ему при следующем прослушивании.

Манао прислали n песен: i-ая из них длится li секунд и может понравиться Манао с вероятностью pi процентов. Песни могли попасть в плейлист Манао в любом порядке, поэтому Манао хочет знать максимальное математическое ожидание количества секунд, после которого процесс прослушивания закончится, по всем возможным перестановкам песен в плейлисте.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 50000). В i-ой из следующих n строк записаны два целых числа, разделенные одним пробелом — li и pi (15 ≤ li ≤ 1000, 0 ≤ pi ≤ 100) — длина i-той песни в секундах и вероятность, того что эта песня понравится Манао, в процентах.

Выходные данные

В единственной строке выведите одно вещественное число — максимальное по всем перестановкам песен математическое ожидание длительности процесса прослушивания. Ответ будет считаться верным, если абсолютная или относительная погрешность не будет превышать 10 - 9.

Примечание

Рассмотрим первый тестовый пример. Если слушать песни в том порядке, в котором они заданы изначально, математическое ожидание будет равно 467.5 секунд. Максимальное математическое ожидание получается, если переставить первую песню в конец плейлиста.

Рассмотрим второй тестовый пример. Песню длиной 360 секунд нужно слушать первой, а песню длиной 300 секунд, которая определенно не понравится Манао — последней.

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.

E. Теория струн

геометрия математика Строки *3100

Эмускальд — музыкант-новатор, он всегда пытается выйти за рамки творения музыки. Теперь он придумал революционный музыкальный инструмент — прямоугольную арфу.

Прямоугольная арфа является прямоугольником n × m единиц, она состоит из n рядов и m столбцов. Ряды пронумерованы от 1 до n сверху вниз. Аналогично, столбцы пронумерованы от 1 до m слева направо. Крепления для струн расположены равномерно по каждой стороне, по одному креплению на единице длины. Таким образом, существует по n креплений на левой и правой сторонах арфы и по m креплений на верхней и нижней сторонах. Арфа имеет ровно n + m различных струн, каждая струна соединяет два разных крепления, расположенных на разных сторонах арфы.

Эмускальд приказал своему ученику изготовить первую в мире прямоугольную арфу. Однако, он не упомянул, что никакие две струны не могут пересекаться (если струны пересекаются, то играть на арфе невозможно). Две струны пересекаются, если отрезки, соединяющие их крепления, пересекаются. Чтобы исправить арфу, Эмускальд может выполнять операции двух типов:

  1. выбрать два различных столбца и поменять их крепления на каждой стороне арфы, не меняя сцепления каждой струны;
  2. выбрать два различных ряда и поменять их крепления на каждой стороне арфы, не меняя сцепления каждой струны.

В следующем примере он может починить арфу, поменяв местами два столбца:

Помогите Эмускальду завершить свое детище и найдите перестановки, показывающие, как надо расположить ряды и колонки арфы. В противном случае сообщите, что сделать это невозможно. Юноша может снимать и натягивать струны на крепления, так что физическое расположение струн не имеет значения.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 105), разделенных пробелами, высота и ширина арфы в единицах. Каждая из следующих n + m строк содержит четыре токена через пробел, описывающих одну струну: два символа ai, bi, и два целых числа pi, qi. Пара ai и pi описывает первое крепление, а пара bi и qi описывает второе крепление струны.

Пара s, x описывает положение одного крепления следующим образом:

  1. s равняется одному из символов «L», «T», «R» или «B» (без кавычек), и означает, что крепление находится на левой, верхней, правой или нижней границе арфы соответственно;
  2. x равняется номеру ряда, если крепление находится на левой или правой границе арфы, и номеру столбца, если крепление находится на верхней или нижней границе арфы.

Гарантируется, что никакие две струны не присоединены к одному и тому же креплению.

Выходные данные

Если можно переставить ряды и столбцы так, чтобы исправить арфу, в первой строке выведите n целых чисел — старые номера рядов, теперь размещенные сверху вниз в исправленной арфе. Во второй строке выведите m целых чисел, разделенных пробелом — старые номера столбцов, теперь расположенные слева направо в исправленной арфе.

Если же невозможно переставить ряды и столбцы так, чтобы исправить арфу, выведите «No solution» (без кавычек).

A. Завидный забор

геометрия математика реализация *1100

Эмускальду надо построить забор вокруг фермы, но вот самому это делать ему лень. Так что юноша приобрел робота-заборостройщика.

Эмускальду хочется, чтобы забор представлял собой правильный многоугольник. К сожалению, его робот строит забор, двигаясь по единственному пути. При этом робот может соединять стороны забора только под заданным углом a.

Сможет ли робот построить забор, который хочет Эмускальд? Иными словами, существует ли правильный многоугольник с углами, равными a?

Входные данные

Первая строка входных данных содержит целое число t (0 < t < 180) — количество тестов. Каждая из последующих t строк содержит единственное целое число a (0 < a < 180) — угол, под которым робот может соединять стороны, в градусах.

Выходные данные

Для каждого теста выведите в единственной строке «YES» (без кавычек), если робот может построить тот забор, который хочет Эмускальд. Если это невозможно, выведите «NO» (без кавычек).

Примечание

В первом тесте невозможно построить забор, так как не существует правильного многоугольника с углами .

Во втором тесте забор представляет собой правильный треугольник, а в последнем тесте — квадрат.

B. Простая матрица

Бинарный поиск математика Перебор теория чисел *1300

Перед Вами матрица размера n × m, состоящая из целых чисел. За один ход разрешается применить к матрице единственное преобразование: выбрать произвольный элемент матрицы и увеличить его на 1. Каждый элемент можно увеличивать произвольное количество раз.

Вас очень интересуют простые числа. Напомним, что простым числом называется целое положительное число, которое имеет ровно два различных целых положительных делителя: единицу и само себя. Например, числа 2, 3, 5 — простые, а числа 1, 4, 6 — нет.

Вы считаете матрицу простой, если выполняется хотя бы одно из следующих двух условий:

  • существует строка матрицы, в которой все числа простые;
  • существует столбец матрицы, в котором все числа простые;

Ваша задача — посчитайте, за какое минимальное количество ходов можно получить из имеющейся матрицы простую матрицу.

Входные данные

В первой строке заданы два целых числа n, m (1 ≤ n, m ≤ 500) — количество строк и столбцов в матрице соответственно.

В каждой из следующих n строк записано по m целых чисел — исходная матрица. Все элементы матрицы являются целыми положительными числами. Все числа в исходной матрице не превосходят 105.

Числа в строках разделяются одиночными пробелами.

Выходные данные

Выведите единственное целое число — минимальное количество ходов, которое потребуется, чтобы из заданной матрицы получить простую матрицу. Если заданная матрица — простая, выведите 0.

Примечание

В первом примере нужно один раз увеличить число 1 в клетке (1, 1). Таким образом, первая строка будет состоять из простых чисел: 2, 2, 3.

Во втором примере нужно три раза увеличить число 8 в клетке (1, 2). Таким образом, второй столбец будет состоять из простых чисел: 11, 2.

В третьем примере ничего делать не нужно, поскольку второй столбец уже состоит из простых чисел: 3, 2.

E. Три коня

Конструктив математика теория чисел *2200

В стране коней живут три коня: один серый, другой белый, третий серо-белый. Кони очень забавные животные, поэтому им очень нравятся особенные карточки. На каждой такой карточке должно быть написано два целых числа, первое — вверху карточки, второе — внизу карточки. Обозначим карточку, на которой сверху написано число a, а снизу написано число b как (a, b).

Каждый из трех коней умеет рисовать особенные карточки. Если серому коню показать карточку (a, b), он может нарисовать новую карточку (a + 1, b + 1). Если белому коню показать карточку (a, b) , такую что a и b четные числа, он может нарисовать новую карточку . Если серо-белому коню показать две карточки (a, b) и (b, c), то он может нарисовать новую карточку (a, c).

Поликарп очень хочет получить n особенных карточек (1, a1), (1, a2), ..., (1, an). Для этого Поликарп собирается в страну коней. Он может взять с собой в страну коней ровно одну карточку (x, y), такую что 1 ≤ x < y ≤ m. Сколькими способами он может выбрать эту карточку, чтобы в результате некоторых действий в стране коней он смог получить требуемые карточки?

Поликарп может получать карточки только от коней в результате действий описанных выше. Кроме требуемых карточек, Поликарпу разрешается получить некоторые дополнительные карточки.

Входные данные

В первой строке записаны два целых числа n, m (1 ≤ n ≤ 105, 2 ≤ m ≤ 109). Во второй строке записана последовательность целых чисел a1, a2, ..., an (2 ≤ ai ≤ 109). Обратите внимание, числа в последовательности могут повторяться.

Числа в строках разделяются одиночными пробелами.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

A. Дима и друзья

математика реализация *1000

Дима и его друзья всю ночь играли в прятки в квартире Димы. В результате квартира Димы стала грязной. Утром ребята решили, что нужно убраться в квартире.

Чтобы решить, кто именно будет убираться в квартире, друзья хотят воспользоваться считалочкой. Сначала все ребята встанут в круг; затем каждый из них покажет на одной руке сколько-то пальцев (от одного до пяти); после чего ребята отсчитают по кругу, начиная от Димы, столько людей, сколько всего пальцев было показано. Человек, на котором остановится отсчет, будет убирать квартиру.

Например, если в прятки играли Дима и один его друг, а во время считалки было показано 7 пальцев, то квартиру будет убирать Дима. Если бы было показано 2 пальца или, к примеру, 8 пальцев, тогда бы квартиру пришлось убирать его другу.

Дима знает, сколько пальцев покажет во время считалки каждый из его друзей. Сейчас его интересует количество способов показать некоторое количество пальцев на одной руке (от одного до пяти), так чтобы ему не пришлось убираться в квартире. Помогите Диме.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 100) — количество друзей Димы. Сам Дима не считается другом самого себя. Во второй строке даны n целых положительных чисел не превышающих 5 — количества пальцев, которые покажут друзья Димы во время считалки.

Числа в строках разделяются одиночными пробелами.

Выходные данные

В единственную строку выведите ответ на задачу.

Примечание

В первом примере Дима может показать 1, 3 или 5 пальцев. Если Дима покажет 3 пальца, то отсчет будет идти следующим образом: Дима, Друг, Дима, Друг.

Во втором примере Дима может показать 2 или 4 пальца.

B. Дима и последовательность

математика реализация *1400

Дима увлекается последовательностями чисел. Сейчас у него есть последовательность a1, a2, ..., an, состоящая из n целых положительных чисел. А так же у Димы есть функция f(x), которую можно определить следующим рекуррентным соотношением:

  • f(0) = 0;
  • f(2·x) = f(x);
  • f(2·x + 1) = f(x) + 1.

Диму заинтересовал вопрос: сколько существует пар индексов (i, j) (1 ≤ i < j ≤ n), таких что f(ai) = f(aj). Помогите ему, посчитайте, сколько таких пар.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 105). Во второй строке даны n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Числа в строках разделены одиночными пробелами.

Выходные данные

В единственную строку выведите ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере любая пара (i, j) подойдет, поэтому ответ — 3.

Во втором примере подходит только пара (1, 2).

D. Дима и две последовательности

Комбинаторика математика сортировки *1600

У маленького Димы есть две последовательности точек с целочисленными координатами: последовательность (a1, 1), (a2, 2), ..., (an, n) и последовательность (b1, 1), (b2, 2), ..., (bn, n).

Теперь Дима хочет подсчитать сколько различных последовательностей точек длины n можно собрать из этих последовательностей, таких что x-координаты точек в собранной последовательности будут не убывать. Помогите ему в этом. Обратите внимание, что каждый элемент каждой из начальных последовательностей должен быть использован ровно один раз в собранной последовательности.

Две собранные последовательности (p1, q1), (p2, q2), ..., (pn, qn) и (x1, y1), (x2, y2), ..., (xn, yn) Дима считает различными, если найдется такое i (1 ≤ i ≤ 2·n), что (pi, qi) ≠ (xi, yi).

Так как ответ может быть достаточно большим, выведите остаток от деления ответа на число m.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105). Во второй строке заданы n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109). В третьей строке заданы n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 109). Числа в строках разделяются пробелами.

В последней строке задано целое число m (2 ≤ m ≤ 109 + 7).

Выходные данные

В единственную строку выведите остаток от деления ответа на задачу на число m.

Примечание

В первом примере можно получить только одну последовательность: (1, 1), (2, 1).

Во втором примере можно получить такие последовательности : (1, 1), (2, 2), (2, 1), (3, 2); (1, 1), (2, 1), (2, 2), (3, 2). Таким образом ответ 2.

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. ДравДэ спасает мир

геометрия математика *2800

О ужас! Империя галактических куриц пытается захватить прекрасный город «З», они построили огромный куриный инкубатор, производящий миллионы куриц-воинов в день, и огородили его забором. Огромный инкубатор имеет вид многоугольника с внутренностью на плоскости Oxy с n вершинами. Естественно, ДравДэ не сидит на месте, он хочет разрушить империю куриц. И конечно же начнет он с инкубатора.

ДравДэ находится строго вне территории инкубатора в точке A(xa, ya) и хочет попасть внутрь и поубивать всех куриц, работающих там. Но не всё так просто! Дело в том что ДравДэ недавно катался на роликах и сломал обе ноги, и попасть на территорию инкубатора ему поможет его реактивный самолет ЛЕВАП-41.

ЛЕВАП-41 летает со скоростью V(xv, yv, zv). ДравДэ может сесть на него в точке A, пролететь некоторое время, а потом десантироваться. ДравДэ очень тяжелый и поэтому летит вертикально вниз со скоростью Fdown, но в любой точке своего свободного полёта ДравДэ может открыть парашют и с этого момента ДравДэ будет лететь со скоростью ветра U(xu, yu, zu) до тех пор пока не приземлится. К сожалению, ДравДэ не силен в математике. Помогите бедному спасателю мира так выбрать план десантирования, чтобы приземлиться на территорию инкубатора. В первую очередь ДравДэ хочет минимизировать время своего полета на самолете, а во вторую — время своего свободного полета до открытия парашюта.

Входные данные

В первой строке задано число n (3 ≤ n ≤ 104) — количество вершин в заборе инкубатора. Далее n строк содержащих координаты вершин забора (два целых числа xi, yi) в порядке обхода по или против часовой стрелки. Гарантируется, что забор не содержит самокасаний и самопересечений.

В следующих четырех строках заданы координаты точки A(xa, ya), скорости V(xv, yv, zv), Fdown и скорость U(xu, yu, zu). Все числа во входных данных целые и по модулю не превосходят 104. Гарантируется, что zv > 0 и Fdown, zu < 0, а точка A находится строго снаружи инкубатора.

Выходные данные

В первую строку выведите два числа t1, t2 такие, что если ДравДэ десантируется во время t1, считая от начала полёта, и потом откроет парашют через время t2 после десантирования, он попадет на территорию инкубатора (попадание на границу территории считается попаданием на территорию). Если ДравДэ не должен открывать парашют, то второе число должно быть равно длительности полёта. Если ДравДэ никак не может попасть на территорию инкубатора, выведите -1 -1. Если решений несколько, выведите минимальное по t1, а при равенстве t1 — минимальное по t2. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 6.

C. Игра на дереве

Деревья математика реализация Теория вероятностей *2200

У Мумиджу есть корневое дерево, состоящее из n вершин. Вершины дерева пронумерованы целыми числами от 1 до n. Корень дерева имеет номер 1. Мумиджу решил поиграть в игру на этом дереве.

Игра состоит из нескольких шагов. На каждом шаге Мумиджу выбирает одну из оставшихся вершин дерева (обозначим ее v) и удаляет из дерева все вершины поддерева с корнем в вершине v. Сама вершина v тоже удаляется. Игра заканчивается, когда в дереве не остается вершин. Другими словами, игра заканчивается после шага, на котором выбрана вершина с номером 1.

Каждый раз Мумиджу выбирает новую вершину равновероятно среди всех оставшихся вершин. Ваша задача — найти математическое ожидание количества шагов в описанной игре.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество вершин дерева. В следующих n - 1 строках заданы ребра дерева. В i-той строке записаны целые числа ai, bi (1 ≤ ai, bi ≤ nai ≠ bi) — номера вершин, которые соединены i-тым ребром.

Гарантируется, что заданный граф является деревом.

Выходные данные

Выведите единственное вещественное число — математическое ожидание количества шагов в описанной игре.

Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 6.

Примечание

В первом тестовом примере возможны два случая. Первый — это сразу удалить корень, второй — удалить корень после одного шага. Таким образом, математическое ожидание количества шагов равно:

1 × (1 / 2) + 2 × (1 / 2) = 1.5

Второй пример более сложный. Два случая из трех приводят нас к задаче, эквивалентной первому тестовому примеру, третий случай — удалить корень на первом шаге. Таким образом, математическое ожидание количества шагов равно:

1 × (1 / 3) + (1 + 1.5) × (2 / 3) = (1 / 3) + (5 / 3) = 2

E. Трансформация последовательности

дп математика Перебор реализация Структуры данных *3000

Вам задана неубывающая последовательность x1, x2, ..., xn (1 ≤ x1 ≤ x2 ≤ ... ≤ xn ≤ q). Также Вам заданы два целых числа a и b (a ≤ ba·(n - 1) < q).

Ваша задача преобразовать последовательность x1, x2, ..., xn в некоторую последовательность y1, y2, ..., yn (1 ≤ yi ≤ qa ≤ yi + 1 - yi ≤ b). Определим стоимость преобразования как сумму: . Требуется выбрать такую последовательность y, что описанная стоимость преобразования минимальна.

Входные данные

В первой строке заданы четыре целых числа n, q, a, b (2 ≤ n ≤ 6000; 1 ≤ q, a, b ≤ 109a·(n - 1) < qa ≤ b).

Во второй строке задана неубывающая последовательность целых чисел x1, x2, ..., xn (1 ≤ x1 ≤ x2 ≤ ... ≤ xn ≤ q).

Выходные данные

В первой строке выведите n вещественных чисел — искомую последовательность y1, y2, ..., yn (1 ≤ yi ≤ qa ≤ yi + 1 - yi ≤ b). Во второй строке выведите минимальную стоимость преобразования, то есть .

Если существует несколько оптимальных ответов, можно вывести любой из них.

Ответ будет считаться правильным, если относительная или абсолютная погрешность не будет превышать 10 - 6.

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.

Если существует несколько решений, разрешается вывести любое.

C. XOR или OR

Конструктив математика реализация *1500

Необъяснимый народ эти битландцы. Все-то они делают по-своему. У них свой алфавит и свое определение строки.

Битландская строка — это строка, которая состоит только из символов «0» и «1».

BitHaval (мэр Битландии) любит поиграть с битландскими строками. Он берет некоторую битландскую строку a и затем применяет к ней несколько (возможно, ноль) операций. За одну операцию мэр может выбрать любые два соседних символа строки, обозначим один из них через x, второй — через y. После чего он считает две величины p и q: p = x xor y, q = x or y. Далее, один из двух выбранных символов мэр заменяет на p, второй — на q.

Операция xor обозначает операцию битового исключающего ИЛИ. Операция or обозначает операцию битового ИЛИ.

Например, строка 11 может быть за одну операцию преобразована в строку 10 или в строку 01. Строка 1 не может быть преобразована ни в какую другую строку.

Вам заданы две битландские строки a и b. Ваша задача — определить, сможет ли мер за несколько (возможно, ноль) описанных операций получить из строки a строку b.

Входные данные

В первой строке записана битландская строка a, во второй строке записана битландская строка b. Строки могут иметь разную длину.

Гарантируется, что заданные строки состоят только из символов «0» и «1». Строки не пустые, их длина не превышает 106.

Выходные данные

Выведите «YES» — если преобразовать a в b можно, иначе выведите «NO». Кавычки выводить не нужно.

D. Коровки и классные последовательности

дп математика теория чисел *2400

Бесси с коровками недавно играли с «классными» последовательностями и пытались построить некоторые из них. К сожалению, они плохо считают, так что им нужна Ваша помощь!

Пара положительных целых чисел (x, y) называется «классной», если x можно представить как сумму y последовательных целых чисел (не обязательно положительных). Последовательность (a1, a2, ..., an) называется «классной», если пары (a1, a2), (a2, a3), ..., (an - 1, an) все являются классными.

У коровок есть последовательность из n положительных целых чисел, a1, a2, ..., an. За один ход можно заменить некоторое ai любым другим положительным целым числом (других ограничений на новое значение ai нет). Определите наименьшее количество ходов, необходимое для того, чтобы итоговая последовательность стала «классной».

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 5000). В следующей строке записаны через пробел n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1015).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число, минимальное количество ai, которое надо поменять, чтобы последовательность стала классной.

Примечание

В первом примере последовательность уже «классная», так что никаких элементов менять не надо.

Во втором примере можно изменить a2 на 5, а a3 — на 10, чтобы получить (20, 5, 10, 4), являющуюся «классной». Итого, меняются 2 элемента.

E. Коровки играют в теннис

Комбинаторика математика Структуры данных *2800

Фермер Джон устраивает турнир по теннису среди своих n коровок. У каждой коровки есть умение si, и никакие две коровки не обладают одинаковым умением. На протяжении турнира, каждая коровка играет с каждой другой коровкой ровно один раз, в таком поединке коровка с большим умением побеждает коровку с меньшим умением.

Однако Фермер Джон беспокоится, что турнир уничтожит самооценку самых слабых коровок, которые проиграют большую часть своих матчей... И вот он решил немного поменять результаты. Ровно k раз он возьмет два целых числа ai, bi (ai < bi) и поменяет все результаты матчей коровок с умениями от ai до bi, включительно. Таким образом, для каждой пары x, y он поменяет результат матча между коровками x и y (то есть, если матч выиграла x, то после изменения будет считаться, что победила y и наоборот). Возможно, Фермер Джон поменяет результат какого-то одного матча несколько раз. Обратите внимание, что ai и bi могут быть не равны умению той или иной коровки.

Фермер Джон хочет вычислить, насколько сбалансированными будут результаты турнира. Для этого он хочет посчитать количество троек коровок (p, q, r), для которых в итоге будет считаться, что коровка p выиграла у коровки q, коровка q выиграла у коровки r, а коровка r выиграла у коровки p. Помоги ему вычислить это количество.

Обратите внимание, что две тройки считаются различными тогда, когда они не содержат одинаковый набор коровок (то есть, некоторая коровка есть в одной тройке и отсутствует в другой).

Входные данные

В первой строке содержатся два целых числа через пробел, n и k (3 ≤ n ≤ 105; 0 ≤ k ≤ 105). В следующей строке содержатся n различных целых чисел, s1, s2, ..., sn (1 ≤ si ≤ 109), числа обозначают умения коровок. В каждой из следующих k строк находятся два целых числа через пробел, ai и bi (1 ≤ ai < bi ≤ 109) — изменения, которые фермер Джон внес в результаты в порядке применения изменений.

Выходные данные

Выведите единственное целое число — количество троек коровок (p, q, r), для которых в итоге будет считаться, что коровка p выиграла у коровки q, коровка q выиграла у коровки r, а коровка r выиграла у коровки p.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере (коровка 3 > коровка 1), (коровка 3 > коровка 2), а (коровка 2 > коровка 1). Однако фермер подменит результаты матчей между коровками номер 1 и 2 и коровками номер 2 и 3, так что теперь результаты показывают, что (коровка 1 > коровка 2), (коровка 2 > коровка 3), а (коровка 3 > коровка 1). Таким образом, коровки номер 1, 2, и 3 формируют сбалансированный треугольник.

A. Коровки и первообразные корни

математика реализация теория чисел *1400

Коровки только что узнали, что такое первообразный корень! Вам дано простое число p, первообразный корень — целое число x (1 ≤ x < p), такое, что ни одно из целых чисел x - 1, x2 - 1, ..., xp - 2 - 1 не делится на p, при этом число xp - 1 - 1 делится на p.

К сожалению, на вычисление первообразных корней уходит много времени, так что коровкам нужна Ваша помощь. Вам дано простое число p, помогите коровкам найти количество первообразных корней .

Входные данные

Во входных данных содержится единственная строка, в которой записано целое число p (2 ≤ p < 2000). Гарантируется, что p является простым числом.

Выходные данные

В единственной строке выведите количество первообразных корней .

Примечание

Единственный первообразный корень 2.

Первообразные корни 2 и 3.

E. Позиции в перестановке

дп Комбинаторика математика *2600

Перестановкой p называется упорядоченный набор чисел p1,  p2,  ...,  pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Обозначим i-ый элемент перестановки p через pi. Число n будем называть размером или длиной перестановки p1,  p2,  ...,  pn.

Назовем позицию i (1 ≤ i ≤ n) в перестановке p1, p2, ..., pn хорошей, если |p[i] - i| = 1. Посчитайте количество перестановок размера n с ровно k хорошими позициями. Ответ выведите по модулю 1000000007 (109 + 7).

Входные данные

В единственной строке записаны два целых числа n и k (1 ≤ n ≤ 1000, 0 ≤ k ≤ n).

Выходные данные

Выведите количество перестановок размера n с ровно k хорошими позициями по модулю 1000000007 (109 + 7).

Примечание

Единственная перестановка размера 1 имеет 0 хороших позиций.

Перестановка (1, 2) имеет 0 хороших позиций, а перестановка (2, 1) — 2 позиции.

Перестановки размера 3:

  1. (1, 2, 3) — 0 позиций
  2. — 2 позиции
  3. — 2 позиции
  4. — 2 позиции
  5. — 2 позиции
  6. (3, 2, 1) — 0 позиций

A. Счастливая перестановка

Конструктив математика *1400

Перестановкой p порядка n назовем последовательность p1, p2, ..., pn, состоящую из n различных целых чисел, каждое из которых от 1 до n (1 ≤ pi ≤ n).

Счастливой перестановкой назовем такую перестановку p, что для любого целого i (1 ≤ i ≤ n), выполняется условие ppi = n - i + 1.

Вам дано число n. Найдите какую-нибудь счастливую перестановку p порядка n.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — требуемый размер перестановки.

Выходные данные

Выведите «-1» (без кавычек), если счастливой перестановки p порядка n не существует.

Иначе выведите n различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) через пробел — искомая перестановка.

Если существует несколько ответов, разрешается вывести любой из них.

E. Дамский магазин

бпф Конструктив математика *2800

В городе Крайняя Туле открывается дамский магазин. Для подготовки к открытию дамского магазина было куплено n пакетов. Каждый пакет характеризуется суммарным весом предметов ai, которые можно туда положить. Довольно странно, но в такие пакеты нельзя положить набор предметов, суммарный вес которых строго меньше ai. Однако веса товаров, которые будут продаваться в магазине еще не определены. Их-то и требуется сейчас определить.

Нужно найти набор весов товаров p1, p2, ..., pk (1 ≤ p1 < p2 < ... < pk), такой, что:

  1. Любой пакет будет востребован. То есть, для любого i (1 ≤ i ≤ n) найдется набор товаров, такой, что их суммарный вес равен ai. Считается, что имеется неограниченное количество товара каждого веса. А в пакет можно класть несколько товаров одного веса.
  2. Для любого набора товаров с суммарным весом, меньшим либо равным m, существует пакет, в который можно положить этот набор. Аналогично, в набор товаров может входить несколько товаров одинакового веса.
  3. Из всех наборов весов товаров, удовлетворяющих пунктам 1 и 2, нужно найти минимальный набор по количеству весов. Другими словами, значение k должно быть как можно меньше.

Найдите и выведите любой подходящий набор.

Входные данные

В первой строке записаны через пробел целые числа n и m (1 ≤ n, m ≤ 106). Во второй строке записаны через пробел n различных целых чисел a1, a2, ..., an (1 ≤ a1 < a2 < ... < an ≤ m) — вместимости пакетов.

Выходные данные

Выведите «NO» (без кавычек) в первой строке, если не существует набора pi, удовлетворяющего условиям.

Иначе в первой строке выведите «YES» (без кавычек), во второй — целое число k (количество чисел в минимальном по количеству элементов подходящем наборе), в третьей строке выведите через пробел k целых чисел p1, p2, ..., pk (1 ≤ p1 < p2 < ... < pk). Если решений несколько — выведите любое.

B. Трубопровод

Бинарный поиск математика *1700

Вова — новый шаман Крайней Туле — хочет построить трубопровод. Так как в Крайней Туле ровно n домов, Вова хочет, чтобы в городе было ровно n труб, к каждой из которых можно подключить водоснабжение. К трубе можно подключить водоснабжение, если из нее течет вода. Изначально у Вовы есть только одна труба, из которой течет вода. Кроме того, у Вовы есть несколько разветвителей.

Разветвитель — это конструкция, состоящая из одного входа, который может быть подсоединен к трубе с водой, и x труб-выходов. В результате подсоединения из каждой трубы-выхода будет течь вода. Считайте, что трубы-выходы — это обычные трубы. Например, к такой трубе можно подсоединить водоснабжение, если из нее течет вода. К одной трубе, из которой течет вода, не может быть подсоединено более одного разветвителя.

На рисунке изображен разветвитель с 4-мя выходами

У Вовы есть по одному разветвителю с 2-мя, 3-мя, 4-мя, ..., k выходами. Помогите Вове использовать минимальное количество разветвителей, чтобы построить нужный ему трубопровод, или определите, что это невозможно.

Вове нужно, чтобы в его трубопроводе было ровно n труб, из которых вытекает вода. Обратите внимание, что некоторые из этих труб могут быть трубами-выходами разветвителей.

Входные данные

Во первой строке через пробел записаны два целых числа n и k (1 ≤ n ≤ 1018, 2 ≤ k ≤ 109).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число — минимальное количество разветвителей, необходимое, чтобы построить трубопровод. Если построить трубопровод с имеющимися разветвителями невозможно, выведите -1.

C. Пингвин Поло и операция XOR

математика реализация *1700

Пингвин Поло очень любит перестановки. Но больше всего он любит перестановки целых чисел от 0 до n, включительно.

Для перестановки p = p0, p1, ..., pn Поло определил ее красоту — число .

Выражение обозначает применение операции побитового исключающего «ИЛИ» к числам x и y. Данная операция есть во всех современных языках программирования, например, в языке C++ и Java она обозначается символом «^», в Pascal — «xor».

Помогите ему найти среди всех перестановок целых чисел от 0 до n перестановку с максимальной красотой.

Входные данные

В единственной строке задано целое положительное число n (1 ≤ n ≤ 106).

Выходные данные

В первой строке выведите целое число m — максимально возможную красоту, в следующей строке выведите любую перестановку целых чисел от 0 до n, красота которой равна m.

Если существует несколько подходящих перестановок, разрешается вывести любую.

E. Пингвин Поло и счастливые числа

дп математика реализация *2800

Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

У пингвина Поло есть два целых положительных числа l и r (l < r), причем оба они являются счастливыми числами. Более того, их длины (то есть количество цифр в десятичной записи без лидирующих нулей) равны между собой.

Пусть n — количество различных счастливых чисел, каждое из которых не больше r и не меньше l, а aii-ое по величине из них. Найдите a1·a2 + a2·a3 + ... + an - 1·an. Так как ответ может быть достаточно большим, выведите его остаток от деления на 1000000007 (109 + 7).

Входные данные

В первой строке задано целое положительное число l, а во второй — целое положительное число r (1 ≤ l < r ≤ 10100000). Числа заданы без лидирующих нулей.

Гарантируется, что длины заданных чисел равны между собой и что оба они являются счастливыми числами.

Выходные данные

В единственной строке выведите целое число — ответ на задачу по модулю 1000000007 (109 + 7).

C. Кубическая задача

математика Перебор теория чисел *2400

Ярослав, Андрей и Роман любят играть в кубики. Иногда они собираются вместе и могут играть часами напролет!

Сегодня они снова вместе и снова играют. Ярослав собрал из единичных кубиков куб размера a × a × a, Андрей — b × b × b, Роман — c × c × c. После этого игра закончилась, и ребята разошлись. Теперь в комнату зашел Виталий, увидел кубы, и ему тоже захотелось собрать какой-то куб. Но какого размера должен быть этот куб? Конечно, это должен быть большой куб со стороной длины a + b + c. При этом Виталий хотел разобрать уже имеющиеся кубы Ярослава, Андрея и Романа и собрать из них свой. Однако, кубиков, из которых были построены имеющиеся кубы, было недостаточно, чтобы собрать большой куб. Известно, что Виталию не хватило ровно n кубиков. Виталий расстроился, разобрал все и ушел. Выходя из комнаты, он встретил Петю и сообщил ему, что в комнате было три куба, и что Виталию не хватило n кубиков, чтобы собрать свой.

Зайдя в комнату, Петя увидел разбросанные кубики. Ему захотелось восстановить порядок, но ведь все, что он знает о порядке — это то, что здесь было три куба из маленьких кубиков и то, что на большой куб не хватило ровно n маленьких кубиков! Помогите Пете понять, сколько существует вариантов размеров a, b, c кубов Ярослава, Андрея и Романа.

Входные данные

В единственной строке входных данных записано целое число n (1 ≤ n ≤ 1014). Известно, что все числа a, b, c являются целыми и положительными.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственную строку выходных данных выведите искомое количество вариантов. Если вдруг окажется, что не существует ни одного варианта подходящих размеров a, b, c — выводите 0.

D. Ксения и квадрат

геометрия математика Теория вероятностей *2700

Ксения — яростный математик, ее интересуют совершенно невероятные математические головоломки.

Сегодня Ксения раздобыла выпуклый многоугольник ненулевой площади, и теперь ей интересно: если среди всех целочисленных точек (точек с целыми координатами) внутри или на границе многоугольника равновероятно выбрать пару различных точек, а затем построить квадрат, две противоположные вершины которого лежат в выбранных точках, чему равно математическое ожидание площади такого квадрата?

Пара различных точек выбирается равновероятно среди всех пар различных точек, которые находятся внутри или на границе многоугольника. Пары точек p, q (p ≠ q) и q, p считаются одинаковыми.

Помогите Ксении! Вычислите искомое математическое ожидание.

Входные данные

В первой строке задано целое число n (3 ≤ n ≤ 105) — количество вершин выпуклого многоугольника Ксении. В следующих n строках заданы координаты вершин многоугольника в порядке некоторого обхода. В i-ой строке записаны целые числа xi, yi (|xi|, |yi| ≤ 106) — координаты i-ой в порядке обхода вершины.

Выходные данные

Выведите единственное вещественное число — искомое математическое ожидание.

Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает 10 - 6.

A. Шаасс и Осколы

математика реализация *800

Шаасс решил поохотиться на птиц. Есть n электрических проводов, параллельных друг другу. Провода пронумерованы от 1 до n сверху вниз. На каждом проводе некоторое количество осколов сидят в рядок, на i-ом проводе сидит ai осколов. Осколы — это такие вкуснейшие птицы, они гнездятся рядом с Шаассом.

Иногда Шаассу удается подстрелить одну птицу, птица умирает (обозначим номер провода, на котором сидела эта птица как i). После чего все птицы слева от нее на проводе i пугаются и перепрыгивают вверх на провод номер i - 1. Если выше проводов нет, то они улетают. Также, все птицы справа от подстреленной перепрыгивают вниз на провод i + 1, а если такого провода нет, то они улетают.

Шаасс подстрелил m птиц. Зная изначальное количество птиц на каждом проводе, скажите, сколько птиц будет сидеть на каждом проводе после охоты.

Входные данные

Первая строка входных данных содержит целое число n, (1 ≤ n ≤ 100). Следующая строка содержит разделенные пробелом целые числа a1, a2, ..., an, (0 ≤ ai ≤ 100).

В третьей строке записано целое число m, (0 ≤ m ≤ 100). В каждой из следующих m строк записано по два целых числа, xi и yi. Эти числа означают, что в i-ый раз Шаасс подстрелил yi-ую птицу слева на xi-ом проводе, (1 ≤ xi ≤ n, 1 ≤ yi). Гарантируется, что в этот момент на xi-ом проводе будет как минимум yi птиц.

Выходные данные

В i-ой строке выведите количество птиц на i-ом проводе.

A. Ярослав и перестановки

жадные алгоритмы математика *1100

У Ярослава есть массив, состоящий из n целых чисел. За одну секунду Ярослав может поменять местами два рядом стоящих элемента массива. Сейчас Ярослава интересует вопрос: может ли он за конечное время получить массив, в котором любые два соседних элемента различны?

Помогите Ярославу.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100) — количество элементов в массиве. Во второй строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1000) — элементы массива.

Выходные данные

В единственную строку выведите «YES» (без кавычек), если Ярослав может получить нужный ему массив, и «NO» (без кавычек) в противном случае.

Примечание

В первом примере изначальный массив подходит.

Во втором примере Ярослав может получить массив: 1, 2, 1. Для этого он может поменять два последних элемента массива местами.

В третьем примере Ярослав не может получить нужный массив.

A. Бухгалтерский учёт

математика Перебор *1400

Жил-был в одной стране Царь по имени Цопа. После очередной царской реформы полномочия Царя стали настолько широкими, что, в частности, он стал собственноручно заниматься финансовой отчётностью.

Известен суммарный доход A его Царства по итогам 0-го года, и суммарный доход B по итогам n-го года (оба числа могут быть отрицательными, что означает — в этот год экономика Царства была убыточной).

Царь хочет продемонстрировать финансовую стабильность, для этого ему надо подобрать единый коэффициент X — коэффициент роста дохода Царства за один год. Этот коэффициент должен удовлетворять уравнению:

A·Xn = B.

Разумеется, Царь не собирается делать такую работу вручную, и требует от вас написать программу, ищущую этот коэффициент X.

Следует отметить, что дробные числа крайне не любят в экономических структурах Царства, поэтому как входные данные, так и искомый коэффициент должны быть целыми. Искомый коэффициент X может оказаться равным нулю или даже быть отрицательным.

Входные данные

В единственной строке записаны три целых числа A, B, n, удовлетворяющих условиям: |A|, |B| ≤ 1000, 1 ≤ n ≤ 10.

Выходные данные

Выведите единственное целое число — искомый целый коэффициент X, или фразу «No solution», если такого коэффициента не существует, или он не целый. Если ответов несколько, выведите любой.

E. Империя наносит ответный удар

Бинарный поиск математика теория чисел *2300

В далекой-далекой галактике снова война. Коварная Республика нанесла k точечных ударов силы ai по владениям Империи. Чтобы справиться с республиканской угрозой верховный совет постановил нанести решающий удар по силам противника.

Для успешного завершения конфликта баланс противостояния после нанесения этого удара должен быть целым положительным числом. Балансом противостояния называется число, вида , где p = n! (n — сила удара Империи), . После многих лет войны ресурсы Империи истощены, поэтому для уменьшения затрат n должно быть минимальным целым положительным числом, удовлетворяющим командование.

Помогите Империи, найдите минимальное целое положительное n, при котором описанная дробь является целым положительным числом.

Входные данные

В первой строке записано целое число k (1 ≤ k ≤ 106). Во второй строке записаны k целых чисел a1, a2, ..., ak (1 ≤ ai ≤ 107).

Выходные данные

Выведите минимальное целое положительное число n, необходимое для победы Империи.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

A. Тройка счастливых перестановок

Конструктив математика реализация *1300

Байк увлекается перестановками. Перестановка длины n представляет собой последовательность целых чисел, такую, что каждое число от 0 до (n - 1) встречается в ней ровно один раз. Например, [0, 2, 1] — это перестановка длины 3, а вот [0, 2, 2] и [1, 2, 3] — нет.

Тройка перестановок длины n (a, b, c) называется Счастливой Тройкой Перестановок тогда и только тогда, когда . Переменная ai обозначает i-ый элемент перестановки a. Описанное выше модульное равенство означает, что остатки после деления ai + bi на n и деления ci на n равны.

Теперь у Байка есть целое число n и он хочет найти Счастливую Тройку Перестановок. Пожалуйста, помогите ему!

Входные данные

В первой строке содержится единственное целое число n (1 ≤ n ≤ 105).

Выходные данные

Если не существует Счастливой Тройки Перестановок длины n, выведите -1.

В противном случае следует вывести три строки. В каждой строке содержится по n целых чисел через пробел. В первой строке надо вывести перестановку a, во второй — перестановку b, в третьей — перестановку c.

Если ответов несколько, выведите любой.

Примечание

В примере 1, тройка перестановок ([1, 4, 3, 2, 0], [1, 0, 2, 4, 3], [2, 4, 0, 1, 3]) является счастливой, так как выполняются следующие условия:

  • ;
  • ;
  • ;
  • ;
  • .

В примере 2 легко заметить, что счастливых троек перестановок вообще нет.

B. Прямоугольная загадка II

математика реализация *1700

Дана прямоугольная сетка размера n × m. Введем систему координат на сетке. Итак, каждая точка на сетке имеет координаты — пару целых чисел (x, y) (0 ≤ x ≤ n, 0 ≤ y ≤ m).

Ваша задача — найти наибольший подпрямоугольник на сетке (x1, y1, x2, y2), содержащий данную точку (x, y), такой, что соотношение длин его сторон равняется (a, b). Иными словами, должны выполняться следующие условия: 0 ≤ x1 ≤ x ≤ x2 ≤ n, 0 ≤ y1 ≤ y ≤ y2 ≤ m, .

Стороны этого подпрямоугольника должны быть параллельны осям координат. Величины x1, y1, x2, y2 должны быть целыми.

Если существует несколько ответов, найдите ближайший к (x, y) подпрямоугольник. Здесь «ближайший» означает, что Евклидово расстояние между (x, y) и центром прямоугольника как можно меньше. Если все равно существует несколько ответов, выведите лексикографически минимальный. Здесь «лексикографически минимальный» означает, что мы должны рассматривать подпрямоугольник как последовательность целых чисел (x1, y1, x2, y2), так, что можно выбрать из них лексикографически минимальную.

Входные данные

В первой строке записано шесть целых чисел n, m, x, y, a, b (1 ≤ n, m ≤ 109, 0 ≤ x ≤ n, 0 ≤ y ≤ m, 1 ≤ a ≤ n, 1 ≤ b ≤ m).

Выходные данные

Выведите четыре целых числа x1, y1, x2, y2, обозначающие обнаруженный вложенный прямоугольник с левым нижним углом в (x1, y1), а правым верхним — в (x2, y2).

C. Наименьший модуль

графы математика Перебор теория чисел *2400

Дано n различных целых чисел a1, a2, ..., an. Из них Вы можете удалить не более k. Найдите минимальный модуль m (m > 0), такой, что для каждой пары оставшихся чисел (ai, aj) выполняется следующее неравенство: .

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 5000, 0 ≤ k ≤ 4), упомянутые выше.

Во второй строке записано n различных целых чисел a1, a2, ..., an (0 ≤ ai ≤ 106).

Выходные данные

Выведите единственное целое положительное число — минимальный модуль m.

D. Вращаемое число

математика теория чисел *2600

Байк — это умный мальчик, он обожает математику. Находясь под впечатлением от числа 142857, он изобрел числа, которые назвал «вращаемые числа».

Как можно видеть, 142857 — это волшебное число, так как любой его циклический сдвиг можно получить, умножая это число на числа 1, 2, ..., 6 (числа от 1 до длины числа). Циклический сдвиг числа получается, если поставить несколько его последних цифр на первое место. Например, сдвигая число 12345, можно получить любое из следующих чисел: 12345, 51234, 45123, 34512, 23451. Стоит отметить, что ведущие нули разрешены. Таким образом, как 4500123, так 0123450 можно получить, сдвигая 0012345. Можно видеть, почему 142857 удовлетворяет условию. Все 6 равенств записаны в 10-тичной системе счисления:

  • 142857·1 = 142857;
  • 142857·2 = 285714;
  • 142857·3 = 428571;
  • 142857·4 = 571428;
  • 142857·5 = 714285;
  • 142857·6 = 857142.

Байк придумал себе задачу. Он пробует создать «вращаемое число» для любой системы счисления. Выше уже упоминалось, что 142857 — это 10-ичное «вращаемое число». Еще один пример — двоичное число 0011. Все 4 уравнения записаны в 2-ичной системе счисления.

  • 0011·1 = 0011;
  • 0011·10 = 0110;
  • 0011·11 = 1001;
  • 0011·100 = 1100.

Итак, Байк хочет найти максимальное b (1 < b < x), такое, чтобы существовало положительное «вращаемое число» (ведущие нули разрешены) длины n в b-ичной системе счисления.

Обратите внимание, что каждый раз, когда вы умножаете «вращаемое число» на число от 1 до длины этого числа, вы должны получать циклический сдвиг этого числа.

Входные данные

В единственной строке записано два целых числа через пробел n, x (1 ≤ n ≤ 5·106, 2 ≤ x ≤ 109).

Выходные данные

Выведите единственное целое число — максимальное b. Если такого b не существует, выведите вместо этого -1.

E. Случайное распределение рангов

дп математика Теория вероятностей *3000

Представим настоящий контест или экзамен, состоящий из n участников. Каждый участник получит определенное количество очков. Мы можем более-менее предсказать состояние турнирной таблицы, если рассчитаем статистику прошлых успехов участников.

Предположим, что очки i-ого участника будут равномерно распределены по интервалу [li, ri] (очки участника могут быть вещественным числом). Можете ли Вы предсказать состояние турнирной таблицы по этим данным? Другими словами, для каждого участника Вы должны найти вероятность того, что он займет в итоговой таблице определенное место. Участники в таблице сортируются по возрастанию очков, то есть участник с наибольшим количеством очков занимает последнее место.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 80), показывающее, сколько у нас участников. Каждая из следующих n строк содержит наши предсказания, i-ая строка содержит пару целых чисел li, ri (0 ≤ li < ri ≤ 109) — интервал очков участника i.

Считайте участников пронумерованными некоторым образом от 1 до n.

Выходные данные

Выведите квадратную матрицу a порядка n. Элемент aij матрицы — это вероятность того, что участник i получит место j.

Ваш ответ будет засчитан, если абсолютная или относительная ошибка не превышает 10 - 6.

Примечание

Вероятностное распределение очков непрерывное. Это значит, что ничья невозможна.

A. Теорема Пифагора II

математика Перебор *1200

В математике теорема Пифагора — это отношение в Евклидовой геометрии между тремя сторонами прямоугольного треугольника. Теорема говорит следующее (формулировка в площадях):

 Для любого прямоугольного треугольника площадь квадрата, построенного на гипотенузе (стороне, противоположной прямому углу), равняется сумме площадей квадратов, построенных на катетах (двух сторонах, которые сходятся в прямом угле).

Теорему можно записать как равенство, относящееся к длинам сторон a, b и c, часто называемое уравнением Пифагора:

a2 + b2 = c2

где c — длина гипотенузы, а a и b — длины катетов.

Вам дано n, Ваша задача — посчитать, сколько прямоугольных треугольников со сторонами длиной a, b и c удовлетворяют неравенству 1 ≤ a ≤ b ≤ c ≤ n.

Входные данные

В единственной строке записано одно целое число n (1 ≤ n ≤ 104), упомянутое выше.

Выходные данные

Выведите единственное целое число — ответ на задачу.

B. Цепные дроби

математика Перебор реализация *1700

Цепной дробью высоты n называется дробь вида . Вам даны два рациональных числа, одно представлено в виде , а второе в виде конечной цепной дроби высоты n. Проверьте, равны ли они.

Входные данные

В первой строке через пробел записаны два целых числа p, q (1 ≤ q ≤ p ≤ 1018) — числитель и знаменатель первой дроби.

Во второй строке записано целое число n (1 ≤ n ≤ 90) — высота второй дроби. В третьей строке через пробел записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1018) — цепная дробь.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите «YES», если эти дроби равны и «NO» в противном случае.

Примечание

В первом примере .

Во втором примере .

В третьем примере .

D. Оля и граф

Комбинаторика математика *2200

У Оли есть ориентированный невзвешенный граф, состоящий из n вершин и m ребер. Будем считать, что вершины графа пронумерованы от 1 до n некоторым способом. Тогда для каждого ребра графа, идущего от вершины v к вершине u, выполняется неравенство: v < u.

Теперь Оле интересно, сколько существует способов добавить в граф произвольное (возможно нулевое) количество ребер так, чтобы для полученного графа были выполнены условия:

  1. Из любой вершины с номером i (i < n) достижимы вершины с номерами i + 1, i + 2, ..., n.
  2. Для каждого ребра графа, идущего от вершины v к вершине u, выполняется неравенство: v < u.
  3. Между любыми двумя вершинами существует не более одного ребра.
  4. Кратчайшее расстояние между парой вершин i, j (i < j), для которых верно, что j - i ≤ k, равно j - i ребер.
  5. Кратчайшее расстояние между парой вершин i, j (i < j), для которых верно, что j - i > k, равно либо j - i, либо j - i - k ребер.

Два способа будем считать различными, если будет существовать пара вершин i, j (i < j) такая, что в первом полученном графе будет существовать ребро из i в j, а во втором — нет.

Помогите Оле. Так как искомое количество способов может быть достаточно большим, выведите его остаток от деления на 1000000007 (109 + 7).

Входные данные

В первой строке записаны три целых числа через пробел n, m, k (2 ≤ n ≤ 106, 0 ≤ m ≤ 105, 1 ≤ k ≤ 106).

Во последующих m строках записано описание ребер изначального графа. В i-ой строке записана пара целых чисел через пробел ui, vi (1 ≤ ui < vi ≤ n) — номера вершин, между которыми есть ориентированное ребро из ui в vi.

Гарантируется, что между любой парой вершин ui, vi существует не более одного ребра. Также гарантируется, что ребра графа записаны в порядке неубывания величин ui. Если из вершины ui имеется несколько ребер, то гарантируется, что эти ребра заданы в порядке возрастания величин vi.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

Примечание

В первом примере есть два способа: первый — это ничего не добавлять, второй — добавить единственное ребро из вершины 2 в вершину 5.

D. Куб на отрезке

математика Структуры данных *2600

Пока Тайни учит вычислительную геометрию, он в то же время изучает и полезную структуру данных, которая называются деревом отрезков или деревом интервалов. Он едва разобрался, что к чему, когда возникла следующая задача:

Дана последовательность целых чисел a1, a2, ..., an. Надо выполнить q запросов, каждый запрос относится к одному из двух следующих типов:

  1. Даны два целых числа, l и r (1 ≤ l ≤ r ≤ n), найдите сумму всех элементов в последовательности al, al + 1, ..., ar.
  2. Даны два целых числа, l и r (1 ≤ l ≤ r ≤ n), возведите каждый элемент в последовательности al, al + 1, ..., ar в куб. То есть выполните присвоения al = al3, al + 1 = al + 13, ..., ar = ar3.

Для каждого запроса типа 1 выведите ответ на него.

Сам Тайни, конечно, никак не додумается — так что он просит Вас помочь ему. При этом, Тайни обожает простые числа. Поэтому он сказал Вам, что, так как ответ может быть слишком большим, его стоит выводить по модулю 95542721 (это число является простым).

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105), обозначающее длину последовательности. Во второй строке записано n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 109).

В третьей строке записано целое число q (1 ≤ q ≤ 105), обозначающее количество запросов. Затем следуют q строк. В каждой строке записано по три целых числа ti (1 ≤ ti ≤ 2), li, ri (1 ≤ li ≤ ri ≤ n), где ti обозначает тип запроса, а li и ri — параметры запроса, соответственно.

Выходные данные

Для каждого запроса 1 типа выведите ответ в отдельной строке.

Обратите внимание, что каждое выведенное число должно быть неотрицательным и должно быть меньше 95542721.

B. Лучники

математика Теория вероятностей *1300

SmallR — лучница. SmallR соревнуется с лучником Zanoes. Они оба будут стрелять в мишень по очереди, SmallR стреляет первой. Вероятность попасть в цель каждый раз равняется для SmallR и для Zanoes. Тот, кто попадет в цель первым, будет победителем.

Выведите вероятность того, что SmallR выиграет.

Входные данные

Единственная строка содержит четыре целых числа .

Выходные данные

Выведите единственное вещественное число — вероятность того, что SmallR выиграет матч.

Ответ будет считаться правильным, если абсолютная или относительная погрешность не превышает 10 - 6.

A. Чет и нечет

математика *900

Володя нонконформист и не хочет мириться с существующим порядком натуральных чисел. Он решил непременно его изменить. Но так как натуральных чисел очень уж много, Володя решил начать с малого и изменить порядок первых n натуральных чисел. Для этого записывает в тетрадку такую последовательность: сначала все нечетные натуральные числа от 1 до n (по возрастанию), а затем все четные натуральные числа от 1 до n (по возрастанию). Помогите Володе определить, какое число будет стоять в данной последовательности на позиции с номером k.

Входные данные

В единственной строчке через пробел записаны целые числа n и k (1 ≤ k ≤ n ≤ 1012).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d).

Выходные данные

Выведите число, которое окажется на позиции с номером k в тетрадке Володи.

Примечание

В первом примере Володя выпишет числа в порядке {1, 3, 5, 7, 9, 2, 4, 6, 8, 10}, поэтому на третьем месте в этой последовательности стоит число 5.

A. Танцевальный клуб Малека

Комбинаторика математика *1600

По традиции, каждый год перед международной олимпиадой по информатике все участники фан-клуба Наталии приглашаются в танц-клуб Малека для приятного времяпрепровождения. Танц-клуб Малека насчитывает 2n участников и по совпадению, фан-клуб Наталии также насчитывает 2n участников. Каждому участнику ТКМ приписывается уникальный номер i от 0 до 2n - 1. То же самое верно для каждого участника ФКН.

Среди прочего, встречи традиционно включают парный танец, где каждый участник ТКМ танцует с участником ФКН. Пара в танце — это такая пара чисел (a, b), что участник номер a из ТКМ танцует с участником номер b из ФКН.

Назовем сложностью распределения пар количество пар танцующих пар (a, b) и (c, d), таких, что a < c и b > d.

Вам дано двоичное число x длины n. Мы знаем, что участник номер i из ТКМ танцует с участником номер из ФКН. Ваша задача — высчитать сложность такого распределения по модулю 1000000007 (109 + 7).

Выражение обозначает применение операции «XOR» к числам x и y. Данная операция существует во всех современных языках программирования. Например, в C++ и Java она обозначается как «^», в языке Pascal — как «xor».

Входные данные

В первой строке содержится двоичное число x длины n, (1 ≤ n ≤ 100).

Это число может содержать ведущие нули.

Выходные данные

Выведите сложность данного распределения по модулю 1000000007 (109 + 7).

C. Блоха

математика *1700

Известно, что блохи в Берляндии могут прыгать только по вертикали и горизонтали, причем прыгают они всегда ровно на s сантиметров. В центре некоторой клетки прямоугольной клетчатой доски n × m сантиметров (размер одной клетки — 1 × 1 сантиметр) оказалась блоха. Она может прыгать по доске сколько угодно, может даже посещать одну и ту же клетку несколько раз. Единственное ограничение — блоха не может выпрыгивать за пределы доски.

Блоха может посчитать количество клеток, до которых она может добраться из начальной позиции (x, y). Назовем это количество dx, y. Ваша задача — найти количество таких начальных позиций блохи (x, y), для которых dx, y максимально.

Входные данные

В первой строке записано три целых числа n, m, s (1 ≤ n, m, s ≤ 106) — длина доски, ширина доски и длина прыжка блохи соответственно.

Выходные данные

Выведите одно целое число — количество начальных позиций блохи, для которых количество клеток, до которых блоха может добраться из этой начальной позиции, максимально.

A. Ciel и робот

Бинарный поиск математика реализация *1700

У лисы Ciel есть робот на плоскости. Изначально робот расположен в (0, 0). Лиса Ciel написала программу для этого робота. Программа представляет из себя строку s. Каждый символ строки s обозначает перемещение робота. Всего есть четыре вида перемещений:

  • 'U': шаг вверх, (x, y)  →  (x, y+1);
  • 'D': шаг вниз, (x, y)  →  (x, y-1);
  • 'L': шаг влево, (x, y)  →  (x-1, y);
  • 'R': шаг вправо, (x, y)  →  (x+1, y).

Робот выполняет операции перемещения из строки s слева направо. Выполнив все операции строки s, он начинает выполнять их снова с начала строки s. Он делает это снова и снова, до бесконечности.

Помогите лисе Ciel определить, окажется ли робот в точке (a, b) когда-нибудь.

Входные данные

Первая строка содержит два целых числа a и b, ( - 109 ≤ a, b ≤ 109). Вторая строка содержит строку s (1 ≤ |s| ≤ 100, s состоит только из символов 'U', 'D', 'L', 'R') — программа робота.

Выходные данные

Выведите "Yes", если робот окажется в (a, b), в противном случае выведите "No".

Примечание

В первом и втором тесте программа — это строка "RU", так что робот пойдет вправо, затем вверх, затем вправо, затем вверх и так далее.

Робот пройдет по точкам (0, 0)  →  (1, 0)  →  (1, 1)  →  (2, 1)  →  (2, 2)  →  ...

Итак, он может дойти до (2, 2), но не до (1, 2).

D. Ciel и доска

дп жадные алгоритмы математика *2900

У лисы Ciel есть доска, на доске нарисована таблица из n строк и n столбцов, в каждой ячейке записано по целому числу.

Известно, что число n нечетное. Введем обозначение . Лиса Ciel может осуществить следующую операцию несколько раз: выбрать подтаблицу размера x строк на x столбцов, затем умножить все числа в ней на -1.

Найдите максимальную сумму чисел на доске, которую может получить Ciel.

Входные данные

В первой строке записано целое число n, (1 ≤ n ≤ 33, и n — нечетное число) — размер таблицы.

В каждой из следующих n строк записано n целых чисел — числа, записанные на доске. Каждое число не превышает по модулю 1000.

Выходные данные

Выведите единственное целое число: максимальную достижимую сумму чисел на доске.

Примечание

В первом тесте можно применить операцию дважды: сперва на подтаблице размера 2 × 2 в левом верхнем углу, затем — на подтаблице размера 2 × 2 в правом нижнем углу. Тогда все числа станут положительными.

B. Ciel и цветы

Комбинаторика математика *1600

У лисы Ciel есть некоторое количество цветов: r красных, g зеленых и b синих цветов. Она хочет сделать несколько букетов из этих цветов. Есть 4 типа букетов:

  • На «красный букет» надо 3 красных цветка.
  • На «зеленый букет» надо 3 зеленых цветка.
  • На «синий букет» надо 3 синих цветка.
  • На «смешанный букет» надо 1 красный, 1 зеленый и 1 синий цветок.

Помогите лисе Ciel посчитать, какое максимальное количество букетов можно сделать из ее цветов.

Входные данные

В первой строке записаны три целых числа r, g и b (0 ≤ r, g, b ≤ 109) — количество красных, зеленых и синих цветов.

Выходные данные

Выведите максимальное количество букетов, которое может сделать лиса Ciel.

Примечание

В тесте 1 можно сделать 1 красный букет, 2 зеленых букета и 3 синих букета.

В тесте 2 можно сделать 1 красный, 1 зеленый, 1 синий и 1 смешанный букет.

B. Стадион и игры

Бинарный поиск математика *1800

Иван Дурак организует соревнование по футболу. Для этого соревнования он будет использовать следующую систему:

  1. На первых нескольких (возможно, нуле) этапах, покуда количество команд четно, они разбиваются на пары, и в каждой паре команды играют друг с другом одну игру. На каждом таком этапе проигравший в паре выбывает из соревнования (ничей быть не может). Такие этапы проводятся, пока не останется нечетное количество команд.
  2. Если осталась ровно одна команда, то она объявляется победителем, и соревнование завершается. Иначе команды играют по одной игре каждая с каждой (если было x команд, то будет сыграно игр), после чего соревнование завершается.

Например, если в начале было 20 команд, то после первого этапа останется всего 10 команд. После второго этапа останется всего пять команд, и они сыграют по одной игре каждая с каждой. Итого будет сыграно 10+5+10=25 игр.

Красная Шапочка уже зарезервировала для Ивана Дурака стадион на n игр. Помогите ему определить, сколько надо пригласить команд, чтобы в результате было сыграно ровно n игр. Если вариантов несколько, выведите их все в порядке возрастания. Если нет ни одного варианта, выведите -1.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 1018), количество игр, которое следует сыграть.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите все возможные количества команд, при которых будет сыграно ровно n игр, в порядке возрастания. Если ни при каком количестве команд не будет сыграно ровно n игр, выведите -1.

B. Голодная последовательность

математика *1200

Яхуб и Яхубина пошли на свидание в шикарный ресторан. Все шло хорошо, пока не настал час платить по счету. Вместо денег официант хочет, чтобы Яхуб написал голодную последовательность из n целых чисел.

Последовательность a1, a2, ..., an, состоящая из n целых чисел, является голодной тогда и только тогда, когда:

  • Ее элементы расположены по возрастанию. То есть, неравенство ai < aj выполняется для любых двух индексов i, j (i < j).
  • Для любых двух индексов i и j (i < j), aj не должно делиться на ai.

Яхуб запутался и просит Вас помочь ему. Найдите голодную последовательность, состоящую из n элементов.

Входные данные

Входные данные состоят из единственного целого числа: n (1 ≤ n ≤ 105).

Выходные данные

Выведите через пробел n целых чисел a1, a2, ... , an (1 ≤ ai ≤ 107), обозначающих возможную голодную последовательность. Обратите внимание, что каждое ai не должно быть больше 10000000 (107) и меньше 1.

Если существует несколько решений, можете выводить любое.

C. Волшебная пятерка

Комбинаторика математика *1700

Дана длинная табличка s с n цифрами, записанными на ней в ряд. Яхуб хочет удалить некоторое количество цифр (возможно, нулевое, но удалять все цифры не разрешается), чтобы получить на табличке «волшебное число», число, которое делится на 5. Обратите внимание, что итоговое число может содержать лидирующие нули.

Теперь Яхуб хочет посчитать количество способов, которыми он может получить волшебное число, по модулю 1000000007 (109 + 7). Два способа различны тогда, когда набор удаленных позиций в s различается.

Обратите внимание на описание входных данных, s задана в особой форме.

Входные данные

В первой строке дана строка a (1 ≤ |a| ≤ 105), содержащая только цифры. Во второй строке дано целое число k (1 ≤ k ≤ 109). Строка с цифрами, записанная на таблице s, получается как конкатенация k копий a. То есть, n = |ak.

Выходные данные

Выведите единственное целое число — требуемое количество способов по модулю 1000000007 (109 + 7).

Примечание

В первом тесте есть четыре возможных способа получить число, делимое на 5: 5, 15, 25 и 125.

Во втором тесте не забудьте выполнить конкатенацию копий a. Нужная табличка — 1399013990.

В третьем тесте можно выбрать любой вариант (кроме удаления всех цифр). Следовательно, есть 26 - 1 = 63 возможных способов удалить цифры.

E. Зло

математика *3100

На двухмерной декартовой плоскости расположено n городов. Расстояние между двумя городами равняется Манхэттенскому расстоянию между ними (определение см. в примечаниях). Гамильтоновым циклом указанных городов является перестановка из n городов. Длина этого Гамильтонова цикла определяется как сумма расстояний между смежными городами в перестановке плюс расстояние между первым и последним городом в перестановке. Пожалуйста, подсчитайте длиннейшую возможную длину Гамильтонова цикла данных городов.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 105). Затем следует n строк, в каждой записано по два целых числа xi и yi (0 ≤ xi, yi ≤ 109), обозначающих координаты города. Все данные точки различны.

Выходные данные

Выведите единственную строку, обозначающую наибольшую возможную длину Гамильтонова цикла данных городов. Сам цикл выводить не надо, только его длину.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В примере одним из возможных Гамильтоновых циклов длины 6 является цикл (1, 1) (1, 2) (2, 1) (2, 2). Других Гамильтоновых циклов, чья длина превышает 6, не существует.

Манхэттенское расстояние между двумя городами (xi, yi) и (xj, yj) равняется |xi - xj| + |yi - yj|.

D. Похищение чертежей

графы математика *2400

В руки повстанцев случайно попал план сверхсекретного исследовательского полигона, созданного на одной из дальних планет для нужд Галактической Империи. По предположению повстанцев на территории этого полигона ведется разработка нового смертоносного оружия. Полигон состоит из n ракетных шахт, соединенных двусторонними подземными переходами. К переходам примыкают лаборатории, в которых и проводятся исследования. Разумеется, переходы тщательно охраняются: переход между шахтами i и j патрулируют ci, j боевых дроидов.

Изучая план полигона, повстанцы обратили внимание на его необычную структуру. Оказалось, что для любого k-элементного множества шахт S существует ровно одна шахта, напрямую соединенная переходом с каждой шахтой из S (будем называть эту шахту соседней с S). С учетом этого повстанцы приняли решение провести разведывательную операцию на полигоне следующим образом:

  1. выбирается k-элементное множество шахт S;
  2. в каждую шахту из S с воздуха высаживается группа разведчиков;
  3. каждая группа двигается по соответствующему переходу в шахту, соседнюю с S, попутно осматривая лаборатории на предмет наличия чертежей оружия;
  4. в шахте, соседней с S, группы поднимаются на корабль и улетают.

Опасностью операции назовем суммарное количество дроидов, патрулирующих переходы, через которые пройдут разведчики. Очевидно, опасность операции зависит только от способа выбора множества S. Повстанцы еще не решили, в какие именно шахты будут высаживаться разведчики, однако они хотят начать подготовку вооружения для разведывательных групп уже сейчас. Для этого повстанцам нужно знать, каково среднее арифметическое опасностей операций, соответствующих всем возможным способам выбора множества S. Решите эту задачу, чтобы помочь повстанцам защитить идеалы Республики!

Входные данные

В первой строке записано два целых числа n и k (2 ≤ n ≤ 2000, 1 ≤ k ≤ n - 1) — количество шахт и количество разведывательных групп соответственно. В следующих n - 1 строках описывается план полигона: i-ая из этих строк содержит n - i целых чисел ci, i + 1, ci, i + 2, ..., ci, n — количество дроидов, патрулирующих соответствующие переходы (-1 ≤ ci, j ≤ 109; если ci, j =  -1, то перехода между шахтами i и j нет). Все переходы являются двунаправленными, то есть можно считать, что ci, j = cj, i. Переходов, соединяющих шахту саму с собой, не существует. Гарантируется, что план полигона удовлетворяет условию задачи.

Выходные данные

Выведите среднюю опасность разведывательной операции, округленную вниз до целого числа. Обратите внимание, что при указанных ограничениях ответ на задачу всегда помещается в стандартный целочисленный 64-битный тип данных.

Пожалуйста, не используйте спецификатор %lld для вывода 64-битных чисел на С++. Рекомендуется использовать поток cout или спецификатор %I64d.

Примечание

В первом примере существует 6 одноэлементных множеств шахт. Для множеств {1}, {5} опасность операции составит 8, для множеств {3}, {6} — 3, для множеств {2}, {4} — 5. Среднее арифметическое равно .

Во втором примере существует 3 двухэлементных множества шахт: {1, 3} (опасность равна 21), {1, 2} (опасность равна 11), {2, 3} (опасность равна 10). Средняя опасность операции равна .

A. Медведь Василий и треугольник

математика реализация *1000

У медведя Василия есть любимый прямоугольник, одна вершина которого находится в точке (0, 0), а противоположная — в точке (x, y). Конечно, стороны любимого прямоугольника Василия параллельны осям координат.

Кроме прямоугольников Василий любит треугольники, у которых одна из вершин находится в точке B = (0, 0). Поэтому сегодня он просит Вас найти две точки A = (x1, y1) и C = (x2, y2), такие, что одновременно выполняются следующие условия:

  • координаты точек: x1, x2, y1, y2 — целые числа, причем выполняется неравенство: x1 < x2;
  • треугольник, образуемый точками A, B и C, — прямоугольный и равнобедренный ( — прямой);
  • все точки любимого прямоугольника содержатся внутри или на границе треугольника ABC;
  • площадь треугольника ABC как можно меньше.

Помогите медведю, найдите требуемые точки. Не сложно доказать, что искомые точки единственны.

Входные данные

В первой строке записаны два целых числа x, y ( - 109 ≤ x, y ≤ 109, x ≠ 0, y ≠ 0).

Выходные данные

Выведите в единственной строке четыре целых числа x1, y1, x2, y2 — координаты требуемых точек.

Примечание

Иллюстрация к первому примеру

B. Медведь Василий и муха

математика *1900

В один прекрасный день медведь Василий нарисовал на координатной плоскости 2m окружностей одинакового радиуса R. Окружности с номерами от 1 до m имели в качестве своих центров точки (2R - R, 0), (4R - R, 0), ..., (2Rm - R, 0) соответственно. Окружности с номерами от m + 1 до 2m имели в качестве своих центров точки (2R - R, 2R), (4R - R, 2R), ..., (2Rm - R, 2R) соответственно.

Конечно, медведь нарисовал окружности для того, чтобы провести простой эксперимент с мухой. Эксперимент затянулся на m2 дней. Каждый день эксперимента получил свой уникальный номер от 0 до m2 - 1 включительно.

В день с номером i происходило следующее:

  1. Муха прилетала на координатную плоскость в центр окружности с номером ( — результат деления числа x на число y, округленный вниз до целого числа).
  2. Муха шла по координатной плоскости в центр окружности с номером ( — остаток от деления числа x на число y). Медведь заметил, что муха шла из центра окружности v в центр окружности u по кратчайшему пути, все точки которого лежали на границе или внутри хотя бы одной из 2m окружностей. После того как муха приходила в центр окружности с номером u, она улетала в неизвестном направлении.

Помогите Василию, посчитайте среднее арифметическое расстояний, пройденных мухой по координатной плоскости за каждый из этих m2 дней.

Входные данные

В первой строке записаны два целых числа m, R (1 ≤ m ≤ 105, 1 ≤ R ≤ 10).

Выходные данные

В единственную строку выведите единственное вещественное число — ответ на задачу. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превосходит 10 - 6.

Примечание

Иллюстрация ко второму примеру

D. Медведь Василий и красивые строки

Комбинаторика математика теория чисел *2100

Медведь Василий любит красивые строки. Будем называть строку s красивой, если выполнены следующие условия:

  1. Строка s состоит только из символов 0 и 1, причем символ 0 должен встречаться в строке s ровно n раз, а символ 1 — ровно m раз.
  2. За некоторое (возможно нулевое) количество модификаций из строки s можно получить любимый символ g, который равен либо нулю, либо единице.

Модификацией строки, длина которой не меньше двух, будем называть следующую операцию: из строки удаляются два последних символа, а на их место ставится ровно один другой символ, который будет равен единице, если оба удаленных символа были равны нулю, и нулю иначе. Например, в результате одной модификации из строки «01010» получится строка «0100», в результате двух — «011». Применять модификацию к строке длины меньше чем два запрещено.

Помогите Медведю, посчитайте количество красивых строк. Так как количество красивых строк может быть очень большим, выведите остаток от деления этого количества на 1000000007 (109 + 7).

Входные данные

В первой строке входных данных записаны три целых числа через пробел n, m, g (0 ≤ n, m ≤ 105, n + m ≥ 1, 0 ≤ g ≤ 1).

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

Примечание

В первом примере красивыми являются строки «01», «10».

Во втором примере красивыми являются строки «0011», «1001», «1010», «1100».

В третьем примере красивых строк нет.

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 представляет собой меньшее число.

D. Таблица НОД

китайская теорема об остатках математика теория чисел *2900

Рассмотрим таблицу G размером n × m такую, что G(i, j) = НОД(i, j) для всех 1 ≤ i ≤ n, 1 ≤ j ≤ m. НОД(a, b) обозначает наибольший общий делитель чисел a и b.

Вам дана последовательность целых положительных чисел a1, a2, ..., ak. Будем говорить, что эта последовательность встречается в таблице G, если она совпадает с подряд идущими элементами в некоторой строке начиная с некоторой позиции. Более формально, должны существовать такие числа 1 ≤ i ≤ n и 1 ≤ j ≤ m - k + 1, что G(i, j + l - 1) = al для всех 1 ≤ l ≤ k.

Определите, встречается ли последовательность a в таблице G.

Входные данные

Первая строка содержит три целых числа n, m и k (1 ≤ n, m ≤ 1012; 1 ≤ k ≤ 10000), записанные через пробел. Во второй строке через пробел записаны k целых чисел a1, a2, ..., ak (1 ≤ ai ≤ 1012).

Выходные данные

Выведите единственное слово «YES», если данная последовательность встречается в таблице G, и «NO» в противном случае.

Примечание

Пример 1. Десятая строка таблицы G начинается с последовательности {1, 2, 1, 2, 5, 2, 1, 2, 1, 10}. Как вы можете видеть, элементы с пятого по девятый совпадают с последовательностью a.

Пример 2. На этот раз ширина таблицы G равна 8-ми. Последовательность a в ней не встречается.

E. Столкновения

математика Перебор реализация *2000

На числовой прямой находятся n шариков. На момент времени 0 для каждого известна его координата xi, скорость vi (возможно, отрицательная) и масса mi. Радиусом шариков можно пренебречь.

Шарики сталкиваются абсолютно упруго. То есть если два шарика массой m1 и m2 со скоростями v1 и v2 сталкиваются, их новые скорости будут:

.

Требуется найти, где каждый шарик будет находиться через t секунд.

Входные данные

В первой строке записано два целых числа n и t (1 ≤ n ≤ 10, 0 ≤ t ≤ 100) — количество шариков и продолжительность процесса. Далее следует n строк по три целых числа в каждой: xi, vi, mi (1 ≤ |vi|, mi ≤ 100, 0 ≤ |xi| ≤ 100) — координата, скорость и масса шарика номер i в момент времени 0.

Гарантируется, что изначально никакие два шарика не находятся в одном и том же месте. Кроме того, гарантируется, что в одном столкновении не будет участвовать одновременно более двух шариков (т.е. три и более шарика никогда не окажутся в одной точке в отрезке времени [0;t]).

Выходные данные

Выведите n чисел — координаты шариков через t секунд. Выводите числа не менее чем с 4 знаками после десятичной точки.

A. Стена

математика *1200

Яхуб и его друг Флойд начали красить стену. Яхуб красит стену красным цветом, а Флойд — розовым цветом. Предположим, что стена сделана из очень большого количества кирпичей, пронумерованных 1, 2, 3 и так далее.

Яхуб красит стену по следующей схеме: он пропускает x - 1 последовательных кирпичей, затем красит x-ый. Другими словами, он покрасит кирпичи с номерами x, x, x и так далее красным. Аналогично, Флойд пропускает y - 1 последовательных кирпичей, затем красит y-ый. То есть Флойд красит кирпичи с номерами y, y, y и так далее розовым.

Покрасив стену, мальчики заметили, что некоторые кирпичи покрашены и красным и розовым. У Яхуба есть счастливое число a, а у Флойда есть счастливое число b. Мальчикам интересно, сколько кирпичей с номерами не меньше a и не больше b покрашены как красным, так и розовым. Это и есть Ваша задача: вычислите и выведите ответ на вопрос.

Входные данные

Во входных данных записана единственная строка, содержащая четыре целых числа в указанном порядке: x, y, a, b (1 ≤ x, y ≤ 1000, 1 ≤ a, b ≤ 2·109, a ≤ b).

Выходные данные

Выведите единственное целое число — количество кирпичей с номерами не меньше a и не больше b, покрашенных одновременно красным и розовым.

Примечание

Давайте посмотрим на кирпичи от a до b (a = 6, b = 18). Кирпичи, закрашенные красным, имеют номера: 6, 8, 10, 12, 14, 16, 18. Кирпичи, закрашенные розовым, имеют номера: 6, 9, 12, 15, 18. Кирпичи, закрашенные и красным и розовым, имеют номера: 6, 12 и 18.

C. Про туриста

Комбинаторика математика реализация *1600

Яхуб — ярый поклонник туристов. Он и сам хочет стать туристом и поэтому запланировал поездку. На прямой дороге расположены n пунктов назначения, Яхуб хочет посетить их все. Он начинает экскурсию с километра номер 0. Яхубу известно как расположены пункты назначения на дороге. Он знает последовательность целых чисел a1, a2, ..., an, в которой число ak обозначает, что k-тый пункт назначения находится на расстоянии ak километров от точки начала экскурсии. Известно, что никакие два пункта не расположены в одном и том же месте.

Яхуб хочет посетить каждый пункт ровно один раз. Обратите внимание, что если Яхуб пересекает какой-то пункт назначения по дороге к другому пункту, это не считается посещением. То есть, если Яхуб двигается к какому-то пункту, чтобы посетить его, и по дороге встречает непосещенный пункт, такое событие не считается посещением пункта. Также, после того как Яхуб посетит свой последний пункт назначения, он не возвращается на километр 0, то есть в последнем пункте путешествие заканчивается.

Расстояние между пунктом, находящемся на километре x, и следующим пунктом, находящемся на километре y, считается равным |x - y| километров. «Путем» называется порядок прохождения пунктов назначения. Яхуб может посещать пункты в том порядке, в каком хочет, лишь бы он посетил все n пунктов назначения и при этом не посетил никакой пункт более одного раза.

Яхуб начинает выписывать на бумаге все возможные пути. Для каждого пути он отмечает расстояние, которое надо будет пройти, если следовать этому пути. Яхуб хочет найти среднее количество километров в пути. Ему уже наскучило выписывать все пути, поэтому он просит Вас помочь ему.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 105). В следующей строке записаны n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ 107).

Выходные данные

Выведите два целых числа — числитель и знаменатель дроби, равной требуемому среднему значению. Дробь должна быть несократимая.

Примечание

Рассмотрим 6 возможных путей:

  • [2, 3, 5]: суммарное пройденное расстояние равно |2 – 0| + |3 – 2| + |5 – 3| = 5;
  • [2, 5, 3]: |2 – 0| + |5 – 2| + |3 – 5| = 7;
  • [3, 2, 5]: |3 – 0| + |2 – 3| + |5 – 2| = 7;
  • [3, 5, 2]: |3 – 0| + |5 – 3| + |2 – 5| = 8;
  • [5, 2, 3]: |5 – 0| + |2 – 5| + |3 – 2| = 9;
  • [5, 3, 2]: |5 – 0| + |3 – 5| + |2 – 3| = 8.

Таким образом средняя длина пути в километрах = = .

E. Яхуб и перестановки

Комбинаторика математика *2000

Яхуб так обрадовался изобретению графов сортировки пузырьком, что он целый день сидит в офисе и выписывает перестановки. Яхубина вся извелась — ведь теперь Яхубу нет до нее дела. И вот, стоило Яхубу выйти, Яхубина зашла к нему в офис, чтобы саботировать его научную работу — и месть ее страшна.

Девушка отыскала важную для исследования Яхуба перестановку. Перестановка состояла из n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ n). Найдя перестановку, она сразу же заменила некоторые элементы перестановки числами -1.

Когда Яхуб вернулся, он обнаружил, что важная перестановка испорчена. Теперь Яхуб пытается ее восстановить. К сожалению, про изначальную перестановку он запомнил только то, что в перестановке не было ни одной неподвижной точки. Неподвижная точка перестановки — это такой элемент ak, значение которого равняется k (ak = k).

Ваша задача — доказать Яхубу, что восстанавливать перестановку уже не стоит. Выведите количество перестановок, которые могут оказаться изначальной важной перестановкой Яхуба по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 2000). Во второй строке записано n целых чисел, описывающих важную перестановку Яхуба, после того, как Яхубина заменила некоторые значения на -1.

Гарантируется, что в заданной перестановке нет неподвижных точек. Также, гарантируется, что в заданной последовательности как минимум две -1 (минус единицы) и что никакое положительное число не встречается в перестановке более одного раза. Гарантируется, что при заданных ограничениях, существует хотя бы одна подходящая перестановка.

Выходные данные

Выведите единственное целое число — количество способов восстановления перестановки по модулю 1000000007 (109 + 7).

Примечание

В первом тестовом примере две перестановки, не имеющие неподвижных точек: [2, 5, 4, 3, 1] и [5, 1, 4, 3, 2]. У всех остальных перестановок была бы по крайней мере одна неподвижная точка.

A. Рациональное сопротивление

математика теория чисел *1600

Безумный ученый Майк в свободное время строит машину времени. Для окончания проекта ему понадобился резистор с определенным значением сопротивления.

Однако у Майка в запасе есть только большое количество одинаковых резисторов с единичным сопротивлением R0 = 1. Элементы с другим сопротивлением можно собирать из данных резисторов. В данной задаче элементами будем считать:

  1. один резистор;
  2. элемент и один резистор, подключенные последовательно;
  3. элемент и один резистор, подключенные параллельно.

При последовательном подключении сопротивление нового элемента равно R = Re + R0. При параллельном подключении сопротивление нового элемента равно . В данном случае Re равняется сопротивлению подключаемого элемента.

Майку нужно собрать элемент с сопротивлением, равным дроби . Определите наименьшее количество резисторов, с помощью которых можно собрать такой элемент.

Входные данные

В единственной строке входных данных через пробел записаны два целых числа a и b (1 ≤ a, b ≤ 1018). Гарантируется, что дробь несократима. Гарантируется, что решение всегда существует.

Выходные данные

Выведите единственное число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере хватает одного резистора.

Во втором примере можно соединить два резистора параллельно, а полученный элемент соединить последовательно с третьим резистором. Таким образом получаем элемент с сопротивлением . С помощью двух резисторов такой элемент построить невозможно.

B. Простые молекулы

графы математика Перебор *1200

Безумный ученый Майк ставит эксперименты по химии. Сегодня он попытается собрать одну молекулу из трех атомов.

Известно, что молекула состоит из атомов, некоторые пары которых соединены атомарными связями. У каждого атома есть значение валентности — количества связей, которые атом должен образовывать с другими атомами. Атом может создавать одну или несколько связей с любым другим атомом, но не с самим собой. Количество связей для атома в молекуле должно быть равно его валентности.

Майку известны валентности всех трех атомов. Найдите молекулу, которую из них можно собрать, или же определите, что это невозможно.

Входные данные

В единственной строке входных данных через пробел записаны три целых числа a, b и c (1 ≤ a, b, c ≤ 106) — валентности трех данных атомов.

Выходные данные

Если нужная молекула существует, выведите через пробел три целых числа — количество связей между 1-м и 2-м, 2-м и 3-м, 3-м и 1-м атомами соответственно. Если решений несколько, выведите любое. Если решения не существует, выведите «Impossible» (без кавычек).

Примечание

Первый пример соответствует первому рисунку. Между 1-м и 2-м атомами в данном случае нет связей.

Второй пример соответствует второму рисунку. Между каждой парой атомов есть одна или несколько связей.

Третий пример соответствует третьему рисунку. Решения не существует, потому что атом не может образовывать связи с самим собой.

Ситуация на четвертом рисунке невозможна, так как каждый атом должен вступать хотя бы в одну атомарную связь.

A. Алиса и Боб

игры математика теория чисел *1600

Ах, какая же скукота на летних каникулах! И вот, Алиса и Боб придумали новую игру. Правила у игры следующие: у игроков имеется множество из n различных целых чисел. Игроки ходят по очереди. Во время каждого хода либо Алиса, либо Боб (игрок, чья очередь подошла) может выбрать из множества два различных целых числа, x и y, такие, что в множестве не содержится число |x - y|. Затем игрок, который ходит, добавляет число |x - y| ко множеству (таким образом, размер множества увеличивается на один).

Если игрок не может сделать ход, то он (или она) проигрывает. Вопрос вот в чем: кто в итоге выиграет при оптимальной игре обоих игроков? Помните, что Алиса всегда ходит первой.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 100) — исходное количество элементов в множестве. Во второй строке записано n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), разделенных пробелом, — элементы множества.

Выходные данные

В единственной строке выведите имя победителя. Если победит Алиса, выведите «Alice», а если победит Боб, то «Bob» (без кавычек).

Примечание

Рассмотрим первый пример. Сперва ходит Алиса. Она может сделать только один ход: выбрать 2 и 3, а затем добавить ко множеству 1. Затем ходит Боб, допустимых ходов не остается и побеждает Алиса.

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.

E. Doodle Jump

математика теория чисел *3000

Цель игры Doodle Jump — Главная цель игры — помочь «Дудлеру» (Doodler) взобраться как можно выше по платформам. — Wikipedia.

Это очень популярная игра и xiaodao обожает ее. Однажды она играла в игру и подумала: а есть ли платформа, до которой Дудлер не сможет допрыгнуть ввиду своей низкой прыгучести? Рассмотрим следующую задачу.

Есть n платформ. Высота x-ой (1 ≤ x ≤ n) платформы равняется a·x mod p, где a и p — положительные взаимно простые числа. Максимальная высота прыжка Дудлера равняется h. Иными словами, он может допрыгнуть с высоты h1 до высоты h2 (h1 < h2), если h2 - h1 ≤ h. Вначале Дудлер стоит на земле, где высота равна 0. Вопрос вот в чем: может ли Дудлер добраться до самой высокой платформы?

Например, когда a = 7, n = 4, p = 12, h = 2, высоты платформ равняются 7, 2, 9, 4, как на картинке ниже. Первым прыжком Дудлер может допрыгнуть до платформы на высоте 2, вторым — до платформы на высоте 4, но после этого он не сможет допрыгнуть до платформ повыше. Таким образом, он не может добраться до самой высокой платформы.

Пользователь xiaodao долго думала над этой задачей, но не решила ее. И вот она попросила Вас о помощи. У девушки есть много частных случаев задачи. Ваша задача — решить все частные случаи.

Входные данные

В первой строке записано целое число t (1 ≤ t ≤ 104) — количество частных случаев. В каждой из последующих t строк записано по четыре целых числа a, n, p, h (1 ≤ a ≤ 109, 1 ≤ n < p ≤ 109, 0 ≤ h ≤ 109). Гарантируется, что a и p взаимно просты.

Выходные данные

Для каждого частного случая задачи выведите «YES», если Дудлер может добраться до самой высокой платформы, и «NO» в противном случае.

B. Неподвижные точки

математика Перебор реализация *1100

Перестановка длины n — это последовательность целых чисел такая, что каждое целое число от 0 до (n - 1) встречается в ней ровно один раз. Например, последовательность [0, 2, 1] представляет собой перестановку длины 3, а вот [0, 2, 2] и [1, 2, 3] — нет.

Неподвижная точка функции — это такая точка, которую отображение функции переводит в нее же. Перестановку можно рассматривать как взаимно-однозначную функцию. Дадим определение неподвижной точки перестановки. Целое число i называется неподвижной точкой перестановки a0, a1, ..., an - 1 тогда и только тогда, когда ai = i. Например, перестановка [0, 2, 1] имеет 1 неподвижную точку, а перестановка [0, 1, 2] имеет 3 неподвижные точки.

Дана перестановка a. Вам разрешено не более одного раза поменять местами два элемента перестановки. Какое наибольшее количество неподвижных точек можно получить в перестановке? Обратите внимание, что вам разрешено сделать не более одного обмена местами.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 105). Во второй строке записано n целых чисел a0, a1, ..., an - 1 — данная перестановка.

Выходные данные

Выведите единственное целое число — максимальное количество неподвижных точек, которое можно получить в перестановке, используя не более одного обмена двух элементов местами.

A. Мафия

Бинарный поиск математика сортировки *1600

Как-то раз собрались n друзей, чтобы сыграть в «Мафию». В каждом раунде игры «Мафия» должен быть назначен ведущий (кто-то один из ребят), остальные n - 1 человек принимают участие в игре. Для каждого человека известно, в каком количестве раундов он хочет принять участие как игрок, а не как ведущий: i-ый человек хочет сыграть ai раундов. Какое минимальное количество раундов игры «Мафия» нужно сыграть, чтобы каждый человек сыграл как минимум столько раундов, сколько хочет?

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 105). Во второй строке через пробел записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109)i-ое число в списке обозначает количество раундов, которое хочет сыграть i-ый человек.

Выходные данные

В единственную строку выведите целое число — минимальное количество раундов игры, которое нужно сыграть, чтобы i-ый человек сыграл как минимум ai раундов.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

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.

A. Джефф и цифры

математика Перебор реализация *1000

У Джеффа есть n карточек, на каждой карточке нарисована либо цифра 0, либо цифра 5. Джефф может выбрать некоторые карточки и выложить их в ряд — получится некоторое число. Какое максимальное число, делящееся на 90, Джефф может выложить из имеющихся у него карточек?

Выложенное число не должно содержать лидирующих нулей, при этом считается, что число 0 не содержит лидирующих нулей. Джеффу не обязательно использовать все карточки.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 103). В следующей строке записано n целых чисел a1, a2, ..., an (ai = 0 или ai = 5). Число ai обозначает цифру, которая записана на i-ой карточке.

Выходные данные

В единственную строку выведите ответ на задачу — максимальное число, которое делится на 90. Если из карточек нельзя составить ни одно число, которое делится на 90, выведите -1.

Примечание

В первом тесте единственное число кратное 90, которое можно сложить — это 0.

Во втором тесте можно сложить число 5555555550, оно кратно 90.

A. Домино

математика реализация *1200

У Валеры имеется n костей домино, выложенных в ряд. Каждая кость состоит из двух половинок — верхней и нижней. На каждой из половинок записано число от 1 до 6. Валера очень любит четные числа, поэтому он хочет, чтобы сумма чисел, записанных на верхних половинках, и сумма чисел, записанных на нижних половинках, были четными.

Для того, чтобы это произошло, Валера может поворачивать кости на 180 градусов. После поворота верхняя и нижняя половинки кости меняются местами. Данное действие занимает у Валеры одну секунду. Помогите Валере узнать, какое минимальное количество времени он должен потратить на повороты домино, чтобы его желание исполнилось.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 100), обозначающее количество костей, имеющихся у Валеры. В следующих n строках через пробел заданы два целых числа xi, yi (1 ≤ xi, yi ≤ 6). Первоначально число xi записано на верхней половинке i-ой кости, yi — на нижней.

Выходные данные

Выведите единственное целое число — минимальное требуемое количество времени. Если Валере ни за какое время не удастся исполнить задуманное, выведите  - 1.

Примечание

В первом тестовом примере сумма чисел на верхних половинках костей равна 10, а сумма на нижних равна 6. Оба числа четные, поэтому Валере не требуется совершать никаких действий.

Во втором примере у Валеры имеется всего одна кость. На одной из ее половинок записано число 3, поэтому как бы Валера не повернул эту кость, одна из сумм всегда будет нечетной.

В третьем примере Валере достаточно повернуть первую кость, и тогда сумма на верхних половинках будет равна 10, а сумма на нижних половинках — 8.

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.

C. Найдите максимум

математика реализация теория чисел *1600

У Валеры имеется массив a, состоящий из n целых чисел a0, a1, ..., an - 1, и функция f(x) принимающая в качестве своего единственного аргумента целое число от 0 до 2n - 1. Значение f(x) считается по формуле , где значение bit(i) равно единице, если в двоичном представлении числа x в i-ой позиции стоит 1, или нулю в противном случае.

Например, если n = 4, а x = 11 (11 = 20 + 21 + 23), тогда f(x) = a0 + a1 + a3.

Помогите Валере найти максимум функции f(x) среди всех x, для которых выполняется неравенство: 0 ≤ x ≤ m.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество элементов массива. В следующей строке через пробел записаны n целых чисел a0, a1, ..., an - 1 (0 ≤ ai ≤ 104) — элементы массива a.

В третьей строке записана последовательность нулей и единиц без пробелов s0s1... sn - 1 — двоичное представление числа m. Число m равно .

Выходные данные

Выведите единственное целое число — максимальное значение функции f(x) среди всех .

Примечание

В первом тестовом примере m = 20 = 1, f(0) = 0, f(1) = a0 = 3.

Во втором примере m = 20 + 21 + 23 = 11, а максимальное значение функции равно f(5) = a0 + a2 = 17 + 10 = 27.

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. Ксюша и Хемминг

математика реализация *1900

Ксюша — начинающий программист. Сегодня на паре по программированию она изучила, что такое расстояние Хемминга.

Расстоянием Хемминга между двумя строками s = s1s2... sn и t = t1t2... tn равной длины n называется величина . Запись [si ≠ ti] является нотацией Айверсона и обозначает: если si ≠ ti — единицу, иначе — ноль.

Теперь Ксюша хочет посчитать расстояние Хемминга между двумя длинными строками a и b. Первая строка a — это конкатенация n копий строки x, то есть . Вторая строка b — это конкатенация m копий строки y.

Помогите Ксюше, вычислите требуемое расстояние Хемминга по заданным n, x, m, y.

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 1012). Во второй строке записана непустая строка x. В третьей строке записана непустая строка y. Обе строки состоят из не более чем 106 строчных букв латинского алфавита.

Гарантируется, что строки a и b, полученные по входным данным, имеют одинаковую длину.

Выходные данные

Выведите единственное целое число — искомое расстояние Хемминга.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом тестовом примере строка a равна строке b и равна 100 буквам a. Так как строки равны, расстояние Хемминга между ними равно нулю.

Во втором тестовом примере у строк a и b различаются 3-ый, 5-ый, 6-ой, и 7-ой символы. Таким образом расстояние Хемминга равно 4.

В третьем тестовом примере строка a равна rzrrzr, а строка bazazaz. Строки отличаются во всех символах кроме 2-го, расстояние Хемминга между ними равно 5.

B. Перестановка

дп Конструктив математика *1400

Перестановкой p называется упорядоченный набор чисел p1,   p2,   ...,   pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Число n будем называть длиной перестановки p1,   p2,   ...,   pn.

У Семена есть целое положительное число n и целое неотрицательное число k такое, что 2k ≤ n. Помогите ему найти перестановку a длины 2n такую, что выполнено равенство: .

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 50000, 0 ≤ 2k ≤ n).

Выходные данные

Выведите 2n целых чисел a1, a2, ..., a2n — искомую перестановку a. Гарантируется, что решение существует. Если существует несколько решений, разрешается вывести любое.

Примечание

Под записью |x| следует понимать абсолютную величину или модуль числа x.

В первом примере |1 - 2| - |1 - 2| = 0.

Во втором примере |3 - 2| + |1 - 4| - |3 - 2 + 1 - 4| = 1 + 3 - 2 = 2.

В третьем примере |2 - 7| + |4 - 6| + |1 - 3| + |5 - 8| - |2 - 7 + 4 - 6 + 1 - 3 + 5 - 8| = 12 - 12 = 0.

C. Простое число

математика теория чисел *1900

У Семена есть простое число x и массив целых неотрицательных чисел a1, a2, ..., an.

Семен очень любит дроби. Сегодня он записал на листок число . После того, как Семен привел все дроби к общему знаменателю и сложил их, он получил дробь: , где число t равно xa1 + a2 + ... + an. Теперь Семен хочет сократить полученную дробь.

Помогите ему, найдите наибольший общий делитель s и t. Так как НОД может быть довольно большим, требуется найти лишь его остаток от деления на число 1000000007 (109 + 7).

Входные данные

В первой строке заданы два целых положительных числа n и x (1 ≤ n ≤ 105, 2 ≤ x ≤ 109) — размер массива и простое число.

Во второй строке заданы n целых чисел через пробел a1, a2, ..., an (0 ≤ a1 ≤ a2 ≤ ... ≤ an ≤ 109).

Выходные данные

Выведите единственное число — ответ на задачу по модулю 1000000007 (109 + 7).

Примечание

В первом примере . Таким образом, ответ на задачу 8.

В втором примере . Ответ на задачу 27, так как 351 = 13·27, 729 = 27·27.

В третьем примере ответ на задачу 1073741824 mod 1000000007 = 73741817.

В четвертом примере . Таким образом, ответ на задачу 1.

D. Пара чисел

Бинарный поиск математика Перебор Структуры данных *2000

У Семена есть массив a1, a2, ..., an, состоящий из n целых положительных чисел. Сегодня Семен попросил вас найти пару целых чисел l, r (1 ≤ l ≤ r ≤ n) такую, что выполнены следующие условия:

  1. существует целое число j (l ≤ j ≤ r), такое что все числа al, al + 1, ..., ar нацело делятся на aj;
  2. величина r - l принимает максимально возможное значение среди всех пар, для которых верно условие 1;

Помогите Семену, найдите требуемую пару чисел (l, r). Если таких пар несколько, требуется найти все.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 3·105).

Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 106).

Выходные данные

В первой строке выведите два целых числа — сколько пар нашлось и максимальное значение r - l. Во второй строке выведите все значения l из оптимальных пар в порядке возрастания.

Примечание

В первом примере пара чисел подходящая, поскольку числа 6, 9, 3 делятся на 3.

Во втором примере все числа делятся на число 1.

В третьем примере все числа простые, поэтому условиям 1 и 2 удовлетворяют только пары чисел (1, 1), (2, 2), (3, 3), (4, 4), (5, 5).

B. Левко и перестановка

Конструктив математика теория чисел *1200

Левко очень любит перестановки чисел. Перестановкой длины n называется последовательность различных положительных целых чисел, каждое из которых не больше n.

Пусть запись gcd(a, b) обозначает наибольший общий делитель чисел a и b. Левко называет элемент pi перестановки p1, p2, ... , pn хорошим, если gcd(i, pi) > 1. Левко считает перестановку красивой, если у нее есть ровно k хороших элементов. К сожалению, он не знает ни одной красивой перестановки. Вам нужно помочь ему найти хотя бы одну.

Входные данные

В единственной строке записаны два целых числа n и k (1 ≤ n ≤ 105, 0 ≤ k ≤ n).

Выходные данные

В единственной строке выведите любую красивую перестановку или -1, если такой не существует.

Если существует несколько подходящих перестановок, разрешается вывести любую.

Примечание

В первом примере элементы 4 и 3 являются хорошими, потому что gcd(2, 4) = 2 > 1 и gcd(3, 3) = 3 > 1, а элементы 2 и 1 — нет, потому что gcd(1, 2) = 1 и gcd(4, 1) = 1. Так как хороших элементов ровно 2, перестановка является красивой.

Во втором примере не существует красивой перестановки.

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).

На второй доске полукони никогда не встретятся.

C. Сортировка вставками

дп математика реализация Структуры данных *1900

Петя — начинающий программист. Он уже освоил базовые возможности языка C++ и приступил к изучению алгоритмов. Первым алгоритмом, с которым он познакомился, стала сортировка вставками. Петя уже написал код, реализующий этот алгоритм и сортирующий по неубыванию заданный целочисленный ноль-индексированный массив a размера n.

for (int i = 1; i < n; i = i + 1)
{
int j = i;
while (j > 0 && a[j] < a[j - 1])
{
swap(a[j], a[j - 1]); // поменять местами элементы a[j] и a[j - 1]
j = j - 1;
}
}

Петя подает на вход этого алгоритма исключительно массивы, являющиеся перестановками чисел от 0 до n - 1. Он уже выбрал перестановку, которую хочет отсортировать, но решил предварительно поменять местами какие-то два её элемента. Петя хочет выбрать эти элементы таким образом, чтобы количество вызовов функции swap, выполняемых сортировкой, было минимальным. Помогите Пете определить, каким количеством способов можно выполнить обмен с соблюдением этого требования.

Гарантируется, что во входной перестановке всегда можно поменять местами два элемента таким образом, чтобы уменьшилось количество вызовов функции swap.

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 5000) — количество чисел в перестановке. Во второй строке содержатся n различных целых чисел от 0 до n - 1 включительно — сама перестановка.

Выходные данные

Выведите два целых числа: минимальное количество вызовов функции swap и количество таких пар (i, j), что обмен элементов входной перестановки с индексами i и j позволяет достичь этого минимального количества вызовов.

Примечание

В первом примере подходят пары (0, 3) и (0, 4).

Во втором примере подходят пары (0, 4), (1, 4), (2, 4) и (3, 4).

D. Ghd

математика Перебор Теория вероятностей *2900

Джон Доу предложил своей сестре Джейн Доу найти gcd некоторого набора чисел a.

Gcd — это целое положительное число g такое, что все числа из набора делятся на g нацело и не существует g' (g' > g), такого, что все числа набора делятся на g' нацело.

К сожалению, Джейн не смогла справиться с заданием и Джон предложил ей найти ghd того же набора чисел.

Ghd — это целое положительное число g такое, что не менее половины чисел из набора делятся на g нацело и не существует g' (g' > g), такого, что не менее половины чисел из набора делятся на g' нацело.

С таким заданием Джейн справилась всего за два часа. Попробуйте и вы.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106) — количество чисел в наборе a. Во второй строке через пробел записаны целые числа a1, a2, ..., an (1 ≤ ai ≤ 1012). Обратите внимание, среди чисел могут быть одинаковые.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать спецификатор %I64d.

Выходные данные

Выведите единственное число g — ghd набора a.

E. Дима и волшебная гитара

математика Перебор реализация *2200

Дима очень любит Инну, поэтому он решил написать ей песню. У Димы есть волшебная гитара, у которой n струн и m ладов. Звукоизвлечение на гитаре происходит следующим образом: чтобы сыграть ноту, нужно зажать одну из струн на одном из ладов, а затем дернуть эту струну. Обозначим ноту, которую играет Димина гитара, если на ней сыграть i-ую струну зажатую на j-ом ладу, переменной aij. Известно, что Димина гитара может играть k различных нот, при этом вполне вероятно, что некоторые ноты можно сыграть несколькими способами. Другими словами, возможно, aij = apq при (i, j) ≠ (p, q).

Дима уже написал песню — последовательность из s нот. Чтобы сыграть песню нужно последовательно сыграть ноты из песни на гитаре, причем каждую ноту можно играть любым из доступных способов. Дима понял, что есть очень много способов сыграть песню, и хочет сыграть ее так, чтобы она выглядела как можно сложнее (выкобеЙнивается).

Будем обозначать способ сыграть песню последовательностью пар (xi, yi) (1 ≤ i ≤ s) таких, что xi-ая струна на yi-ом ладу издает i-ую ноту песни. Сложностью перехода между парами (x1, y1) и (x2, y2) назовем значение + . Сложностью способа сыграть песню назовем максимальную из сложностей переходов между соседними парами в способе.

Помогите Диме определить максимально возможную сложность способа сыграть его песню! Пусть парень выглядит круто!

Входные данные

Первая строка входных данных содержит четыре целых числа n, m, k и s (1 ≤ n, m ≤ 2000, 1 ≤ k ≤ 9, 2 ≤ s ≤ 105).

Далее следует n строк по m целых чисел aij (1 ≤ aij ≤ k) в каждой. Число в строке номер i в столбце j (aij) означает ноту, которую издает гитара на i-ой струне на j-ом ладу.

Последняя строка входных данных содержит s чисел qi (1 ≤ qi ≤ k) — последовательность нот из песни.

Выходные данные

В единственной строке выведите одно число — максимально возможную сложность песни.

B. Валера и олимпиада

Конструктив математика реализация *1400

Валера очень любит участвовать в олимпиадах. Особенно в олимпиадах по программированию. Сегодня он поучаствовал в олимпиаде в составе команды, состоящей из n студентов (включая Валеру). Соревнование было индивидуальное, поэтому каждый студент в команде решал задачи индивидуально.

После олимпиады Валера заинтересовался результатами участников. Ему удалось выяснить, что:

  • каждый студент в команде набрал не менее l очков и не более r очков;
  • в сумме все участники команды набрали ровно sall очков;
  • сумма очков тех k членов команды, которые набрали наибольшее количество очков, равна sk; более формально, если a1, a2, ..., an — очки, которые получили студенты команды, в невозрастающем порядке (a1 ≥ a2 ≥ ... ≥ an), то sk = a1 + a2 + ... + ak.

Однако Валера не узнал, сколько в точности очков набрал каждый из n студентов. Валера попросил вас восстановить любое распределение очков между студентами команды, удовлетворяющее всем перечисленным выше условиям.

Входные данные

В первой строке входных данных задано ровно шесть целых чисел n, k, l, r, sall, sk (1 ≤ n, k, l, r ≤ 1000; l ≤ r; k ≤ n; 1 ≤ sk ≤ sall ≤ 106).

Гарантируется, что входные данные таковы, что ответ существует.

Выходные данные

Выведите ровно n целых чисел a1, a2, ..., an — количество баллов, набранное каждым из студентов. Если существует несколько решений, разрешается вывести любое. Выводить распределение баллов можно в любом порядке.

D. Расписание занятий

дп Комбинаторика математика *2300

В свободное от компьютерных игр время Петя ходит в университет на занятия. Каждый день занятия на факультете у Пети состоят из двух пар. Этаж на котором проходят занятия у Пети, представляет из себя длинный коридор, вдоль которого расположены M аудиторий, пронумерованных от 1 до M.

Поток, на котором учится Петя, разбит на N групп. Недавно, Петя заметил, что расписание занятий у этих групп обладает следующей особенностью: номер аудитории, в которой проходит первое занятие у какой-то группы не превосходит номера аудитории для второго занятия этой группы.

Как-то раз, Петя решил посчитать, сколькими способами можно составить расписание занятий для всех групп. Расписание — это набор из 2N чисел: для каждой группы номер аудитории для первого занятия, и номер аудитории для второго занятия. К сожалению, он быстро сбился со счета, и решил, считать только расписания, удовлетворяющие следующим условиям:

1) На первом занятии в i-ой аудитории должно находиться ровно Xi групп.

2) В i-ой аудитории может поместиться не более чем Yi групп.

Помогите Пете посчитать количество расписаний удовлетворяющих всем этим условиям. Так как и таких расписаний может быть много, выведите ответ по модулю 109 + 7.

Входные данные

В первой строке записано одно целое число M (1 ≤ M ≤ 100) — количество аудиторий.

Во второй строке, через пробел, записаны M целых чисел — Xi (0 ≤ Xi ≤ 100) количество групп, находящихся в i-ой аудитории во время первого занятия.

Во третьей строке, через пробел, записаны M целых чисел — Yi (0 ≤ Yi ≤ 100) максимальное количество групп, которые могут одновременно находится в i - ой аудитории.

Гарантируется, что все Xi ≤ Yi, и что сумма всех Xi положительна и не превосходит 1000.

Выходные данные

В единственной строке выведите ответ на задачу по модулю 109 + 7.

Примечание

Во втором тесте из примера первое и второе занятия у каждой группы должны проходить в одной и той же аудитории, поэтому расписания будут отличаться только перестановкой номеров этих аудиторий для каждой группы, то есть 3! = 6.

A. Ладья, слон и король

графы кратчайшие пути математика *1100

Маленький Петя учится играть в шахматы. Он уже выучил, как перемещаются король, ладья и слон. Напомним и вам правила перемещения этих шахматных фигур. Шахматная доска представляет собой 64 квадратных поля, выстроенных в таблицу 8 × 8. Поле обозначается парой целых чисел (r, c) — номером строки и номером столбца (в классическом варианте столбцы обозначаются буквами). Каждая фигура занимает ровно одно поле. Ход состоит в перемещении фигуры, причем фигуры перемещаются по следующим правилам:

  • Ладья за один ход перемещается на произвольное количество клеток по горизонтали либо по вертикали.
  • Слон за один ход перемещается на произвольное количество клеток по диагонали.
  • Король за один ход перемещается на одно поле в любом направлении — горизонтально, вертикально, или по диагонали.
Ходы шахматных фигур

Петя раздумывает над следующей задачей: за какое наименьшее количество ходов каждая из этих фигур может переместиться из поля (r1, c1) на поле (r2, c2)? При этом считается, что других фигур, кроме данной, на доске нет. Помогите ему в решении этой задачи.

Входные данные

Во входных данных записаны четыре целых числа r1, c1, r2, c2 (1 ≤ r1, c1, r2, c2 ≤ 8) — координаты стартового и конечного полей. Стартовое поле не совпадает с конечным.

Можете считать, что строки шахматного поля нумеруются сверху вниз от 1 до 8, а столбцы слева направо от 1 до 8.

Выходные данные

Выведите три целых числа через пробел: наименьшее количество ходов, требуемых ладье, слону и королю (в таком порядке) для того, чтобы переместиться из поля (r1, c1) на поле (r2, c2). В случае, если какая-то из фигур не может совершить такое перемещение, выведите вместо соответствующего числа 0.

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-периодичный.

B. Как лисица сыр делила

математика теория чисел *1300

Два жадных медвежонка нашли в лесу два куска сыра массами a и b грамм, соответственно. Медвежата настолько жадные, что готовы набить друг другу шишек за право обладания куском побольше. Подскакивает к ним лисица и говорит: «Погодите, медвежата, я могу помочь вам уравнять куски!» «Да ладно, как же ты это сделаешь?», — поинтересовались медвежата. «Очень просто — сказала лисица. — Если масса какого-то куска делится на два, то я могу откусить от него ровно половину и съесть. Если масса какого-то куска делится на три, то я могу откусить от него ровно две трети, а если масса делится на пять — то могу откусить и съесть четыре пятых. Вот немного пооткусываю, и уравняю куски».

Медвежата догадываются, что в предложении лисицы содержится какой-то подвох. Но в то же время они понимают, что самостоятельно не смогут сделать два куска одинаковыми. Поэтому медвежата согласились на ее предложение, но с одним условием: лисица должна уравнять куски как можно быстрее. Найдите минимальное количество описанных операций, которое потребуется лисице, чтобы уравнять куски.

Входные данные

В первой строке записаны два целых числа a и b, разделенные пробелом (1 ≤ a, b ≤ 109).

Выходные данные

В том случае, если лисица обманывает медвежат и никаким образом не сможет уравнять куски, то выведите -1. Иначе выведите искомое наименьшее количество операций. В случае, если куски сыра изначально равны, искомое количество равно 0.

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.

C. Весело смотреть на фейерверки

дп математика Структуры данных *2100

На главной улице города устраивают фестиваль. Улица поделена на n участков, пронумерованных от 1 до n слева направо. Расстояние от любого участка до соседнего равно 1.

На фестивале запустят m фейерверков. При этом, i-ый (1 ≤ i ≤ m) запуск придется на время ti в участке ai. Если вы будете в участке x (1 ≤ x ≤ n) во время i-ого запуска, вы получите счастья в размере bi - |ai - x| (обратите внимание, что значение счастья может быть отрицательным).

За единичный промежуток времени вы можете пройти до d единиц длины, но сходить с главной улицы запрещено. В начальный момент времени (момент времени 1) вы можете оказаться на произвольном участке, ваша цель — максимизировать сумму полученного от просмотра фейерверков счастья. Найдите наибольшее суммарное счастье.

Обратите внимание, что в одно время могут запускаться два или несколько фейерверков.

Входные данные

В первой строке записано три целых числа n, m, d (1 ≤ n ≤ 150000; 1 ≤ m ≤ 300; 1 ≤ d ≤ n).

В каждой из следующих m строк записаны целые числа ai, bi, ti (1 ≤ ai ≤ n; 1 ≤ bi ≤ 109; 1 ≤ ti ≤ 109). В i-ой строке записано описание i-ого запуска.

Гарантируется, что условие ti ≤ ti + 1 (1 ≤ i < m) будет удовлетворено.

Выходные данные

Выведите единственное целое число — максимальную сумму счастья, которую можно получить от просмотра всех фейерверков.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

B. Весело составлять последовательности

Бинарный поиск математика реализация *1600

Определим S(n) для положительного целого числа n следующим образом: количество цифр в десятичной записи числа n. Например, S(893) = 3, S(114514) = 6.

Вы хотите составить последовательность из целых чисел, следующих друг за другом, начиная с числа m (m, m + 1, ...). Но для того, чтобы добавить в последовательность число n, надо заплатить S(nk.

Вы можете потратить w, при этом последовательность необходимо сделать как можно длиннее. Напишите программу, сообщающую максимальную длину последовательности.

Входные данные

В первой строке записано три целых числа w (1 ≤ w ≤ 1016), m (1 ≤ m ≤ 1016), k (1 ≤ k ≤ 109).

Пожалуйста, не используйте спецификатор %lld для чтения и записи 64-битных целых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В первой строке выведите целое число — ответ на задачу.

A. Делимое на семь

математика теория чисел *1600

Вам задано число a, которое по счастливой случайности содержит в своей десятичной записи цифры 1, 6, 8, 9. Переставьте цифры его десятичной записи таким образом, чтобы полученное число делилось на 7.

Число a не содержит лидирующих нулей и обязательно содержит цифры 1, 6, 8, 9 (также оно может содержать и другие цифры). Получаемое число также не должно содержать лидирующих нулей.

Входные данные

В первой строке записано целое положительное число a в десятичной системе счисления. Запись числа a гарантированно содержит цифры: 1, 6, 8, 9. Число a не содержит лидирующих нулей. Число a содержит в своей десятичной записи не менее 4 и не более 106 символов.

Выходные данные

Выведите число в десятичной системе счисления без лидирующих нулей — результат перестановки.

Если невозможно переставить цифры числа a требуемым образом, выведите 0.

E. Красно-черное дерево

дп математика реализация *3000

Задано взвешенное дерево, состоящее из n вершин. Каждая вершина дерева покрашена либо в черный цвет, либо в красный. Красно-черное дерево называется красивым, если для любой его вершины найдется черная вершина, расстояние до которой не более x.

Расстоянием между двумя вершинами называется кратчайший путь между ними.

Вам задано красно-черное дерево. Требуется сделать его красивым за минимальное количество операций обмена цветом. За одну операцию обмена цветом разрешается выбрать две вершины разного цвета и каждую из них перекрасить в другой цвет. Другими словами, если выбрана красная вершина p и черная вершина q, за одну операцию разрешается перекрасить p в черный цвет, а q в красный.

Выведите минимальное количество требуемых операций.

Входные данные

В первой строке записано два целых числа n и x (2 ≤ n ≤ 500; 1 ≤ x ≤ 109). Следующая строка содержит n целых чисел, каждое из которых либо нуль, либо единица. Если i-ое число равно 1, то вершина i дерева — черная, иначе вершина i — красная. В следующих n - 1 строках записаны ребра дерева. В j-ой строке записаны целые числа uj vj wj (1 ≤ uj, vj ≤ nuj ≠ vj; 1 ≤ wj ≤ 109), которые обозначают, что в дереве есть ребро веса wj между вершинами vj и uj.

Считайте вершины дерева пронумерованными от 1 до n.

Выходные данные

Выведите единственное целое число — минимальное количество требуемых операций обмена.

Если получить красивое дерево невозможно ни за какое количество операций, выведите -1.

A. Рычаг

математика реализация *900

Задано описание рычага в виде строки s. Обозначим длину строки записью |s|, тогда рычаг имеет вид перекладины с грузами длины |s| - 1 с ровно одной точкой опоры. Будем считать, что перекладина представляет собой отрезок на оси Ox между точками 0 и |s| - 1.

Ниже приведена расшифровка описания рычага.

  • Если i-ый символ строки равен «^» — это значит, что в координате i под перекладиной находится точка опоры.
  • Если i-ый символ строки равен «=» — это значит, что в координате i на перекладине ничего не лежит.
  • Если i-ый символ строки равен цифре c (1-9) — это значит, что в координате i на перекладине лежит груз массы c.

Ваша задача — по описанию рычага вывести, будет он находиться в состоянии равновесия или нет. Считайте, что перекладина ничего не весит. Считайте, что изначально перекладина находится в равновесии, далее на нее одновременно кладут все грузы. После этого перекладина, либо отклоняется влево, либо отклоняется вправо, либо будет находиться в состоянии баланса.

Входные данные

В первой строке задано описание рычага — непустая строка s (3 ≤ |s| ≤ 106), состоящая из цифр (1-9) и символов «^» и «=». Гарантируется, что строка содержит ровно один символ «^». Гарантируется, что точка опоры рычага не находится ни в одном из концов перекладины рычага.

Для решения задачи может понадобиться 64-битый целочисленный тип данных. Пожалуйста, не забудьте использовать его в программе.

Выходные данные

Выведите «left» — если заданный рычаг отклонится влево, «right» — если он отклонится вправо и «balance» — если он будет находиться в состоянии равновесия.

Примечание

Для решения задачи полезно ознакомиться с устройством рычага по ссылке: http://ru.wikipedia.org/wiki/Рычаг.

Картинки к примерам из условия:

B. Ладья, Конь... и снова Конь

математика Перебор реализация *1200

На стандартной шахматной доске 8 × 8 находятся две фигуры — ладья и конь. Известно, в каких позициях они расположены. Гарантируется, что ни одна из них не бьет другую.

Ваша задача — найти количество способов поставить на эту доску еще одного коня так, чтобы ни одна из трех фигур на доске не била никакую другую. Новую фигуру разрешается ставить только на свободную клетку.

Входные данные

Первая строка входных данных содержит описание положения ладьи на доске, которое представляет собой строку длины 2, где первый символ — это строчная буква латинского алфавита от a до h, а второй символ — цифра от 1 до 8. Вторая строка содержит описание положения коня в аналогичном формате. Гарантируется, что позиции не совпадают.

Выходные данные

Выведите одно число — искомое количество способов.

D. Сережа и кинотеатр

Комбинаторика математика *2500

Зал кинотеатра в городе, в котором живет Сережа, представляет собой n сидений, выстроенных в один ряд перед большим экраном. Слева и справа от каждого сиденья имеется отверстие для личных вещей. При этом у любых двух соседних сидений имеется ровно одно общее отверстие. На рисунке ниже изображено как расположены сиденья и отверстия для n = 4.

Сегодня состоится премьера фильма «Твердый Каштан». Билеты на все места в кинотеатре раскуплены. На входе в зал кинотеатра стоит очень строгий контролер, поэтому все n человек будут заходить в зал по очереди. Как только человек заходит в зал кинотеатра, он сразу (мгновенно) садится на свое место и занимает все свободные отверстия для вещей слева и справа от него. Если же свободных отверстий не оказалось, то человек очень сильно расстараивается и уходит.

Люди очень непостоянны, поэтому сложно предугадать, в каком порядке будут заходить зрители в зал. Для некоторых мест Сережа знает, каким по номеру зайдет в зал зритель, сидящий на этом месте. Для остальных — порядок может быть любой.

Сережу, как программиста и математика, очень волнует вопрос: сколько существует порядков захода людей в зал таких, что никто не будет расстроен. Так как это число может быть достаточно большим, выведите его по модулю 1000000007 (109 + 7).

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 105). Вторая строка содержит n целых чисел, i-ое число — либо каким по номеру будет человек, у которого билет на i-ое место, либо 0, если его порядковый номер не известен. Гарантируется, что все положительные числа во второй строке будут различны.

Считайте, что порядковый номер зашедшего в зал — это уникальное целое число от 1 до n. Человек, имеющий порядковый номер 1, зайдет первым в зал, человек, имеющий порядковый номер 2, зайдет вторым в зал и так далее.

Выходные данные

В единственную строку выведите остаток от деления ответа на число 1000000007 (109 + 7).

B. Разрушители чисел

Бинарный поиск математика *2000

Артур и Александр — разрушители чисел. Сегодня у них соревнование.

Артур взял четверку целых чисел a, b, w, x (0 ≤ b < w, 0 < x < w), а Александр взял целое число с. Артур и Александр используют разные подходы к разрушению чисел. Александр — простой парень, каждую секунду Александр вычитает из своего числа единицу, то есть выполняет присвоение: c = c - 1. Артур — сложный мальчуган, каждую секунду Артур выполняет сложную операцию, описанную далее: если b ≥ x, выполнить присвоение, b = b - x, если же b < x последовательно выполнить два присвоения a = a - 1; b = w - (x - b).

Вам заданы числа a, b, w, x, c. Определите, через какое время Александр догонит Артура, если ребята начнут выполнять операции одновременно. Считается, что Александр догнал Артура, если c ≤ a.

Входные данные

В первой строке заданы целые числа a, b, w, x, c (1 ≤ a ≤ 2·109, 1 ≤ w ≤ 1000, 0 ≤ b < w, 0 < x < w, 1 ≤ c ≤ 2·109).

Выходные данные

Выведите единственное целое число — минимальное время в секундах, через которое Александр догонит Артура. Можно доказать, что в ограничениях задачи описанное всегда случится.

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).

C. Медведь и простые числа

Бинарный поиск дп математика Перебор реализация Структуры данных теория чисел *1700

Недавно медведь начал изучать структуры данных и столкнулся со следующей задачей.

Задана последовательность целых чисел x1, x2, ..., xn длины n и m запросов, каждый из которых характеризуется двумя целыми числами li, ri. Обозначим за f(p) — количество таких индексов k, что xk делится на p. Ответом на запрос li, ri является сумма: , где S(li, ri) — множество простых чисел из отрезка [li, ri] (обе границы включаются в отрезок).

Помогите медведю справиться с этой задачей.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106). Во второй строке записаны n целых чисел x1, x2, ..., xn (2 ≤ xi ≤ 107). Числа не обязательно различные.

В третьей строке записано целое число m (1 ≤ m ≤ 50000). В каждой из m следующих строк записана пара целых чисел через пробел li и ri (2 ≤ li ≤ ri ≤ 2·109) — числа, характеризующие текущий запрос.

Выходные данные

Выведите m целых чисел — ответы на запросы в порядке появления запросов во входных данных.

Примечание

Рассмотрим первый тестовый пример. Всего в первом примере 3 запроса.

  1. Поступает первый запрос l = 2, r = 11. Нужно посчитать f(2) + f(3) + f(5) + f(7) + f(11) = 2 + 1 + 4 + 2 + 0 = 9.
  2. Поступает второй запрос l = 3, r = 12. Нужно посчитать f(3) + f(5) + f(7) + f(11) = 1 + 4 + 2 + 0 = 7.
  3. Поступает третий запрос l = 4, r = 4. Так как на этом промежутке нет простых чисел, то сумма равна 0.

E. Медведь в поле

математика матрицы *2300

В лесу, в котором проживает наш медведь, есть клетчатое поле. Клетчатое поле представляет собой квадратную таблицу n × n, строки которой пронумерованы от 1 до n сверху вниз, а столбцы — от 1 до n слева направо. Обозначим клетку поля на пересечении строки x и столбца y записью (x, y). В каждой клетке поля растет малина, причем в клетке поля (x, y) растет x + y кустов малины.

Медведь вышел прогуляться по полю. В самом начале прогулки он имеет скорость (dx, dy). Далее медведь гуляет по полю ровно t секунд. Каждую секунду происходит следующее:

  • Предположим, что в текущий момент времени медведь находится в клетке (x, y).
  • Сначала медведь ест малину со всех кустов, которые находятся на текущей клетке. Поев малину с k кустов, медведь увеличивает каждую компоненту своей скорости на k. Другими словами, если до поедания k кустов малины его скорость была (dx, dy), то после поедания малины скорость становится равной (dx + k, dy + k).
  • Обозначим текущую скорость медведя (dx, dy) (она уже увеличена после предыдущего шага). Далее медведь переходит из клетки (x, y) в клетку (((x + dx - 1) mod n) + 1, ((y + dy - 1) mod n) + 1).
  • Далее в каждой ячейке поля вырастает по дополнительному кусту малины.

Ваша задача — предугадать медведя. Найдите, в какой клетке поля он будет находиться, если перед началом прогулки он стоял в клетке (sx, sy). Считайте, что на каждом кусте бесконечно много малины, и медведь никогда не сможет съесть ее всю.

Входные данные

В первой строке входных данных записаны шесть целых чисел, разделенных пробелом: n, sx, sy, dx, dy, t (1 ≤ n ≤ 109; 1 ≤ sx, sy ≤ n;  - 100 ≤ dx, dy ≤ 100; 0 ≤ t ≤ 1018).

Выходные данные

Выведите два целых числа — координаты клетки, в которой окажется медведь через t секунд.

Примечание

Операция a mod b обозначает взятие остатка от деления числа a на число b. Обратите внимание, что результат этой операции всегда не отрицательное число. Например, ( - 1) mod 3 = 2.

В первом примере перед первым ходом вектор скорости станет равным (3,4) и медведь окажется в клетке (4,1). Перед вторым ходом вектор скорости станет равным (9,10) и медведь окажется в клетке (3,1). Не забывайте, что на втором ходу количество кустов малины стало на единицу больше.

Во втором примере перед первым ходом вектор скорости станет равным (1,1) и медведь окажется в клетке (1,1). Перед вторым ходом вектор скорости станет равным (4,4) и медведь окажется в клетке (1,1). Не забывайте, что на втором ходу количество кустов малины стало на единицу больше.

B. Лиса и минимальный путь

битмаски графы Конструктив математика реализация *1900

Лисица Сиель хочет сделать задачку программистам на контест. Задача звучит так: «Дан простой неориентированный граф, состоящий из n вершин. Каждое его ребро имеет длину 1. Надо посчитать количество кратчайших путей между вершиной 1 и вершиной 2».

Как и все авторы, она хочет, чтобы некоторые из выходных данных были особенными: например, ее день рождения или количество ее друзей. Можете ли вы помочь ей составить такой тест для задачи, чтобы ответ на него был ровно k?

Входные данные

В первой строке записано единственное целое число k (1 ≤ k ≤ 109).

Выходные данные

Выведите граф G с n вершинами (2 ≤ n ≤ 1000). Между вершинами графа 1 и 2 должно быть ровно k наикратчайших путей.

В первой строке должно быть записано целое число n. Затем надо вывести матрицу смежности графа G, состоящую из n строк и n столбцов. Каждый элемент матрицы должен равняться 'N' или 'Y'. Если Gij равняется 'Y', то граф G имеет ребро, соединяющее вершину i и вершину j. Считайте, что вершины графа пронумерованы от 1 до n.

Граф должен быть неориентированным и простым: должны выполняться условия Gii = 'N' и Gij = Gji. Также, должен быть хотя бы один путь между вершинами 1 и 2. Гарантируется, что ответ существует. Если есть несколько правильных ответов, можно вывести любой из них.

Примечание

В первом примере есть 2 кратчайших пути: 1-3-2 и 1-4-2.

Во втором примере есть 9 кратчайших путей: 1-3-6-2, 1-3-7-2, 1-3-8-2, 1-4-6-2, 1-4-7-2, 1-4-8-2, 1-5-6-2, 1-5-7-2, 1-5-8-2.

D. Лиса и идеальные наборы

математика *2700

Лиса Сиель изучает теорию чисел.

Она считает, что непустое множество S, состоящее из неотрицательных целых чисел, является идеальным тогда и только тогда, когда для любых (a может равняться b), . Где операция xor означает операцию исключающего ИЛИ (http://ru.wikipedia.org/wiki/Сложение_по_модулю_2).

Пожалуйста, вычислите количество идеальных множеств, состоящих из целых чисел, не превосходящих k. Ответ может получиться достаточно большим, поэтому выведите его по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано целое число k (0 ≤ k ≤ 109).

Выходные данные

Выведите единственное целое число — количество искомых множеств по модулю 1000000007 (109 + 7).

Примечание

В первом тестовом примере существует 2 таких множества: {0} и {0, 1}. Обратите внимание, что {1} не является идеальным множеством, так как 1 xor 1 = 0 и {1} не содержит нулей.

В четвертом примере существует 6 таких множеств: {0}, {0, 1}, {0, 2}, {0, 3}, {0, 4} и {0, 1, 2, 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.

D. Кубическая планета

математика *1100

Чего только не встретишь в нашей Галактике! Вокруг икосаэдрической звезды вращается кубическая планета. Введем систему координат таким образом, чтобы ребра кубической планеты были параллельны осям координат, а две противоположные вершины лежали в точках (0, 0, 0) и (1, 1, 1). На планете живут две мухи. В данный момент они сидят в двух различных вершинах кубической планеты. Ваша задача — определить, видят ли они друг друга. Мухи видят друг друга, если занимаемые ими вершины принадлежат одной грани куба.

Входные данные

В первой строке записаны три целых числа (0 или 1) через пробел — координаты первой мухи, во второй строке аналогичным образом заданы координаты второй мухи.

Выходные данные

Выведите «YES» (без кавычек), если мухи видят друг друга, и «NO» (без кавычек) в противном случае.

A. Заблокированные точки

математика

Предположим, что у вас есть бесконечная двухмерная плоскость с определенной на ней декартовой системой координат. Некоторые целочисленные точки заблокированы, другие — нет. Две целочисленные точки A и B на этой плоскости являются 4-связными тогда и только тогда, когда:

  • Евклидово расстояние между A и B равняется одной единице и ни A, ни B не заблокированы;
  • или существует такая целочисленная точка C, что A 4-связна с C, а C 4-связна с B.

Теперь предположим, что плоскость не содержит заблокированных точек. Рассмотрим все целочисленные точки плоскости, у которых Евклидово расстояние от начала координат не более n, назовем такие точки особенными. Алиса хочет, чтобы выполнялось следующее свойство: не существует особенной точки, 4-связной с какой-либо не особенной точкой. Для достижения данного свойства, девушка может выбрать некоторые целочисленные точки на плоскости и заблокировать их. Какое минимальное количество точек ей надо выбрать?

Входные данные

В первой строке записано целое число n (0 ≤ n ≤ 4·107).

Выходные данные

Выведите единственное целое число — минимальное количество точек, которые надо заблокировать.

C. Еще одна последовательность чисел

Комбинаторика математика матрицы

Все знают, что такое ряд чисел Фибоначчи. Это последовательность, которую можно определить следующим рекуррентным соотношением:

F1 = 1, F2 = 2, Fi = Fi - 1 + Fi - 2 (i > 2).

Определим новую последовательность чисел Ai(k) следующей формулой:

Ai(k) = Fi × ik (i ≥ 1).

В этой задаче вам требуется посчитать следующую сумму: A1(k) + A2(k) + ... + An(k). Ответ может быть очень большим, поэтому выведите его по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано два целых числа через пробел n, k (1 ≤ n ≤ 1017; 1 ≤ k ≤ 40).

Выходные данные

Выведите единственное целое число — сумму первых n элементов последовательности Ai(k) по модулю 1000000007 (109 + 7).

B. Очень красивое число

математика

Учитель считает, что мы делаем большие успехи. Теперь нам даже дозволено пользоваться десятичной системой счисления вместо палочек. После контрольной Учитель обещал показать нам «очень красивое число». Но вот незадача! — забыл листочек с числом на кафедре.

Учитель помнит, что «очень красивое число» было строго положительным, целым, не содержало ведущих нулей, имело длину ровно p десятичных цифр, а если перенести последнюю цифру числа в его начало, то оно увеличится ровно в x раз. Также учитель утверждает, что среди всех таких чисел «очень красивое число» было наименьшим.

Путь до кафедры не близок, а учитель уже не молод. Но мы хорошо написали контрольную и заслужили право посмотреть на «очень красивое число». Помогите справедливости восторжествовать, найдите для нас «очень красивое число»!

Входные данные

В единственной строке записаны целые числа p, x (1 ≤ p ≤ 106, 1 ≤ x ≤ 9).

Выходные данные

Если Учитель ошибся, и такого числа не существует, нужно в единственной строке вывести «Impossible» (без кавычек). Иначе выведите «очень красивое число» без лидирующих нулей.

Примечание

Пример 1: 142857·5 = 714285.

Пример 2: Число, состоящее из одной цифры, при умножении на 2 не может остаться собой, значит ответ на тестовый пример — «Impossible».

D. Физкультура и булочки

математика Перебор реализация

Учитель физкультуры СУНЦа тоже немного математик. Больше всего в математике он любит арифметические прогрессии. Именно поэтому учитель хочет, чтобы ученики, выстроенные по неубыванию роста, образовывали арифметическую прогрессию.

Для достижения своей цели учитель физкультуры заказал очень много волшебных булочек из столовой. Волшебные булочки бывают двух типов: когда ученик съедает одну волшебную булочку первого типа, его рост увеличивается на единицу; когда ученик съедает одну волшебную булочку второго типа, его рост уменьшается на единицу. Учитель физкультуры, как и положено, заботится о здоровье своих учеников, поэтому не хочет, чтобы они ели очень много булочек. Точнее, он хочет, чтобы максимальное количество булочек, съеденных некоторым учеником, было минимально.

Помогите учителю, найдите, какое максимальное количество булочек, придется съесть некоторому ученику для достижения цели учителя. Кроме того, найдите один из возможных вариантов достижения цели, а именно: рост самого низкого ученика в итоге и шаг результирующей прогрессии.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 103) — количество учеников. Во второй строке через пробел записаны n целых чисел — рост всех учеников. Рост одного ученика — это целое число, по модулю не превосходящее 104.

Выходные данные

В первой строке выведите максимальное количество булочек, съеденных некоторым учеником для достижения цели учителя. Во второй строке через пробел выведите два целых числа — рост самого низкого ученика в итоге и шаг прогрессии. Обратите внимание, что шаг прогрессии — неотрицательное число.

Если существует несколько верных ответов, разрешается вывести любой.

Примечание

В первом тестовом примере учителю нужно действовать следующим способом:

  • не кормить 1-го ученика, его рост останется равным -3;
  • накормить 2-го ученика двумя булочками первого типа, его рост станет равным -2;
  • накормить 3-го ученика двумя булочками первого типа, его рост станет равным 0;
  • накормить 4-го ученика двумя булочками первого типа, его рост станет равным -1;
  • накормить 5-го ученика двумя булочками второго типа, его рост станет равным 1.

Итого, когда ученики встанут в шеренгу по неубыванию роста получится прогрессия: -3, -2, -1, 0, 1. Минимальный рост ученика в прогрессии равен -3, шаг прогрессии равен 1. Ученик, который съел больше всего булочек, съел две булочки. То есть максимальное количество булочек, съеденных одним учеником равно 2.

A. О количестве разложений на множители

Комбинаторика математика теория чисел

Задано целое число m в виде произведения целых чисел a1, a2, ... an . Требуется узнать, сколько существует различных разложений числа m в произведение n упорядоченных целых положительных чисел.

Разложение на n множителей, заданное во входных данных, также должно считаться в ответе. Поскольку ответ может быть очень большим, выведите его по модулю 1000000007 (109 + 7).

Входные данные

В первой строке задано целое положительное число n (1 ≤ n ≤ 500). Во второй строке через пробел заданы целые числа a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

В единственной строке выведите целое число k — количество различных разложений числа m на n упорядоченных множителей по модулю 1000000007 (109 + 7).

Примечание

Во втором примере, чтобы получить разложение числа 2, нужно чтобы одно любое число из трех было равно 2, а остальные равны 1.

В третьем примере возможные варианты разложения на упорядоченные множители — [7,5], [5,7], [1,35], [35,1].

Разложение целого положительного числа m на n упорядоченных множителей — это кортеж целых положительных чисел b = {b1, b2, ... bn}, такой что . Два разложения на упорядоченные множители b и c считаются различными, если существует индекс i, такой что bi ≠ ci.

B. О сумме дробей

математика теория чисел

Пусть

  • v(n) — наибольшее простое число, не превосходящее n;
  • u(n) — наименьшее простое, строго большее, чем n.

Найдите .

Входные данные

В первой строке задано целое число t (1 ≤ t ≤ 500) — количество тестов. В каждой из следующих t строк входных данных вводится целое число n (2 ≤ n ≤ 109).

Выходные данные

Выведите t строк: в i-й из них должен содержатся ответ на i-й тест в виде несократимой дроби «p/q», где p, q — целые числа, q > 0.

D. О сумме количества инверсий в перестановках

Комбинаторика математика

Вам дана перестановка p. Посчитайте суммарное количество инверсий во всех перестановках, лексикографически не больших данной.

Поскольку это число может быть очень большим, выведите его по модулю 1000000007 (109 + 7).

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 106) — длина перестановки. Во второй строке заданы n различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n).

Выходные данные

Выведите единственное число — ответ на задачу по модулю 1000000007 (109 + 7).

Примечание

Перестановкой p длины n называется последовательность, состоящая из n различных целых чисел, каждое из которых от 1 до n.

Инверсией перестановки p1, p2, ..., pn называется пара индексов (i, j), такая что i < j и pi > pj.

Перестановка a лексикографически не больше перестановки b, если a = b или существует такое число i, для которого выполняется логическое условие: И (ai < bi).

E. Об итерации одной известной функции

математика

Многие из вас, конечно, умеют считать φ(n) — количество целых положительных чисел, меньших либо равных n, которые взаимно просты с n. А что, если нужно посчитать φ(φ(...φ(n))), где функция φ берется k раз, а n задано в каноническом разложении на простые множители?

Посчитайте значение функции φ(φ(...φ(n))) для заданных n и k. Результат требуется вывести в каноническом разложении на простые множители.

Входные данные

В первой строке задается целое число m (1 ≤ m ≤ 105) — количество различных простых делителей, участвующих в разложении числа n.

В каждой из следующих m строк записана пара целых чисел pi, ai (2 ≤ pi ≤ 106; 1 ≤ ai ≤ 1017), разделенные пробелом, — очередной простой делитель числа n и степень, в которой он в него входит. Сумма всех ai не превосходит 1017. Простые делители во входных данных идут в строго возрастающем порядке.

В последней строке задано целое число k (1 ≤ k ≤ 1018).

Выходные данные

В первой строке выведите целое число w — количество различных простых делителей числа φ(φ(...φ(n))), где функция φ берется k раз.

В следующих w строках через пробел выведите пары целых чисел qi, bi (bi ≥ 1) — очередной простой делитель результата и степень, в которой он входит в результат. Числа qi должны идти в строго возрастающем порядке.

Примечание

О каноническом разложении числа на простые множители можно прочитать здесь: http://ru.wikipedia.org/wiki/Основная_теорема_арифметики.

О функции φ(n) можно прочитать здесь: http://ru.wikipedia.org/wiki/Функция_Эйлера.

B. О коррупции и числах

Конструктив математика реализация

Веселого берляндского абитуриента Алексея достала серая действительность, и он рьяно желает поступить в университет. Вузов нынче развелось очень много, поэтому глаза у Алексея разбегаются — ведь он еще не определился, какую профессию он хочет получить: в школе у него были плохие оценки по всем предметам, и только благодаря богатеньким родителям он смог получить аттестат.

Положение осложняется тем, что в каждом вузе определен размер добровольного пожертвования, которое новоявленный студент выплачивает при поступлении — ni берублей. При этом нельзя платить больше, чем ni, ведь тогда разница между выплаченной суммой и ni может быть расценена как взятка!

Каждый ректор носит фирменную одежду своего вуза. Поэтому в ее карманы не помещаются монеты номиналом больше, чем ri. Также ректор не носит в кармане монеты номиналом меньше li — ведь если все будут платить ему настолько мелкими монетами, то их скопится очень много, и карман порвется. Поэтому пожертвование можно выплачивать только монетами в x берублей, где li ≤ x ≤ ri (в Берляндии в обращении находятся монеты любого целого положительного номинала). При этом можно использовать монеты разных номиналов, а монеты одного и того же номинала можно использовать сколько угодно раз.

Алексей, впервые столкнувшись с такими порядками, был озадачен, ведь оказалось, что не во все вузы можно поступить! Алексей очень боится идти в армию (хоть он и давно хотел получить мундир зеленого цвета, но папа говорит, что в армии сына будут бить деды, а военные билеты в Берляндии не продаются), поэтому он хочет наверняка знать, в какие вузы он может поступить и поскорее выбрать свою альма матер.

Благодаря родителям, Алексей не ограничен в средствах и можно считать, что он имеет неограниченное количество монет каждого вида.

Другими словами, задано t запросов, каждый из которых содержит числа ni, li, ri. Для каждого запроса нужно ответить, можно ли набрать сумму ровно ni берублей, используя только монеты с целым номиналом от li до ri берублей. Можно использовать монеты разных номиналов. Монеты каждого номинала можно использовать сколько угодно раз.

Входные данные

В первой строке задано количество университетов t, (1 ≤ t ≤ 1000). В каждой из t следующих строк через пробел заданы три целых числа: ni, li, ri (1 ≤ ni, li, ri ≤ 109li ≤ ri).

Выходные данные

Для каждого запроса выведите на отдельной строке: «Yes», если Алексей может в него поступить или «No» в противном случае.

Примечание

Взнос в первый вуз можно оплатить двумя монетами: по одной номиналом 2 и 3 берубля. Взнос во второй университет оплатить не получится.

A. Арбуз

математика Перебор *800

В один из жарких летних дней Петя и его друг Вася решили купить арбуз. Они выбрали самый большой и самый спелый, на их взгляд. После недолгой процедуры взвешивания весы показали w килограмм. Поспешно прибежав домой, изнемогая от жажды, ребята начали делить приобретенную ягоду, однако перед ними встала нелегкая задача. Петя и Вася являются большими поклонниками четных чисел, поэтому хотят поделить арбуз так, чтобы доля каждого весила именно четное число килограмм, при этом не обязательно, чтобы доли были равными по величине. Ребята очень сильно устали и хотят скорее приступить к трапезе, поэтому Вы должны подсказать им, удастся ли поделить арбуз, учитывая их пожелание. Разумеется, каждому должен достаться кусок положительного веса.

Входные данные

В первой и единственной строке входных данных записано целое число w (1 ≤ w ≤ 100) — вес купленного ребятами арбуза.

Выходные данные

Выведите YES, если ребята смогут поделить арбуз на две части, каждая из которых весит четное число килограмм, и NO в противном случае.

Примечание

Например, ребята могут поделить арбуз на две части размерами 2 и 6 килограммов соответственно (другой вариант — две части 4 и 4 килограмма).

A. Определите цвет

геометрия Конструктив математика реализация *1300

Недавно в результате боевых действий была повреждена главная достопримечательность Берляндии — волшебные часы. Пушечные ядра пробили несколько дырок в часах, поэтому жители обеспокоены ремонтом. Волшебные часы можно представить в виде бесконечной плоскости с декартовой системой координат, где начало координат соответствует центру часов. Часы были покрашены в два цвета, как показано на рисунке:

На рисунке показана лишь центральная часть часов. Эта раскраска продолжается до бесконечности естественным образом.

Ядра можно считать точками на плоскости. Требуется определить цвет области, которая была повреждена заданным ядром.

Нужно считать, что все точки, которые находятся на границе одной из областей, покрашены в черный цвет.

Входные данные

В первой и единственной строке записано два целых числа x и y — координаты дырки, пробитой ядром в часах. Каждое из чисел x и y не превосходит 1000 по модулю.

Выходные данные

Вывести искомый цвет.

Нужно считать, что все точки, расстояние от которых до начала координат целочисленное, покрашены в черный цвет.

B. Перекрашивания

математика *1600

Дана шахматная доска размером n × m. На нулевой минуте мы перекрашиваем все черные клетки в цвет 0. На i-ой минуте мы перекрашиваем в цвет i все такие исходно черные клетки, у которых есть ровно четыре соседних по углу клетки, покрашенные в данный момент в цвет i - 1 (все такие клетки перекрашиваются одновременно). Этот процесс продолжается до бесконечности. Требуется определить, как много клеток мы перекрашивали ровно x раз.

Нужно считать, что левая верхняя клетка доски всегда черная. Две клетки называются соседними по углу, если они имеют ровно одну общую точку.

Входные данные

В первой строке записаны целые числа n и m (1 ≤ n, m ≤ 5000). Во второй строке записано целое число x (1 ≤ x ≤ 109).

Выходные данные

Вывести сколько клеток доски будет перекрашено ровно x раз.

C. Берляндская площадь

математика реализация *2300

В прошлом году в Берляндии была построена самая большая площадь в мире. Известно, что площадь можно представить как бесконечную плоскость с введенной декартовой системой координат. На этой площади было нарисовано два множества концентрических окружностей. Назовем (K, z)-множеством набор концентрических окружностей с радиусами 1, 2, ..., K и с центром в точке (z, 0). Так, на площади были нарисованы (N, x)-множество и (M, y)-множество. Требуется определить, на сколько частей эти множества поделили площадь.

Входные данные

В первой строке записаны целые числа N, x, M, y. (1 ≤ N, M ≤ 100000,  - 100000 ≤ x, y ≤ 100000, x ≠ y).

Выходные данные

Вывести искомое количество частей.

Примечание

Картинка к третьему примеру:

D. Интересная последовательность

математика *2600

Еще давным-давно учеными Берляндии было замечено, что окружающий их мир зависит от численности населения Берляндии. Благодаря многолетним исследованиям в этой области, ученым удалось выяснить, что летосчисление Берляндии начинается с того момента, когда первые 2 человека пришли на эту землю (считается, что это было в первый год). Через один берляндский год после начала исчисления население составляло уже 13 человек. А вот в следующие годы проследить количество людей в стране было крайне трудной задачей, но все же удалось выяснить, что если di — количество людей в Берляндии в i-ый год, то либо di = 12di - 2, либо di = 13di - 1 - 12di - 2. Естественно, никому сейчас неизвестно сколько жителей в Берляндии, но зато теперь можно сказать, мог ли быть год, в который количество жителей в стране было ровно A. Именно это мы и просим Вас определить. Также, если такое возможно, то нужно определить, в какие годы это могло быть (от начала Берляндского летосчисления). Предположим, что это могло быть в годы a1, a2, ..., ak. Тогда требуется определить, сколько еще жителей могло быть в стране в эти годы, не считая вариант A. Смотрите примеры для дальнейшего объяснения.

Входные данные

В первой строке записано целое число A (1 ≤ A < 10300). Гарантируется, что число не содержит лидирующих нулей.

Выходные данные

В первую строку выходного файлы выведите YES, если мог быть год, в который количество жителей в стране стало ровно A, иначе выведите NO.

Если ответ YES, то далее необходимо вывести число k — количество годов, в которых население могло быть ровно A. В следующей строке нужно вывести через пробел ровно k чисел — a1, a2, ..., ak. Эти числа должны быть выведены в порядке возрастания.

В следующей строке нужно вывести число p — сколько вариантов количества жителей могло быть в годы a1, a2, ..., ak, не считая вариант A. В следующих p строках нужно вывести по одному числу в каждой — искомое количество жителей. Эти числа тоже должны идти в порядке возрастания.

Если какое-то из чисел (или оба) k или p превосходит 1000, то нужно выводить вместо него 1000 и лишь первые 1000 возможных вариантов ответа по возрастанию.

Числа не должны содержать лидирующие нули.

C. Инна и гигантская матрица конфет

математика реализация *1500

Инна и Дима решили удивить Сережу и принесли воистину гигантскую матрицу конфет, большую даже для Сережи! Для удобства пронумеруем строки гигантской матрицы от 1 до n сверху вниз, а столбцы — от 1 до m слева направо. Ячейку на пересечении i-й строки и j-го столбца будем обозначать (i, j). Как и полагается, в некоторых ячейках гигантской матрицы конфет лежат конфеты. Всего в матрице p конфет: k-я конфета лежит в ячейке (xk, yk).

Время подходило к обеду, и Инна уже собиралась скушать p своих любимых сладостей из матрицы, как вдруг Сережа (по лишь ему одному известной причине) x раз повернул матрицу по часовой стрелке на 90 градусов, затем y раз выполнил горизонтальный поворот матрицы, а затем z раз повернул матрицу против часовой стрелки на 90 градусов. На рисунке ниже показано, как именно происходят повороты матрицы.

Инна очень сильно расстроилась, но тут Дима понял две вещи: конфеты не пострадали, и он помнит, в каких ячейках лежали любимые сладости Инны до странных действий Сережи. Помогите ребятам отыскать новые координаты в матрице конфет после преобразований, сделанных Сережей!

Входные данные

Первая строка входных данных содержит шесть целых чисел n, m, x, y, z, p (1 ≤ n, m ≤ 109; 0 ≤ x, y, z ≤ 109; 1 ≤ p ≤ 105).

Каждая из следующих p строк содержит по два целых числа xk, yk (1 ≤ xk ≤ n; 1 ≤ yk ≤ m) — изначальные координаты k-й конфеты. Две конфеты могут лежать в одной и той же ячейке.

Выходные данные

Для каждой из p сладостей в отдельной строке через пробел выведите ее новые координаты.

Примечание

Горизонтальный поворот — это отражение матрицы вдоль вертикальной оси. Чтобы лучше понять, что такое горизонтальный поворот, посмотрите на пример для матрицы:


QWER REWQ
ASDF -> FDSA
ZXCV VCXZ

A. Ваня и карточки

математика реализация *800

Ваня любит играть. У него даже есть специальный набор карточек для игр. На каждой карточке записано единственное целое число. Число на карточке может быть положительным, отрицательным и даже может быть равно нулю. Единственное ограничение: число на каждой карточке по модулю не превышает x.

Наташе не очень нравится, когда Ваня долго играет, поэтому она спрятала все его карточки. Ваня расстроился и начал искать их, но нашел только n карточек. Ваня любит баланс — ему хочется, чтобы сумма на всех найденных карточках была равна нулю. С другой стороны, он очень устал искать карточки. Помогите мальчику, скажите: какое минимальное количество карточек ему еще придется найти, чтобы сумма на всех найденных карточках была равна нулю?

Можете считать, что изначально у Вани было бесконечное количество карточек с каждым числом от  - x до x.

Входные данные

В первой строке записано два целых числа: n (1 ≤ n ≤ 1000) — количество уже найденных карточек, и x (1 ≤ x ≤ 1000) — максимальный модуль числа на карточке. Во второй строке через пробел перечислены n целых чисел — карточки с числами, которые удалось найти Ване. Гарантируется, что числа не превышают по модулю x.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом примере Ване предстоит найти одну карточку с числом -2.

Во втором примере Ваня должен найти две карточки с числом 2. Найти одну карточку у него никак не получится, так как числа на потерянных карточках не превосходят по модулю 3.

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 раундам.

E. Олимпиада

математика *2500

Эта задача была изъята из контеста, так как ранее была использована на другом соревновании.

Входные данные
Выходные данные

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. Строго положительная матрица

графы математика *2200

У вас есть матрица a размера n × n. Строки матрицы пронумеруем от 1 до n сверху вниз, столбцы матрицы пронумеруем от 1 до n слева направо. Обозначим за aij элемент, находящийся пересечении i-й строки и j-го столбца.

Матрица a удовлетворяет следующим двум условиям:

  • для любых чисел i, j (1 ≤ i, j ≤ n) верно неравенство aij ≥ 0;
  • .

Матрица b называется строго положительной, если для любых чисел i, j (1 ≤ i, j ≤ n) верно неравенство bij > 0. Вам необходимо определить, существует ли такое целое число k ≥ 1, что матрица ak является строго положительной.

Входные данные

В первой строке задано целое число n (2 ≤ n ≤ 2000) — количество строк и столбцов в матрице a.

В следующих n строках задано описание строк матрицы a. В i-ой строке задано n целых неотрицательных чисел ai1, ai2, ..., ain (0 ≤ aij ≤ 50). Гарантируется, что .

Выходные данные

Если существует целое число k ≥ 1, такое, что матрица ak является строго положительной, выведите «YES» (без кавычек). Иначе, выведите «NO» (без кавычек).

B. Марафон

математика реализация *1500

Валера участвует в берляндском марафоне. Забег проходит на стадионе, который можно изобразить на плоскости как квадрат, левый нижний угол которого расположен в точке с координатами (0, 0), а длина стороны равна a метров. Стороны квадрата параллельны осям координат.

Так как дистанция марафона очень большая, Валере требуется дополнительное питание по ходу дистанции. Тренер подает Валере бутылку с питанием через каждые пройденные d метров. Известно, что Валера стартует в точке с координатами (0, 0) и бежит против часовой стрелки, то есть, когда Валера пробежит a метров, он окажется в точке с координатами (a, 0). Также известно, что дистанция забега равна nd + 0.5 метров.

Помогите тренеру Валеры определить, где он должен находиться, чтобы помочь своему подопечному. А именно, в точках с какими координатами окажется Валера, пробежав d, 2·d, ..., n·d метров.

Входные данные

В первой строке через пробел записаны два вещественных числа a и d (1 ≤ a, d ≤ 105), заданных с точностью до 4 десятичных знаков после точки. Число a обозначает длину стороны квадрата, описывающего стадион. Число d обозначает, что через каждые d метров Валера получает дополнительное питание.

Во второй строке записано целое число n (1 ≤ n ≤ 105), обозначающее, что Валере потребуется дополнительное питание n раз.

Выходные данные

Выведите n строк, в каждой из которых по два вещественных числа xi и yi, разделенных пробелом. Числа xi и yi в i-ой строке обозначают, что Валера окажется в точке с координатами (xi, yi) после того как пробежит i·d метров. Ваше решение будет считаться правильным, если абсолютная или относительная погрешность не будет превышать 10 - 4.

В этой задаче достаточно много выходных данных, пожалуйста, не используйте поток cout для вывода в этой задаче.

C. Необычное произведение

математика реализация *1600

Маленький Крис — большой любитель линейной алгебры. На этот раз в его домашней работе идет речь о необычном квадрате квадратной матрицы.

Скалярное произведение двух целочисленных векторов x и y размера n — это сумма произведений соответствующих координат этих векторов. Необычный квадрат квадратной матрицы A размера n × n определяется как сумма n скалярных произведений: i-е из них — это скалярное произведение вектора i-й строки на вектор i-го столбца матрицы A.

К счастью для Криса, все арифметические операции нужно производить в поле GF(2)! Это значит, что все операции (сложение, умножение) вычисляются по модулю 2. В таком случае можно считать, что матрица A двоичная: каждый элемент A равен либо 0, либо 1. Например, рассмотрим следующую матрицу A:

Необычный квадрат A в данном случае равен (1·1 + 1·0 + 1·1) + (0·1 + 1·1 + 1·0) + (1·1 + 0·1 + 0·0) = 0 + 1 + 1 = 0.

Однако, это еще далеко не вся домашняя работа. Крису требуется обработать q запросов; каждый запрос может быть одним из следующих:

  1. дан номер строки i, выполните флип всех элементов в i-й строке A;
  2. дан номер столбца i, выполните флип всех элементов в i-м столбце A;
  3. вычислите необычный квадрат A.

Применить операцию флип к элементу w — значит, изменить его на 1 - w (1 меняется на 0, а 0 меняется на 1).

По заданной матрице A и всем запросам, выведите ответы для каждого запроса третьего типа! Можете ли вы решить домашнюю работу Криса?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 1000), количество строк и столбов в матрице A. Следующие n строк описывают матрицу: i-я строка содержит n целых чисел через пробел, j-е число в этой строке aij (0 ≤ aij ≤ 1) — это элемент, стоящий на пересечении i-й строки и j-го столбца матрицы A.

В следующей строке записано целое число q (1 ≤ q ≤ 106), количество запросов. Каждая из следующих q строк описывает запрос. Описание запроса может иметь один из нижеперечисленных форматов:

  • 1 i — выполните флип всех элементов в i-й строке A;
  • 2 i — выполните флип всех элементов в i-м столбце A;
  • 3 — выведите необычный квадрат A.

Обратите внимание: входные и выходные данные имеют очень большой размер, не стоит использовать медленные методы ввода и вывода данных вашего языка программирования. Например, в языке C++ не стоит использовать потоки ввода и вывода (cin, cout).

Выходные данные

Пусть количество запросов третьего типа во входных данных равняется m. Выведите единственную строку s длины m, где i-й символ строки s является значением необычного квадрата по модулю 2 матрицы A для 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. Тройки Хемминга

математика реализация *2800

Маленькому Крису снится кошмар. Даже во снах все его мысли — только о математике.

Крису снятся m двоичных строк длины n, пронумерованных от 1 до m. Самое страшное то, что биты каждой из этих строк упорядочены либо по возрастанию, либо по убыванию. Например, Крис может видеть во сне следующие 4 строки длины 5:

Расстояние Хемминга H(a, b) между двумя строками a и b длины n — это количество позиций, на которых соответствующие символы в этих строках отличаются.

Крис считает, что любые три строки с различными номерами образуют тройку. Он убедил себя в том, что проснется, только если посчитает количество таких троек строк a, b, c, что сумма H(a, b) + H(b, c) + H(c, a) максимальна среди всех троек строк из приснившихся ему строк.

Помогите Крису проснуться от кошмара! Посчитайте для него это количество.

Входные данные

В первой строке содержатся два целых числа через пробел, n и m (1 ≤ n ≤ 109; 3 ≤ m ≤ 105), длина каждой двоичной строки и количество строк. В следующих m строках задано описание строк. В i-й строке содержатся два целых числа через пробел, si и fi (0 ≤ si ≤ 1; 1 ≤ fi ≤ n), — описание строки с номером i; пара чисел si, fi означает, что первые fi битов i-й строки равны si, а остальные n - fi битов равны 1 - si. Обратите внимание, что Крис может видеть также и одинаковые строки в своем сне.

Выходные данные

Выведите единственное целое число — количество таких троек строк среди данных, что сумма расстояний Хемминга между строками тройки максимальна среди всех троек строк из приснившихся ему строк.

A. Треугольник

геометрия математика Перебор реализация *1600

Есть прямоугольный треугольник с катетами длины a и b. Требуется расположить его на плоскости так, что ни одна из его сторон не параллельна осям координат, а вершины находятся в точках с целочисленными координатами, либо определить, что это невозможно.

Входные данные

В первой и единственной строке находятся два целых числа a, b (1 ≤ a, b ≤ 1000), разделенные одним пробелом.

Выходные данные

В первой строке выведите «YES» или «NO» (без кавычек) в зависимости от того, существует ли искомое расположение. Если оно существует, то в трех следующих строках выведите три пары целых чисел — координаты вершин треугольника, по одной паре в строке. Координаты должны быть целыми числами, не превышающими 109 по модулю.

C. Занимательный массив

Комбинаторика математика Перебор реализация *2500

Задан массив, состоящий из n целых чисел: a[1], a[2], ..., a[n]. Более того, заданы m запросов, каждый из которых характеризуется тремя числами li, ri, ki. Запрос li, ri, ki обозначает, что нужно добавить к каждому элементу a[j], где li ≤ j ≤ ri, число Ckij - li + ki.

Запись Cxy обозначает биномиальный коэффициент, или количество сочетаний из y элементов по x элементов.

Вам нужно выполнить последовательно все запросы и вывести, чему будут равны элементы массива в итоге, после всех запросов.

Входные данные

В первой строке заданы целые числа n, m (1 ≤ n, m ≤ 105).

Во второй строке задано n целых чисел a[1], a[2], ..., a[n] (0 ≤ ai ≤ 109) — изначальное состояние массива.

В следующих m строках заданы запросы в формате li, ri, ki — прибавить всем элементам отрезка li... ri число Ckij - li + ki (1 ≤ li ≤ ri ≤ n; 0 ≤ k ≤ 100).

Выходные данные

Выведите n целых чисел: i-е число — это значение элемента a[i] после всех запросов. Так как значения могут быть достаточно большими выводите их по модулю 1000000007 (109 + 7).

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-битный знаковый тип.

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-й день.

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 могут быть любые положительные целые числа.

A. Отбор

дп математика реализация *1500

Финалистами соревнований «Russian Code Cup» в 2214 году будут участники, ставшие победителями в одном из отборочных раундов.

Отборочные раунды делятся на основные и дополнительные. Каждый из основных отборочных раундов должен состоять из c задач, а победителями раунда считаются n человек, занявшие первые места в этом раунде. Каждый из дополнительных отборочных раундов состоит из d задач. Победителем дополнительного раунда становится один человек. Кроме этого, на финал без конкурса приглашаются k победителей финалов прошлых лет.

В результате всех отборочных раундов в финал должно пройти не менее n·m человек. Каким образом нужно организовать отборочные раунды, чтобы в результате всех отборочных раундов в финал прошли не менее n·m человек, а при этом суммарное количество использованных в раундах задач было как можно меньше?

Входные данные

Первая строка содержит два целых числа c и d (1 ≤ c, d ≤ 100) — количество задач в основном и дополнительном раундах соответственно. Вторая строка содержит два целых числа n и m (1 ≤ n, m ≤ 100). Наконец, третья строка содержит целое число k (1 ≤ k ≤ 100) — число заранее отобранных победителей.

Выходные данные

В первой строке выведите единственное целое число — минимальное количество задач, которое нужно подготовить членам жюри.

E. Квадратная таблица

Конструктив математика Теория вероятностей *2400

Во время прогулки на корабле после финала «Russian Code Cup» мальчик Миша придумал интересную игру. Он пообещал отдать свой квадрокоптер тому, кто первым составит такую прямоугольную таблицу размером n × m, состоящую из положительных чисел, что сумма квадратов чисел для каждой строки этой таблицы и для каждого столбца этой таблицы также будет квадратом.

Так как проверять вручную правильность таблицы сложно, Миша просит вас, чтобы каждое число таблицы не превышало 108.

Входные данные

В первой строке даны два целых числа n и m (1 ≤ n, m ≤ 100) — размеры таблицы.

Выходные данные

Выведите таблицу, удовлетворяющую условию: n строк по m целых чисел, разделенных пробелами. Если существует несколько правильных ответов, разрешается вывести любой. Гарантируется, что хотя бы один ответ на задачу существует.

D. Странный город

Конструктив математика *2300

Володя недавно побывал в необычном туристическом городе. В городе всего N достопримечательностей, и между любыми двумя из них есть двусторонняя дорога. На каждой дороге установлена некоторая цена (натуральное число), за которую турист может по ней проехать, и все такие цены различны. Но самое удивительное не в этом, а в том, что как бы турист не выбрал обзорный тур по городу (то есть цикл, который посещает ровно по одному разу каждую достопримечательность), заплатить ему придется всегда одну и ту же сумму! Володе интересно, а удастся ли вам придумать такую систему цен, причем так, чтобы максимальная из цен не превосходила 1000.

Входные данные

Во входном файле находится единственное натуральное число N (3 ≤ N ≤ 20) — количество достопримечательностей в городе.

Выходные данные

Выведите N строк по N чисел в каждой — матрицу смежности графа цен за проезд (то есть в i-той строке j-ое число равно стоимости проезда между i-той и j-той достопримечательностями). На диагонали должны стоять нули. Каждое из чисел не должно превосходить 1000. Цены всех дорог должны быть положительны и различны. Если решений несколько, выведите любое.

C. Волшебные формулы

математика *1600

В Томской области очень любят волшебные формулы. Вот, например, несколько таких формул.

Пусть задана последовательность целых положительных чисел p1, p2, ..., pn. Тогда выпишем волшебные формулы:

Здесь «mod» обозначает операцию взятия остатка от деления.

Выражение означает применение побитовой операции xor (исключающее «ИЛИ») к целым числам x и y. Данная операция существует во всех современных языках программирования, например, в языках C++ и Java она обозначена как «^», в Pascal — как «xor».

Волшебные формулы в Томской области очень любят, а вот считать их — не очень. Поэтому ваша задача по заданной последовательности p посчитать значение Q.

Входные данные

В первой строке входных данных задано единственное целое число n (1 ≤ n ≤ 106). В следующей строке заданы n целых чисел: p1, p2, ..., pn (0 ≤ pi ≤ 2·109).

Выходные данные

В единственной строке выходных данных требуется вывести единственное целое число — значение Q.

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).

Выходные данные

Выведите единственное целое число, обозначающее минимальное расстояние, которое требуется проехать, чтобы посадить в тюрьму всех преступников, при оптимальном выборе точки для полицейского участка.

D. Случайное задание

Бинарный поиск битмаски дп Комбинаторика математика *2100

Однажды после сложной лекции старательная студентка Саша увидела исписанную парту в аудитории. Присмотревшись, она прочитала следующее: «Найдите такое целое положительное n, что среди чисел n + 1, n + 2, ..., n есть ровно m чисел, в двоичной записи которых ровно k единиц.»

Ее заинтересовало это задание, и она просит вас помочь ей его решить. Саша знает, что вы боитесь больших чисел, поэтому она гарантирует, что существует ответ не превышающий 1018.

Входные данные

В первой строке через пробел записано два целых числа m и k (0 ≤ m ≤ 1018; 1 ≤ k ≤ 64).

Выходные данные

Выведите искомое число n (1 ≤ n ≤ 1018). Если ответов несколько — выведите любой.

C. Блокнот памяти Рюко

математика реализация сортировки *1800

Рюко фантастически рассеянная девушка, она порой забывает даже то, что вот-вот произошло. Чтобы ничего не упустить, девушка везде берет с собой блокнот под названием Блокнот памяти Рюко. Все, что она видит и слышит, она записывает в этот блокнот.

Хотя Рюко все забывает, она родилась с великолепными мыслительными способностями. С другой стороны, качество рассуждений во многом зависит от имеющейся информации, иными словами, от памяти. И вот девушка листает вой блокнот каждый раз, когда над чем-то рассуждает — а это серьезная работа.

В блокноте Рюко n страниц, пронумерованных от 1 до n. Чтобы облегчить себе жизнь (и эту задачу), мы считаем, что для перехода со страницы x на страницу y надо перелистнуть |x - y| страниц. Чтобы сделать некоторое рассуждение, Рюко нужно иметь ввиду m фактов, i-й факт написан на странице ai. Факты следует читать из блокнота по порядку, в таком случае Рюко надо пролистать станиц, чтобы прочитать все факты.

Рюко хочет уменьшить количество пролистываемых страниц. Для достижения этой цели девушка может скопировать всю информацию со страницы x на страницу y (1 ≤ x, y ≤ n) блокнота. А затем заменить все элементы в последовательности a, равные x, на y. Обратите внимание, что x может равняться y, в таком случае никаких перемен не происходит.

Пожалуйста, скажите Рюко, какое минимальное количество страниц ей придется перелистнуть, чтобы прочитать все факты, если она может применить описанную операцию не более одного раза перед чтением. Обратите внимание, что ответ на задачу может превысить 32-битное целое число.

Входные данные

В первой строке записано два целых числа, n и m (1 ≤ n, m ≤ 105).

В следующей строке записано m целых чисел, разделенных пробелами: a1, a2, ..., am (1 ≤ ai ≤ n).

Выходные данные

Выведите единственное целое число — минимальное количество переворачиваемых страниц.

Примечание

В первом примере оптимальное решение — записать все со страницы 4 на страницу 3, тогда последовательность a станет равна {1, 2, 3, 3, 3, 2}, таким образом, количество переворачиваемых Рюко страниц равно |1 - 2| + |2 - 3| + |3 - 3| + |3 - 3| + |3 - 2| = 3.

Во втором примере оптимальное решение достигается копированием информации со станицы 9 на страницу 4.

B. Om Nom and Spiders

математика реализация *1400

Ом Ном очень любит конфеты и очень не любит пауков, поскольку последние частенько воруют конфеты. Как-то раз Ом Ном собрался на прогулку по парку. К сожалению, в парке водятся пауки, видеть которых Ом Ном совсем не хочет.

Парк можно представить как клетчатое поле n × m. В парке есть k пауков, каждый паук в момент времени 0 находится в некоторой клетке поля. Пауки все время двигаются, причем каждый паук всегда двигается в каком-то одном из четырех направлений (влево, вправо, вниз, вверх). За единицу времени паук из своей клетки переползает в соседнюю по стороне клетку в соответствующем направлении. Если в этом направлении клетки нет, то он покидает территорию парка. Пауки не мешают друг другу во время передвижения, в частности, в одно и то же время в одной клетке могут находиться несколько пауков.

Ом Ном еще не определился, откуда он начнет свою прогулку, но он точно хочет:

  • начать прогулку в момент времени 0 в одной из клеток верхней строки клетчатого поля (клетки этой строки гарантированно не содержат пауков);
  • во время всей прогулки двигаться вниз по полю по направлению к нижней строке (прогулка закончится, когда Ом Ном выйдет за пределы парка).

Ом Ном, как известно, передвигается прыжками. Один прыжок длится одну единицу времени и перемещает монстрика со своей клетки в соседнюю по стороне клетку поля следующей вниз строки, либо за пределы парка.

Каждый раз когда Ом Ном приземляется в какой-то клетке, он видит всех пауков, которые пришли в эту клетку в этот момент времени. Ом Ном хочет выбрать оптимальную клетку для начала прогулки. Поэтому ему интересно для каждой возможной стартовой клетки узнать, сколько пауков он увидит в процессе прогулки, если начнет из этой клетки. Помогите ему, посчитайте это количество для каждой возможной стартовой клетки.

Входные данные

В первой строке записано три целых числа n, m, k (2 ≤ n, m ≤ 2000; 0 ≤ k ≤ m(n - 1)).

Каждая из n следующих строк содержит m символов — описание парка. Символы, находящиеся в i-й строке, описывают i-ю строку клетчатого поля парка. Если символ в строке равен «.» — это значит, что соответствующая клетка поля пустая; иначе символ в строке будет равен одному из четырех символов: «L» (обозначает, что в этой клетке в момент времени 0 находится паук, который двигается влево), «R» (паука, который двигается вправо), «U» (паука, который двигается вверх), «D» (паука, который двигается вниз).

Гарантируется, что первая строка не сдержит пауков. Гарантируется, что никаких лишних символов описание поля не содержит. Гарантируется, что на поле в момент времени 0 находится ровно k пауков.

Выходные данные

Выведите m целых чисел: j-е число должно обозначать количество пауков, которое увидит Ом Ном, если начнет свою прогулку из j-й клетки первой строки. Клетки в строке клетчатого поля нумеруются слева направо.

Примечание

Рассмотрим первый тестовый пример. Ниже показано, как будет меняться расположение пауков на поле в течение времени:


... ... ..U ...
R.L -> .*U -> L.R -> ...
R.U .R. ..R ...

Символом «*» обозначена клетка, в которой находятся два паука одновременно.

  • Если Ом Ном начнет свой путь в первой клетке первой строки, тогда не вовсе не увидит пауков.
  • Если он начнет свой путь во второй клетке, тогда он увидит двух пауков в момент времени 1.
  • Если он начнет свой путь в третьей клетке, тогда он увидит двух пауков: одного в момент времени 1, а второго в момент времени 2.

D. Ребенок и последовательность

математика Структуры данных *2300

В день детей ребенок пришел домой к Пиксу и все перевернул вверх дном. Пикс на него разозлился. В бардаке потерялось много всего, включая любимую последовательность Пикса.

К счастью, Пикс помнит, как можно восстановить последовательность. Сначала нужно завести целочисленный массив a[1], a[2], ..., a[n]. Затем нужно выполнить последовательно m операций. Операции могут быть такими:

  1. Операция вывода суммы (параметры l, r). Пикс должен записать значение .
  2. Операция взятия по модулю (параметры l, r, x). Пикс должен выполнить присвоения a[i] = a[imod x для каждого i (l ≤ i ≤ r).
  3. Операция изменения значения (параметры k, x). Пикс должен изменить значение a[k] на x (иными словами, выполнить присвоение a[k] = x).

Сможете ли вы помочь Пиксу выполнить заданную последовательность операций?

Входные данные

В первой строке записано два целых числа: n, m (1 ≤ n, m ≤ 105). Во второй строке записано n целых чисел через пробел: a[1], a[2], ..., a[n] (1 ≤ a[i] ≤ 109) — начальное значение элементов массива.

Каждая из следующих m строк начинается с целого числа type .

  • Если type = 1, то далее в строке идут два целых числа: l, r (1 ≤ l ≤ r ≤ n) — описание операции 1.
  • Если type = 2, то далее в строке идут еще три целых числа: l, r, x (1 ≤ l ≤ r ≤ n; 1 ≤ x ≤ 109) — описание операции 2.
  • Если type = 3, то далее в строке идут два целых числа: k, x (1 ≤ k ≤ n; 1 ≤ x ≤ 109) — описание операции 3.
Выходные данные

Для каждой операции 1, выведите значение, которое должен записать Пикс. Обратите внимание, что ответ может не помещаться в 32-битное целое число.

Примечание

Рассмотрим первый тестовый пример:

  • Сперва a = {1, 2, 3, 4, 5}.
  • После операции 1, a = {1, 2, 3, 0, 1}.
  • После операции 2, a = {1, 2, 5, 0, 1}.
  • При операции 3, 2 + 5 + 0 + 1 = 8.
  • После операции 4, a = {1, 2, 2, 0, 1}.
  • При операции 5, 1 + 2 + 2 = 5.

    E. Деву и праздник день рождения

    дп Комбинаторика математика *2100

    Сегодня день рождения Деву. Чтобы отпраздновать это событие, он купил n конфет на рынке неподалеку и пригласил f своих друзей. Сейчас Деву хочет поделить конфеты между друзьями. Деву — добрый парень, и день сегодня особенный, так что он не хочет, чтобы кто-то грустил. Поэтому очень важно, чтобы каждый друг получил хотя бы одну конфету.

    Юноша хочет, чтобы день рождения прошел особенным образом, поэтому конфеты требуется разделить по особенному. Предположим, что он раздал n сладостей своим друзьям так, что i-му другу досталось ai конфет. Не должно существовать ни одного целого числа x (x > 1), которое делит все ai.

    Найдите количество способов распределения сладостей между друзьями, удовлетворяющих описанным ограничениям. Обратите внимание, что порядок имеет значение, например, [1, 2] и [2, 1] — различные распределения конфет. Так как ответ может быть достаточно велик, пожалуйста, выведите его по модулю 1000000007 (109 + 7).

    Чтобы задача была еще интереснее, вам дано q запросов. Каждый запрос содержит пару n, f. Для каждого запроса выведите необходимое количество способов по модулю 1000000007 (109 + 7).

    Входные данные

    В первой строке записано целое число q, обозначающее количество запросов (1 ≤ q ≤ 105). В каждой из следующих q строк записано по два целых числа через пробел: n, f (1 ≤ f ≤ n ≤ 105).

    Выходные данные

    Для каждого запроса выведите единственное целое число в строке, соответствующее ответу на запрос.

    Примечание

    Для первого запроса: n = 6, f = 2. Возможные разделения: [1, 5] и [5, 1].

    Для второго запроса: n = 7, f = 2. Возможные разделения: [1, 6] и [2, 5] и [3, 4] и [4, 3] и [5, 3] и [6, 1]. Таким образом, всего есть шесть возможных способов разделения.

    D. Гипердвигатель

    математика *1800

    В далекой-далекой галактике n обитаемых планет, пронумерованных числами от 1 до n. Они расположены на огромных расстояниях друг от друга, поэтому сообщение между ними было крайне затруднено, пока на планете с номером 1 не был изобретен гипердвигатель. Как только произошло это знаменательное событие, на планете 1 был построен n - 1 космический корабль, и эти корабли были разосланы на остальные планеты, чтобы сообщить о революционном изобретении.

    Гиперпространство, как это ни парадоксально, представляет собой обычное трехмерное евклидово пространство. Обитаемые планеты можно считать неподвижными точками в нем, причем никакие две точки не совпадают и никакие три точки не лежат на одной прямой. Движение корабля, оснащенного гипердвигателем, между двумя планетами осуществляется по прямой с постоянной скоростью, одинаковой для всех кораблей. Поэтому расстояния в гиперпространстве измеряются в гипергодах (корабль, оснащенный гипердвигателем, преодолевает расстояние в s гипергодов за s лет).

    Когда корабль прилетает на обитаемую планету, жители планеты разбирают его, создают по его образу и подобию n - 2 корабля с гипердвигателем и рассылают их на остальные n - 2 планеты (кроме той, с которой прилетел корабль). Время создания новых кораблей по сравнению со временем их движения от одной планеты к другой настолько мало, что им можно пренебречь. Новые корабли абсолютно идентичны разосланным первоначально: они движутся с той же постоянной скоростью по прямолинейной траектории и, прибывая на планету, выполняют ту же миссию, т.е. их разбирают, строят новые n - 2 корабля и рассылают их на все планеты, кроме той, с которой прилетел корабль. Таким образом, процесс распространения важной новости по галактике продолжается.

    Однако создатели гипердвигателя так торопились распространить известие о своем открытии, что не изучили до конца, что происходит при столкновении двух кораблей в гиперпространстве. Если два движущихся корабля оказываются в одной точке, то происходит взрыв колоссальной силы, приводящий к уничтожению галактики!

    Ваша задача — вычислить время жизни галактики с момента запуска кораблей с первой планеты.

    Входные данные

    В первой строке задано число n (3 ≤ n ≤ 5000) — количество обитаемых планет в галактике. Следующие n строк содержат целочисленные координаты планет в формате «xi yi zi» ( - 104 ≤ xi, yi, zi ≤ 104).

    Выходные данные

    Выведите единственное число — ответ на задачу с абсолютной или относительной погрешностью, не превосходящей 10 - 6.

    D. Валера и обмены

    графы Конструктив математика реализация снм строковые суфф. структуры *2100

    Перестановкой p длины n называется последовательность различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n). Перестановка называется тождественной, если для всех i выполняется равенство pi = i.

    Обмен (i, j) — это операция, в результате которой элементы pi и pj меняются местами в перестановке. Пусть f(p) — это минимальное число обменов, которое нужно совершить, чтобы перестановка p стала тождественной.

    Валера очень хочет узнать, как за минимальное число обменов из перестановки p получить перестановку q, такую, что f(q) = m. Помогите ему в этом.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 3000) — длина перестановки p. Во второй строке записано n различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — изначальная перестановка Валеры. В последней строке записано целое число m (0 ≤ m < n).

    Выходные данные

    В первой строке выведите целое число k — минимальное число обменов.

    Во второй строке выведите 2k целых чисел x1, x2, ..., x2k — описание последовательности обменов. Выведенные числа обозначают, что необходимо последовательно произвести обмены (x1, x2), (x3, x4), ..., (x2k - 1, x2k).

    Если существует несколько последовательностей обменов минимальной длины, выведите лексикографически минимальную.

    Примечание

    Последовательность x1, x2, ..., xs лексикографически меньше последовательности y1, y2, ..., ys, если существует такое целое число r (1 ≤ r ≤ s), что x1 = y1, x2 = y2, ..., xr - 1 = yr - 1 и xr < yr.

    E. Валера и число

    битмаски дп математика Теория вероятностей *2400

    Валера — программист. Недавно Валера написал забавную программу. Ниже показан псевдокод этой программы:


    //входные данные: целые числа x, k, p
    a = x;
    for(step = 1; step <= k; step = step + 1){
    rnd = [случайное целое число от 1 до 100];
    if(rnd <= p)
    a = a * 2;
    else
    a = a + 1;
    }

    s = 0;

    while(остаток от деления a на 2 равен 0){
    a = a / 2;
    s = s + 1;
    }

    Теперь Валера интересуется, при заданных x, k и p чему равно математическое ожидание полученного числа s?

    Входные данные

    В первой строке входных данных задано три целых числа x, k, p (1 ≤ x ≤ 109; 1 ≤ k ≤ 200; 0 ≤ p ≤ 100).

    Выходные данные

    Выведите требуемое математическое ожидание. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает 10 - 6.

    Примечание

    Если вы не знакомы с термином математическое ожидание, то вы можете почитать про него по ссылке:

    http://ru.wikipedia.org/wiki/Математическое_ожидание

    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.

    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.

    Во втором примере оптимальное решение — выбрать весь граф.

    C. DZY любит числа Фибоначчи

    математика Структуры данных теория чисел *2400

    Как известно, ряд чисел Фибоначчи Fn определяется рекуррентным соотношением

    F1 = 1; F2 = 1; Fn = Fn - 1 + Fn - 2 (n > 2).

    DZY очень любит числа Фибоначчи. Сегодня он дал вам массив, состоящий из n целых чисел: a1, a2, ..., an. Кроме того, он дал вам m запросов. Каждый запрос имеет один из двух следующих типов:

    1. Формат запроса: «1 l r». В ответ на запрос надо добавить Fi - l + 1 к каждому элементу ai, где l ≤ i ≤ r.
    2. Формат запроса: «2 l r». В ответ на запрос надо вывести значение по модулю 1000000009 (109 + 9).

    Помогите DZY ответить на все запросы.

    Входные данные

    В первой строке записано два целых числа n и m (1 ≤ n, m ≤ 300000). Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — изначальный массив a.

    Затем следует m строк. Одна строка описывает один запрос в формате, указанном в условии. Гарантируется, что для каждого запроса выполняется неравенство 1 ≤ l ≤ r ≤ n.

    Выходные данные

    Для каждого запроса второго типа выведите значение суммы в отдельной строке.

    Примечание

    После первого запроса a = [2, 3, 5, 7].

    Для второго запроса sum = 2 + 3 + 5 + 7 = 17.

    После третьего запроса a = [2, 4, 6, 9].

    Для четвертого запроса sum = 2 + 4 + 6 = 12.

    D. DZY любит игры

    математика матрицы Теория вероятностей *2800

    Сегодня DZY играет в очень старую компьютерную игру. В этой игре он находится в большом лабиринте с n комнатами, соединенными m коридорами (по каждому коридору можно ходить в обоих направлениях). При этом между любыми двумя комнатами существует путь, проходящий по коридорам.

    DZY потерялся в лабиринте. Сейчас он находится в первой комнате, и у него есть k жизней. Он будет действовать следующим образом:

    • Сперва юноша равновероятно выбирает один из коридоров, выходящих из его текущей комнаты.
    • Затем он идет по этому коридору, после чего процесс повторяется.

    В некоторых комнатах расставлены ловушки. Гарантируется, что в первой комнате ловушек нет, а в n-й комнате ловушка есть. Каждый раз, когда DZY входит в одну из комнат с ловушкой, он теряет одну жизнь. DZY знает, что если он войдет в n-ю комнату ровно с 2 жизнями, то сначала он потеряет одну жизнь, но затем попадет на бонусный уровень. Юноша хочет знать вероятность того, что он попадет на бонусный уровень. Пожалуйста, помогите ему.

    Входные данные

    В первой строке записано три целых числа n, m, k (2 ≤ n ≤ 500; 1 ≤ m ≤ 105; 2 ≤ k ≤ 109).

    Во второй строке записано n целых чисел, каждое из них равняется 0 или 1. Если i-е число равняется 1, значит, в i-й комнате находится ловушка. В противном случае ловушки в комнате нет. Обратите внимание, что количество комнат с ловушками не превышает 101. Гарантируется, что в первой комнате ловушек нет, а в n-й комнате ловушка есть.

    Затем следует m строк. В каждой строке записано по два целых числа ui, vi (1 ≤ ui, vi ≤ nui ≠ vi), которые обозначают, что текущий коридор соединяет две комнаты, ui и vi. Гарантируется, что система коридоров связная.

    Выходные данные

    Выведите единственное вещественное число — вероятность того, что DZY попадет на бонусный уровень. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превосходит 10 - 4.

    E. DZY любит мосты

    математика матрицы *3100

    DZY владеет 2m островами рядом с домом, острова пронумерованы от 1 до 2m. DZY очень любит мосты, поэтому между некоторыми островами он построил мосты. Проход по одному такому мосту занимает у DZY один день.

    DZY любит математику, поэтому все мосты он строил по следующему правилу. Для каждой пары островов u, v (u ≠ v) он построил 2k различных мостов, соединяющих эти острова, где (a|b значит, что b делится на a). Все эти мосты были двусторонние.

    DZY также построил некоторые мосты для связи его дома с островами. В частности, с островом i его дом соединен ai различными мостами. Эти мосты односторонние, поэтому после того, как DZY пройдет по одному из них, дороги домой уже не будет.

    DZY решил погулять по островам. В самом начале прогулки он находится дома. Затем DZY выбирает один из мостов, идущих от его дома. Так он добирается до некоторого острова. После этого он проводит на островах t дней. Каждый день он выбирает, остаться ли ему на текущем острове и отдохнуть, или же дойти по мосту до другого острова. На острове можно оставаться дольше, чем на день. Также разрешается пересекать любой мост более одного раза.

    Предположим, что в момент времени сразу после t-го дня DZY находится на i-м острове. Обозначим за ans[i] количество способов дойти до i-го острова ровно за t дней прогулки по островам. Ваша задача — подсчитать ans[i] для каждого i по модулю 1051131.

    Входные данные

    Чтобы избежать громоздких входных данных, массив a генерируется следующим образом. Вам даны s первых элементов массива: a1, a2, ..., as. Все остальные элементы надо подсчитать по формуле: ai = (101·ai - s + 10007) mod 1051131 (s < i ≤ 2m).

    В первой строке записаны три целых числа: m, t, s (1 ≤ m ≤ 25; 1 ≤ t ≤ 1018; 1 ≤ s ≤ min(2m, 105)).

    Во второй строке записано s целых чисел: a1, a2, ..., as (1 ≤ ai ≤ 106).

    Выходные данные

    Чтобы избежать громоздких выходных данных, выведите только xor-сумму всех ans[i] по модулю 1051131 (1 ≤ i ≤ 2m). Другими словами выведите (ans[1] mod 1051131) xor (ans[2] mod 1051131) xor... xor (ans[nmod 1051131).

    Примечание

    В первом примере массив ans равен [6, 7, 6, 6].

    В первом примере, если юноша хочет быть на острове 1 через, гуляя по островам 1 день, то у него есть 6 различных способов сделать это:

    1. дом —> 1 -(остаемся на острове)-> 1
    2. дом —> 2 —> 1
    3. дом —> 3 —> 1
    4. дом —> 3 —> 1 (обратите внимание, что между островами 1 и 3 есть два различных моста)
    5. дом —> 4 —> 1
    6. дом —> 4 —> 1 (обратите внимание, что между домом и островом 4 есть два различных моста)

    Во втором примере (a1, a2, a3, a4, a5, a6, a7, a8) = (389094, 705719, 547193, 653800, 947499, 17024, 416654, 861849). Массив ans равен [235771, 712729, 433182, 745954, 139255, 935785, 620229, 644335].

    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 четыре раза.

    E. Jzzhu и квадраты

    дп математика теория чисел *2900

    У Jzzhu есть два целых числа n и m. Он называет целочисленную точку (x, y) плоскости специальной, если 0 ≤ x ≤ n и 0 ≤ y ≤ m. Единичным квадратом Jzzhu называет квадрат, углы которого находятся в точках (x, y), (x + 1, y), (x + 1, y + 1), (x, y + 1), где x и y некоторые целые числа.

    Рассмотрим все квадраты (их стороны не обязательно параллельны осям координат), углы которых являются специальными точками. Для каждого такого квадрата Jzzhu нарисовал по точке во всех единичных квадратах, которые находятся целиком внутри него. В итоге некоторые единичные квадраты могут содержать несколько точек. Теперь ему интересно, сколько всего точек на плоскости он нарисовал. Найдите остаток от деления этого числа на 1000000007 (109 + 7).

    Входные данные

    В первой строке записано целое число t (1 ≤ t ≤ 105) — количество тестов.

    В каждой из следующих t строк записано описание очередного теста: два целых числа n и m (1 ≤ n, m ≤ 106) — параметры задачи для текущего теста.

    Выходные данные

    Для каждого теста выведите суммарное количество точек, которое нарисует Jzzhu.

    B. Jzzhu и последовательности

    математика реализация *1300

    Jzzhu изобрел новый вид последовательностей. Эти последовательности можно записать следующим образом:

    Вам даны значения x и y, посчитайте, чему равен остаток от деления fn на 1000000007 (109 + 7).

    Входные данные

    В первой строке записано два целых числа x и y (|x|, |y| ≤ 109). Во второй строке записано единственное целое число n (1 ≤ n ≤ 2·109).

    Выходные данные

    Выведите единственное целое число — fn по модулю 1000000007 (109 + 7).

    Примечание

    В первом примере f2 = f1 + f3, 3 = 2 + f3, f3 = 1.

    Во втором примере f2 =  - 1;  - 1 по модулю (109 + 7) равняется (109 + 6).

    C. Предскажите исход игр

    математика Перебор реализация *1700

    Футбольный турнир состоит из n игр. В нем участвуют три команды. На данный момент команды уже сыграли k матчей.

    Вы ярый футбольный фанат, по случайности пропустивший все k игр. К счастью, вы вспомнили прогноз одного вашего друга на первые k игр. Друг не назвал точное количество побед каждой команды по итогу k матчей. Вместо этого он предполагал, что модуль разности между количеством побед первой и второй команды будет равен d1, а второй и третьей — d2.

    Вы не хотите, чтобы какая-то команда стала победителем турнира, иными словами, у каждой команды должно быть одинаковое количество побед по завершении n игр. Поэтому вам хочется узнать, может ли турнир пройти так, что предсказание вашего друга сбудется, и при этом в итоге все команды будут иметь одинаковое количество побед?

    Обратите внимание, что в этом турнире матч не может закончиться ничьей.

    Входные данные

    В первой строке записано целое число t (1 ≤ t ≤ 105) — количество тестовых данных.

    В каждой из следующих t строк записаны четыре целых числа через пробел: n, k, d1, d2 (1 ≤ n ≤ 1012; 0 ≤ k ≤ n; 0 ≤ d1, d2 ≤ k).

    Выходные данные

    Выведите "yes", если у турнира может не быть победителя. В противном случае, выведите "no" (без кавычек).

    Примечание

    Пример 1. Еще не состоялось ни одного матча (k = 0, d1 = 0, d2 = 0). Один из возможных турниров — это турнир с матчами (1-2, 2-3, 3-1), где каждая команда выигрывает ровно один раз.

    Пример 2. Вы пропустили все игры (k = 3). Так как d1 = 0 и d2 = 0, достаточно взять турнир из предыдущего примера.

    Пример 3. Вы пропустили 4 матча, и d1 = 1, d2 = 0. Первые 4 матча могли бы быть такими: 1-2 (победа 2-го), 1-3 (победа 3-го), 1-2 (победа 1-го), 1-3 (победа 1-го). На данный момент первая команда имеет 2 победы, вторая команда имеет 1 победу, третья команда имеет 1 победу. Два оставшихся матча могут быть такими: 1-2 (победа 2-го), 1-3 (победа 3-го). В итоге все команды имеют одинаковое количество побед (2 победы).

    D. Считаем хорошие подстроки

    математика *2000

    Строка называется хорошей, если после объединения всех последовательных равных символов в один символ получившаяся строка является палиндромом. Например, «aabba» является хорошей, потому что после объединения одинаковых символов она станет строкой «aba».

    Вам дана строка, посчитайте две величины:

    1. количество хороших ее подстрок четной длины;
    2. количество хороших ее подстрок нечетной длины.
    Входные данные

    В первой строке записана единственная строка длины n (1 ≤ n ≤ 105). Каждый символ этой строки равен либо 'a', либо 'b'.

    Выходные данные

    Выведите два целых числа через пробел: количество хороших подстрок четной длины и количество хороших подстрок нечетной длины.

    Примечание

    В первом примере есть три хороших подстроки («b», «b», и «bb»). Длина одной из них — четная, длина двух других — нечетная.

    Во втором примере есть шесть хороших подстрок («b», «a», «a», «b», «aa», «baab»). Две из них имеют четную длину, остальные четыре — нечетную длину.

    В третьем примере есть семь хороших подстрок («b», «a», «b», «b», «bb», «bab», «babb»). Две из них имеют четную длину, остальные пять — нечетную длину.

    Определения

    Подстрока s[l, r] (1 ≤ l ≤ r ≤ n) строки s = s1s2... sn — это строка slsl + 1... sr.

    Строка s = s1s2... sn является палиндромом, если она равна строке snsn - 1... s1.

    C. Фокус

    Комбинаторика математика Теория вероятностей *2100

    Давид Пирожков (также известный как pieguy) любит показывать фокусы. В его репертуаре есть фокус, который использует колоду, состоящую из n карт.

    У него есть m одинаковых колод, каждая из которых состоит из n различных карт. Эти колоды были перемешаны вместе. Когда Давид показывает фокус, он берет n случайных карт из этих перемешанных колод, и показывает фокус, используя эти n карт. Получившаяся колода из n карт выглядит как обычная колода, но в ней теперь какие-то карты могут встречаться более одного раза.

    Сам фокус показывается следующим образом: сначала зритель вытягивает карту из колоды, и запоминает ее, после чего помещает ее обратно в колоду. Затем Давид тасует колоду, и достает из нее одну карту. Фокус считается выполненным успешно, если Давид достал ту же карту, которую запомнил зритель.

    Вы сильно подозреваете, что Давид на самом деле не очень хороший фокусник, и что он просто показывает случайную карту, надеясь, что она совпадет с картой, которую запомнил зритель. Посчитайте вероятность того, что фокус будет успешным, если вы правы.

    Входные данные

    Первая строка входных данных содержит числа n и m (1 ≤ n, m ≤ 1000), разделенные пробелом – количество карт в каждой колоде и количество колод соответственно.

    Выходные данные

    В единственной строке выведите одно число с плавающей точкой — вероятность того, что Давид сможет успешно выполнить фокус. Относительная или абсолютная погрешность ответа не должна превышать 10 - 6.

    Примечание

    В первом примере, с вероятностью Давид будет показывать фокус, используя колоду с двумя одинаковыми картами. В этом случае фокус всегда будет успешным.

    С вероятностью карты будут различны, и вероятность успешного показа фокуса будет равна .

    Итоговая вероятность:

    B. Федя и математика

    математика теория чисел *1200

    Федя учится в гимназии. Домашнее задание по математике у Феди состоит в вычислении следующего выражения:

    (1n + 2n + 3n + 4nmod 5

    для заданного числа n. Федя смог выполнить это задание. А сможете ли вы? Обратите внимание, что заданное число n может быть очень большим (например, оно может не помещаться в целочисленные типы вашего языка программирования).

    Входные данные

    В единственной строке находится целое число n (0 ≤ n ≤ 10105). Число не содержит лидирующих нулей.

    Выходные данные

    Выведите значение выражения без лидирующих нулей.

    Примечание

    Операция x mod y обозначает взятие остатка от деления числа x на число y.

    Пояснение к первому тестовому примеру:

    A. Золотая система счисления

    meet-in-the-middle математика *1700

    Piegirl надоела двоичная, десятичная и все остальные системы счисления с целочисленным основанием. Недавно она обнаружила весьма интересные свойства числа , одно из из них можно записать следующим образом: q2 = q + 1. Piegirl считает, что число q может быть неплохим основанием для новой системы счисления, которую она назовет «золотая система счисления». Число в золотой системе счисления — это непустая строка, состоящая из нулей и единиц. Десятичное значение числа a0a1...an равно .

    Немного поизучав новую систему счисления, Piegirl поняла, что эта система не обладает некоторыми свойствами, которыми обладают системы счисления с целочисленным основанием. В частности, сравнение двух чисел в этой системе счисления — не такая тривиальная задача.

    Вам заданы два числа в золотой системе счисления, сравните их.

    Входные данные

    Входные данные состоят из двух строк, в каждой из которых записана непустая строка из нулей и единиц. Длина каждой строки не превосходит 100000.

    Выходные данные

    Выведите «>», если первое число больше второго; выведите «<», если первое число меньше второго; иначе, выведите «=».

    Примечание

    В первом примере первое число равно , второе число приблизительно равно 1.6180339882 + 1.618033988 + 1 ≈ 5.236. Очевидно, что первое число меньше.

    Во втором примере числа равны. Каждое из них приблизительно равно  ≈ 2.618.

    D. Бинго!

    Комбинаторика математика Теория вероятностей *2700

    Обычно в игру «Бинго!» играют на доске 5 × 5, заполненной различными целыми числами от 1 до 75. В этой задаче мы будем рассматривать обобщенную модель игры «Бинго!». Действие игры будет происходить на доске n × n, заполненной различными целыми числами от 1 до m (m ≥ n2).

    Рассмотрим следующий случайный процесс. Изначально генерируется случайная доска для игры (равновероятно среди всех досок). Затем случайным образом выбираются k различных чисел от 1 до m (равновероятно среди всех наборов из k различных чисел). Те из этих чисел, которые встречаются на сгенерированной доске, помечаются. Выигрышем будем называть число: два в степени [количество строк, целиком состоящих из помеченных чисел, плюс количество столбцов, целиком состоящих из помеченных чисел].

    Ваша задача посчитать математическое ожидание выигрыша в описанном случайном процессе для заданных n, m, k. Полученное математическое ожидание может быть очень большим, поэтому если оно превышает 1099, выведите 1099 вместо ответа (например, можно вывести строку «1e99» без кавычек).

    Входные данные

    В первой строке записано три целых числа n, m, k (1 ≤ n ≤ 300; n2 ≤ m ≤ 100000; n ≤ k ≤ m).

    Выходные данные

    Выведите математическое ожидание выигрыша или 1099, если математическое ожидание превышает это значение. Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает 10 - 9.

    E. Оптимальный поток

    Конструктив математика Потоки *3000

    Рассмотрим сеть, состоящую из n вершин, пронумерованных от 1 до n. Некоторые пары вершин соединены ребрами. Пара вершин может быть соединена несколькими ребрами, тем не менее, не существует ребра, соединяющего какую-то вершину саму с собой.

    Каждое ребро имеет бесконечную пропускную способность (в обоих направлениях), однако в один момент времени ребро может пропускать поток только в одном из направлений. Стоимость пропускания потока по ребру пропорциональна квадрату пропускаемого потока. Точнее, для каждого ребра задана характеристика (вес), стоимость пропускания x потока по ребру с весом w равна w·x2.

    Известно, что сеть связна (между любой парой вершин есть путь по ребрам). Более того, сеть устроена таким образом, что при удалении любой вершины, она останется связной.

    Вам нужно пропустить k (k > 0) потока из вершины 1 в вершину n. Другими словами, вы хотите для каждого ребра выбрать величину (не обязательно целочисленную) и направление, проходящего по этому ребру потока, так, чтобы для вершины 1 значение [сумма всех входящих потоков минус сумма всех выходящих потоков] равнялось  - k, для вершины n это значение равнялась k, а для всех остальных вершин оно равнялось 0.

    Желая минимизировать стоимость пропускания k потока, вы нарисовали диаграмму сети и дали задание одному из подчиненных. Недавно, последний сказал, что он нашел оптимальное решение задачи и нарисовал его, но, к сожалению, пролил кофе на рисунок. Поэтому некоторые данные утрачены (вполне возможно, даже части изначальной диаграммы и значение k).

    Имея все сохранившиеся данные, вам нужно определить, могло ли решение подчиненного быть оптимальным. Другими словами, определите, существуют ли корректная сеть, значение k (оно должно быть положительным) и оптимальное решение, которые не противоречат никакой сохранившейся информации. Дополнительно, если это возможно, определите эффективность решения подчиненного. Эффективность решения равна суммарной стоимости деленой на k.

    Входные данные

    Входные данные содержат два целых числа n и m (2 ≤ n ≤ 200000; 0 ≤ m ≤ 200000), количество вершин и ребер в сети. В каждой из m следующих строк записаны четыре целых числа: f, t, w, b (1 ≤ f ≤ n; 1 ≤ t ≤ nf ≠ t; 1 ≤ w ≤ 100; 0 ≤ b ≤ 100). Числа обозначают, что в оптимальном решении подчиненного поток величины b проходил по ребру из f в t, вес этого ребра был равен w.

    Выходные данные

    Если решение подчиненного точно не является оптимальным, выведите строку «BAD x», где x — это номер первого ребра, которое противоречит оптимальности решения. Если решение подчиненного может быть оптимальным, то выведите эффективность этого решения, округленную до ближайшего целого числа, если ее можно определить. Если определить эффективность нельзя выведите строку "UNKNOWN".

    Примечание

    Обратите внимание, что, несмотря на то, что заданные веса и потоки целочисленные, веса и потоки неизвестных ребер могут быть вещественными.

    C. Пашмак и автобусы

    Комбинаторика Конструктив математика *1900

    Пашмак недавно устроился в транспортную компанию, которая владеет k автобусами. Недавно компания заключила договор со школой на перевозку школьников в течение d дней. Всего в школе учатся n ребят. Каждый день компания предоставляет школе все свои автобусы, Пашмак должен распределять детей по автобусам. Пашмак не хочет, чтобы кто-то из школьников подружился за эти d дней. Он считает, что два школьника сдружатся, если в течение всех d дней они будут ездить в одном автобусе.

    Помогите Пашмаку воплотить в жизнь его странную идею, найдите распределение, при котором никакие два школьника не сдружатся. Считайте, что автобусы имеют бесконечную вместимость.

    Входные данные

    В первой строке записаны три целых числа через пробел n, k, d (1 ≤ n, d ≤ 1000; 1 ≤ k ≤ 109).

    Выходные данные

    Если подходящего распределения не существует, выведите -1. В противном случае, выведите d строк, по n чисел в каждой строке: j-е число i-й строки обозначает номер автобуса, в котором поедет j-й школьник в i-й день. Считайте, что автобусы нумеруются от 1 до k.

    Примечание

    Обратите внимание, что два школьника становятся друзьями, если они находятся в одном автобусе каждый день. При этом автобус, в котором они едут вместе, может меняться день ото дня.

    A. Вася и носки

    математика Перебор реализация *900

    У Васи есть n пар носков. Утром каждого дня, собираясь в школу, Вася должен надеть пару носков. Вечером, прийдя со школы, Вася снимает надетые носки и выбрасывает их. Каждый m-й день (в дни с номерами m, 2m, 3m, ...) мама покупает Васе одну пару носков. Она делает это поздно вечером, поэтому Вася может надеть новые носки не раньше следующего дня. На сколько подряд идущих дней Васе хватит носков?

    Входные данные

    В единственной строке записано два целых числа n и m (1 ≤ n ≤ 100; 2 ≤ m ≤ 100), разделенные пробелом.

    Выходные данные

    Выведите единственное целое число — ответ на задачу.

    Примечание

    В первом примере первые два дня Вася будет носить носки, которые у него были изначально, затем на третий день будет носить носки, которые были куплены во второй день.

    Во втором примере первые девять дней он будет носить носки, которые у него были изначально, затем три дня будет носить носки, которые были куплены в третий, шестой и девятый дни. Затем еще день будет носить носки, которые были куплены в двенадцатый день.

    B. Димка и уравнение

    математика Перебор реализация теория чисел *1500

    Маленький Дима много баловался на уроке математики, и злой учитель Леонид Иванович в наказание ему придумал следующую задачу.

    Найти все целочисленные решения уравнения x (0 < x < 109):

    x = b·s(x)a + c, 

    где a, b, c — некоторые заранее определенные константы, а функция s(x) обозначает сумму всех цифр в десятичном представлении числа x.

    Учитель дает эту задачу Диме на каждом уроке, меняя только параметры уравнения: a, b, c. Диме надоело получать двойки, и он просит вас помочь ему решить эту нелегкую задачу.

    Входные данные

    В первой строке записаны три целых числа через пробел: a, b, c (1 ≤ a ≤ 5; 1 ≤ b ≤ 10000;  - 10000 ≤ c ≤ 10000).

    Выходные данные

    Выведите целое число n — количество найденных решений. Затем выведите n целых чисел в порядке возрастания — найденные решения заданного уравнения. Выводить нужно только целочисленные решения, большие нуля и строго меньшие, чем 109.

    D. Витя и множество

    Конструктив математика Перебор *2300

    Маленький Витя очень любит теорию множеств (напомним, что множество — это набор чисел, в котором все числа попарно различны). Сегодня Витя хочет найти множество целых чисел S, обладающее следующими свойствами:

    • для всех x выполняется неравенство l ≤ x ≤ r;
    • 1 ≤ |S| ≤ k;
    • обозначим i-й по порядку элемент множества S как si; значение как можно меньше.

    Помогите Вите найти описанное множество.

    Входные данные

    В первой строке через пробел записаны три целых числа l, r, k (1 ≤ l ≤ r ≤ 1012; 1 ≤ k ≤ min(106, r - l + 1)).

    Выходные данные

    Выведите минимально возможное значение f(S). Затем выведите мощность множества |S|. Затем сами элементы множества в любом порядке.

    Если существует несколько оптимальных множеств, разрешается вывести любое.

    Примечание

    Операция обозначает операцию побитого исключающего ИЛИ. Другими словами, операцию XOR.

    E. Роланд и роза

    геометрия математика Перебор сортировки *2700

    Роланд любит выращивать цветы. Недавно он вырастил красивую розу в точке (0, 0) декартовой системы координат. Роза настолько красива, что Роланд опасается, как бы силы зла не попытались украсть ее.

    Чтобы защитить розу, Роланд хочет построить n защитных башен (будем считать, что башня это точка на плоскости) на расстоянии не более r от розы. Кроме того, Роланд считает, что башни должны быть построены в точках с целочисленными координатами, а сумма квадратов расстояний между всем парами башен должна быть как можно больше. Обратите внимание, что Роланд может построить несколько башен в одной и той же точке плоскости, также разрешается строить башни в точке (0, 0).

    Помогите Роланду построить башни в целочисленных точках так, чтобы сумма квадратов расстояний между всеми башнями была максимально возможной. Обратите внимание, что под расстоянием в этой задаче понимается евклидово расстояние между точками.

    Входные данные

    В первой строке записаны два целых числа n и r (2 ≤ n ≤ 8; 1 ≤ r ≤ 30).

    Выходные данные

    В первой строке выведите целое число — максимально возможную сумму квадратов расстояний. В i-й из следующих n строк выведите два целых числа xi, yi — координаты i-й башни. Каждая башня должна находиться внутри или на границе окружности радиуса r. Обратите внимание, что несколько башен могут находиться в одной и той же точке плоскости, также башни могут находиться в точке (0, 0).

    Если существует несколько подходящих оптимальных расстановок, выведите любую.

    D. Яблов и сложная задача

    математика снм *2800

    Тостов придумал очень сложную задачу. Он задал ее Яблову, но Яблов не может ее решить. Вы можете ему помочь?

    Дана шахматная доска размера n × n. В каждой клетке доски записан либо символ 'x', либо символ 'o', либо ничего не записано. Сколько существует способов заполнить все пустые клетки символами 'x' или 'o' (в каждой клетке в итоге должен быть записан ровно один символ) так, чтобы для каждой клетки доски количество соседних клеток с символом 'o' было четным? Найдите это количество способов по модулю 1000000007 (109 + 7). Две клетки доски соседние, если у них есть общая сторона.

    Входные данные

    В первой строке записано два целых числа n, k (1 ≤ n, k ≤ 105) — размер доски и количество клеток, которые изначально непустые.

    Затем следует k строк. В i-й строке записано два целых числа и символ: ai, bi, ci (1 ≤ ai, bi ≤ n; ci равняется либо 'o', либо 'x'). Эта строка означает, что в клетке на пересечении ai-й строки и bi-го столбца изначально записан символ ci. Все заданные клетки различны.

    Считайте, что строки пронумерованы от 1 до n сверху вниз. Аналогично, столбцы пронумерованы от 1 до n слева направо.

    Выходные данные

    Выведите единственное целое число — ответ на задачу.

    Примечание

    В первом тестовом примере существует два способа:


    xxo xoo
    xox ooo
    oxx oox

    B. Caisa и колонны

    математика Перебор реализация *1100

    Caisa уже купил сахар и теперь идет домой. Во время пути домой он решил пройти игру на своем мобильном телефоне.

    В игре есть (n + 1) колонн, пронумерованных от 0 до n. Нулевая колонна имеет высоту 0, i(i > 0) колонна имеет высоту hi. Цель игры — добраться до n-й колонны, при этом единственное действие, которое может совершать игрок: перепрыгнуть с текущей колонны (обозначим ее номер переменной k) на следующую колонну (ее номер равен k + 1). После описанного прыжка энергия игрока увеличивается на hk - hk + 1 (если это значение меньше нуля, то игрок теряет соответствующее количество энергии). По правилам игры в любой момент времени энергия игрока должна быть неотрицательной.

    Изначально Caisa стоит на нулевой колонне и имеет ноль единиц энергии. Также в игре есть специально оплачиваемая возможность: за один доллар игрок может увеличить высоту любой колонны на единицу. Caisa может использовать эту возможность несколько раз, но, конечно, он не хочет тратить слишком много денег. Какое минимальное количество денег ему придется потратить, чтобы пройти игру?

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 105). В следующей строке записаны n целых чисел h1, h2, ..., hn (1  ≤  hi  ≤  105), обозначающие высоты колонн.

    Выходные данные

    Выведите единственное целое число — минимальное количество денег, которое придется заплатить Caisa, чтобы пройти игру.

    Примечание

    В первом тестовом примере Caisa должен заплатить 4 доллара и увеличить высоту нулевой колонны на 4. В таком случае он сможет пройти игру.

    E. Caisa и дерево

    Деревья математика Перебор поиск в глубину и подобное теория чисел *2100

    Caisa сейчас дома и его сын придумал для него простую задачку.

    Задано корневое дерево, состоящее из n вершин, пронумерованных от 1 до n (вершина 1 — корень дерева). В каждой вершине записано некоторое значение. Требуется ответить на q запросов. Каждый запрос является одним из следующих:

    • Формат запроса «1 v». Выпишем последовательность вершин вдоль пути от корня до вершины v: u1, u2, ..., uk (u1 = 1; uk = v). Выведите такую вершину ui, что gcd(значение вершины ui, значение вершины v) > 1 и i < k. Если существует несколько таких вершин, выведите вершину с максимальным значением i. Если таких вершин вовсе нет, выведите -1.
    • Формат запроса «2 v w». Нужно изменить значение, записанное в вершине v, на w.

    Вам заданы все запросы, помогите Caisa справиться с этой задачей.

    Входные данные

    В первой строке записаны два целых числа n, q (1 ≤ n, q ≤ 105).

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 2·106), где ai обозначает значение, записанное в вершине i изначально.

    В каждой из следующих n - 1 строк записаны два целых числа xi и yi (1 ≤ xi, yi ≤ nxi ≠ yi), обозначающие, что в дереве есть ребро между вершинами xi и yi.

    В каждой из следующих q строк задан запрос в формате, описанном выше. Для каждого запроса выполняются следующие неравенства: 1 ≤ v ≤ n и 1 ≤ w ≤ 2·106. Обратите внимание: не более 50 запросов из всех меняют значение в вершине.

    Выходные данные

    Для каждого запроса первого типа выведите ответ на него.

    Примечание

    Запись gcd(x, y) обозначает наибольший общий делитель целых чисел x и y.

    B. Чудо-комната

    математика Перебор *2000

    В связи с началом учебного года во многих общежитиях возникли проблемы с поселением студентов. В одном из таких общежитий есть чудо-комната размером a × b квадратных метров. Комендант хочет поселить в нее ровно n студентов. Но, по закону, на одного жильца должно быть не меньше 6 квадратных метров жилой площади (то есть, комната для n студентов должна иметь площадь не менее 6n квадратных метров). Комендант может увеличить любую из сторон комнаты (возможно, обе) на произвольное целое положительное количество метров. Помогите коменданту изменить комнату так, чтобы все n студентов могли жить в комнате, и итоговая площадь комнаты была как можно меньше.

    Входные данные

    В единственной строке через пробел записано три целых числа n, a и b (1 ≤ n, a, b ≤ 109) — количество студентов и размеры комнаты.

    Выходные данные

    Выведите три целых числа s, a1 и b1 (a ≤ a1b ≤ b1) — итоговая площадь комнаты и ее размеры. Если существует несколько оптимальных решений, выведите любое.

    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. Отделяйте знак оператора и знак равенства от чисел пробелами.

    Если существует несколько корректных ответов, можно вывести любой.

    C. Взламываем!

    Бинарный поиск Конструктив математика *2500

    Little X недавно наткнулся на следующую задачу.

    Определим f(x) как сумму цифр в десятичной записи числа x (например, f(1234) = 1 + 2 + 3 + 4). Ваша задача — посчитать

    Конечно, Little X быстро решил эту задачу, заблокировал решение и стал взламывать чужие решения. Открыв решение участника, он увидел следующий C++ код:


    ans = solve(l, r) % a;
    if (ans <= 0)
    ans += a;

    Этот код будет работать неправильно только на тесте с . Вам дано число a, помогите Little X найти подходящий тест для взлома.
    Входные данные

    В первой строке записано единственное целое число a (1 ≤ a ≤ 1018).

    Выходные данные

    Выведите два целых числа: l, r (1 ≤ l ≤ r < 10200) — данные для взлома. Не выводите ведущих нулей. Гарантируется, что решение существует.

    E. Перманент

    meet-in-the-middle дп математика Паросочетания *3100

    Little X на днях решил #P полную задачу за полиномиальное время. Теперь он задает эту задачу вам!

    Дана особая матрица A размера n × n, ваша задача — подсчитать ее перманент по модулю 1000000007 (109 + 7). Особое свойство матрицы A заключается в том, что почти все ее элементы равняются 1. Только k элементов имеют заданное значение.

    Определение перманента можно найти по следующей ссылке: https://ru.wikipedia.org/wiki/Перманент

    Входные данные

    В первой строке записано два целых числа через пробел, n, k (1 ≤ n ≤ 105; 1 ≤ k ≤ 50).

    В следующих k строках записано описание матрицы. В i-й строке записано три целых числа через пробел xi, yi, wi (1 ≤ xi,  yi ≤  n; 0  ≤  wi  ≤ 109). Эти числа обозначают, что Axi, yi = wi. Все элементы матрицы, кроме заданных, равны 1.

    Гарантируется, что все позиции (xi, yi) различны.

    Выходные данные

    Выведите перманент матрицы по модулю 1000000007 (109  +  7).

    A. Треугольные числа

    математика Перебор *800

    Треугольное число — это число кружков, которые могут быть расставлены в форме равностороннего треугольника. Например, три кружка можно расставить в форме треугольника, значит три — треугольное число. n-ое треугольное число — это количество кружков в треугольнике, на стороне которого n кружков. . Вы можете прочитать подробно про эти числа в Википедии (http://en.wikipedia.org/wiki/Triangular_number или http://ru.wikipedia.org/wiki/Треугольное_число).

    Ваша задача — определить, является ли заданное целое число треугольным.

    Входные данные

    Первая строка содержит одно число n (1 ≤ n ≤ 500) — заданное целое число.

    Выходные данные

    Если заданное целое число является треугольным, выведите YES, иначе выведите NO.

    C. МУХ и карточные домики

    Бинарный поиск жадные алгоритмы математика Перебор *1700

    Белые медведи Меньшиков и Услада из Санкт-Петербургского зоопарка и слоник Хорас из Киевского зоопарка решили построить карточный домик. Для этого они уже нашли внушительную колоду, содержащую n игральных карт. Давайте опишем домик, который они хотят собрать:

    1. Домик состоит из некоторого ненулевого количества этажей.
    2. Каждый этаж состоит из ненулевого количества комнат и потолка. Комната — две карты, прислоненных друг к другу. Комнаты располагаются в ряд, и на каждые две соседние комнаты кладется потолок из еще одной карты.
    3. Каждый этаж, кроме самого нижнего, должен содержать меньше комнат, чем этаж ниже.

    Обратите внимание, что домик может заканчиваться этажом с более чем одной комнатой и в таком случае их тоже требуется накрыть потолком. Также количество комнат на соседних этажах не обязательно должно отличаться на единицу, разница может быть больше.

    Пока медведи тренируются ставить карты, Хорас пытается сообразить, из скольки этажей должен состоять их дом. Назовем высотой дома количество этажей в нем. Возможно, что из n карт можно собрать много разных домиков разных высот. Кажется, эта задача слонику не под силу, он просит вас посчитать, домики скольки различных высот они смогут собрать, использовав ровно n карт.

    Входные данные

    В единственной строке находится целое число n (1 ≤ n ≤ 1012) — количество карт.

    Выходные данные

    Выведите количество различных высот, которые могут быть у домиков, построенных ровно из n карт.

    Примечание

    В первом примере, использовав все 13 карт, можно построить только такие два дома:

    Таким образом из 13 карт можно построить только двухэтажные домики, поэтому ответ — 1.

    Из шести карт во втором примере ни одного домика построить нельзя.

    A. Уроки дизайна задач: учимся у математики

    математика теория чисел *800

    Один из способов придумать новую задачу: использовать математику. Например, можно придумать какое-нибудь рандомное математическое утверждение или модифицировать некоторые теоремы, чтобы получить что-то новое. Используя такие методы, можно придумать новую задачу.

    Например, есть утверждение под названием «Гипотеза Гольдбаха». Оно гласит: «каждое четное число не менее четырех можно представить в виде суммы двух простых чисел». Давайте модифицируем его следующим образом: «каждое целое число не менее 12 можно представить в виде суммы двух составных чисел». В отличие от гипотезы Гольдбаха, я могу доказать эту гипотезу.

    Вам дано целое число n не менее 12, представьте его в виде суммы двух составных чисел.

    Входные данные

    В единственной строке записано целое число n (12 ≤ n ≤ 1000000).

    Выходные данные

    Выведите два таких составных целых числа x и y (1 < x, y < n), что x + y = n. Если есть несколько правильных ответов, можно вывести любой из них.

    Примечание

    В первом примере 12 = 4 + 8. Числа 4 и 8 составные. Можно также вывести «6 6» или «8 4».

    Во втором примере 15 = 6 + 9. Обратите внимание на то, что нельзя вывести «1 14», так как 1 — это не составное число.

    F. Уроки дизайна задач: меняем цель задачи

    Конструктив математика матрицы *2700

    Существуют задачи со следующей структурой: вам дана модель, и вы можете выполнять некоторые операции, эти операции надо использовать для достижения определенной цели. Один из способ создания задач — использовать прежнюю модель и прежние операции, но поменять цель задачи.

    Давайте попробуем. Как-то раз я придумал следующую сложную задачу для Topcoder SRM 557. Вам даны n целых чисел x1, x2, ..., xn. Разрешено выполнять сколько угодно присвоений следующего вида: xi ^= xj (в изначальной задаче i и j должны были быть различными, но в этой задаче мы позволим i равняться j). Ваша задача — максимизировать сумму всех xi.

    Теперь мы просто меняем цель. Дополнительно вам заданы n целых чисел y1, y2, ..., yn. Вы должны добиться того, чтобы x1, x2, ..., xn в точности равнялись y1, y2, ..., yn. Иными словами, для каждого i число xi должно равняться yi.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 10000). Во второй строке записано n целых чисел: x1, x2, ..., xn (0 ≤ xi ≤ 109). В третьей строке записано n целых чисел: y1, y2, ..., yn (0 ≤ yi ≤ 109).

    Выходные данные

    Если решения не существует, выведите -1.

    Если решение существует, то выведите в первой строке целое число m (0 ≤ m ≤ 1000000) — количество присвоений, которые надо выполнить. Затем выведите m строк, в каждой строке должно быть записано два целых числа i и j (1 ≤ i, j ≤ n), которые обозначают присвоение xi ^= xj.

    Если существует несколько решений, разрешается вывести любое. Можно доказать, что при этих ограничениях если существует решение, то всегда существует решение с не более 106 операциями.

    Примечание

    Присвоение a ^= b обозначает присвоение a = a ^ b, где операция «^» является побитовым XOR двух целых чисел.

    F. Муравьиная колония

    математика Структуры данных теория чисел *2100

    И снова проголодался Крот. Он нашел одну муравьиную колонию из n муравьев, выстроенных в ряд. У каждого муравья i (1 ≤ i ≤ n) есть сила si.

    Чтобы разнообразить ужин, Крот организует что-то вроде «Голодных игр» для муравьев. Он выбирает два номера, l и r (1 ≤ l ≤ r ≤ n) и каждая пара муравьев с номерами от l до r (включительно) сражается. Когда сражаются два муравья i и j, муравей номер i получает одно боевое очко только в том случае, если si делит sj (также, муравей j получает одно боевое очко только в том случае, если sj делит si).

    Когда все битвы остаются позади, Крот распределяет места. Муравей номер i, получивший vi боевых баллов, будет освобожден только если vi = r - l, или — иными словами — только если он получал по баллу в каждой битве, в которой он принимал участие. Затем Крот поедает остальных муравьев. Обратите внимание на то, что освобождёнными могут оказаться как много муравьев, так и нисколько.

    Чтобы выбрать наилучший вариант, Крот дает вам t отрезков [li, ri] и спрашивает для каждого отрезка: сколько муравьев он съест, если эти муравьи будут биться?

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 105) — размер муравьиной колонии.

    Во второй строке записано n целых чисел s1, s2, ..., sn (1 ≤ si ≤ 109) — силы муравьев.

    В третьей строке записано одно число t (1 ≤ t ≤ 105) — количество запросов.

    В каждой из следующих t строк записано по два целых числа li и ri (1 ≤ li ≤ ri ≤ n), описывающих один запрос.

    Выходные данные

    Выведите t строк. В i-й строке должно следовать количество муравьев из отрезка [li, ri], которые будут отданы на съедение Кроту.

    Примечание

    В первом тесте очки для каждого муравья такие: v = [4, 0, 2, 0, 2], так что муравей 1 освобождается. Крот съедает муравьев номер 2, 3, 4, 5.

    Во втором тесте очки такие: v = [0, 2, 0, 2], ни один муравей не освобождается, Крот съедает их всех.

    В третьем тесте очки такие: v = [2, 0, 2], освобождаются муравьи номер 3 и 5. Крот поедает только муравья номер 4.

    В четвертом тесте очки такие: v = [0, 1], так что муравей номер 5 освобождается. Крот съедает муравья номер 4.

    D. CGCDSSQ

    математика Перебор Структуры данных *2000

    Вам дана последовательность целых чисел a1, ..., an и q запросов x1, ..., xq. Для каждого запроса xi требуется подсчитать количество пар (l, r), таких, что 1 ≤ l ≤ r ≤ n и .

    По определению — это наибольший общий делитель v1, v2, ..., vn, то есть наибольшее целое число, которое делит каждое vi.

    Входные данные

    В первой строке записано целое число n, (1 ≤ n ≤ 105), означающее длину последовательности. В следующей строке записано через пробел n целых чисел a1, ..., an, (1 ≤ ai ≤ 109).

    В третьей строке записано целое число q, (1 ≤ q ≤ 3 × 105) — количество запросов. Затем следует q строк, в каждой строке записано целое число xi, (1 ≤ xi ≤ 109).

    Выходные данные

    Для каждого запроса выведите результат в отдельной строке.

    A. Dreamoon и ступеньки

    математика реализация *1000

    Dreamoon хочет подняться по лестнице, состоящей из n ступенек. За один шаг он может преодолеть 1 или 2 ступеньки. При этом, Dreamoon хочет, чтобы количество шагов было кратно целому числу m.

    Какое минимальное количество шагов ему придётся сделать, чтобы подняться, выполнив своё условие?

    Входные данные

    В единственной строке записано два целых числа через пробел — n, m (0 < n ≤ 10000, 1 < m ≤ 10).

    Выходные данные

    Выведите единственное число — минимальное количество шагов, кратное m. Если способа взобраться по лестнице, выполнив условие задачи, не существует, выведите  - 1.

    Примечание

    В первом примере Dreamoon может взойти по лестнице за 6 ходов, совершая следующие шаги: {2, 2, 2, 2, 1, 1}.

    Во втором примере есть только три подходящих последовательностей шагов {2, 1}, {1, 2}, {1, 1, 1} длины 2, 2, и 3 соответственно. Все эти числа не кратны 5.

    B. Dreamoon и WiFi

    битмаски дп Комбинаторика математика Перебор Теория вероятностей *1300

    Dreamoon стоит на отметке 0 на числовой прямой. Drazil отправляет ему на смартфон список команд через Wi-Fi, а Dreamoon следует им.

    Каждая команда относится к одному из двух типов:

    1. Пройти на 1 единицу в положительном направлении, обозначается как «+»
    2. Пройти на 1 единицу в отрицательном направлении, обозначается как «-»

    Но так как уровень сигнала Wi-Fi очень слабый, смартфон Dreamoon'а сообщает, что некоторые команды не поддаются распознаванию. Более того, Dreamoon знает, что даже некоторые из рапознанных команд могут быть неверными. Dreamoon решил выполнять каждую распознанную команду, а для нераспознанных команд бросать монетку (это значит, что он пойдёт на 1 единицу в положительном или отрицательном направлении с одинаковой вероятностью 0.5).

    Вам дан изначальный список команд, которые выслал Drazil, и список, который получил Dreamoon. Какова вероятность того, что Dreamoon окажется в том положении, к которому привели бы команды Drazil'а?

    Входные данные

    В первой строке записана строка s1 — команды, которые Drazil посылает Dreamoon'у, строка состоит только из символов из набора {«+», «-»}.

    Во второй строке записана строка s2 — команды, которые распознал смартфон Dreamoon'а, эта строка состоит только из символов из набора: {«+», «-», «?»}. Символом «?» обозначается нераспознанная команда.

    Обе строки одинаковой длины и не превышают 10.

    Выходные данные

    Выведите требуемую вероятность. Ответ будет сраниваться с относительной или абсолютной погрешностью 10 - 9.

    Примечание

    В первом примере как s1, так и s2 приведут Dreamoon'а к одной и той же позиции  + 1.

    Во втором примере s1 приведет Dreamoon'а к позиции 0, в то время как для s2 есть четыре варианта: {"+-++", "+-+-", "+--+", "+---"} с конечными позициями {+2, 0, 0, -2}, соответственно. Таким образом, есть 2 подходящих случая из 4, так что вероятность окончить путь в верной позиции равна 0.5.

    Для третьего примера, s2 может привести только к позициям {+1, -1, -1, -3}, таким образом, вероятность окончить путь в позиции  + 3 равна 0.

    C. Dreamoon и суммы

    математика *1600

    Dreamoon любит складывать различные числа. Как-то раз у него оказалось два целых числа, a и b. Он хочет посчитать сумму всех милых целых чисел. Положительное число x милое, если , а , где k — это некоторое целое число на отрезке [1, a].

    обозначает неполное частное от деления x на y. обозначает остаток от деления x на y. Подробнее об этих операциях можно прочитать здесь: http://goo.gl/1Y9L1E.

    Ответ может получиться большим, так что выведите его остаток от деления на 1 000 000 007 (109 + 7). Сможете ли вы вычислить результат быстрее, чем Dreamoon?

    Входные данные

    В единственной строке записано два целых числа a, b (1 ≤ a, b ≤ 107).

    Выходные данные

    Выведите единственное целое число — ответ по модулю 1 000 000 007 (109 + 7).

    Примечание

    В первом примере нет милых чисел, так как всегда равняется нулю.

    Во втором примере милые числа это: {3, 5}.

    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 человек.

    A. Выражение

    математика Перебор *1000

    Петя учится в школе и очень любит математику. Уже несколько занятий они с классом проходят арифметические выражения. На последнем уроке учительница написала на доске три положительных целых числа a, b, c. Задание заключалось в том, чтобы расставить между этими числами знаки операций '+' и '*', а также, возможно, скобки. Значение получившегося выражения должно быть как можно больше. Рассмотрим пример: пусть учительница выписала на доску числа 1, 2 и 3. Вот некоторые варианты расстановки знаков и скобок:

    • 1+2*3=7
    • 1*(2+3)=5
    • 1*2*3=6
    • (1+2)*3=9

    Обратите внимание на то, что знаки операций можно вставлять только между a и b, а также между b и c, то есть нельзя менять числа местами. Так, в приведенном примере нельзя получить выражение (1+3)*2.

    Легко убедиться, что максимальное значение, которое можно получить, — это 9.

    Ваша задача — по заданным a, b и c вывести, какое максимальное значение выражения можно получить.

    Входные данные

    Во входных данных записаны три целых числа a, b и c, каждое в отдельной строке (1 ≤ a, b, c ≤ 10).

    Выходные данные

    Выведите максимальное значение выражения, которое можно получить.

    C. Гонка

    математика *1800

    Каждый год на трассе между городами A и B проходит гонка. В этом году в гонке решил принять участие дядя Ваня на своем автомобиле, который уже достаточно пожил на свете и имеет собственное гордое имя — Драндулет.

    Итак, дядя Ваня выезжает из города A на Драндулете, причем в самом начале гонки он заливает в бак α литров бензина (α ≥ 10 — любимое число дяди Вани, оно не обязательно целое). Заправочные станции расположены на трассе с интервалом в 100 км, т.е. первая станция находится на расстоянии 100 км от города A, вторая — на расстоянии 200 км от города A, третья — 300 км и т.д. Драндулет расходует 10 литров бензина на 100 км. Доезжая до очередной заправки, дядя Ваня проверяет бак. Если оставшегося бензина не хватает, чтобы добраться до следующей заправки, дядя Ваня заливает в бак еще α литров бензина. Иначе он не останавливается на заправке и едет дальше.

    Например, если α = 43.21, то первая заправка произойдет на станции с номером 4, когда в баке останется 3.21 литров бензина. После заправки станет 46.42 литров. Дальше дядя Ваня останавливается на заправке с номером 8 и у него 6.42 + 43.21 = 49.63 литров. Следующая остановка — на заправке 12, 9.63 + 43.21 = 52.84. Следующая остановка — на 17-й станции и т.д.

    Вы не поверите, но пока Драндулет лидирует в гонке! Может быть, это объясняется неожиданным выпадением снега. Может быть, установкой вдоль трассы видеокамер, регистрирующих превышение скорости. Может быть, потому что дядя Ваня пригрозил Драндулету, что сдаст его по программе утилизации автохлама, если не выиграет гонку. Как бы то ни было, Драндулет едет впереди, а завистники и конкуренты ломают головы над тем, как же остановить это безобразие.

    Один из способов это сделать — заложить бомбу на следующей заправочной станции, где остановится дядя Ваня. Ваша задача — вычислить, на какой станции это произойдет и вовремя предупредить дядю Ваню. Число α вам неизвестно, зато дана последовательность номеров станций, на которых останавливался дядя Ваня. Определите номер станции, на которой произойдет следующая остановка.

    Входные данные

    В первой строке задано число n (1 ≤ n ≤ 1000) — количество заправочных станций, на которых останавливался дядя Ваня. В следующей строке через пробел заданы n целых чисел — номера этих станций. Номера являются положительными числами, не превосходящими 106, они заданы в порядке возрастания. Никакие два числа в последовательности не совпадают. Гарантируется, что существует хотя бы одно число α ≥ 10, которому соответствует данная последовательность остановок.

    Выходные данные

    Выведите в первой строке «unique» (без кавычек), если ответ определяется однозначно. Во второй строке выведите номер станции, на которой произойдет следующая остановка. Если ответ неоднозначен, выведите в первой строке «not unique».

    Примечание

    Во втором примере ответ неоднозначен. Если, например, α = 10, получим последовательность 1, 2, 3, а если α = 141, 2, 4.

    A. Опровержение гипотез

    математика Перебор реализация теория чисел *1100

    Ваш друг недавно узнал про взаимно простые числа. Пара чисел (a, b) называется взаимно простой, если максимальное число, которое делит оба числа a и b, равно единице.

    Ваш друг часто придумывает разные утверждения. Недавно он предположил, что если пара чисел (a, b) является взаимно простой и пара чисел (b, c) является взаимно простой, то пара чисел (a, c) является взаимно простой.

    Вы хотите опровергнуть утверждение вашего друга. Ваша задача — найти тройку различных чисел (a, b, c), для которой утверждение вашего друга неверно, и числа в тройке удовлетворяют условию l ≤ a < b < c ≤ r.

    Формально, вам нужно найти тройку чисел (a, b, c), такую что l ≤ a < b < c ≤ r, пары (a, b) и (b, c) взаимно простые, а пара (a, c) не является взаимно простой.

    Входные данные

    В единственной строке записано два целых положительных числа через пробел l, r (1 ≤ l ≤ r ≤ 1018; r - l ≤ 50).

    Выходные данные

    В единственной строке выведите три целых положительных числа через пробел a, b, c — искомую тройку различных чисел (a, b, c). Если существует несколько решений, разрешается вывести любое. Числа в тройке необходимо выводить в порядке возрастания.

    Если искомой тройки не существует, выведите единственное число -1.

    Примечание

    В первом примере пара (2, 4) не является взаимно простой, а пары (2, 3) и (3, 4) — взаимно простые.

    В втором примере нельзя составить тройку из трех различных чисел, поэтому ответ -1.

    В третьем примере нетрудно заметить, что числа 900000000000000009 и 900000000000000021 делятся на 3.

    B. Друзья и подарки

    Бинарный поиск математика *1800

    У вас есть два друга. Вы хотите подарить каждому другу некоторое количество целых положительных чисел. Первому другу вы хотите подарить cnt1 чисел, второму — cnt2 чисел. Более того, вы хотите, чтобы все подаренные числа были различными, в частности, ни одно число не должно достаться обоим друзьям.

    Кроме этого, первый друг не любит числа, которые делятся без остатка на простое число x. Второй друг не любит числа, которые делятся без остатка на простое число y. Конечно, вы не будете дарить друзьям числа, которые они не любят.

    Ваша задача — найти такое минимальное число v, такое что из набора чисел 1, 2, ..., v можно составить подарки друзьям. Естественно, некоторые числа можно не дарить никому из них.

    Положительное целое число, большее единицы, называется простым, если оно не делится нацело ни на одно положительное целое число кроме единицы и себя самого.

    Входные данные

    В первой строке записано четыре целых положительных числа cnt1, cnt2, x, y (1 ≤ cnt1, cnt2 < 109; cnt1 + cnt2 ≤ 109; 2 ≤ x < y ≤ 3·104) — описанные в условии числа. Гарантируется, что числа x, y являются простыми числами.

    Выходные данные

    Выведите единственное целое число — ответ на задачу.

    Примечание

    В первом примере первому другу вы подарите набор чисел {1, 3, 5}, а второму — набор {2}. Обратите внимание, что если мы подарили первому другу набор {1, 3, 5}, то мы не можем дарить второму другу ни одно из чисел 1, 3, 5.

    Во втором примере первому другу вы подарите набор из чисел {3}, а второму набор чисел {1, 2, 4}. Таким образом, ответ на задачу 4.

    B. Максимальное значение

    Бинарный поиск математика сортировки *2100

    Вам дана последовательность a, состоящая из n целых чисел. Найдите максимальное значение величины (остаток от деления ai на aj), где 1 ≤ i, j ≤ n и ai ≥ aj.

    Входные данные

    Первая строка содержит целое число n — длина последовательности (1 ≤ n ≤ 2·105).

    Во второй строке содержатся n целых чисел ai, разделенных пробелами (1 ≤ ai ≤ 106).

    Выходные данные

    Выведите ответ на задачу.

    C. Странная сортировка

    математика реализация *2600

    Много ли сортировок вы знаете? По возрастанию, по убыванию, по длине, по полярному углу... Познакомимся с еще одной: d-сортировкой. Эта сортировка применяется к строкам длины не менее, чем d, где d — некоторое целое положительное число. Символы в строке упорядочиваются следующим образом: сначала идут все 0-е символы исходной строки, потом 1-е, потом 2-е и так далее, в конце будут стоять все (d - 1)-е символы исходной строки. Под i-ми символами здесь подразумеваются символы, позиции которых при делении на d дают в остатке i. При этом, если два символа стоят на позициях с одинаковым остатком, то их относительный порядок после сортировки не меняется. Индексация в строке выполняется с нуля. Например, для строки «qwerty»:

    1-сортировка даст строку «qwerty» (все символы стоят на 0-позициях),

    2-сортировка даст строку «qetwry» (символы «q», «e» и «t» стоят на 0-позициях, а символы «w», «r» и «y» на 1-позициях),

    3-сортировка даст строку «qrwtey» (символы «q» и «r» стоят на 0-позициях, символы «w» и «t» на 1-позициях, а символы «e» и «y» на 2-позициях),

    4-сортировка даст строку «qtwyer»,

    5-сортировка даст строку «qywert».

    Вам дана строка S длины n и m операций перемешивания этой строки. Каждая операция перемешивания задается двумя целыми числами k и d и изменяет строку S следующим образом. Для каждого i от 0 до n - k в порядке возрастания к подстроке S[i..i + k - 1] применяется операция d-сортировки. Здесь под S[a..b] подразумевается подстрока, состоящая из символов на позициях от a до b включительно.

    После каждой операции перемешивания вам необходимо вывести строку S.

    Входные данные

    В первой строке ввода содержится непустая строка S длины n, состоящая из строчных и заглавных букв латинского алфавита и цифр от 0 до 9.

    Во второй строке ввода содержится целое число m – количество операций перемешивания (1 ≤ m·n ≤ 106).

    Далее в m строках идут описания операций в виде пары чисел k и d (1 ≤ d ≤ k ≤ n).

    Выходные данные

    После каждой операции выведите текущее состояние строки S.

    Примечание

    Рассмотрим пример подробнее. Первая модификация производится с параметрами k = 4, d = 2. Это означает, что нужно по очереди заменить все подстроки длины 4 на их 2-сортировки, двигаясь слева направо. Строка будет меняться следующим образом:

    qwerty  →  qewrty  →  qerwty  →  qertwy

    Тем самым строка S в итоге станет равна «qertwy».

    Вторая модификация производится с параметрами k = 6, d = 3. В результате этой операции вся строка S заменится на ее 3-сортировку:

    qertwy  →  qtewry

    Третья модификация производится с параметрами k = 5, d = 2.

    qtewry  →  qertwy  →  qetyrw

    A. Фабрика

    математика матрицы реализация *1400

    На одной промышленной фабрике проходит реформа рабочего дня. Директор предложил установить норму производства мифических деталей. Если к началу рабочего дня на заводе находилось x деталей, то по плану к концу должно быть произведено еще (остаток от деления x на m) деталей. К сожалению, пока не нашлось ни одного покупателя на мифические детали, поэтому все произведенные детали остаются на заводе.

    Совет директоров обеспокоен, не остановится ли производство по такому плану в один прекрасный день (а именно, не настанет ли момент, когда текущее количество деталей на заводе делится на m).

    По заданному количеству деталей a в первый день и числу m проверьте, остановится ли производство.

    Входные данные

    В первой строке содержатся два целых числа a и m (1 ≤ a, m ≤ 105).

    Выходные данные

    Выведете «Yes» (без кавычек), если производство может остановиться и «No» иначе.

    A. Подсчёт функции

    математика реализация *800

    Для положительного целого числа n определим функцию f:

    f(n) =  - 1 + 2 - 3 + .. + ( - 1)nn

    Ваша задача — посчитать f(n) для данного целого числа n.

    Входные данные

    В единственной строке записано положительное целое число n (1 ≤ n ≤ 1015).

    Выходные данные

    Выведите f(n) в единственной строке.

    Примечание

    f(4) =  - 1 + 2 - 3 + 4 = 2

    f(5) =  - 1 + 2 - 3 + 4 - 5 =  - 3

    D. Допустимые множества

    Деревья дп математика поиск в глубину и подобное *2100

    Как вы, наверное, знаете, неориентированный связный граф с n вершинами и n - 1 ребрами называется деревом. Вам дано целое число d и дерево, состоящее из n вершин. С каждой вершиной i связано её значение ai.

    Назовем множество S вершин дерева допустимым, если выполняются следующие условия:

    1. S является непустым множеством.
    2. S является связным множеством. Иными словами, если вершины u и v содержатся во множестве S, то все вершины, лежащие на простом пути между u и v должны также лежать в S.
    3. .

    Ваша задача — посчитать количество допустимых множеств. Так как результат может быть очень большим, выведите его остаток по модулю 1000000007 (109 + 7).

    Входные данные

    В первой строке содержатся два целых числа через пробел, d (0 ≤ d ≤ 2000) и n (1 ≤ n ≤ 2000).

    Во второй строке записано n целых положительных чисел, разделённых пробелами, a1, a2, ..., an(1 ≤ ai ≤ 2000).

    В следующих n - 1 строках записано по паре целых чисел u и v (1 ≤ u, v ≤ n), обозначающих наличие ребра между u и v. Гарантируется, что данный граф является деревом.

    Выходные данные

    Выведите количество допустимых множеств по модулю 1000000007.

    Примечание

    В первом примере можно найти ровно 8 допустимых множеств: {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {3, 4} и {1, 3, 4}. Множество {1, 2, 3, 4} не является допустимым, поскольку оно не отвечает третьему условию. Множество {1, 4} отвечает третьему условию, но противоречит второму условию.

    E. Наибольшие возрастающие подпоследовательности

    дп жадные алгоритмы математика Структуры данных хэши *2200

    Следующее занятие по структурам данных и алгоритмам будет посвящено наибольшей возрастающей подпоследовательности. Чтобы лучше разобраться в теме, Нам решил начать готовиться за несколько дней до занятия.

    Нам записал последовательность a, состоящую из n (1 ≤ n ≤ 105) элементов a1, a2, ..., an (1 ≤ ai ≤ 105). Подпоследовательность ai1, ai2, ..., aik, где 1 ≤ i1 < i2 < ... < ik ≤ n называется возрастающей, если ai1 < ai2 < ai3 < ... < aik. Возрастающая подпоследовательность называется наибольшей, если она обладает максимальной длиной среди всех возрастающих подпоследовательностей.

    Нам понимает, что у последовательности может быть несколько наибольших возрастающих подпоследовательностей. В связи с этим он хочет разделить все индексы i (1 ≤ i ≤ n) на три группы:

    1. группа всех i, таких, что ai не является элементом ни одной наибольшей возрастающей подпоследовательности.
    2. группа всех i, таких, что ai является элементом по крайней мере одной, но не каждой наибольшей возрастающей подпоследовательности.
    3. группа всех i, таких, что ai является элементом каждой наибольшей возрастающей подпоследовательности.

    Так как количество наибольших возрастающей подпоследовательностей a может быть очень большим, произвести подобное разделение очень непросто. Ваша задача — помочь Наму справиться с этим.

    Входные данные

    В первой строке записано единственное целое число n (1 ≤ n ≤ 105), обозначающее количество элементов последовательности a.

    Во второй строке записано n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 105).

    Выходные данные

    Выведите строку, состоящую из n символов. i-й символ должен равняться «1», «2» или «3» в зависимости от того, к какой группе из вышеперечисленных принадлежит индекс i.

    Примечание

    Во втором примере последовательность a состоит из 4 элементов: {a1, a2, a3, a4} = {1, 3, 2, 5}. В последовательности a есть ровно 2 наибольшие возрастающие подпоследовательности длины 3, а именно: {a1, a2, a4} = {1, 3, 5} и {a1, a3, a4} = {1, 2, 5}.

    В третьем примере последовательность a состоит из 4 элементов: {a1, a2, a3, a4} = {1, 5, 2, 3}. В последовательности a есть ровно 1 наибольшая возрастающая подпоследовательность длины 3, а именно {a1, a3, a4} = {1, 2, 3}.

    C. Последовательность частичных произведений

    Конструктив математика теория чисел *2300

    Рассмотрим последовательность [a1, a2, ... , an]. Определим последовательность частичных произведений как .

    Вам дано число n. Найдите такую перестановку последовательности [1, 2, ..., n], что её последовательность частичных произведений это некоторая перестановка чисел [0, 1, ..., n - 1].

    Входные данные

    В единственной строке ввода записано целое число n (1 ≤ n ≤ 105).

    Выходные данные

    В первой строке выведите «YES», если такая последовательность существует, или «NO», если такой последовательности не существует.

    Если решение существует, то выведите вывести ещё n строк. В i-ой строке надо вывести только число ai. Элементы последовательности должны быть различными целыми положительными числами, не превышающими n.

    Если решений несколько, можно вывести любое из них.

    Примечание

    Во втором примере корректной последовательности не существует.

    B. Коробки конфет

    Конструктив математика Перебор *1900

    В Киберленде есть древняя традиция держать в доме 4 коробки конфет. Количества конфет в коробках являются особенными, если их среднее арифметическое, медиана и диапазон совпадают. По определению, для набора чисел {x1, x2, x3, x4} (x1 ≤ x2 ≤ x3 ≤ x4) средним арифметическим называется , медианой называется , а диапазоном — x4 - x1. Среднее арифметическое и медиана не обязательно являются целыми числами. Хорошо известно, что набор коробок особенных размеров создаёт «отладочное поле» и программы в этом поле не будут содержать баги.

    Например, 1, 1, 3, 3 — возможные 4 числа, которые удовлетворяют указанному условию, их среднее арифметиеское, медиана и диапазон равны 2.

    У Джеффа есть 4 особенные коробки конфет. Но случилось нечто плохое! Некоторые коробки могли быть потеряны, и сейчас осталось ровно n (0 ≤ n ≤ 4) коробок. В i-й из оставшихся коробок лежит ai конфет.

    Теперь Джефф хочет знать, возможно ли подобрать количества конфет в 4 - n пропавших коробках так, чтобы набор удовлетворял условию (среднее арифметическое, медиана и диапазон равны между собой)?

    Входные данные

    В первой строке ввода записано единственное целое число n (0 ≤ n ≤ 4).

    В следующих n строках, записаны целые число ai, каждое из которых обозначает количество конфет в i-й коробке (1 ≤ ai ≤ 500).

    Данные числа ai могут следовать в любом порядке во вводе, а не обязательно в неубывающем.

    ai могли находиться на любых позициях в исходном наборе, а не обязательно на n первых позициях.

    Выходные данные

    В первой строке выведите «YES», если существует хотя бы одно решение, либо выведите «NO», если решения не существует.

    Если существует хотя бы одно решение, выведите ещё 4 - n строк, в каждой строке выведите число b, обозначающее количество конфет в одной из пропавших коробок.

    Значения b должны удовлетворять условию 1 ≤ b ≤ 106. Гарантируется, что если существует хотя бы одно положительное целочисленное решение, вы всегда сможете найти значения b, удовлетворяющие условию. Если есть несколько решений, можно вывести любое из них.

    Выводить значения b можно в любом порядке.

    Примечание

    В первом примере количество конфет в 4 коробках может быть равно 1, 1, 3, 3. Среднее арифметическое, медиана и диапазон равны 2.

    Во втором примере невозможно найти количества пропавших конфет.

    В третьем примере ни одна из коробок не пропала, и количества конфет удовлетворяют условию.

    B. Сумма

    математика *1500

    Вася изучает позиционные системы счисления. К сожалению, он часто забывает записать основание системы счисления, в которой записано выражение. Однажды он увидел в своей тетради запись a + b = ?, при этом основание системы счисления нигде записано не было. Теперь Вася должен выбрать некоторое основание p и считать что выражение записано в p-ичной системе счисления. Вася понял, что при разных основаниях он может получать разные ответы, а некоторые основания даже недопустимы. Например, выражение 78 + 87 в 16-ичной системе счисления равняется FF16, в 15-ичной: 11015, в 10-ичной: 16510, в 9-ичной: 1769, а в системах счисления с основанием 8 или меньше данное выражение недопустимо, т. к. все цифры должны быть строго меньше основания системы счисления. Васе стало интересно, какова длина самого длинного возможного значения выражения. Помогите ему найти эту длину.

    Под длиной числа следует понимать количество цифр в нем. Например, длина самого длинного ответа для 78 + 87 = ? — это 3. Это получается, например, в 15-ичной (11015), 10-ичной (16510), 9-ичной (1769) и некоторых других системах счисления.

    Входные данные

    В первой строке через пробел записано два числа a и b (1 ≤ a, b ≤ 1000) — заданные слагаемые.

    Выходные данные

    Выведите одно число — длину наидлиннейшего ответа.

    C. Расстановка

    Конструктив математика *1700

    Вася купил полное собрание сочинений известного берляндского поэта Пети в n томах. Тома нумеруются от 1 до n. Вася решил поставить их на одну полку, на которой как раз было n свободных мест, пронумерованных от 1 до n. Он считает, что ставить книги просто по порядку — некрасиво. Вася хочет минимизировать количество делителей расстановки — таких целых положительных чисел i, что для хотя бы одного j (1 ≤ j ≤ n) выполняется: j mod i = 0 и в то же время p(j) mod i = 0, где p(j) — номер тома, который стоит на j-ом месте, а mod — операция взятия остатка от деления. Естественно, один том может занимать ровно одно место, и на одном месте стоит ровно один том.

    Помогите Васе — найдите расстановку с наименьшим числом делителей.

    Входные данные

    В первой строке записано число n (1 ≤ n ≤ 100000) — количество томов и свободных мест.

    Выходные данные

    Выведите n чисел — искомую расстановку с наименьшим количеством делителей. j-ое число (1 ≤ j ≤ n) должно быть равно p(j) — номеру тома, который стоит на j-ом месте. Если решений несколько, выведите любое.

    C. Взлом шифра

    математика Перебор Строки теория чисел *1700

    Поликарп участвует в соревновании по взлому нового защищенного мессенджера. Для победы в конкурсе осталось совсем немного.

    Тщательно изучив протокол взаимодействия, Поликарп пришел к выводу, что секретный ключ можно получить, если правильным образом порезать на две части публичный ключ приложения. Публичным ключом является длинное целое число, которое может состоять даже из миллиона цифр!

    Поликарпу надо найти такой способ порезать публичный ключ на две непустые части, что первая (левая) часть как отдельное число делится на a, а вторая (правая) часть как отдельное число делится на b. Обе части должны быть положительными числами, не имеющими лидирующих нулей. Значения a и b Поликарпу известны.

    Помогите Поликарпу и найдите любой из подходящих способов порезать публичный ключ.

    Входные данные

    В первой строке входных данных записан публичный ключ мессенджера — целое число без ведущих нулей, имеющее длину от 1 до 106 цифр. Вторая строка содержит пару записанных через пробел целых положительных чисел a, b (1 ≤ a, b ≤ 108).

    Выходные данные

    В первую строку выведите «YES» (без кавычек), если искомый способ существует. Далее в этом случае выведите две строки — левую и правую части после разреза. Записанные подряд (сначала левая, потом правая) эти части должны в точности составлять публичный ключ. Левая часть должна делиться на a, а правая — на b. Обе части должны быть целыми положительными числами, не имеющими ведущих нулей. Если ответов несколько, выведите любой из них.

    Если ответа не существует, то выведите в единственной строке «NO» (без кавычек).

    D. Шоколадки

    meet-in-the-middle математика Перебор поиск в глубину и подобное теория чисел *1900

    Поликарпу нравится делать подарки Прасковье. Вот и сейчас он купил две плитки шоколада, каждая из них имеет форму прямоугольника из долек. Первая плитка имеет размеры a1 × b1 долек, а вторая — a2 × b2 долек.

    Поликарп хочет угостить на большой перемене Прасковью одной плиткой, а вторую съесть сам. Кроме того, он хочет подчеркнуть одинаковую значимость ума Поликарпа и красоты Прасковьи, поэтому плитки должны содержать одинаковое количество долек.

    Чтобы сделать плитки равными по количеству долек, Поликарп каждую минуту съедает немного шоколада. Каждую минуту он:

    • либо разламывает одну плитку ровно пополам (вертикально или горизонтально) и съедает ровно половину шоколадки,
    • либо отламывает от плитки ровно одну треть (вертикально или горизонтально) и съедает ровно треть шоколадки.

    В первом случае от плитки останется половина, а во втором — две трети.

    Не всегда возможны оба развития событий, а иногда бывает, что Поликарп вообще не может отломить половину или треть. Например, если плитка имеет размер 16 × 23, то от нее можно отломить половину, но нельзя одну треть. Если плитка имеет размер 20 × 18, то от нее можно отломить как половину, так и треть. Если плитка имеет размер 5 × 7, то отломить как половину так и треть невозможно.

    Какое минимальное количество минут понадобится Поликарпу, чтобы сделать обе плитки одинаковыми по количеству долек в них? Найдите не только искомое минимальное количество минут, но и возможные размеры плиток после их вынужденного «уравнивания».

    Входные данные

    В первой строке входных данных записаны целые числа a1, b1 (1 ≤ a1, b1 ≤ 109) — первоначальные размеры первой шоколадки. Во второй строке входных данных записаны целые числа a2, b2 (1 ≤ a2, b2 ≤ 109) — первоначальные размеры второй шоколадки.

    Вы можете использовать типы данных int64 (в Паскале), long long (в С++), long (в Java) для работы с большими целыми числами (превосходящими 231 - 1).

    Выходные данные

    В первую строку выведите m — искомое минимальное количество минут. Во вторую и третью строки выведите возможные размеры плиток после их уравнивания за m минут. Выводите размеры, используя формат, аналогичный формату входных данных. Размеры (числа в выводимых парах) выводите в любом порядке. Вторая строка должна соответствовать первой шоколадке, а третья — второй. Если решений несколько, выведите любое из них.

    Если решения не существует, то выведите единственную строку с числом -1.

    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). В следующих строках содержатся описания ресторанов, в том же формате, что и отели.

    Несколько ресторанов и отелей могут располагаться возле одного и того же перекрестка.

    Выходные данные

    В первой строке выходных данных выведите одно число — искомое оптимальное расстояние. В следующей строке выведите номер любого из ресторанов, гарантирующих данное расстояние. Если вариантов ответа несколько, выведите любой.

    B. Ваня и фонари

    Бинарный поиск математика реализация сортировки *1200

    Ваня идет поздней ночью по прямолинейной улице длины l, которая освещается n фонарями. Введём систему координат, в которой начало улицы соответствует точке 0, а её конец — точке l. Тогда i-й фонарь находится в точке ai. Фонарь освещает все точки улицы, которые находятся от него на расстоянии не больше d, где d — некоторое положительное число, общее для всех фонарей.

    Ваня хочет узнать, какой минимальный радиус освещения d должен быть у фонарей, чтобы вся улица была освещена.

    Входные данные

    В первой строке записаны два целых числа n, l (1 ≤ n ≤ 1000, 1 ≤ l ≤ 109) — количество фонарей и длина улицы соответственно.

    В следующей строке записано n целых чисел ai (0 ≤ ai ≤ l). Несколько фонарей могут находиться в одной точке. Фонари могут находиться в концах улицы.

    Выходные данные

    Выведите минимальный радиус освещения d, который необходим, чтобы осветить всю улицу. Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает 10 - 9

    Примечание

    Рассмотрим второй пример. При d = 2 первый фонарь будет освещать отрезок [0, 4] улицы, а второй — отрезок [3, 5]. Таким образом, вся улица будет освещена.

    D. Ваня и компьютерная игра

    Бинарный поиск математика реализация сортировки *1800

    Ваня с другом Вовой играют в компьютерную игру, для прохождения уровня им нужно победить n монстров. Персонаж Вани наносит удары со скоростью x ударов за секунду, а персонаж Вовы — со скоростью y ударов за секунду. Каждый из персонажей тратит фиксированное время на замах, после которого наносится удар (время на замах составляет 1 / x секунды для первого персонажа и 1 / y секунды для второго). i-й монстр умирает после получения ai ударов.

    Ване с Вовой стало интересно, кто нанесет последний удар каждому из монстров. Если Ваня с Вовой одновременно наносят последний удар, то считается, что последний удар нанесли оба из них.

    Входные данные

    В первой строке записано три целых числа n,x,y (1 ≤ n ≤ 105, 1 ≤ x, y ≤ 106) — количество монстров, скорость атаки Вани и Вовы соответственно.

    В следующих n строках записаны целые числа ai (1 ≤ ai ≤ 109) — количество ударов, необходимое, чтобы победить i-го монстра.

    Выходные данные

    Выведите n строк. В i-й строке требуется вывести слово «Vanya», если последний удар по i-му монстру был нанесён Ваней, «Vova», если Вовой, либо «Both», если удар был нанесен ребятами одновременно.

    Примечание

    В первом примере первый удар наносит Ваня в момент времени 1 / 3, второй удар наносит Вова в момент времени 1 / 2, третий удар наносит Ваня в момент времени 2 / 3, четвертый и пятый удар Ваня и Вова наносят одновременно в момент времени 1.

    Во втором примере Ваня и Вова одновременно наносят первый и второй удар в момент времени 1.

    E. Ваня и поле

    математика *2000

    Ваня решил выйти погулять в поле размером n × n клеток. На поле размещены m яблонь, i-я яблоня находится в клетке с координатами (xi, yi). Ваня движется в направлении вектора (dx, dy). Это значит, что если сейчас Ваня находится в клетке (x, y), то через секунду он будет находиться в клетке . Для вектора выполняется следующее условие: , где под обозначается наибольшее целое число, на которое делится нацело как a, так и b. Ваня заканчивает свой путь, когда он оказывается в клетке, в которой уже побывал.

    Ване интересно, с какой клетки поля ему следует начать свой путь, чтобы увидеть как можно больше яблонь.

    Входные данные

    В первой строке записаны целые числа n, m, dx, dy(1 ≤ n ≤ 106, 1 ≤ m ≤ 105, 1 ≤ dx, dy ≤ n) — размер поля, количество яблонь и вектор направления движения Вани. В следующих m строках содержатся целые числа xi, yi (0 ≤ xi, yi ≤ n - 1) — координаты яблонь. В одной клетке могут находиться несколько яблонь.

    Выходные данные

    Выведите два числа через пробел — координаты клетки, с которой стоит начать путь. Если возможных ответов несколько, разрешается вывести любой из них.

    Примечание

    В первом примере путь Вани будет выглядеть следующим образом: (1, 3) - (3, 1) - (0, 4) - (2, 2) - (4, 0) - (1, 3)

    Во втором примере: (0, 0) - (1, 1) - (0, 0)

    D. Вася и шахматы

    игры Конструктив математика *1700

    Вася решил научиться играть в шахматы. Обычные шахматы для него не представляют большого интереса, поэтому он играет в свою разновидность шахмат.

    Ферзь — это фигура, которая бьет все клетки на своей вертикали, горизонтали и диагонали. Если в клетке, которая находится под боем, расположена фигура вражеского цвета, ферзь может быть перемещён в эту клетку, при этом вражеская фигура снимается с доски. Ферзь не может побить вражескую фигуру, если между ферзем и этой фигурой есть какая-то другая фигура.

    Есть шахматная доска n × n. Будем обозначать клетку на пересечении r-й горизонтали и c-й вертикали как (r, c). На поле (1, 1) стоит белый ферзь, на поле (1, n) — черный ферзь. На всех других полях стоят зеленые пешки, за которых никто не играет.

    Игроки ходят по очереди. Игрок, делающий ход первым, играет за белого ферзя, его оппонент — играет за чёрного ферзя.

    На каждом ходу игрок обязан бить своим ферзём некоторую фигуру (т. е. ходить в клетку, в которой расположена либо зелёная пешка, либо вражеский ферзь). Игрок проигрывает, если к его ходу нет ни одной фигуры, которую можно бить, либо если прошлым ходом оппонент взял его ферзя.

    Помогите Васе определить, кто побеждает при правильной стратегии на доске n × n.

    Входные данные

    На вход даётся единственное число n (2 ≤ n ≤ 109) — размер доски.

    Выходные данные

    В первой строке выведите ответ на задачу — строку «white» или строку «black», в зависимости от того, кто выиграет при правильной игре.

    Если ответ — «white», то также требуется вывести два числа r и c, обозначающих клетку (r, c), в которую следует совершить первый ход первому игроку, чтобы гарантированно победить. Если таких клеток несколько, выведите клетку с минимальным r. Если и таких клеток несколько, то выведите клетку с минимальным c.

    Примечание

    В первом тесте из условия у белого ферзя есть возможность сразу побить чёрного ферзя, таким образом, белые выигрывают.

    Во втором тесте из условия если белый ферзь побьёт зелёную пешку, расположенную на центральной вертикали, он будет следующим ходом побит чёрным ферзём, поэтому единственный ход для белых — взять зелёную пешку, расположенную в (2, 1).

    Аналогично, у чёрного ферзя нет другой возможности, кроме как взять зелёную пешку, расположенную в (2, 3), иначе, оказавшись на средней вертикали, он будет побит белым ферзём.

    На следующем ходу происходит то же самое — ни у белого, ни у чёрного ферзя нет других возможностей, кроме как взять зелёные пешки, расположенные над ними. Таким образом, белый ферзь окажется на клетке (3, 1), а чёрный ферзь — на клетке (3, 3).

    В этой ситуации белый ферзь обязан побить какую-то из зелёных пешек, расположенных на средней вертикали, после чего он будет бит чёрным ферзём. Таким образом, игрок, играющий за чёрного ферзя, выигрывает.

    E. Вася и многочлен

    математика *2800

    Вася учится в выпускном классе школы, и скоро ему надо сдать экзамены. В качестве подготовки он изучает многочлены. Многочлен — это функция P(x) = a0 + a1x1 + a2x2 + ... + anxn. Числа ai называются коэффициентами многочлена а неотрицательное целое число nстепенью многочлена.

    Вася — азартный мальчик. Он поспорил с друзьями, что решит любую задачу о многочленах. Друзья предложили ему следующую задачу: «Определить, сколько существует многочленов P(x) с целыми неотрицательными коэффициентами ai, таких, что , а , где , a и b — данные целые положительные числа.»

    Вася совсем не любит проигрывать споры, но по данной задаче у него совсем нет идей, поэтому он обратился к вам за помощью.

    Входные данные

    На вход подаются три целых числа - ().

    Выходные данные

    Если искомых многочленов бесконечно много, то выведите строку «inf» без кавычек. Иначе выведите остаток от деления их количества на 109 + 7.

    Примечание

    В первом тесте из условия подходящими являются многочлены P(x) = 2 и P(x) = x.

    Во втором тесте из условия подходящими являются многочлены P(x) = 3.

    B. Модулярные уравнения

    математика теория чисел *1600

    На прошлой неделе Хамед узнал новый тип уравнения на уроке математики — модулярное уравнение. Определим i по модулю j как остаток от деления i на j и обозначим его как . Модулярное уравнение, как рассказал учитель Хамеда, это уравнение вида , в котором a и b — два неотрицательных целых числа, а x — переменная. Назовем положительное целое число x, для которого , решением нашего уравнения.

    Хамед смотрел фильм во время урока и много отвлекался. Он смог понять только определение уравнения.

    Ему нужно сделать упражнения по математике, да вот беда — он совершенно не имеет представления, как решать модулярные уравнения. Потому он обратился к вам за помощью. Он рассказал вам всё, что знает о модулярных уравнениях, и попросил написать программу, которая по двум числам a и b, вычисляет количество решений модулярного уравнения .

    Входные данные

    В единственной строке ввода даны два целых числа, a и b (0 ≤ a, b ≤ 109).

    Выходные данные

    Если существует бесконечное количество решений данного уравнения, выведите «infinity» (без кавычек). В противном случае, выведите количество решений модулярного уравнения .

    Примечание

    В первом примере решения модулярного уравнения — 8 и 16, так как

    A. Минимальная сложность

    математика Перебор реализация *900

    Миша пытается заниматься скалолазанием, но получается у него из рук вон плохо.

    На стене висят n зацепок, i-я из которых расположена на высоте ai от земли. Кроме того, пусть последовательность ai возрастает, т.е. ai < ai + 1 для всех i от 1 до n - 1; назовем такую последовательность трассой. Миша считает, что трасса a1, ..., an обладает сложностью . Иными словами, сложность равна максимальному расстоянию между соседними по высоте зацепками.

    Сегодня Миша решил пролезть трассу, в которой зацепки висят на высотах a1, ..., an. Чтобы усложнить себе задачу, Миша решил снять одну из зацепок, т.е. удалить один элемент последовательности (например, если из последовательности (1, 2, 3, 4, 5) удалить третий элемент, останется последовательность (1, 2, 4, 5)). Однако, поскольку лазает Миша плохо, он хочет, чтобы после удаления сложность (т. е. максимальная разность высоты между соседними зацепками) была минимальной среди всех возможных вариантов снять одну зацепку. Первая и последняя зацепка должны остаться на месте.

    Помогите Мише определить минимальную сложность трассы после снятия одной зацепки.

    Входные данные

    Первая строка содержит одно целое число n (3 ≤ n ≤ 100) — количество зацепок.

    Следующая строка содержит n целых чисел ai (1 ≤ ai ≤ 1000), разделенных пробелами, где ai — высота, на которой висит зацепка номер i. Последовательность ai возрастает (т.е. каждый элемент, кроме первого, строго больше предыдущего).

    Выходные данные

    Выведите одно число — минимальную сложность трассы после снятия одной зацепки.

    Примечание

    В первом тесте можно удалить только вторую зацепку, после нее последовательность примет вид (1, 6), максимальная разность соседних элементов равна 5.

    Во втором тесте после удаления любой зацепки сложность равна 2.

    В третьем тесте можно получить последовательности (1, 3, 7, 8), (1, 2, 7, 8), (1, 2, 3, 8), для которых сложность составляет 4, 5 и 5 соответственно. Таким образом, ответ достигается при удалении второго элемента и равен 4.

    D. Шестерни

    геометрия математика Перебор *2900

    На плоскости расположены два многоугольника A и B. Многоугольник A вращается вокруг точки P, а многоугольник B — вокруг точки Q. Каждый многоугольник вращается с постоянной угловой скоростью по часовой стрелке вокруг своей точки, угловые скорости вращения многоугольников совпадают.

    Требуется определить, произойдет ли когда-нибудь столкновение между многоугольниками. Под столкновением подразумевается ситуация, в которой многоугольники имеют хотя бы одну общую точку.

    Гарантируется, что в момент времени 0 многоугольники A и B не пересекаются, и ни один из многоугольников не содержится целиком внутри другого.

    Обратите внимание, что:

    • многоугольники могут не являться выпуклыми;
    • точки P и Q могут находиться на границе или вне своих многоугольников.
    Входные данные

    В первой строке через пробел записаны координаты точки P.

    Во второй строке записано одно целое число n (3 ≤ n ≤ 1000) — количество вершин многоугольника A.

    В каждой их следующих n строк записано по два числа, разделенных пробелом — координаты очередной вершины многоугольника A.

    Следующая строка оставлена пустой.

    Далее следуют через пробел координаты точки Q.

    В следующей строке находится одно целое число m (3 ≤ m ≤ 1000) — количество вершин многоугольника B. Далее в m строках в аналогичном формате описаны координаты координаты вершин многоугольника B.

    Вершины обоих многоугольников перечислены в порядке обхода против часовой стрелки. Все координаты точек — целые числа, по модулю не превосходящие 104.

    Выходные данные

    Выведите «YES», если столкновение произойдет, и «NO» в противном случае.

    Примечание

    Многоугольником называется замкнутая ломаная без самопересечений и самокасаний.

    Картинка к первому примеру:

    D. Соблюдай правила

    математика реализация *2100

    Все знают, что столица Берляндии соединена с Беркувером (столицей Олимпиады) прямой дорогой. Для того, чтобы дорога обладала наибольшей пропускной способностью на ней был установлен всего один знак, ограничивающий максимальную скорость. Знаки в Берляндии особенные - они ограничивают скорость движения лишь в той точке, в которой они установлены. Сразу после проезда знака движение разрешено с любой скоростью.

    Известно, что автомобиль среднестатистического берляндца разгоняется (или тормозит) с ускорением a км/ч2 и развивает максимальную скорость v км/ч. Дорога имеет длину l км и на расстоянии d км (1 ≤ d < l) от столицы Берляндии расположен знак, ограничивающий максимальную скорость до w км/ч. В начале поездки автомобиль имеет нулевую скорость. Определите минимальное время, за которое среднестатистический берляндец доедет из столицы в Беркувер, если будет двигаться оптимальным образом.

    Автомобиль может финишировать в Беркувере с любой скоростью.

    Входные данные

    В первой строке входного файла содержатся два целых числа a и v (1 ≤ a, v ≤ 10000). Вторая строка содержит три целых числа l, d и w (2 ≤ l ≤ 10000; 1 ≤ d < l; 1 ≤ w ≤ 10000).

    Выходные данные

    Выведите ответ не менее, чем с пятью знаками после десятичной точки.

    A. Укладка доминошками

    жадные алгоритмы математика *800

    Дана прямоугольная клеточная доска размера M × N клеток. Также дано неограниченное количество стандартных доминошек размера 2 × 1 клетку. Доминошки можно поворачивать. Требуется уложить как можно больше доминошек на доску так, чтобы соблюдались следующие условия:

    1. Каждая доминошка полностью покрывает две клетки доски.

    2. Никакие две доминошки не перекрываются.

    3. Каждая доминошка полностью лежит внутри доски. Касание краев доски допускается.

    Найдите максимальное количество доминошек, которое можно уложить с данными ограничениями.

    Входные данные

    В единственной строке записано два целых числа M и N — размеры доски в клетках (1 ≤ M ≤ N ≤ 16).

    Выходные данные

    Выведите одно число — максимальное количество доминошек, которое можно уложить.

    E. Корни квадратного уравнения

    математика *2300

    Школьник Петя изучает квадратные уравнения. Уравнения, которые дают в школе, обычно имеют простой вид:

    x2 + 2bx + c = 0
    где b, c — натуральные числа.

    Петя заметил, что некоторые уравнения имеют два вещественных корня, некоторые только один, а некоторые уравнения вообще не имеют вещественных корней. Более того, оказалось, что несколько различных квадратных уравнений могут иметь общий корень.

    Пете интересно, сколько вообще различных вещественных корней имеют все уравнения вышеописанного вида для всевозможных пар чисел b и c таких, что 1 ≤ b ≤ n, 1 ≤ c ≤ m. Помогите Пете узнать это число.

    Входные данные

    В единственной строке записаны два целых числа n и m. (1 ≤ n, m ≤ 5000000).

    Выходные данные

    Выведите одно целое число — количество различных вещественных корней описанного семейства уравнений.

    Примечание

    Во втором тесте из условия рассматриваются уравнения:

    b = 1, c = 1: x2 + 2x + 1 = 0; Корень x =  - 1

    b = 1, c = 2: x2 + 2x + 2 = 0; Корней нет

    Всего один корень.

    В первом тесте рассматриваются уравнения:

    b = 1, c = 1: x2 + 2x + 1 = 0; Корень x =  - 1

    b = 1, c = 2: x2 + 2x + 2 = 0; Корней нет

    b = 1, c = 3: x2 + 2x + 3 = 0; Корней нет

    b = 2, c = 1: x2 + 4x + 1 = 0; Корни

    b = 2, c = 2: x2 + 4x + 2 = 0; Корни

    b = 2, c = 3: x2 + 4x + 3 = 0; Корни x1 =  - 3, x2 =  - 1

    b = 3, c = 1: x2 + 6x + 1 = 0; Корни

    b = 3, c = 2: x2 + 6x + 2 = 0; Корни

    b = 3, c = 3: x2 + 6x + 3 = 0; Корни

    Всего корней 13, и поскольку корень  - 1 повторяется дважды, то различных из них 12.

    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) — порядок книг, которые парень хотел бы прочитать. Обратите внимание, что он может читать одну и ту же книгу более одного раза.

    Выходные данные

    Выведите минимальный суммарный вес книг, которые надо поднять парню, достижимый перестановкой уложенных книг.

    Примечание

    Приведем картинку, описывающую пример. Каждая вертикальная колонка обозначает уложенные книги.

    B. Amr и булавки

    геометрия математика *1400

    Amr любит геометрию, однажды он придумал очень интересную задачу.

    У Amr есть круг с радиусом r, его центр расположен в точке (x, y). Он хочет переместить круг так, чтобы его центр оказался в (x', y').

    За один ход Amr может приколоть булавку к границе круга в определенной точке, затем повернуть круг вокруг булавки на любой угол и убрать булавку.

    Помогите Amr достигнуть результата за минимальное количество шагов.

    Входные данные

    На ввод подаются 5 целых чисел, разделённых пробелами, r, x, y, x' y' (1 ≤ r ≤ 105,  - 105 ≤ x, y, x', y' ≤ 105), радиус круга, координаты исходного местоположения центра и координаты требуемого местоположения центра соответственно.

    Выходные данные

    Выведите единственное целое число, обозначающее минимальное количество шагов, необходимых для того, чтобы передвинуть центр круга в требуемую позицию.

    Примечание

    В первом примере оптимальный способ — поместить булавку в точку (0, 2) и повернуть круг на 180 градусов против часовой стрелки (или по часовой стрелке, это непринципиально).

    C. Угадай, где выход!

    Деревья математика реализация *1700

    Amr купил новую компьютерную игру "Угадай, где выход!". Цель игры— найти выход из лабиринта, похожего на полное двоичное дерево высоты h. Изначально игрок стоит в корне дерева, выход из дерева расположен в некотором листе дерева.

    Пронумеруем все листы слева направо числами от 1 до 2h. Выход расположен в некоторой вершине n, где 1 ≤ n ≤ 2h.

    Amr пользуется следующим простым алгоритмом выбора пути. Рассмотрим бесконечную строку "LRLRLRLRL..." (состоящую из чередующихся символов 'L' и 'R'). Amr последовательно выполняет символы строки по следующим правилам:

    • Символ 'L' означает "перейти к левому сыну текущей вершины";
    • Символ 'R' означает "перейти к правому сыну текущей вершины";
    • Если вершину, в которую ведёт текущая команда, Amr уже это этого посещал, то он пропускает текущую команду, в противном случае он переходит в эту вершину;
    • Если Amr пропустил две последовательные команды, то он возвращается к предку текущей вершины перед тем, как выполнять следующую команду;
    • Если он оказался в листе, который не является выходом, он сразу возвращается к предку текущей вершины;
    • Если он достиг выхода, игра заканчивается.

    Теперь Amr интересно: если он будет следовать этому алгоритму, сколько вершин он посетит до того, как достичь выхода?

    Входные данные

    Ввод состоит из двух целых чисел, h, n (1 ≤ h ≤ 50, 1 ≤ n ≤ 2h).

    Выходные данные

    Выведите единственное целое число, обозначающее количество вершин (не включая лист, в котором расположен выход), которые Amr посетит перед тем, как добраться до выхода, следуя этому алгоритму.

    Примечание

    Полное двоичное дерево высоты h— это двоичное дерево, состоящее из h + 1 уровня. Уровень 0 состоит из единственной вершины, которая называется корень, уровень h состоит из 2h вершин, которые называются листьями. Каждая вершина, не являющаяся листом, имеет ровно двух потомков, левого и правого.

    Следующая картина иллюстрирует третий тест из условия. Вершины помечены в порядке их посещения.

    B. Антон и та самая валюта

    жадные алгоритмы математика Строки *1300

    Берляндия, 2016 год. Курс той самой валюты по отношению к бурлю настолько вырос, что для простоты вычислений его дробной частью стали пренебрегать, а сам курс теперь считается целым числом.

    Надёжные источники сообщили ворчливому финансисту Антону некоторую информацию о курсе той самой валюты по отношению к бурлю на завтра. Теперь Антон знает, что завтра курс будет четным числом, которое можно получить из сегодняшнего курса, поменяв в нём местами ровно две различные цифры. Из всех возможных значений, удовлетворяющих этим условиям, курс на завтра будет максимально возможным. Гарантируется, что на сегодняшний день курс — положительное нечётное число n. Помогите Антону определить курс той самой валюты на завтра!

    Входные данные

    В первой строке следует целое положительное нечётное число n — курс той самой валюты на сегодняшний день. Длина записи числа n лежит в пределах от 2 до 105 включительно. Запись n не содержит ведущих нулей.

    Выходные данные

    Если информация о завтрашнем курсе оказалась противоречивой, то есть ни одного целого числа, удовлетворяющего условию, не существует, выведите  - 1.

    В противном случае, выведите курс той самой валюты по отношению к бурлю на завтра. Это должно быть максимально возможное число из тех, которые являются чётными, и которые получаются из сегодняшнего курса путём обмена ровно двух цифр. Запись завтрашнего курса не должна содержать ведущих нулей.

    D. Восстановление чисел

    Конструктив математика *2200

    У Васи было два массива, составленных из целых неотрицательных чисел: a размера n и b размера m. Вася выбрал натуральное число k и построил таблицу v размера n × m по следующему правилу:

    Вася записал таблицу v на листок и положил в стол.

    Спустя год Вася, копаясь в кипе вещей в столе, нашёл какой-то листок, на котором была записана таблица w размера n × m. Он вспомнил, что когда-то давно строил таблицу по вышеописанным правилам, но он не уверен, что нашёл тот самый листок с таблицей v. Ваша задача — выяснить, могла ли найденная таблица w быть получена по этим правилам, и если да, то определить какой-нибудь набор чисел k, a1, a2, ..., an, b1, b2, ..., bm, по которым могла полуиться такая таблица.

    Входные данные

    В первой строке заданы натуральные числа n и m (1 ≤ n, m ≤ 100), разделенные пробелом — количество строк и столбцов в найденной таблице соответственно.

    В i-й из последующих строк следуют числа wi, 1, wi, 2, ..., wi, m (0 ≤ wi, j ≤ 109), разделенные пробелами — элементы i-й строки таблицы w.

    Выходные данные

    Если таблица w не могла быть получена указанным в условии способом, в единственной строке выведите «NO» (без кавычек).

    Иначе нужно вывести четыре строки.

    В первой строке выведите «YES» (без кавычек).

    Во второй строке выведите натуральное число k (1 ≤ k ≤ 1018). Обратите внимание, что каждый элемент таблицы w должен лежать в пределах от 0 до k - 1 включительно.

    В третьей строке выведите n натуральных чисел a1, a2, ..., an (0 ≤ ai ≤ 1018).

    В четвертой строке выведите m натуральных чисел b1, b2, ..., bm (0 ≤ bi ≤ 1018).

    Примечание

    Под записью подразумевается остаток от целочисленного деления b на c.

    Гарантируется, что если существует какой-то набор чисел k, a1, ..., an, b1, ..., bm, по которому могла быть построена таблица w, то существует и набор чисел, удовлетворяющий ограничениям 1 ≤ k ≤ 1018, 1 ≤ ai ≤ 1018, 1 ≤ bi ≤ 1018. Иными словами, эти верхние границы введены только для удобства проверки.

    E. Мелодичная песня

    математика Строки *2000

    В седьмом классе Саша начал слушать музыку. Для того чтобы оценивать, какая из песен нравится ему больше, он ввел понятие мелодичности песни. Название песни — это слово из заглавных латинских букв. Мелодичность песни это мелодичность её названия.

    Назовем простой мелодичностью слова отношение количества гласных букв в слове к количеству всех букв в слове.

    Назовем мелодичностью слова сумму простых мелодичностей всех подстрок слова.

    Более формально, определим функцию vowel(c), равную 1, если c — гласная, и 0 иначе. Пусть sii-й символ строки s, а si..j — подстрока слова s, начинающаяся с i-го символа и заканчивающаяся j-м символом (sisi + 1... sj, i ≤ j).

    Тогда простая мелодичность s определяется по формуле:

    Мелодичность s равна

    Найдите мелодичность данной песни.

    Гласными буквами считаются I, E, A, O, U, Y.

    Входные данные

    На ввод подаётся единственная строка s (1 ≤ |s| ≤ 5·105) — название песни.

    Выходные данные

    Определите мелодичность песни с абсолютной или относительной погрешностью не более 10 - 6.

    Примечание

    В первом примере все буквы — гласные. Простая мелодичность каждой подстроки равна 1.

    Всего в слове длины 7 имеется 28 подстрок. Значит, мелодичность песни равна 28.

    D. Лиса и прыжки

    битмаски дп математика Перебор *1900

    Лиса Ciel играет в игру. Она стоит на бесконечной длинной ленте с ячейками, пронумерованными целыми числами (положительными, отрицательными и нулем). В начале она стоит в ячейке 0.

    Также есть n карточек, каждая из которой характеризуется числом li и стоимостью ci. Если лиса заплатит ci долларов, то она сможет применить i-ю карточку. После применения i-й карточки лиса сможет совершать прыжки длины li, то есть, от ячейки x к ячейке (x - li) или ячейке (x + li).

    Лиса хочет научиться прыгать в любую ячейку на ленте (возможно, посетив некоторые промежуточные ячейки). Для достижения этой цели она хочет купить некоторое количество карточек, заплатив при этом как можно меньше денег.

    Если этого возможно добиться, посчитайте минимальную стоимость.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 300), количество карточек.

    Во второй строке записано n чисел li (1 ≤ li ≤ 109), длины прыжков, указанные на карточках.

    В третьей строке записано n чисел ci (1 ≤ ci ≤ 105), стоимости карточек.

    Выходные данные

    Если невозможно купить некоторое количество карточек и получить возможность прыгнуть в любую ячейку, выведите -1. В противном случае, выведите минимальную стоимость покупки такого набора карточек.

    Примечание

    В первом примере недостаточно купить одну карточку: например, если купить карточку для прыжков длины 100, то нельзя прыгнуть ни в одну ячейку, номер которой не кратен 100. Оптимальный способ — купить первую и вторую карточку, тогда можно будет добраться до любой ячейки.

    Во втором примере, даже если купить все карточки, то вы не сможете прыгнуть ни в одну ячейку, номер которой не кратен 10, так что ответ — -1.

    A. Игра

    Конструктив математика *800

    Два игрока играют в простую игру. У каждого игрока есть коробка с шарами, причем коробка первого игрока содержит ровно n1 шаров, а коробка второго игрока содержит ровно n2 шаров. За один ход первый игрок может взять от 1 до k1 шаров из своей коробки и выкинуть их. Аналогичным образом, за один ход второй игрок может взять от 1 до k2 шаров из своей коробки и выкинуть их. Игроки ходят по очереди и первый игрок начинает игру. Проигрывает тот, кто не может сделать ход. Ваша задача определить, кто выигрывает игру, если оба игрока совершают ходы оптимальным образом.

    Входные данные

    Единственная строка входных данных содержит четыре целых числа n1, n2, k1, k2. Все числа во входных данных не меньше 1 и не больше 50.

    В этой задаче нет подзадач. За ее решение вы получите 3 балла.

    Выходные данные

    Выведите "First" если выигрывает первый игрок и "Second" в противном случае.

    Примечание

    Рассмотрим первый тест из условия. Каждый игрок владеет коробкой с двумя шарами. Первый игрок может взять только один шар за один ход, а второй игрок за один ход может взять либо один либо два шара. Нетрудно заметить, что вне зависимости от ходов первого, второй игрок всегда выигрывает, если играет оптимально.

    B. Хан Соло и лазерная пушка

    геометрия математика Перебор реализация Структуры данных *1400

    На поле боя размещены n имперских штурмовиков. Поле боя представляет собой плоскость с прямоугольной системой координат. Каждый штурмовик задан своими координатами (x, y) на этой плоскости.

    У Хана Соло есть новейшая двусторонняя лазерная пушка для сражения с этими штурмовиками. Она расположена в точке с координатами (x0, y0). За один выстрел она способна поразить всех штурмовиков, находящихся на некоторой прямой, проходящей через точку (x0, y0).

    Требуется определить, за какое минимальное количество выстрелов Хан Соло сможет уничтожить всех штрумовиков.

    Так как пушка — новейшее изобретение, она стреляет очень быстро и штурмовики даже после очень большого количества выстрелов не успевают понять, что происходит, и сменить свое местоположение.

    Входные данные

    В первой строке записано три целых числа n, x0 и y0 (1 ≤ n ≤ 1000,  - 104 ≤ x0, y0 ≤ 104) — количество штурмовиков на поле боя и координаты вашей пушки.

    В следующих n строках записано по два целых числа xi, yi ( - 104 ≤ xi, yi ≤ 104) — координаты штурмовиков на поле боя. Известно, что ни один из штурмовик не стоит в той же точке, где находится пушка. Несколько штурмовиков могут находится в одной и той же точке.

    Выходные данные

    Выведите одно целое число — минимальное количество выстрелов, за которое Хан Соло сможет уничтожить всех штурмовиков.

    Примечание

    Пояснения к первому и второму тесту из условия соответственно:

    A. Drazil и свидание

    математика *1000

    Как-то раз Drazil захотел пойти на свидание с Varda. Drazil и Varda живут на декартовой плоскости. Drazil живет в доме в точке (0, 0), а Varda живет в доме в точке (a, b). За каждый ход Drazil может пройти единичное расстояние по горизонтали или вертикали в любом направлении. Иными словами, он может переместиться из точки (x, y) в точки (x + 1, y), (x - 1, y), (x, y + 1) или (x, y - 1).

    К сожалению, Drazil плохо ориентируется на местности. Поэтому каждым ходом он выбирает направление наугад. Например, во время своего путешествия он может случайно вернуться домой. Более того, Drazil может не заметить, что он прибыл в (a, b) и продолжить перемещаться дальше.

    В конце концов, Drazil успешно прибыл в точку (a, b). Drazil сказал Varda: "Дорога от моего дома к твоему заняла у меня ровно s ходов". Теперь Varda задаётся вопросом — возможно ли добраться из (0, 0) в (a, b) ровно за s ходов? Можете ли вы определить ответ на этот вопрос?

    Входные данные

    На вход подаются три целых числа a, b, и s ( - 109 ≤ a, b ≤ 109, 1 ≤ s ≤ 2·109).

    Выходные данные

    Если Drazil ошибся и ровно за s шагов невозможно добраться до дома Varda, выведите "No" (без кавычек).

    В противном случае выведите "Yes".

    Примечание

    В четвертом тесте из условия путь может выглядеть следующим образом: .

    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 может содержать ведущие нули.

    Выходные данные

    Выведите наибольшее возможное целое число, удовлетворяющее условиям, данным выше. В десятичной записи этого числа не должно быть нулей и единиц.

    Примечание

    В первом тесте из условия

    E. Drazil и его счастливые друзья

    математика теория чисел *3100

    У Drazil много друзей. Некоторые из них счастливы, а некоторые несчастны. Drazil хочет, чтобы все его друзья были счастливы. Поэтому он придумал такой план.

    Среди его друзей n юношей и m девушек. Пронумеруем их от 0 до n - 1 и 0 до m - 1 соответственно. В i-й день Drazil приглашает -го юношу и -ю девушку поужинать (Drazil программист, поэтому i принимает значения с нуля). Если один из этих двух людей счастлив, то и другой становится счастливым. В противном случае оба человека останутся в том состоянии, в котором они были изначально. Как только человек становится счастливым (или же если он был счастлив с самого начала), он остается счастливым навсегда.

    Drazil интересно, на какой день все его друзья станут счастливыми, если это вообще произойдёт. Помогите ему найти ответ на этот вопрос.

    Входные данные

    В первой строке следуют два целых числа n и m (1 ≤ n, m ≤ 109).

    Во второй строке следует целое число b (0 ≤ b ≤ min(n, 105)), — количество счастливых парней среди друзей Drazil, затем следуют b различных целых чисел x1, x2, ..., xb (0 ≤ xi < n), — номера счастливых парней.

    В третьей строке следует целое число g (0 ≤ g ≤ min(m, 105)), — количество счастливых девушек среди друзей Drazil, затем следуют g различных целых чисел y1, y2, ... , yg (0 ≤ yj < m), — номера счастливых девушек.

    Гарантируется, что у Drazil есть не менее одного несчастного друга.

    Выходные данные

    Выведите номер первого дня, когда все друзья Drazil станут счастливыми. Если этот день никогда не настанет, выведите -1.

    Примечание

    Определим как остаток от целочисленного деления i на k.

    В первом тесте из условия:

    • В 0-й день Drazil приглашает 0-го парня и 0-ю девушку. Так как 0-я девушка изначально счастливая, 0-й юноша становится счастлив в этот день.
    • В 1-й день Drazil приглашает 1-го парня и 1-ю девушку. Они оба несчастны, так что в этот день ничего не меняется.
    • Во 2-й день Drazil приглашает 0-го парня и 2-ю девушку. Так как 0-й парень уже счастлив, в этот день он делает 2-ю девушку счастливой.
    • В 3-й день Drazil приглашает 1-го парня и 0-ю девушку. 0-я девушка счастливая, она делает счастливым 1-го парня.
    • В 4-й день Drazil приглашает 0-го парня и 1-ю девушку. 0-ой парень счастлив, так что он делает 1-ю девушку счастливой. Итак, в этот момент все друзья Drazil становятся счастливыми.

    D. Илья и эскалатор

    дп Комбинаторика математика Теория вероятностей *1700

    Илья устал от олимпиадного программирования, ушел из университета и устроился на работу в метрополитен. Перед ним поставили задачу определения нагрузки на эскалатор.

    Пусть n человек стоят в очереди на эскалатор. В каждую секунду происходит одно из двух: либо первый человек в очереди с вероятностью p заходит на эскалатор, либо первый человек в очереди с вероятностью (1 - p) остается стоять на месте, не в силах совладать с боязнью эскалаторов, задерживая при этом всю очередь за ним.

    Формально говоря, i-й в очереди не сможет зайти на эскалатор, пока на него не зайдут люди с номерами от 1 до i - 1 включительно. За одну секунду может зайти только один человек. Так как эскалатор бесконечный, то единожды зайдя на него, человек никогда с него не сойдёт, т. е. будет ехать на нем в эту и любую последующую секунды. Илье нужно посчитать математическое ожидание количества людей, которые будут находиться на эскалаторе после t секунд.

    Вам необходимо помочь ему в решении этой непростой задачи.

    Входные данные

    В первой строке входных данных следуют три числа n, p, t (1 ≤ n, t ≤ 2000, 0 ≤ p ≤ 1). Числа n и t — целые, чиcло p — вещественное, заданное ровно с двумя знаками после запятой.

    Выходные данные

    Выведите одно вещественное число — математическое ожидание количества людей, которые будут на эскалаторе через t секунд. Абсолютная или относительная погрешность не должна превышать 10 - 6.

    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.

    Примечание

    В первом примере нужно один раз нажать на синюю кнопку, и затем раз один раз на красную кнопку.

    Во втором примере удваивать число невыгодно, поэтому надо девять раз нажать на синюю кнопку.

    C. Выравнивание ДНК

    математика Строки *1500

    Вася увлекся биоинформатикой. Он собирается написать статью про похожие циклические последовательности ДНК, и поэтому он придумал новый способ определения схожести циклических последовательностей.

    Пусть строки s и t имеют одинаковую длину n, тогда функция h(s, t) определяется как количество позиций, в которых соответствующие символы s и t совпадают. При помощи функции h(s, t), определяется функция расстояния по Василию ρ(s, t):

    где  — это строка s, циклически сдвинутая на i символов влево. Например,
    ρ("AGC", "CGT") = 
    h("AGC", "CGT") + h("AGC", "GTC") + h("AGC", "TCG") + 
    h("GCA", "CGT") + h("GCA", "GTC") + h("GCA", "TCG") + 
    h("CAG", "CGT") + h("CAG", "GTC") + h("CAG", "TCG") = 
    1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 1 = 6

    Вася нашел в интернете строку s длины n. Теперь он хочет посчитать количество строк t, находящихся на максимальном расстоянии по Василию от строки s. Формально говоря, t должна удовлетворять равенству: .

    Вася не смог перебрать все возможные строки для нахождения ответа, поэтому ему нужна ваша помощь. Поскольку ответ может быть очень большим, посчитайте количество подходящих строк по модулю 109 + 7.

    Входные данные

    В первой строке ввода записано одно целое число n (1 ≤ n ≤ 105).

    Во второй строке ввода записана одна строка длины n, состоящая из символов "ACGT".

    Выходные данные

    Выведите одно число — ответ по модулю 109 + 7.

    Примечание

    Обратите внимание, что если для двух различных строк t1 и t2 значения ρ(s, t1) и ρ(s, t2) являются максимальными среди всех возможных строк, то обе строки необходимо учесть в итоговом количестве даже в том случае, когда одну из них можно получить циклическим сдвигом из другой.

    В первом примере существует ρ("C", "C") = 1, для остальных строк t длины 1 значение ρ(s, t) равно 0.

    Во втором примере ρ("AG", "AG") = ρ("AG", "GA") = ρ("AG", "AA") = ρ("AG", "GG") = 4.

    В третьем примере ρ("TTT", "TTT") = 27.

    E. Сплошные плюсы

    дп Комбинаторика математика теория чисел *2200

    Вася сидит на невыносимо скучном уроке математики. Чтобы развлечься, он выписал на листок бумаги n цифр в одну строку. После этого Вася стал выписывать разные способы поставить в строке между некоторыми цифрами плюсы («+») таким образом, чтобы получалось корректное арифметическое выражение; формально, никакие два плюса в таком разбиении не должны стоять рядом (между любыми двумя соседними плюсами должна стоять хотя бы одна цифра), и никакой плюс не может стоять в начале или в конце строки. Например, в строке 100500, способы 100500 (не ставить плюсов совсем), 1+00+500 или 10050+0 являются корректными, а способы 100++500, +1+0+0+5+0+0 или 100500+ являются некорректными.

    Урок был длинным, и Вася выписал все корректные способы расставить в своей строке из цифр ровно k плюсов. В этот момент его развлечение было замечено, и Вася получил задание до конца урока вычислить сумму значений всех получившихся арифметических выражений (при вычислении значения выражения ведущие нули в слагаемых следует игнорировать). Поскольку ответ может быть большим, Васе разрешили всего лишь получить остаток от деления ответа на 109 + 7.

    Входные данные

    В первой строке записано два целых числа n и k (0 ≤ k < n ≤ 105).

    Во второй строке записана строка, состоящая из n цифр.

    Выходные данные

    Выведите ответ на задачу по модулю 109 + 7.

    Примечание

    В первом примере результат равен (1 + 08) + (10 + 8) = 27.

    Во втором примере результат равен 1 + 0 + 8 = 9.

    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) — длины палочек.

    Выходные данные

    В первой строке выходных данных должно содержаться единственное целое неотрицательное число — максимальная суммарная площадь прямоугольников, которые Илья может составить из имеющихся у него палочек при помощи напильника.

    E. Аня и кубики

    meet-in-the-middle Бинарный поиск битмаски дп математика Перебор *2100

    Аня очень любит складывать и наклеивать. Сегодня она решила заняться именно этим.

    У Ани есть n кубиков, лежащих в ряд и пронумерованных от 1 до n слева направо, с написанными на них натуральными числами. Также у нее есть k наклеек с восклицательными знаками. Известно, что количество наклеек не превышает количества кубиков.

    Аня может наклеить на кубик восклицательный знак и получить факториал числа, записанного на кубике. Например, если на кубике было написано 5, то после наклеивания будет 5!, что равно 120.

    Вам нужно помочь Ане посчитать, сколько существует способов оставить какое-то количество кубиков и наклеить на некоторые из них восклицательные знаки, использовав не более k восклицательных знаков, так, чтобы сумма чисел, написанных на кубиках (как отмеченных восклицательными знаками, так и нет), после наклеивания стала равна S. Аня может наклеить на один кубик не более одного восклицательного знака. Справитесь?

    Два способа будем считать одинаковыми, если совпадают номера оставленных кубиков, а также совпадают номера кубиков, на которые наклеены восклицательные знаки.

    Входные данные

    В первой строке входных данных заданы через пробел три целых числа n, k и S (1 ≤ n ≤ 25, 0 ≤ k ≤ n, 1 ≤ S ≤ 1016) — количество кубиков и количество наклеек, которые есть у Ани, и сумма, которую необходимо набрать.

    Во второй строке следуют n целых положительных чисел ai (1 ≤ ai ≤ 109) — числа, записанные на кубиках.

    На разных кубиках могут быть написаны одинаковые числа.

    Выходные данные

    Выведите в первую строку выходных данных единственное целое неотрицательное число — количество способов оставить какое-то количество кубиков и наклеить на некоторые из них восклицательные знаки так, чтобы сумма чисел стала равна заданному числу S.

    Примечание

    В первом тесте из условия единственный способ достичь желаемого — оставить оба кубика, и наклеить на каждый из них по восклицательному знаку.

    Во втором тесте из условия единственный способ достичь желаемого — оставить оба кубика, но не клеить восклицательный знак ни на один из них.

    В третьем тесте из условия можно оставить любой из трёх кубиков, при этом на него можно как клеить, так и не клеить восклицательный знак, поэтому существует шесть способов достичь желаемого.

    C. Ам Ням и леденцы

    жадные алгоритмы математика Перебор *2000

    Милый маленький монстрик Ам Ням очень любит леденцы. Однажды он оказался в весьма необычном положении, в котором ему пришлось применить смекалку и сообразительность, чтобы вдоволь полакомиться конфетами. А вы бы справились, оказавшись на его месте?

    Как-то раз, придя к своему другу Эвану, Ам Ням не застал его дома, но зато обнаружил два мешка с конфетами. В первом мешке лежало множество синих леденцов, а во втором — множество красных леденцов. Ам Ням знает, что каждый красный леденец весит Wr грамм, а каждый синий — Wb грамм. При этом, съедая один красный леденец, Ам Ням получает Hr единиц радости, а съедая один синий леденец, Ам Ням получает Hb единиц радости.

    Любовь к леденцам — это святое, но переедать тоже нельзя. Ам Ням знает, что если он суммарно съест более C грамм конфет, то ему станет плохо. Ам Ням считает, что оставлять часть конфеты неприлично, поэтому он может съесть леденец только целиком. Как прирождённый математик, Ам Ням быстро определил, сколько конфет какого типа ему надо съесть, чтобы получить максимальное количество единиц радости. А вы справитесь повторить его достижение? Считайте, что в каждом из мешков находится больше конфет, чем способен съесть Ам Ням.

    Входные данные

    В единственной строке заданы пять целых чисел C, Hr, Hb, Wr, Wb (1 ≤ C, Hr, Hb, Wr, Wb ≤ 109).

    Выходные данные

    Выведите единственное целое число — максимальное количество единиц радости, которое может получить Ам Ням.

    Примечание

    В первом тесте из условия Ам Ням может съесть по два леденца каждого вида, и получить тем самым 16 единиц радости.

    A. Игра с бумагой

    математика реализация *1100

    Как-то раз, сидя на не самом интересном уроке по математике, Вася собирал оригами из прямоугольного листа бумаги a мм  ×  b мм (a > b). Как правило, первым шагом при сборке оригами является получение квадратной заготовки из прямоугольного листа бумаги путём сгибания вдоль биссектрисы прямого угла и отрезания лишней части.

    Собрав бумажный кораблик из квадратной заготовки, Вася обратил внимание на оставшуюся полоску бумаги (a - b) мм  ×  b мм. Ему пришла в голову мысль использовать аналогичным образом эту полоску для создания оригами, а затем оставшуюся (если такая образуется) и так далее. В тот момент, когда в качестве остатка у него окажется квадратный фрагмент бумаги, он соберёт из него последний кораблик и остановится.

    Можете ли вы определить, сколько всего корабликов соберёт Вася за урок?

    Входные данные

    В первой строке входных данных записаны два целых числа a, b (1 ≤ b < a ≤ 1012) — размеры исходного листа бумаги.

    Выходные данные

    Выведите единственное целое число — количество корабликов, которые соберёт Вася.

    Примечание

    Иллюстрации к первому и второму тесту из условия.

    A. Экзамен

    Конструктив математика реализация *1100

    Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

    Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

    Входные данные

    В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

    Выходные данные

    В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

    Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

    Если возможных ответов несколько, выведите любой.

    A. Экзамен

    Конструктив математика реализация *1100

    Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

    Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

    Входные данные

    В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

    Выходные данные

    В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

    Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

    Если возможных ответов несколько, выведите любой.

    A. Экзамен

    Конструктив математика реализация *1100

    Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

    Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

    Входные данные

    В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

    Выходные данные

    В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

    Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

    Если возможных ответов несколько, выведите любой.

    A. Экзамен

    Конструктив математика реализация *1100

    Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

    Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

    Входные данные

    В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

    Выходные данные

    В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

    Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

    Если возможных ответов несколько, выведите любой.

    A. Экзамен

    Конструктив математика реализация *1100

    Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

    Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

    Входные данные

    В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

    Выходные данные

    В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

    Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

    Если возможных ответов несколько, выведите любой.

    A. Экзамен

    Конструктив математика реализация *1100

    Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

    Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

    Входные данные

    В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

    Выходные данные

    В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

    Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

    Если возможных ответов несколько, выведите любой.

    A. Экзамен

    Конструктив математика реализация *1100

    Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

    Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

    Входные данные

    В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

    Выходные данные

    В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

    Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

    Если возможных ответов несколько, выведите любой.

    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 метров.

    C. Кости Поликарпа

    математика *1600

    У Поликарпа есть n игральных костей d1, d2, ..., dn. На i-й игральной кости могут выпасть числа от 1 до di. Поликарп кинул все кости, и суммарно выпало A. Агрипина не видела, сколько выпало на каких костях, она знает только суммарное число A и значения d1, d2, ..., dn. Однако, уже этого ей достаточно, чтобы выдать серию утверждений вида: на кости i не могло выпасть число r. Например, если у Поликарпа было две шестигранных кости, а выпало суммарное значение A = 11, то Агрипина может утверждать, что на каждой из двух костей не могло появиться значение меньше пяти (в противном случае на оставшейся кости должно быть число не меньше семи, что невозможно).

    Для каждой из костей найдите количество тех значений, которые гарантированно не могли выпасть на ней, если суммарно выпало A.

    Входные данные

    В первой строке заданы два целых числа n, A (1 ≤ n ≤ 2·105, n ≤ A ≤ s) — количество игральных костей и сумма выпавших значений, где s = d1 + d2 + ... + dn.

    Вторая строка содержит n целых чисел d1, d2, ..., dn (1 ≤ di ≤ 106), где di — максимальное значение, которое может выпасть на i-й кости.

    Выходные данные

    Выведите n целых чисел b1, b2, ..., bn, где bi — количество тех значений, которые гарантированно не могли выпасть на i-й кости.

    Примечание

    В первом примере из условия A равное 8 могло выпасть только в одном случае, когда на первой и второй кости выпало по 4. Соответственно на обеих костях не могли выпасть значения 1, 2 или 3.

    Во втором примере из условия A равное 3 могло выпасть, когда на единственной кости выпало 3. Соответственно на ней не могли выпасть значения 1, 2, 4 или 5.

    В третьем примере из условия A равное 3 могло выпасть в случаях, когда на одной кости выпало 1, а на другой 2. Поэтому на первой кости нет значений, которые гарантированно не выпали, а на второй кости не могло выпасть 3.

    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-й запрос.

    Выходные данные

    Для каждого запроса выведите ответ на него в отдельной строке.

    E. Тавас и Пашмакс

    геометрия математика *2600

    Тавас в команде поддержки в новом спортивном состязании под названием "Пашмакс".

    Cостязание "Пашмакс" состоит из двух частей: плавание, а затем бег. Проплыв ровно S метров, участники немедленно начинают бежать R метров. Победителем считается любой такой участник, раньше которого к финишу не пришло ни одного другого участника (таким образом, может быть более одного победителя).

    Тавас знает, что до начала матча зарегистрировано n соревнующихся. Также он знает, что скорость заплыва i-го человека — si метров в секунду, а скорость бега — ri метров в секунду. К сожалению, он не знает значения R и S, но он знает, что это строго положительные действительные числа.

    Как член группы поддержки, Тавас хочет знать, кого поддержать. Он хочет знать всех участников, которые могут победить. Мы считаем, что участник может победить тогда и только тогда, когда есть некоторые значения R и S, при которых этот участник побеждает.

    Тавас не может справиться с этой задачей, так что он попросил вас помочь ему.

    Входные данные

    В первой строке ввода записано единственное целое число n (1 ≤ n ≤ 2 × 105).

    В следующих n строках записаны сведения о соревнующихся. В i-й строке записаны два целых числа, si и ri (1 ≤ si, ri ≤ 104).

    Выходные данные

    В первой и единственной строке выведите последовательность номеров возможных победителей в порядке возрастания.

    C. Закон первой цифры

    дп математика Теория вероятностей *2000

    В теории вероятностей известен следующий парадокс, называемый законом Бенфорда: «Во многих списках чисел из произвольных реальных источников, числа, начинающиеся с цифры 1, встречаются гораздо чаще, чем числа, начинающиеся с любой другой цифры» (это самая простая формулировка закона).

    Ёжик, прочитав об этом на CodeForces, заинтересовался этим утверждением, и желает тщательно исследовать его. В частности, ему интересна следующая похожая задача: имеется N случайных величин, i-я из которых может равновероятно принимать любое целое значение из некоторого отрезка [Li;Ri]. Это означает, что значение i-ой величины может быть равно любому целому числу из заданного отрезка [Li;Ri] с вероятностью 1 / (Ri - Li + 1).

    Ёжика интересует вероятность такого события, что первые цифры как минимум K% этих величин окажутся равными единице. Иными словами, зафиксируем какие-то значения этих случайных величин, и оставим от каждого значения только первую (старшую) цифру. Далее посчитаем, сколько раз среди этих первых цифр встретилась единица, и если она встретилась как минимум в K процентах из этих N величин, то такой набор значений величин назовём хорошим. Требуется найти вероятность того, что случайно выбранный набор будет хорошим.

    Входные данные

    В первой строке записано число N — размер списка (1 ≤ N ≤ 1000). Далее идут N строк, каждая из которых содержит по паре чисел Li, Ri — описание очередной случайной величины. Гарантируется, что 1 ≤ Li ≤ Ri ≤ 1018.

    В последней строке записано целое число K (0 ≤ K ≤ 100).

    Все числа во входном файле целые.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).

    Выходные данные

    Выведите искомую вероятность. Выводите это дробное число с такой точностью, чтобы относительная или абсолютная погрешность ответа не превышала 10 - 9.

    A. Солдат и бананы

    математика Перебор реализация *800

    Солдат хочет купить w бананов в магазине. Ему надо заплатить k долларов за первый банан, 2k долларов — за второй и так далее (иными словами, за i-й банан надо заплатить i·k долларов).

    У него есть n долларов. Сколько долларов ему придется одолжить у однополчанина, чтобы купить w бананов?

    Входные данные

    В первой строке записано три положительных целых числа k, n, w (1  ≤  k, w  ≤  1000, 0 ≤ n ≤ 109), стоимость первого банана, изначальное количество долларов у солдата и количество бананов, которые он хочет купить.

    Выходные данные

    Выведите единственное целое число — количество долларов, которое солдату надо одолжить у однополчанина. Если деньги одалживать не надо, выведите 0.

    D. Солдат и игра с числами

    дп Конструктив математика теория чисел *1700

    Два солдата играют в игру. Сначала один солдат выбирает целое положительное число n и называет его второму солдату. Затем второй солдат пытается совершить наибольшее количество ходов. На каждом ходу солдат выбирает положительное целое число x > 1, такое, что n делится на x, и заменяет число n числом n / x. Когда n становится равно 1 и больше нет возможных ходов, тогда игра завершается и счет второго солдата равен количеству совершённых им ходов.

    Чтобы сделать игру поинтереснее, в качестве n солдат выбирает число вида a! / b! для некоторых положительных целых чисел a и b (a ≥ b). Здесь под k! имеется в виду факториал числа k, который определяется как произведение всех положительных целых чисел, не превосходящих k.

    Определите максимально возможный счет второго солдата.

    Входные данные

    В первой строке входа записано единственное целое число t (1 ≤ t ≤ 1 000 000) обозначающее количество игр, в которые играют солдаты.

    Затем следуют t строк, в каждой строке записана пара чисел a и b (1 ≤ b ≤ a ≤ 5 000 000), обозначающая значение n для игры.

    Выходные данные

    Для каждой игры выведите максимальный счет, которого может достичь второй солдат.

    E. Солдат и путешествия

    графы математика Потоки *2100

    В стране есть n городов и m двусторонних дорог между ними. У каждого города есть армия. Армия i-го города состоит из ai солдат. В стране объявлена мобилизация. В результате неё каждый солдат должен либо остаться в своем городе, либо перейти в один из соседних городов, то есть перейти по не более чем одной дороге.

    Проверьте, возможно ли, чтобы после перехода в i-м городе было ровно bi солдат.

    Входные данные

    Первая строка входа содержит два целых числа, n и m (1 ≤ n ≤ 100, 0 ≤ m ≤ 200).

    В следующей строке записано n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 100).

    В следующей строке записано n целых чисел b1, b2, ..., bn (0 ≤ bi ≤ 100).

    Затем слеует m строк, каждая состоит из двух целых чисел, p и q (1 ≤ p, q ≤ n, p ≠ q) обозначающих, что между городами p и q есть дорога.

    Гарантируется, что между каждой парой городов существует не более одной дороги.

    Выходные данные

    Если требуемое невозможно, выведите единственное слово: "NO".

    В противном случае выведите слово "YES", а затем выведите n строк, в каждой строке выведите по n целых чисел. Число в i-й строке и j-м столбце должно обозначать, сколько солдат должно перейти из города i в город j (если i ≠ j), либо сколько солдат должно остаться в городе i (если i = j).

    Если возможных ответов несколько, выведите любой из них.

    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:

    C. Майк и пена

    битмаски дп Комбинаторика математика теория чисел *2300

    Майк — бармен в баре Рико. В заведении Рико пивные стаканы кладутся на особую полку. Всего в баре n сортов пива, пронумерованных от 1 до n. Бокал с i-м сортом пива содержит ai миллилитров пены.

    Максим — босс Майка. Сегодня он сказал Майку выполнить q запросов. Изначально полка пустая. Каждый запрос представляет собой целое число x. Если пиво номер x уже есть на полке, то Майк должен забрать его с полки, в противном случае — положить его на полку.

    После каждого запроса Майк должен определить качество полки. Медведи — те ещё гики, так что они считают, что качество полки — это количество пар (i, j) стаканов на полке, таких, что i < j и , где — наибольший общий делитель чисел a и b.

    Майк устал. Поэтому он попросил вам помочь ему выполнить эти запросы.

    Входные данные

    В первой строке ввода записаны числа n и q (1 ≤ n, q ≤ 2 × 105), количество различных видов пива и количество запросов.

    В следующей строке записано n целых чисел через пробел, a1, a2, ... , an (1 ≤ ai ≤ 5 × 105), высота пены на каждом сорте пива.

    В следующих q строках записаны запросы. Каждый запрос состоит из единственного целого числа x (1 ≤ x ≤ n), — номера сорта пива, которое надо добавить на полку или убрать оттуда.

    Выходные данные

    Для каждого запроса выведите ответ в отдельной строке.

    E. Саша Круг

    геометрия математика *2700

    Берляндцы очень любят лакомиться шишками после тяжелого рабочего дня. Миша Квадрат и Саша Круг — местные берляндские авторитеты. Каждый из них держит свои точки торговли шишками. У Миши n точек, у Саши — m. Так как между их подчиненными постоянно возникают стычки, они решили построить забор в виде окружности так, чтобы точки торговли одного предпринимателя были строго внутри окружности, а другого — строго снаружи. То, чьи именно точки торговли окажутся внутри, не имеет значения.

    Определите, могут ли они построить такой забор.

    Входные данные

    В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 10 000) — количества точек торговли Миши и Саши соответственно.

    В следующих n строках через пробелы записаны пары целых чисел Mx, My ( - 104 ≤ Mx, My ≤ 104) — координаты точек торговли Миши.

    В следующих m строках через пробелы записаны пары целых чисел Sx, Sy ( - 104 ≤ Sx, Sy ≤ 104) — координаты точек торговли Саши.

    Гарантируется, что все n + m точек различны.

    Выходные данные

    Выведите "YES" без кавычек, если можно построить такой забор в форме окружности, что точки одного авторитета будут строго внутри, а другого — строго снаружи, либо выведите "NO" без кавычек в противном случае.

    Примечание

    В первом примере не существует способа разделить точки окружностью, так как любой круг, который содержит обе точки ( - 1, 0), (1, 0), так же содержит хотя бы одну точку из множества (0,  - 1), (0, 1), и наоборот: любой круг, который содержит обе точки (0,  - 1), (0, 1), так же содержит хотя бы одну точку из множества ( - 1, 0), (1, 0)

    Во втором примере один из возможных способов разделения показан ниже. Точки Миши обозначены красным цветом, а точки Саши - синим.

    H. Вырожденная матрица

    Бинарный поиск математика *2100

    Определитель матрицы 2 × 2 определяется следующим образом:

    Вырожденной матрицей называется матрица, у которой определитель равен нулю.

    Норма ||A|| матрицы A определяется как максимум из абсолютных значений её элементов.

    Дана матрица . Рассмотрим любую такую вырожденную матрицу B, что норма ||A - B|| минимальна. Найдите ||A - B||.

    Входные данные

    В первой строке находятся два целых числа a, b (|a|, |b| ≤ 109) — элементы первой строки матрицы A.

    Во второй строке находятся два целых числа c, d (|c|, |d| ≤ 109) — элементы второй строки матрицы A.

    Выходные данные

    Выведите единственное вещественное число, минимальное возможное значение ||A - B||. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит 10 - 9.

    Примечание

    В первом примере матрица B выглядит следующим образом:

    Во втором примере матрица B выглядит следующим образом:

    A. Путешествие блохи

    математика реализация *1200

    На одной из n расположенных по кругу кочек сидит блоха. Каждую минуту блоха делает прыжок. В k-ую от начала минуту она прыгает через k - 1 кочку (по часовой стрелке) от той, на которой стоит (в частности: в первую минуту она прыгает на соседнюю по часовой стрелке кочку). Вам требуется написать программу, которая определит, посетит ли блоха все кочки (считайте, что прыгает она сколь угодно долго).

    Входные данные

    В единственной строке находится натуральное число 1 ≤ n ≤ 1000 — количество кочек.

    Выходные данные

    Выведите "YES", если блоха посетит все кочки, "NO" — иначе.

    C. Делимость на восемь

    дп математика Перебор *1500

    Дано целое неотрицательное число n, запись которого состоит из не более, чем 100 цифр, и не содержит ведущих незначащих нулей.

    Нужно определить, можно ли в данном числе вычеркнуть некоторое (возможно нулевое) количество цифр так, чтобы полученное после вычеркивания цифр число содержало хотя бы одну цифру, было неотрицательным, не имело ведущих незначащих нулей и делилось на 8. После вычеркивания переставлять цифры запрещается.

    Если решение существует, необходимо вывести его.

    Входные данные

    В единственной строке входных данных содержится целое неотрицательное число n. Запись числа n не содержит ведущих незначащих нулей и ее длина не превосходит 100 цифр.

    Выходные данные

    Выведите "NO" (без кавычек), если искомого способа вычеркнуть некоторые цифры из числа n не существует.

    Иначе выведите "YES" в первой строке и число, получившееся в результате вычеркивания некоторых цифр числа n, во второй строке. Выведенное число должно делиться на 8.

    Если возможных ответов несколько, требуется вывести любой из них.

    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.

    Если возможных ответов несколько, разрешается вывести любой.

    D. GukiZ и двоичные операции

    Комбинаторика математика матрицы реализация теория чисел *2100

    Все мы знаем, что GukiZ часто играет с массивами.

    Сейчас она размышляет над следующим вопросом: сколько существует массивов a длины n, состоящих из неотрицательных целых чисел строго меньше 2l, удовлетворяющих условию ? Здесь операция означает побитовое И (в языке Pascal она обозначается как and, на языке C/C++/Java/Python она обозначается как &), операция означает побитовое ИЛИ (на языке Pascal она обозначается как , наC/C++/Java/Python она обозначается |).

    Так как ответ может быть достаточно большим, посчитайте его по модулю m. В этот раз GukiZ не придумал решения и ему нужно, чтобы вы помогли ему!

    Входные данные

    В первой и единственной строке входа записано четыре целых числа n, k, l, m (2 ≤ n ≤ 1018, 0 ≤ k ≤ 1018, 0 ≤ l ≤ 64, 1 ≤ m ≤ 109 + 7).

    Выходные данные

    В единственной строке выведите количество массивов, удовлетворяющих данному выше условию, по модулю m.

    Примечание

    В первом примере подходящие массивы таковы: {1, 1}, {3, 1}, {1, 3}.

    Во втором примере единственный подходящий массив: {1, 1}.

    В третьем примере подходящие массивы: {0, 3, 3}, {1, 3, 2}, {1, 3, 3}, {2, 3, 1}, {2, 3, 3}, {3, 3, 0}, {3, 3, 1}, {3, 3, 2}, {3, 3, 3}.

    A. Ваня и таблица

    математика реализация *1000

    У Вани есть таблица, состоящая из 100 строк по 100 клеток. Строки пронумерованы числами от 1 до 100 снизу вверх, столбцы пронумерованы числами от 1 до 100 слева направо.

    В этой таблице Ваня выбрал n прямоугольников со сторонами, проходящими по границам клеток (некоторые прямоугольники, возможно, встречаются несколько раз). После этого для каждой клетки таблицы он подсчитал, скольким прямоугольникам она принадлежит, и записал в нее это число. Теперь он хочет найти сумму значений во всех клетках таблицы, и, поскольку таблица слишком большая, он просит у вас помощи найти результат.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 100) — количество прямоугольников.

    Каждая из последующих n строк содержит по четыре целых числа x1, y1, x2, y2 (1 ≤ x1 ≤ x2 ≤ 100, 1 ≤ y1 ≤ y2 ≤ 100), где x1 и y1 — номера столбца и строки левой нижней клетки, а x2 и y2 — номера столбца и строки правой верхней клетки очередного прямоугольника.

    Выходные данные

    В единственной строке выведите сумму всех значений в клетках таблицы.

    Примечание

    Пояснение к первому тесту из условия:

    Значения таблицы в первых трёх строках и столбцах будут такими:

    121

    121

    110

    Соответственно, сумма значений будет равна 10.

    Пояснение ко второму тесту из условия:

    Значения таблицы в первых трёх строках и столбцах будут такими:

    222

    222

    222

    Соответственно сумма значений будет равна 18.

    B. Ваня и книги

    математика реализация *1200

    Ване поручено важное задание — он должен пронумеровать книжки в библиотеке, поставив на каждую бирку книжку с её номером. Каждая из n книг должна получить номер от 1 до n, причем, разумеется, разные книги должны получить разные номера.

    Ваня хочет узнать, какое количество цифр ему придётся написать, подписывая все бирки.

    Входные данные

    В первой строке содержатся целое число n (1 ≤ n ≤ 109) — количество книг в библиотеке.

    Выходные данные

    Выведите количество цифр, нужных для того, чтобы пронумеровать все книги.

    Примечание

    Пояснение к первому тесту. Книги получат номера 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, что в сумме даёт 17 цифр.

    Пояснение ко второму тесту. Книги получат номера 1, 2, 3, 4, что в сумме даёт 4 цифры.

    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.

    Пояснение к третьему тесту из условия. Взвесить вещь, как описано в условии, невозможно.

    D. Ваня и треугольники

    геометрия Комбинаторика математика Перебор сортировки Структуры данных *1900

    Ване было скучно и он нарисовал n различных точек на плоскости. После этого он соединил попарно все точки и увидел, что в итоге образовалось большое количество треугольников с вершинами в отмеченных точках. Он просит вас посчитать количество образовавшихся треугольников с ненулевой площадью.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 2000) — количество отмеченных точек на плоскости.

    В следующих n строках находятся по два целых числа xi, yi ( - 100 ≤ xi, yi ≤ 100) – координаты i-й точки. Гарантируется, что среди точек нет совпадающих.

    Выходные данные

    В первой строке выведите целое число — количество треугольников с ненулевой площадью среди отмеченных.

    Примечание

    Пояснение к первому тесту из условия. Образовано 3 треугольника: (0, 0) - (1, 1) - (2, 0); (0, 0) - (2, 2) - (2, 0); (1, 1) - (2, 2) - (2, 0).

    Пояснение ко второму тесту из усовия. Образован 1 треугольник: (0, 0) - (1, 1) - (2, 0).

    Пояснение к третьему тесту из условия. Одна точка не образует ни одного треугольника.

    A. Кёя и цветные мячи

    дп Комбинаторика математика *1500

    У Кёи Оотори есть сумка с n цветными мячиками, раскрашенными k различными цветами. Цвета пронумерованы от 1 до k. Мячики одного цвета неотличимы друг от друга. Юноша вынимает мячики из сумки один за другим, пока сумка не опустеет. Он заметил, что для всех i от 1 до k - 1 он вынул последний мяч цвета i до того, как он вынул последний мяч цвета i + 1. Теперь ему интересно, сколько существует различных последовательностей цветов вынутых мячей, удовлетворяющих данному условию.

    Входные данные

    В первой строке ввода находить целое число k (1 ≤ k ≤ 1000) — количество цветов.

    Затем следуют k строк. В i-й строке находится число ci, количество мячей i-го цвета (1 ≤ ci ≤ 1000).

    Суммарное количество мячей не превосходит 1000.

    Выходные данные

    Выведите единственное целое число — остаток от деления на 1 000 000 007 количества различных последовательностей цветов мячей, удовлетворяющих условию.

    Примечание

    В первом примере у нас есть два мяча цвета 1, два мяча цвета 2, и один мяч цвета 3. Три возможных способа таковы:


    1 2 1 2 3
    1 1 2 2 3
    2 1 1 2 3

    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].

    E. Кёя и поезд

    бпф графы дп математика Теория вероятностей *3200

    Кёя Оотори хочет добраться до школы, воспользовавшись железнодорожным транспортом. Дано n станций и m односторонних железнодорожных маршрутов, соединяющих разные станции. Кёя находится на станции номер 1, а его школа — на станции n. Чтобы воспользоваться маршрутом, требуется заплатить за билет, после чего поезд едет определенное количество времени. Однако поезда несовершенны и доезжают до пункта назначения за некоторое случайное время. Если Кёя прибывает в школу строго более, чем через t единиц времени, ему придётся заплатить штраф в размере x.

    Каждый маршрут описывается ценой за билет и распределением вероятностей для времени пути поезда. Более формально, для пути i известна стоимость билета ci, и распределение вероятностей pi, k, обозначающее вероятность того, что поезду, едущему по этому маршруту, потребуется k единиц времени для всех 1 ≤ k ≤ t. Времена путешествия всех поездов, используемых Кёей, являются совокупно независимыми случайными величинами (более того, если Кёя путешествует тем же самым поездом более одного раза, возможно, что поезд будет ехать разное время, и эти значения также независимы друг от друга).

    Кёя хочет добраться до школы таким образом, чтобы минимизировать математическое ожидание количества потраченных им денег (за цены всех билетов плюс, возможно, штраф за опоздание). Кёя может модифицировать свой план по ходу поездки, основываясь на том, сколько времени у него остаётся. Каково матожидание количества денег, потраченных Кёей на пути в школу, если он будет действовать оптимально?

    Входные данные

    В первой строке ввода находятся четыре целых числа n, m, t, x (2  ≤  n  ≤ 50, 1 ≤ m ≤ 100, 1 ≤ t ≤ 20 000, 0 ≤ x ≤ 106).

    Следующие 2m строк содержат описания маршрутов.

    В 2i-й строке находятся 3 целых числа ai, bi, ci, обозначающих односторонний маршрут от платформы ai до платформы bi, со стоимость билета ci (1 ≤ ai, bi ≤ n, ai ≠ bi, 0 ≤ ci ≤ 106). От каждой платформы существует как минимум один путь до школы.

    В (2i + 1)-й строке находятся t целых чисел, pi, 1, pi, 2, ..., pi, t, где pi, k / 100000 — это вероятность того, что этому поезду потребуется k единиц времени на преодоление пути (0 ≤ pi, k ≤ 100 000 для 1 ≤ k ≤ t, ).

    Гарантируется, что между каждой парой платформ существует не более одного маршрута в каждом из направлений.

    Выходные данные

    Выведите единственное действительное число, равное математическому ожиданию стоимости дороги в школу. Ответ будет засчитан, если его относительная или абсолютная погрешность относительно авторского ответа не превышает 10 - 6.

    Примечание

    Оптимальная стратегия в первом тесте из условия такова:

    Сперва надо проехать по первому маршруту. С вероятностью 1 / 2 у Кёи это займёт 1 единицу времени. В противном случае, Кёя потратит 3 единиц времени.

    Если поезд пройдет маршрут за 1 единицы времени, надо проехать по четвёртому маршруту. Кёя доберется до школы вовремя с вероятностью 1 / 2. В противном случае, если поезд едет за 3 единицы времени, надо проехать по второму маршруту. Кёя доберется до школы вовремя с вероятностью 1 / 10.

    Так как стоимость всех путей равняется нулю, достаточно определить вероятность того, что Кёя получит штраф за опоздание. Вероятность того, что Кёя будет должен заплатить штраф, равна 1 / 2 × 1 / 2 + 1 / 2 × 9 / 10 = 7 / 10. Можно показать, что никакая другая стратегия не даёт меньшего математического ожидания штрафа.

    Оптимальная стратегия во втором тесте из условия — проехать по маршруту 1 → 2 → 4, что бы ни произошло. Кёя получит штраф с вероятностью 3 / 4, а суммарная стоимость билетов равна 200, следовательно, ожидаемая стоимость всей поездки — 200.75.

    A. Кёя и фотокниги

    математика Перебор Строки *900

    Кёя Оотори продает фотокниги Гостевого клуба лицея Оран. У него есть 26 фотографий, обозначаемых строчными английскими буквами от 'a' до 'z'. Он собрал их в фото-книгу с некоторыми фотографиями в некотором порядке (возможно, некоторые фотографии повторяются). Таким образом, фото-книгу можно описать как строку, состоящую из строчных английских букв.

    Сейчас он хочет создать "особое издание" своей фото-книги, вставив одну дополнительную фотографию в произвольное место книги. Он хочет сделать как можно больше различных особых изданий своей фото-книги, чтобы получить больше денег. Он спрашивает у Харухи: сколько различных фото-книг может он сделать, вставляя одну дополнительную фотографию в уже имеющуюся фото-книгу?

    Пожалуйста, помогите Харухи решить эту задачу.

    Входные данные

    В первой строке входа находится единственная строка s (1 ≤ |s| ≤ 20). Строка s состоит только из строчных английских букв.

    Выходные данные

    Выведите единственное целое число, равное количеству различных фото-книг, которые может сделать Кёя Оотори, вставив одну дополнительную фотографию в имеющуюся фото-книгу.

    Примечание

    В первом примере можно сделать 'ab','ac',...,'az','ba','ca',...,'za', и 'aa', что даёт в итоге 51 различный вариант для фото-книги.

    D. Дело повышенной секретности

    Бинарный поиск математика реализация *2500

    Андроид Андреид — известный на всю галактику детектив. Сейчас он занят особо секретным делом, детали которого не подлежат разглашению.

    Однако ему требуется помощь при проведении одного следственного эксперимента. На плоскости ставятся n колышков, пронумерованных от 1 до n, координаты i-го из них — (xi, 0). Затем за один из колышков снизу привязывают груз на натянутой веревке длины l (таким образом, его координаты будут равны (xi,  - l), где i — номер использованного колышка), после чего этот груз толкают вправо, так, что он начинает вращаться против часовой стрелки. При этом, если груз в процессе вращения цепляется за какой-то из колышков, то он начинает вращаться уже вокруг этого колышка. Можно предположить, что каждый колышек в отдельности достаточно тонкий, и не влияет на длину верёвки груза, который вокруг него вращается.

    Более формально, если в некоторый момент времени отрезок верёвки содержит один или несколько колышков кроме того, вокруг которого сейчас вращается груз, то далее груз будет вращаться вокруг наиболее удалённого из них на более коротком отрезке верёвки. В частности, если отрезок верёвки задевает своим концом некоторый колышек, то считается, что груз начинает вращаться вокруг этого колышка на отрезке верёвки длины 0.

    Рано или поздно груз начнёт вращаться вокруг некоторого колышка, не задевая остальные колышки. Андреид заинтересован в определении номера этого колышка.

    Андреид подготовил m вариантов начальных условий для запуска груза, помогите ему определить для каждого из них, вокруг какого колышка будет в конце концов вращаться груз.

    Входные данные

    В первой строке даны целые числа n и m (1 ≤ n, m ≤ 2·105) — количество колышков и вариантов запуска.

    В следующей строке даны n целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109) — координаты колышков. Гарантируется, что координаты всех колышков — различные целые числа.

    В следующих m строках даны описания вариантов запусков груза, каждое состоит из двух целых чисел ai (1 ≤ ai ≤ n) и li (1 ≤ li ≤ 109) — номера стартового колышка и длины веревки.

    Выходные данные

    Выведите m строк, в i-й из них должен быть номер колышка, вокруг которого в конце концов будет вращаться груз после i-го запуска.

    Примечание

    Иллюстрация к первому тесту из условия:

    Иллюстрация ко второму тесту из условия:

    Обратите внимание, что в последнем запуске груз в итоге начинает вращаться вокруг первого колышка на отрезке верёвки длины 0.

    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.

    Выходные данные

    Выведите в первую строку выходных данных три числа — сколько дипломов первой, второй и третьй степени будет вручено школьникам при наилучшем варианте раздачи дипломов.

    Наилучший вариант раздачи дипломов тот, который максимизирует количество школьников, которые получат дипломы первой степени. Из всех подходящих вариантов наилучший тот, который максимизирует количество участников, которые получат дипломы второй степени. Если и таких вариантов несколько, то наилучший тот, который максимизирует количество дипломов третьей степени.

    B. Паша и чай

    Конструктив математика реализация сортировки *1500

    Паша решил позвать своих друзей на чаепитие. Как раз для этого случая у него был большой чайник объемом w миллилитров и 2n чашек для чая, каждая из которых достанется одному из друзей Паши. В i-ю чашку может быть налито не более ai миллилитров воды.

    Оказалось, что среди друзей Паши ровно n мальчиков и ровно n девочек, и все они придут на чаепитие. Чтобы никто не обижался, Паша решил наливать воду для чая следующим образом:

    • Паша может вскипятить чайник ровно один раз, залив в него не более w миллилитров воды;
    • каждой девочке Паша нальет одинаковый объем воды;
    • каждому мальчику Паша нальет одинаковый объем воды,
    • если каждой девочке будет налито по x миллилитров воды, то каждому мальчику будет налито по 2x миллилитров воды.

    Иными словами, каждому мальчику должно быть налито в 2 раза больше воды, чем каждой девочке.

    Паша очень добрый и любезный, поэтому хочет суммарно налить своим друзьям как можно больше воды, чтобы заварить в ней чай. Вам предстоит помочь ему в этом и определить оптимальное распределение чашек между друзьями Паши.

    Входные данные

    В первой строке входных данных следует два целых числа n и w (1 ≤ n ≤ 105, 1 ≤ w ≤ 109) — количество друзей-мальчиков (равное количеству друзей-девочек) Паши и объем Пашиного чайника в миллилитрах.

    Во второй строке входных данных задана последовательность целых чисел ai (1 ≤ ai ≤ 109, 1 ≤ i ≤ 2n) — объемы имеющихся у Паши чашек для чая в миллилитрах.

    Выходные данные

    Выведите одно вещественное число — максимальный суммарный объем воды в миллилитрах, который Паша может налить своим друзьям, не нарушая заданных условий. Ваш ответ будет признан правильным, если его абсолютная или относительная погрешность не превосходит 10 - 6.

    Примечание

    Также у Паши есть конфеты, которые он раздаст девочкам, но это уже совсем другая задача...

    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-й ножки стола.

    Выходные данные

    Выведите одно целое число — минимальное число единиц энергии, которое нужно затратить Артуру, чтобы сделать стол устойчивым.

    D. Виталий и цикл

    графы Комбинаторика математика поиск в глубину и подобное *2000

    После того, как Виталий был отчислен из университета, он увлекся теорией графов.

    Особенно Виталию нравились циклы нечетной длины, в которых каждая вершина встречается не более одного раза.

    Виталию стало интересно, как решать следующую задачу. Задан неориентированный граф из n вершин и m ребер, необязательно связный, без кратных ребер и петель. Нужно найти t — минимальное количество ребер, которые нужно добавить в заданный граф таким образом, чтобы образовался простой цикл нечетной длины, состоящий из более чем одной вершины. Кроме того, ему надо найти w — количество способов добавить t ребер так, чтобы образовался цикл нечетной длины (состоящий из более чем одной вершины). Запрещается добавлять петли или кратные рёбра.

    Два способа добавить ребра в граф считаются одинаковыми, если в них совпадают множества добавляемых рёбер.

    Так как Виталий уже не учится в университете, он обратился к вам за помощью в решении этой задачи.

    Входные данные

    В первой строке входных данных следуют два целых числа n и m ( — количество вершин в графе и количество ребер в графе.

    Следующие m строк содержат описания ребер графа, по одному ребру в строке. Каждое из ребер задается парой целых чисел ai, bi (1 ≤ ai, bi ≤ n) — номерами вершин, которые соединены i-м ребром. Все числа в строках разделены одним пробелом.

    Гарантируется, что заданный граф не содержит петель и кратных ребер. Граф не обязательно является связным.

    Выходные данные

    Выведите в первую строку выходных данных через пробел два целых числа t и w — минимальное количество ребер, которое необходимо добавить в граф, чтобы образовался простой цикл нечетной длины, состоящий из более чем одной вершины, в котором каждая вершина встречается не более одного раза, и количество способов сделать это.

    Примечание

    Простой цикл это цикл, не проходящий дважды ни по какой вершине.

    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. Шестиугольник Геральда

    геометрия математика Перебор *1600

    Геральду на день рождения подарили очень любопытный шестиугольник. Именинник выяснил, что все углы шестиугольника равны . Затем он измерил длины его сторон и обнаружил, что каждая из них равна целому числу сантиметров. На этом свойства самого шестиугольника закончились и Геральд решил на нём порисовать.

    Он нарисовал несколько отрезков, параллельных сторонам этого шестиугольника, которые разбили шестиугольник на правильные треугольники со стороной в 1 сантиметр. Теперь Геральду интересно, сколько у него получилось треугольников. Но их так много, что Геральд всё время сбивается со счёта. Помогите имениннику посчитать треугольники.

    Входные данные

    В первой и единственной строке входных данных через пробел перечислены 6 целых чисел a1, a2, a3, a4, a5 и a6 (1 ≤ ai ≤ 1000) — длины сторон шестиугольника в сантиметрах в порядке обхода по часовой стрелке. Гарантируется, что шестиугольник с указанными свойствами и именно такими сторонами существует.

    Выходные данные

    Выведите единственное целое число — количество треугольников со стороной 1 сантиметр, на которые оказался разбит шестиугольник.

    Примечание

    Вот так выглядит шестиугольник Геральда в первом примере:

    А вот так — во втором:

    C. Геральд и гигантские шахматы

    дп Комбинаторика математика теория чисел *2200

    На Геральдионе очень распространены гигантские шахматы. Не будем углубляться в правила этой игры, скажем лишь, что игра происходит на поле размера h × w, и оно тоже раскрашено в два цвета, но не как в шахматах. Почти все клетки поля белые и только некоторые — чёрные. В данный момент Геральд заканчивает партию в гигантские шахматы против своего друга Полларда. Геральд почти выиграл, и для победы ему осталось только провести свою пешку из верхнего левого угла доски, где она сейчас стоит, в нижний правый. Геральд настолько уверен в победе, что ему стало интересно, сколькими способами он может выиграть?

    Пешка, которая осталась у Геральда, может ходить двумя способами: на одну клетку вниз или на одну клетку вправо. Кроме того, она не может ходить на чёрные клетки, иначе Геральд всё-таки проиграет. Никаких других пешек или фигур на поле не осталось, так что, согласно правилам гигантских шахмат, Геральд ходит своей пешкой, пока игра не закончится, а Поллард просто наблюдает за этим процессом.

    Входные данные

    В первой строке входных данных заданы три числа: h, w, n — размеры доски и количество чёрных клеток (1 ≤ h, w ≤ 105, 1 ≤ n ≤ 2000).

    В следующих n строках задано описание чёрных клеток. В i-й из этих строк написаны числа ri, ci (1 ≤ ri ≤ h, 1 ≤ ci ≤ w) — номер строки и столбца i-й клетки.

    Гарантируется, что верхняя левая и нижняя правая клетка белые и все клетки в описании различны.

    Выходные данные

    Выведите единственное число — остаток от деления количества способов провести пешку Геральда от верхней левой клетки до нижней правой на число 109 + 7.

    A. Простые или палиндромы?

    математика Перебор реализация теория чисел *1600

    Рихаил Мубинчик считает, что нынешнее определение простых чисел несостоятельно — они слишком сложны и непредсказуемы. Вот другое дело — палиндромные числа. И глазу приятны, и обладают рядом замечательных свойств. Помогите Рихаилу убедить научное сообщество в этом!

    Напомним, что число называется простым, если оно целое, не меньше двух, и не делится ни на какое целое положительное число кроме себя и единицы.

    Рихаил называет число палиндромным, если оно целое, положительное и его запись в десятичной системе счисления без ведущих нулей является палиндромом, то есть одинаково читается слева направо и справа налево.

    Одна из проблем с простыми числами заключается в том, что их слишком много. Введём следующие обозначения: π(n) — количество простых чисел, не превышающих n, rub(n) — количество палиндромных чисел, не превышающих n. Рихаил хочет доказать, что простых чисел намного больше, чем палиндромных.

    Он попросил вас решить следующую задачу: по заданному значению коэффициента A найти наибольшее такое n, что π(n) ≤ A·rub(n).

    Входные данные

    Ввод состоит из двух целых положительных чисел p, q — числитель и знаменатель дроби, являющейся значением коэффициента A ().

    Выходные данные

    Если наибольшее такое число существует, то вывести его. Иначе вывести "Palindromic tree is better than splay tree" (без кавычек).

    B. Симметричное и транзитивное

    дп Комбинаторика математика *1900

    Вовочка недавно занялся теорией множеств. Сейчас он проходит бинарные отношения. Вы, наверное, слышали термин «отношение эквивалентности». Такие отношения очень важны во многих разделах математики. Например, равенство двух чисел является отношением эквивалентности.

    Набор ρ пар (a, b) элементов некоторого множества A называется бинарным отношением на множестве A. Про два элемента a и b множества A говорят, что они находятся в отношении ρ, если пара , в таком случае пишут .

    Бинарное отношение является отношением эквивалентности, если:

    1. Оно рефлексивно (для любого a верно );
    2. Оно симметрично (для любых a, b верно, что если , то );
    3. Оно транзитивно (если и , то ).

    Вовочка очень даже не дурак и заметил, что первое условие не нужно! Вот его «доказательство»:

    Возьмём любые два элемента a и b. Если , то (по свойству (2)), а значит (по свойству (3)).

    Все очень просто, не правда ли? Однако, вы заметили, что «доказательство» Вовочки неверно, и решили предъявить ему множество примеров, доказывающих его неправоту.

    Вот ваше задание: посчитайте количество бинарных отношений над множеством размера n таких, что они симметричны, транзитивны, но не являются отношениями эквивалентности (то есть не являются рефлексивными).

    Так как их количество может быть очень большим (а не 0, как считает Вовочка), выведите остаток от деления их количества на 109 + 7.

    Входные данные

    В единственной строке находится одно целое число n (1 ≤ n ≤ 4000).

    Выходные данные

    В единственной строке выведите ответ на задачу по модулю 109 + 7.

    Примечание

    При n = 1 есть только одно такое отношение — пустое, т.е. . Иными словами, для единственного элемента x множества A выполнено .

    При n = 2 таких отношений уже три. Пусть множество A состоит из двух элементов x и y. Тогда подходящими элементами являются , ρ = {(x, x)}, ρ = {(y, y)}. Нетрудно видеть, что три перечисленных бинарных отношения являются симметричными и транзитивными отношениями, но не являются отношениями эквивалентности.

    D. Указательные столбы

    геометрия математика Перебор *2800

    В одном ханстве было очень много дорог и очень мало дерева. Ездить по дорогам было неудобно, ведь на дорогах не было столбиков с указанием направления на важные города.

    Хан решил, что это пора исправить, и приказал поставить столбики на каждую дорогу. Министр транспорта был бы и рад, только вот столбиков у него всего k. Помогите министру решить его проблему, иначе бедолага может потерять не только должность, но и голову.

    Более формально: каждая дорога в ханстве представляет собой прямую на плоскости Oxy, заданную уравнением вида Ax + By + C = 0 (A и B не равны нулю одновременно). Требуется определить, можно ли поставить столбики в не более, чем k точек так, чтобы на каждой дороге оказался установлен хотя бы один столбик.

    Входные данные

    На ввод подаются два целых положительных числа n, k (1 ≤ n ≤ 105, 1 ≤ k ≤ 5)

    Следующие n строк содержат по три целых числа Ai, Bi, Ci в каждой, коэффициенты уравнения, задающего дорогу (|Ai|, |Bi|, |Ci| ≤ 105, Ai2 + Bi2 ≠ 0).

    Гарантируется, что никакие две дороги не совпадают.

    Выходные данные

    Если решения не существует, выведите "NO" в единственной строке (без кавычек).

    Иначе в первой строке выведите "YES" (без кавычек).

    Во второй строке выведите единственное число m (m ≤ k) — количество использованных столбов. Затем в m строках выведите описания положений столбиков.

    Описание положения одного столбика  — это два целых числа v, u. Если u и v — два различных целых числа от 1 до n, то считается, что столбик стоит в точке пересечения дорог с номерами v и u. Если u =  - 1, а v — целое число от 1 до n, то столбик стоит на дороге номер v, причем не в точке пересечения с какой-либо другой дорогой. В любом ином случае описание столбика будет считаться некорректным, а ваш ответ — неправильным. В том числе, если v = u, либо если v и u — номера двух непересекающихся дорог, ваш ответ также будет признан неправильным.

    Дороги нумеруются с 1 в том порядке, в котором они даны во входных данных.

    Примечание

    Обратите внимание, вам не требуется минимизировать m, но оно должно быть не больше k.

    В первом тесте все три дороги пересекаются в точке (0,0).

    Во втором тесте три дороги образуют треугольник, и никак нельзя поставить один столб, чтобы он стоял на всех трёх дорогах сразу.

    A. Музыка

    математика реализация *1500

    Мальчик Лёша любит слушать музыку со своего смартфона. Но памяти у смартфона не очень много, поэтому Лёша слушает любимые композиции в известной социальной сети НаСвязи.

    К сожалению, интернет в Екатеринозаводске не очень быстрый, и песня загружается очень медленно. Но Лёша весьма нетерпелив. Песня длится ровно T секунд. Лёша прогружает первые S секунд композиции и включает песню. Когда воспроизведение доходит до момента, который ещё не прогрузился, Лёша моментально включает песню заново (при этом загруженная часть песни остаётся в памяти телефона, и процесс скачивания продолжается с того же места), и так происходит до тех пор, когда песня скачается полностью и Лёша дослушает до конца. За q секунд реального времени интернет позволяет скачать q - 1 секунду трека.

    Подскажите Лёше, сколько раз он запустит песню, включая самый первый запуск.

    Входные данные

    В единственной строчке записаны три целых числа T, S, q (2 ≤ q ≤ 104, 1 ≤ S < T ≤ 105).

    Выходные данные

    Выведите одно целое число — количество запусков композиции.

    Примечание

    В первом тесте песня проигрывается в два раза быстрее, чем скачивается, а значит через четыре секунды Лёша впервые дослушает до момента, который ещё не прогрузился, и запустит песню заново. Ещё через две секунды песня скачается полностью, а значит Лёша запустит песню два раза.

    Во втором тесте песня уже почти скачана, и Лёша запустит её всего один раз.

    В третем тесте из условия загрузка заканчивается и Лёша завершает прослушивание песни в один и тот же момент. Обратите внимание, что в таком случае Лёша не перезапускает песню заново.

    B. Инвентаризация

    жадные алгоритмы математика *1200

    На предприятиях всегда много аппаратуры, мебели, других вещей. И за всеми ними нужно следить. Для этого вещам присваивают номера, по номеру куда проще составить базу и все отслеживать.

    В процессе ревизии вы с удивлением обнаружили, что нумерация вещей не последовательна, а некоторые вещи и вовсе имеют одинаковый номер! Это нужно срочно исправить. Вы решили сделать так, чтобы номера вещей шли по порядку, начиная с единицы. При этом сменить номер — это достаточно трудоемкий процесс, и вы бы хотели по максимуму использовать текущую нумерацию.

    Вам дана информация о текущих номерах для n вещей, находящихся на предприятии. Перенумеруйте вещи так, чтобы их номера образовывали перестановку чисел от 1 до n, при этом количество вещей, номер которых будет изменён, должно быть минимально. Напомним, что набор из n чисел образует перестановку, если все числа лежат в пределах от 1 до n, и никакие два числа не совпадают.

    Входные данные

    В первой строке находится одно целое число n — количество вещей (1 ≤ n ≤ 105).

    Во второй строке находятcя n чисел a1, a2, ..., an (1 ≤ ai ≤ 105) — исходные номера предметов.

    Выходные данные

    Выведите n чисел — итоговые номера предметов в порядке следования во входных данных. Если возможных ответов несколько, разрешается вывести любой.

    Примечание

    В первом тесте нумерация уже представляет собой перестановку, поэтому ничего менять не надо.

    Во втором тесте есть две пары совпадающих номеров, в каждой паре нужно сменить по одному номеру.

    В третьем тесте необходимо заменить 2 на 1, так как нумерация должна начинаться с единицы.

    C. Массив

    Комбинаторика математика *1900

    Кролик Крис с детства увлекается массивами. Сейчас он занят исследованием массивов длиной n, которые содержат только целые числа от 1 до n. Он не силен в математике — поэтому некоторые простые вещи выводят его из себя. Вот, к примеру, вчера он задался целью вычислить, сколько всего есть разных красивых массивов? Крис считает, что массив красив, если выполняется одно из двух:

    • каждый элемент, начиная со второго, не больше предыдущего
    • каждый элемент, начиная со второго, не меньше предыдущего

    Крис, изрядно разозлившись на себя и на математику, пришел просить помощи у Стьюи и Брайана. Но те просто посмеялись и сказали, что ответ слишком прост и неинтересен. Помогите кролику Крису все же найти ответ.

    Входные данные

    Единственная строка содержит целое число n — размер массива (1 ≤ n ≤ 105).

    Выходные данные

    В единственной строке требуется вывести ответ. Так как он может быть достаточно большим — нужно вывести его по модулю 1000000007.

    D. Путешествие

    дп математика *2500

    Кролик Стьюи исследует новую параллельную вселенную. Эта двухмерная вселенная имеет форму прямоугольной сетки, содержащей n строк и m столбцов. Вселенная очень маленькая: в одной ячейке сетки может находится только одна частица. В этой вселенной каждая частица либо статическая, либо динамическая. Всякая статическая частица постоянно находится на одной и той же позиции. Из-за непонятных законов гравитационных искривлений в двухмерной вселенной никакие две статические частицы не могут быть в одном столбце или одной строке, а также не могут находиться в соседних по диагонали ячейках. Динамическая частица появляется в случайной пустой ячейке, случайным образом выбирает ячейку назначения (ячейка назначения может совпадать с начальной, см. примеры), и двигается в неё по кратчайшему пути по незанятым статическими частицами ячейкам. Все пустые ячейки имеют одинаковую вероятность быть выбранными в качестве начала или конца пути. После достижения пункта назначения частица исчезает. В один момент времени может быть только одна динамическая частица. Эта частица может перемещаться между ячейками, если те имеют смежную сторону, и это перемещение занимает ровно одну галактическую секунду. Стьюи стало интересно, какова средняя продолжительность жизни одной частицы в данной вселенной.

    Входные данные

    Первая строка содержит два целых числа, разделенные пробелами: n, m (2 ≤ n, m ≤ 1000) — размеры вселенной. Следующие n строк по m символов каждая описывают вселенную без динамических частиц — j-ый символ i-ой строки равен 'X' если ячейка занята статической частицей, или '.' если пустая. Гарантируется что описанная вселенная удовлетворяет свойствам, описанным выше, то есть никакие две статические частицы не могут быть в одном столбце или одной строке, а также не могут находиться в соседних по диагонали ячейках.

    Выходные данные

    Требуется вывести в единственной строке одно число — среднюю длительность жизни одной частицы с точностью хотя бы 6 знаков после запятой.

    Ответ будет засчитан, если он отличается от правильного не более чем на 10 - 6 относительной или абсолютной погрешности.

    E. Шахматы

    кратчайшие пути математика *3000

    Кролик Брайан любит шахматы. Недавно он поспорил с кроликом Стьюи что конь лучше короля. Для этого он пытается показать, что конь очень быстрый, но Стьюи не принимает утверждений без доказательств. Он соорудил для Брайана бесконечную шахматную доску, в которой удалил некоторые клетки для спортивного интереса. Брайану осталось посчитать, сколько различных клеток доски достижимы не более чем за k ходов для коня, который стоит в клетке с координатами (0, 0), Естественно, на вырезанные клетки ходить нельзя.

    Брайан сам не очень любит точные науки и не знаком с программированием, поэтому вряд ли ему удастся опередить Стьюи, который уже принялся за решение поставленной задачи. Помогите Брайану решить задачку быстрей Стьюи.

    Входные данные

    Первая строка содержит два целых числа k и n (0 ≤ k ≤ 1018, 0 ≤ n ≤ 440) — соответственно максимальное количество ходов, которые может совершить конь, и количество удаленных клеток. Далее записано n строк — каждая задает координаты вырезанной клетки в виде (xi, yi) (|xi| ≤ 10, |yi| ≤ 10). Все числа целые, вырезанные клетки различны, и клетка (0, 0) гарантированно не вырезана.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).

    Выходные данные

    В единственной строке требуется вывести ответ. Так как он может быть достаточно большим нужно вывести его по модулю 1000000007.

    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 вероятность победы меньше.

    A. Удлинение палочек

    Комбинаторика математика реализация *2100

    Даны три палочки с целыми положительными длинами в a, b, и c сантиметров. Можно увеличить некоторые из них на целое положительное число сантиметров (разные палочки можно увеличивать на разную длину), но в сумме не больше, чем на l сантиметров. В частности, разрешается не увеличивать длину ни одной палочки.

    Определите количество способов увеличить длины некоторых палочек так, чтобы из них можно было сложить невырожденный (то есть, имеющий ненулевую площадь) треугольник. Два способа считаются различными, если в них длина какой-то из палочек увеличивается на разное число сантиметров.

    Входные данные

    В единственной строке задано 4 целых числа a, b, c, l (1 ≤ a, b, c ≤ 3·105, 0 ≤ l ≤ 3·105).

    Выходные данные

    Выведите единственное целое число — количество способов увеличить размеры палочек в сумме не больше, чем на l сантиметров, так, чтобы из них можно было составить невырожденный треугольник.

    Примечание

    В первом тесте из условия можно не увеличивать ни одну из палочек, либо увеличить любые две палочки на 1 сантиметр.

    Во втором тесте из условия можно увеличить либо первую, либо вторую палочку на один сантиметр. Обратите внимание, что треугольник, составленный из исходных палочек, является вырожденным, и поэтому не подходит.

    E. Геометрические прогрессии

    математика *3200

    Геометрической прогрессией с первым элементом a и знаменателем b называется последовательность чисел a, ab, ab2, ab3, ....

    Задано n целочисленных геометрических прогрессий. Требуется найти наименьшее целое число x, которое является элементом всех заданных прогрессий, либо сообщить, что такого не существует.

    Входные данные

    В первой строке задано целое число (1 ≤ n ≤ 100) — количество геометрических прогрессий.

    В следующих n строках заданы пары целых числа a, b (1 ≤ a, b ≤ 109), являющиеся первым элементом и знаменателем соответствующей геометрической прогрессии.

    Выходные данные

    Если пересечение всех прогрессий пусто, то выведите  - 1, иначе выведите остаток от деления минимального числа, принадлежащего всем прогрессиями, на 1000000007 (109 + 7).

    Примечание

    Во втором тестовом примере одна из прогрессий содержит только степени двойки, другая — только степени тройки.

    A. Мишка и покер

    математика реализация теория чисел *1300

    Лимак — старый бурый медведь. Он любит играть в покер со своими друзьями, для чего они часто ходят в ближайшее казино.

    За столом сидят n игроков (включая Лимака), которые уже сделали какие-то ставки. i-й игрок поставил ai долларов.

    Каждый игрок может удвоить или утроить свою ставку произвольное количество раз (может быть, и удвоить, и утроить). В казино есть специальное условие о джекпоте в случае, если ставки всех игроков становятся равны. Могут ли Лимак и его друзья выиграть джекпот?

    Входные данные

    В первой строке входного файла записано целое число n (2 ≤ n ≤ 105), количество игроков.

    Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — ставки игроков.

    Выходные данные

    Выведите "Yes" (без кавычек), если игроки смогут сделать все ставки равными, или "No" в противном случае.

    Примечание

    В первом тесте первый и третий игроки должны дважды удвоить свои ставки, второй игрок должен удвоить свою ставку один раз, а четвертый игрок должен удвоить и утроить свою ставку.

    Можно показать, что во втором тесте невозможно сделать все ставки равными.

    B. Мишка и кубики

    Бинарный поиск дп математика Структуры данных *1600

    Лимак — маленький мишка, который любит играть. Он строит башенки из кубиков, а потом рушит их.

    Он возвёл n башен, расположенных в ряд, i-я башня сделана из hi одинаковых кубиков. (смотрите иллюстрацию к первому примеру).

    Лимак повторит следующую операцию, пока конструкция не разрушится целиком.

    Кубик называется внутренним, если у него есть все четыре соседа, то есть если каждая его сторона (левая, правая, верхняя или нижняя) примыкает к другому кубику или к полу. В противном случае, кубик считается граничным. За одну операцию Лимак одновременно разрушает все граничные кубики.

    Лимак готов начинать. Ваша задача — посчитать, сколько операций ему будет нужно, чтобы уничтожить все кубики.

    Входные данные

    В первой строке записано единственное целое число n (1 ≤ n ≤ 105).

    Во второй строке записано n целых чисел через пробел h1, h2, ..., hn (1 ≤ hi ≤ 109) — размеры башен.

    Выходные данные

    Выведите количество операций, необходимых для уничтожения всех башен.

    Примечание

    Приведенная ниже иллюстрация показывает все три операции для первого теста. Каждый раз граничные кубики окрашены красным.

    После первой операции остается четыре кубика, а после второй операции остается только один. Этот последний кубик уничтожается в третьей операции.

    A. Фибоноччи

    математика матрицы Структуры данных *2700

    Последовательность Фибоноччи — это целочисленная рекуррентная последовательность, определяемая следующим образом:

    Fn = sn - 1·Fn - 1 + sn - 2·Fn - 2
    при этом
    F0 = 0, F1 = 1

    Последовательность s — это бесконечная и почти периодическая последовательность с периодом длины N. Здесь последовательность s называется почти периодической с периодом длины N, если , для i ≥ N, кроме конечного числа значений si, для которых (i ≥ N).

    Далее следует пример почти периодической последовательности с периодом длины 4:

    s = (5,3,8,11,5,3,7,11,5,3,8,11,…)

    Обратите внимание, что единственное значение s, для которого не выполняется уравнение — это s6 (s6 = 7 и s2 = 8). Вам даны s0, s1, ...sN - 1 и все значения последовательности s, для которых (i ≥ N).

    Найдите .

    Входные данные

    Первая строка содержит два целых числа, K и P. Во второй строке записано единственное число N. В третьей строке записано N чисел через пробелы, обозначающие первые N чисел последовательности s. В четвёртой строке записано единственное целое число M, количество значений в последовательности s, для которых . Каждая из последующих M строк содержит по два числа, j и v, обозначающих, что и sj = v. Все значения j различны.

    • 1 ≤ N, M ≤ 50000
    • 0 ≤ K ≤ 1018
    • 1 ≤ P ≤ 109
    • 1 ≤ si ≤ 109, for all i = 0, 1, ...N - 1
    • N ≤ j ≤ 1018
    • 1 ≤ v ≤ 109
    • Все значения целочисленные.
    Выходные данные

    Выведите единственное целое число, равное .

    H. Боты

    дп Комбинаторика математика теория чисел *1800

    Саша и Ира — лучшие друзья. Они не просто друзья — они разработчики ПО и эксперты по искусственному интеллекту. Они разрабатывают алгоритм для двух ботов, играющих в игру для двух игроков. За каждый ход, один из игроков совершает ход (неважно, какой игрок, возможно, игроки делают ходы не по очереди).

    Алгоритм для ботов, разработанный Сашей и Ирой, работает за счет отслеживания состояния, в котором находится игра. Каждый раз, когда любой бот делает ход, состояние меняется. А так как игра очень динамичная, она никогда не вернется в то состояние, в котором она была на каком-либо этапе в прошлом.

    Саша и Ира — перфекционисты и они хотят, чтобы у их алгоритма была оптимальная выигрышная стратегия. Они заметили, что в оптимальной выигрышной стратегии оба бота делают ровно по N ходов каждый. Но для того, чтобы найти оптимальную стратегию, их алгоритму надо проанализировать все возможные состояния этой игры (они ещё не изучили альфа-бета отсечение) и выбрать лучшую последовательность ходов.

    Они беспокоятся насчет эффективности их алгоритма и им интересно, какое общее количество состояний в игре, которое необходимо проанализировать?

    Входные данные

    В первой и единственной строке записано целое число N.

    • 1 ≤ N ≤ 106
    Выходные данные

    Вывод должен содержать единственное целое число – количество возможных состояний по модулю 109 + 7.

    Примечание

    Начало: Игра в состоянии A.

    • Ход 1: Любой бот может ходить (первый бот красный, а второй бот синий), так что есть два возможных состояния после первого хода – B и C.
    • Ход 2: В обоих состояниях, B и C, любой бот может снова сделать ход, так что список возможных состояний расширяется и включает в себя D, E, F и G.
    • Ход 3: Красный бот уже совершил N=2 движений в состоянии D, так что отсюда он больше не может делать ходов. Он может совершать ходы в состояниях E, F и G, так что состояния I, K и M добавляются в список. Аналогичным образом, синий бот не может совершать ходы в состоянии G, но может в D, E и F, так что добавляются состояния H, J и L.
    • Ход 4: Красный бот точка уже совершил N=2 шага в состояниях H, I и K, он может двигаться только в J, L и M, так что добавляются состояния P, R и S. Синий бот не может двигаться в состояниях J, L и M, а только в H, I и K, так что добавляются состояния N, O и Q.

    Всего образуется 19 различных состояний игры, необходимых в анализе алгоритма.

    A. Игра Васи и Пети

    математика теория чисел *1500

    Вася и Петя играют в одну простую игру. Вася загадал число x от 1 до n, а Петя пытается угадать это число.

    Петя может задавать вопросы вида: «Делится ли загаданное число на число y?».

    Игра происходит по следующим правилам: вначале Петя спрашивает все вопросы, которые его интересуют (в том числе, он может не задать ни одного вопроса), затем Вася отвечает на каждый из вопросов «да» или «нет». После получения всех ответов Петя должен назвать число, которое загадал Вася.

    К сожалению, Петя не слишком хорошо разбирается в теории чисел. Помогите ему найти минимальное количество вопросов, которые он должен задать, чтобы гарантированно угадать число Васи, а также сами числа yi, про которые он должен задать вопросы.

    Входные данные

    В единственной строке записано число n (1 ≤ n ≤ 103).

    Выходные данные

    Выведите длину искомой последовательности вопросов k (0 ≤ k ≤ n), а затем k чисел — саму последовательность вопросов yi (1 ≤ yi ≤ n).

    Если существует несколько корректных последовательностей вопросов минимальной длины, то разрешается вывести любую.

    Примечание

    Последовательность из ответа на первый тест из условия действительно корректна.

    Если загаданное число не делится ни на одно из чисел последовательности, то оно равно 1.

    Если же загаданное число делится на 4, то оно равно 4.

    Если загаданное число делится на 3, то загаданное число равно 3.

    Иначе, оно равно 2. Стало быть, эта последовательность вопросов действительно угадывает загаданное число. Можно показать, что не существует последовательности вопросов состоящей из менее, чем трёх вопросов, удовлетворяющей условию.

    A. Задача про ломаную

    геометрия математика *1700

    Дана ломаная, проходящая через точки (0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – ....

    Мы знаем, что ломаная проходит через точку (a, b). Найдите наименьшее возможное положительное значение x, при котором это верно, либо определите, что такого значения x не существует.

    Входные данные

    В единственной строке записано два положительных целых числа a и b (1 ≤ a, b ≤ 109).

    Выходные данные

    Выведите единственную строку, содержащую ответ. Если подходящего x не существует, выведите  - 1.

    Ответ будет засчитан, если его относительная или абсолютная погрешность нее превышает 10 - 9.

    Примечание

    Изображения к первому и третьему тесту из условия:

    A. Хипстер Вася

    математика реализация *800

    Как-то раз хипстер Вася решил посчитать, сколько у него носков. Оказалось, что у Васи есть a красных носков и b синих носков.

    Согласно последним веяниям моды, хипстеры должны носить носки разных цветов: на левой ноге красный, а на правой — синий.

    Каждый день с утра Вася надевает новые носки, а перед сном выкидывает их, ведь стирать ему их очень не хочется.

    Васе стало интересно, какое максимальное количество дней, в которые он сможет быть одетым по моде и носить разноцветные носки, и сколько затем дней он сможет ходить в одноцветных носках, пока носки либо не закончатся, либо из оставшихся носков нельзя будет составить ни одной пары.

    Поможете ему?

    Входные данные

    В единственной строке входных данных следуют два целых положительных числа a и b (1 ≤ a, b ≤ 100) — количество носков красного и синего цветов, которые есть у Васи.

    Выходные данные

    Выведите через пробел два целых числа — максимальное количество дней, в которые Вася сможет носить разноцветные носки, и количество дней, которое он сможет носить одноцветные носки до тех пор, пока они либо не кончатся, либо из оставшихся носков нельзя будет составить ни одной пары.

    Напомним, что в конце дня Вася выкидывает носки, которые он носил в этот день.

    Примечание

    В первом примере Вася сначала может надеть одну пару разноцветных носков, после этого у него останется два красных носка, которые он наденет во второй день.

    B. Элитные дома

    математика реализация *1100

    В столице Берляндии есть n многоэтажных домов. Архитектор, который застраивал столицу, был человеком очень творческим, поэтому все дома были построены в один ряд.

    Пронумеруем все дома слева направо, начиная с единицы. Дом считается элитным, если количество этажей в нем строго больше, чем во всех домах с большими номерами. Иными словами, дом элитный, если количество этажей в нем строго больше, чем во всех домах, которые расположены правее, чем он. В данной задаче полагается, что высоты всех этажей во всех домах одинаковы.

    Нового архитектора заинтересовали n вопросов, i-й из которых звучит так: «сколько этажей нужно достроить к i-му дому, чтобы он стал элитным?» (где i принимает все значения от 1 до n). Вам предстоит помочь ему справиться с этой задачей.

    Заметим, что все вопросы независимы друг от друга — ответ на вопрос для дома i не влияет на другие ответы (то есть, этажи к домам на самом деле не достраиваются).

    Входные данные

    В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 105) — количество домов в столице Берляндии.

    Во второй строке через пробел записаны n целых положительных чисел hi (1 ≤ hi ≤ 109), где hi равно количеству этажей в i-м доме.

    Выходные данные

    Выведите n целых чисел a1, a2, ..., an, где число ai равно количеству этажей, которые необходимо достроить к дому номер i, чтобы он стал элитным. Если дом уже элитный и к нему достраивать ничего не нужно, тогда ai должно быть равно нулю.

    Все дома нумеруются слева направо, начиная с единицы.

    C. Развитие навыков

    математика реализация сортировки *1400

    Петя очень любит компьютерные игры. Наконец вышла игра, которую он так долго ждал!

    У главного героя этой игры есть n различных навыков, каждый из которых характеризуется целым числом ai от 0 до 100. Чем больше число ai, тем лучше главный герой владеет i-м навыком. Суммарный рейтинг главного героя определяется как сумма значений по всем i от 1 до n. Выражение x обозначает результат округления числа x вниз к ближайшему целому числу.

    Пете в начале игры в качестве бонуса дали k единиц улучшений, которые он может использовать для увеличения навыков своего персонажа и его суммарного рейтинга. Используя одну единицу улучшения, Петя может увеличить любой навык главного героя ровно на один. К примеру, если a4 = 46, то после применения единицы улучшения к этому навыку, он станет равен 47. Больше 100 навык героя стать не может. Таким образом, возможно, что некоторое количество единиц улучшения останется невостребованным.

    Перед вами стоит задача определить, как следует использовать единицы улучшений, чтобы максимизировать суммарный рейтинг главного героя. Использовать все единицы улучшений не обязательно.

    Входные данные

    В первой строке входных данных следуют два целых положительных числа n и k (1 ≤ n ≤ 105, 0 ≤ k ≤ 107) — количество навыков главного героя и количество единиц улучшений, имеющихся у Пети.

    Во второй строке входных данных следует последовательность из n целых чисел ai (0 ≤ ai ≤ 100), где ai характеризует уровень развитости i-го навыка главного героя.

    Выходные данные

    В единственной строке выходных данных должно содержаться целое неотрицательное число — максимальный суммарный рейтинг главного героя, который может получить Петя, используя k или менее единиц улучшения.

    Примечание

    В первом тестовом примере оптимальная стратегия следующая. Петя должен улучшить первый навык до 10, потратив 3 единицы улучшения, и второй навык до 10, потратив одну единицу улучшения. Таким образом, Петя потратит все свои единицы улучшения и суммарный рейтинг главного героя станет равен .

    Во втором тестовом примере оптимально для Пети улучшить первый навык до 20 (при этом потратить 3 единицы улучшения) и улучшить третий навык до 20 (при этом потратить 1 единицу улучшения). Таким образом, у Пети останется 4 единицы улучшения и он сможет увеличить второй навык лишь до 19 (что не изменит суммарный рейтинг, поэтому делать это Пете необязательно). Поэтому максимально возможный суммарный рейтинг в этом примере .

    В третьем тестовом примере оптимальная стратегия Пети — увеличить первый навык до 100, потратив 1 единицу улучшения. После этого оба навыка главного героя станут равны 100, поэтому Петя не сможет потратить оставшуюся единицу улучшения. Таким образом, ответ равен .

    D. Три логотипа

    битмаски геометрия Конструктив математика Перебор реализация *1700

    Три компании решили заказать рекламный щит с изображениями своих логотипов. Рекламный щит представляет собой большую квадратную доску. Логотип каждой из компаний представляет собой прямоугольник ненулевой площади.

    Рекламодатели разместят рекламу только в том случае, если возможно расположить все три логотипа на щите без наложений так, что на нём не останется свободного места. При размещении логотипы можно поворачивать так, чтобы стороны были параллельны сторонам рекламного щита.

    Перед вами стоит задача определить, возможно ли разместить логотипы трех компаний на щите квадратной формы, не нарушив никакое из описанных правил.

    Входные данные

    В единственной строке входных данных находятся шесть целых положительных чисел x1, y1, x2, y2, x3, y3 (1 ≤ x1, y1, x2, y2, x3, y3 ≤ 100), где xi и yi обозначают длину и ширину логотипа i-й компании соответственно.

    Выходные данные

    Если разместить все три логотипа на квадратном щите невозможно, выведите одно число "-1" (без кавычек).

    Если же это возможно, выведите в первую строку длину стороны квадрата n, в котором можно разместить все три логотипа. В следующих n строках должно содержаться по n заглавных латинских букв "A", "B" или "C". Наборы одинаковых букв должны образовывать сплошные прямоугольники, причем:

    • размеры прямоугольника, составленного из букв "A", должны быть равны размерам логотипа первой компании,
    • размеры прямоугольника, составленного из букв "B", должны быть равны размерам логотипа второй компании,
    • размеры прямоугольника, составленного из букв "C", должны быть равны размерам логотипа третьей компании.

    Напомним, что логотипы компаний в процессе нанесения их на рекламный щит можно поворачивать. Пустых мест на щите остаться не должно. Если квадратный рекламный щит можно заполнить логотипами несколькими способами, разрешается вывести любой из них.

    Изучите тестовые примеры для лучшего понимания условия.

    D. Количество биномиальных коэффициентов

    дп математика теория чисел *3300

    Для заданного простого целого числа p и целых α, A посчитайте количество пар целых чисел (n, k) таких, что 0 ≤ k ≤ n ≤ A и делится на pα.

    Поскольку ответ может быть очень большим, выведите его остаток от деления на 109 + 7.

    Напомним, что — это количество сочетаний размера k из n предметов.

    Входные данные

    В первой строке содержатся два целых числа p и α (1 ≤ p, α ≤ 109, p — простое).

    Во второй строке содержится десятичная запись целого числа A (0 ≤ A < 101000) без ведущих нулей.

    Выходные данные

    В единственной строке выведите ответ на задачу.

    Примечание

    В первом примере три биномиальных коэффициента, делящихся на 4, это , и .

    A. Олеся и Родион

    математика *1000

    Олеся любит числа длины n, а Родиону нравятся только числа, делящиеся на t. Найдите какое-нибудь число, устраивающее их обоих.

    Ваша задача — по заданным n и t вывести целое число строго больше нуля, состоящие из n цифр, которое делится на t. Если же такого числа не существует, выведите  - 1.

    Входные данные

    В единственной строке записаны два числа n и t (1 ≤ n ≤ 100, 2 ≤ t ≤ 10) — длина числа и на что оно должно делиться.

    Выходные данные

    Выведите одно целое положительное число без ведущих нулей, являющееся ответом на задачу, или  - 1, если такого числа не существует. Если возможных ответов несколько, разрешается вывести любой.

    D. Дима и Лиза

    математика Перебор теория чисел *1800

    Дима любит раскладывать нечетное число в сумму нескольких простых чисел, а Лиза любит, когда простых не больше трех. Помогите им представить данное число в виде суммы не более, чем трех простых чисел.

    Более формально, вам дано нечётное число n. Найдите набор чисел pi (1 ≤ i ≤ k), такой что

    1. 1 ≤ k ≤ 3
    2. pi — простое число

    Не требуется, чтобы числа pi были различными. Гарантируется, что хотя бы один возможный ответ существует.

    Входные данные

    В единственной строке записано нечетное число n (3 ≤ n < 109).

    Выходные данные

    В первой строке выведите k (1 ≤ k ≤ 3) - количество чисел в найденном вами представлении.

    Во второй строке выведите сами числа pi в любом порядке. Если возможных ответов несколько, разрешается вывести любой.

    Примечание

    Простое число — это целое число, строго большее единицы, которое делится только на единицу и на само себя.

    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 монеты.

    E. Подарок для филателиста Виталика

    Комбинаторика математика теория чисел *2900

    У филателиста Виталика сегодня день рождения!

    Как постоянному клиенту магазина почтовых марок «Робин Бобин», руководство магазина решило сделать ему подарок.

    Виталик хочет купить одну марку, а магазин, в свою очередь, подарит ему некоторый непустой набор из оставшихся марок, такой, что наибольший общий делитель (НОД) цен подаренных марок больше единицы. Если НОД цен купленной марки и цен марок из подаренного набора окажется равен 1, то Виталик уйдет из магазина абсолютно счастливым.

    Руководство магазина просит вас посчитать количество различных ситуаций, при которых Виталик уйдет из магазина абсолютно счастливым. Так как искомое количество ситуаций может оказаться очень большим, вам требуется найти остаток от деления этого количества на число 109 + 7. Ситуации считаются различными, если различаются марки, купленные Виталиком, или один из подарков содержит марку, которую не содержит другой.

    Входные данные

    В первой строке входных данных содержится целое число n (2 ≤ n ≤ 5·105) — количество различных марок, имеющихся в продаже в магазине «Робин Бобин». Вторая строка содержит последовательность целых чисел a1, a2, ..., an (2 ≤ ai ≤ 107), где ai — цена i-й марки.

    Выходные данные

    Выведите одно целое число — остаток от деления искомого количества ситуаций на число 109 + 7.

    Примечание

    В первом примере возможны следующие ситуации:

    • Виталик покупает 1-ю марку, магазин дарит 2-ю марку;
    • Виталик покупает 3-ю марку, магазин дарит 2-ю марку;
    • Виталик покупает 2-ю марку, магазин дарит 1-ю марку;
    • Виталик покупает 2-ю марку, магазин дарит 3-ю марку;
    • Виталик покупает 2-ю марку, магазин дарит 1-ю и 3-ю марки.

    B. Влюбленная Duff

    математика *1300

    Duff обожает прекрасные числа! Положительное целое число x называется прекрасным тогда и только тогда, когда не существует положительного целого числа a > 1, такого, что a2 является делителем x.

    Malek владеет магазином чисел! В его магазине есть в продаже числа — делители положительного целого числа n (и только они). Malek хочет подарить девушке подарок на день рождения — прекрасное число из его магазина. Также он хочет, чтобы это число было как можно больше.

    Malek'у всегда с трудом давалась математика, так что он поросил Вашей помощи. Пожалуйста, назовите ему наибольшее прекрасное число в его магазине.

    Входные данные

    В первой и единственной строке входа записано единственное целое число, n (1 ≤ n ≤ 1012).

    Выходные данные

    Выведите ответ в единственной строке.

    Примечание

    В первом тесте в магазине есть числа 1, 2, 5 и 10. 10 не делится ни на один точный квадрат, таким образом, число 10 прекрасное.

    Во втором тесте в магазине даны числа 1, 2, 3, 4, 6 и 12. 12 делится на 4 = 22, таким образом, 12 не прекрасное, а вот 6 очень даже прекрасное.

    B. Чип и Дейл спешат на помощь

    Бинарный поиск геометрия математика *2100

    Команда пушистых спасателей сидела без дела в своём дупле, когда неожиданно поступил сигнал бедствия. В считанные мгновения все были на своих местах, и дирижабль бурундучков-спасателей отправился в путь.

    Будем считать, что действие происходит на декартовой плоскости. База спасателей расположена в точке (x1, y1), а сигнал бедствия поступил из точки (x2, y2).

    Благодаря инженерному искусству Гаечки, летательный аппарат спасателей может произвольное количество раз в любые моменты времени мгновенно изменить свою текущую скорость и направление движения. Единственное ограничение — величина скорости дирижабля относительно воздуха не может превосходить метров в секунду.

    Разумеется, как настоящий спасатель, Гаечка хочет лететь так, чтобы оказаться на месте происшествия как можно быстрее. Дело осложняется тем, что в небе дует ветер, который влияет на перемещение дирижабля. Согласно прогнозу погоды, в ближайшие t секунд скорость ветра будет характеризоваться вектором (vx, vy), а по прошествии t секунд скорость ветра станет равна (wx, wy). Данные вектора определяют как направление ветра, так и его скорость. Формально, если дирижабль находится в точке (x, y), его собственная скорость относительно воздуха равна нулю и при этом дует ветер (ux, uy), то для любого неотрицательного вещественного числа , через секунд дирижабль окажется в точке с координатами .

    Гаечка занята управлением дирижаблем, поэтому она попросила Чипа вычислить, как скоро они смогут быть на месте, с чем он легко справился. Однако Дейл убеждён, что Чип не справился вычислить ответ и назвал случайное значение, лишь бы не ударить в грязь лицом перед Гаечкой. Чтобы пристыдить Чипа, Дейл попросил вас посчитать правильный ответ.

    Гарантируется, что скорость ветра в любой момент времени строго меньше максимально возможной скорости дирижабля относительно воздуха.

    Входные данные

    В первой строке ввода записаны четыре целых числа x1, y1, x2, y2 (|x1|,  |y1|,  |x2|,  |y2| ≤ 10 000) — координаты дупла спасателей и точки, из которой поступил сигнал бедствия.

    Во второй строке записаны два целых числа и t (0 < v, t ≤ 1000), задающих соответственно максимальную скорость дирижабля бурундуков и момент времени, в который произойдёт перемена ветра, согласно прогнозу погоды.

    Далее, по одной в строке записаны две пары целых чисел (vx, vy) и (wx, wy), описывающие ветер в первые t секунд и ветер, который будет дуть всё остальное время, соответственно. Гарантируется, что и .

    Выходные данные

    Выведите единственное число — минимальное время, через которое спасатели смогут оказаться в точке (x2, y2). Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    A. Поединок волшебников

    математика реализация *900

    Гарри Поттер и Тот-Кого-Нельзя-Называть снова сошлись в смертельном поединке. На этот раз они стоят в противоположных концах коридора длины l метров и одновременно пускают в противника свои смертельные заклинания. Известно, что магический импульс заклинания Гарри распространялся со скоростью p метров в секунду, а магический импульс заклинания Сами-Знаете-Кого — со скоростью q метров в секунду.

    Импульсы движутся по коридору навстречу друг другу, и в момент столкновения разворачиваются и летят обратно к тем, кто их выпустил, не меняя своих изначальных скоростей. Затем, каждый из волшебников отражает вернувшийся импульс и тот снова летит в сторону врага, опять же не меняя своей скорости.

    Так как Гарри отлично освоил основы магии, то он знает, что после второго столкновения импульсы исчезнут, а в месте их встречи произойдёт сильный взрыв. Но вот с математикой у юного волшебника проблемы, поэтому он просит вас вычислить расстояние от его позиции до места второй встречи импульсов заклинаний, при условии, что противники стоят на месте в течение всего боя.

    Входные данные

    В первой строке ввода записано единственное целое число l (1 ≤ l ≤ 1 000) — длина коридора, в котором происходит поединок.

    Во второй строке находится целое число p, в третьей целое число q (1 ≤ p, q ≤ 500) — скорости магических импульсов Гарри Поттера и Того-Кого-Нельзя-Называть соответственно.

    Выходные данные

    Выведите единственное число — расстояние от конца коридора, в котором стоит Гарри, до места второй встречи импульсов заклинаний. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 4.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    В первом тесте из условия скорости импульсов равны, поэтому обе их встречи произойдут ровно посередине между Гарри и Тем-Кого-Нельзя-Называть.

    B. Белочка и чудовище

    математика *1100

    Чудовище Ари всегда просыпается очень рано, с первыми лучами солнца, и первым делом идёт кормить свою белочку.

    Ари рисует правильный выпуклый многоугольник на полу и пронумеровывает его вершины числами 1, 2, ..., n в порядке обхода по часовой стрелке. Затем, начиная с вершины 1, она рисует лучи в направлении всех остальных вершин. Каждый луч останавливается, когда достигает вершины, в которую направлен, или когда он пересекается с другим лучом, нарисованным ранее. Ари повторяет этот процесс для вершин 2, 3, ..., n (в таком порядке), а затем кладёт грецкий орех в каждую область, образовавшуюся внутри многоугольника.

    Белочка Ада хочет собрать все грецкие орехи, но ей не разрешается наступать на линии, нарисованные Ари. Это значит, что Аде надо сделать маленький прыжок, если ей нужно попасть из одной области в другую. Прыжки у Ады очень короткие, поэтому она может прыгнуть из одной области P в другую область Q тогда и только тогда, когда P и Q имеют общую сторону или угол.

    Ада начинает за границами исходного многоугольника. Какое минимальное количество прыжков ей надо сделать, чтобы собрать все орехи?

    Входные данные

    В первой и единственной строке ввода записано единственное целое число n (3 ≤ n ≤ 54321) — количество вершин в правильном многоугольнике, нарисованном Ари.

    Выходные данные

    Выведите минимальное количество прыжков, необходимых Аде для того, чтобы собрать все грецкие орехи. Обратите внимание, что ей нет необходимости покидать многоугольник после этого.

    Примечание

    Одно из возможных решений для первого примера показано на рисунке выше.

    C. Важные гонки

    математика *1800

    Вектор Уиллман и Массив Болт — два самых известных атлета Байтфорсес. Сегодня они собираются соревноваться в беге на дистанцию в x метров.

    У Уиллмана и Болта совершенно одинаковая скорость, так что результатом любого их соревнования всегда будет ничья. Для организаторов это проблема, потому что им обязательно нужен победитель.

    Просматривая предыдущие гонки с участием данных атлетов, организаторы заметили, что Уиллман может делать только шаги длиной w метров, а Болт может делать только шаги длиной b метров. Организаторы решили слегка изменить правила гонки, а именно, в конце гоночного пути теперь будет пропасть, а победителем будет назван атлет, который сможет убежать как можно дальше от точки старта (которая не может быть изменена и одна и та же для обоих спортсменов).

    Обратите внимание, что никто из спортсменов не сможет убежать бесконечно далеко, ведь они оба в определённый момент времени добегут до такой точки, что ещё один шаг приведёт к падению в пропасть. Другими словами, спортсмен не упадёт в пропасть, если суммарная длина всех сделанных им шагов будет меньше либо равна длине дистанции x.

    Так как организаторы честные и справедливые, то они собираются выбрать длину забега как случайное целое число, равновероятно выбранное из отрезка от 1 до t (оба конца включены в диапазон). Какова вероятность того, что результатом забега снова будет ничья?

    Входные данные

    В первой строке входных данных записаны три целых числа t, w и b (1 ≤ t, w, b ≤ 5·1018) — максимально возможная длина забега, длина шага Уиллмана и длина шага Болта соответственно.

    Выходные данные

    Выведите ответ на задачу в виде несократимой дроби . Следуйте формату вывода указанному в примерах.

    Дробь (p и q целые, при этом p ≥ 0 и q > 0) называется несократимой, если не существует такого целого числа d > 1, что и p и q делятся на d.

    Примечание

    В первом примере Уиллман и Болт сразятся в ничью в случае, если в качестве дистанции будут выбраны 1, 6 или 7.

    C. Красивая функция

    Конструктив математика *2200

    Каждый день перед сном Руслан считал овец, но это ему не помогало. Теперь он нашёл себе занятие интереснее: он сначала загадывает какое-то множество окружностей на плоскости, а затем пытается определить какое-нибудь красивое множество точек, так чтобы внутри или на границе каждой загаданной окружности лежала хотя бы одна точка множества.

    Вчера Руслан попробовал решить данную задачу, когда множество считается красивым, если оно определяется как (xt = f(t), yt = g(t)), для всех целых t от 0 до 50. При этом f(t) и g(t) должны быть корректными функциями.

    Пусть w(t) и h(t) — корректный функции, а c — целое число от 0 до 50. Тогда функция s(t) является корректной, если она получена по одному из следующих правил:

    1. s(t) = abs(w(t)), где abs(x) означает взятие абсолютного значения числа x, то есть |x|;
    2. s(t) = (w(t) + h(t));
    3. s(t) = (w(t) - h(t));
    4. s(t) = (w(t) * h(t)), где  *  означает умножение, то есть (w(th(t));
    5. s(t) = c;
    6. s(t) = t;

    Вчера Руслан промучился всю ночь, но так и не справился с задачей. Теперь он просит вас написать программу, вычисляющую подходящие f(t) и g(t) для любого набора из не более чем 50 окружностей.

    В каждой из функций f(t) и g(t) должно быть использовано не более 50 операций умножения. Длина функции не должна превышать 100·n символов. В функции не должно быть пробелов.

    Руслан плохо работает с большими числами, поэтому функции f(t) и g(t) должны быть выбраными такими, чтобы для всех t от 0 до 50 все промежуточные вычисления и итоговое значение по абсолютному значению не превосходили 109.

    Входные данные

    В первой строке входных данных записано число n (1 ≤ n ≤ 50) — количество окружностей, загаданных Русланом. Следующие n строк содержат по три целых числа xi, yi, ri (0 ≤ xi, yi ≤ 50, 2 ≤ ri ≤ 50) — координаты и радиус i-й окружности.

    Выходные данные

    В первой строке выведите корректную функцию f(t). Во второй строке вывести корректную функцию g(t). Множество точек (xt = f(t), yt = g(t)) (0 ≤ t ≤ 50) должно удовлетворять условию, что для любой из n окружностей найдётся точка из данного мноежства лежащая внутри ли на границе.

    Примечание

    Корректные функции:

    1. 10
    2. (1+2)
    3. ((t-3)+(t*4))
    4. abs((t-10))
    5. (abs((((23-t)*(t*t))+((45+12)*(t*t))))*((5*t)+((12*t)-13)))
    6. abs((t-(abs((t*31))+14))))

    Некорректные функции:

    1. 3+5+7 (не хватает скобок, должно быть ((3+5)+7) или (3+(5+7)))
    2. abs(t-3) (не хватает скобок, должно быть abs((t-3))
    3. 2+(2-3 (лишняя скобка)
    4. 1(t+5) (нет арифметической операции между 1 и скобкой)
    5. 5000*5000 (число превышает максимальное)
    На картинке показано одно из возможных решений. Например, при t = 0;10;20 полученные координаты принадлежат заданным окружностям.

    D. Деревянный День Рождения

    графы Деревья математика поиск в глубину и подобное Структуры данных *2400

    У Богдана сегодня День Рождения и мама подарила ему дерево, состоящее из n вершин. На ребре i было написано число xi. Напомним, что деревом называется связный неориентированный граф без циклов. После этого на вечеринку к Богдану последовательно приходят m гостей. Когда приходит i-й гость, он делает ровно одну из двух операций:

    1. Выбирает некоторое число yi, а так же две вершины ai и bi. После этого двигаясь по рёбрам дерева проходит от вершины ai до вершины bi кратчайшим путём (такой путь в дереве, конечно, единственный). Каждый раз проходясь по какому-то ребру j, он заменяет своё текущее число yi на , то есть на целую часть деления yi на xj.
    2. Выбирает некоторое ребро pi, и заменяет написанное на нём значение xpi на целое положительное число ci < xpi.

    Богдан заботится о своих гостях и решил автоматизировать данный процесс. Напишите программу, которая проделает все применяемые гостями операции, и каждому гостю выбравшему операцию первого типа сообщит результирующее значение yi.

    Входные данные

    В первой строке входных данных содержатся два числа n и m (2 ≤ n ≤ 200 000, 1 ≤ m ≤ 200 000) — количество вершин в дереве, подаренном Богдану, и количесвто гостей на вечеринке соответственно. В следующей n - 1 строке содержится описание рёбер, i-я из этих строк содержит три целых числа ui, vi, xi (1 ≤ ui, vi ≤ n, ui ≠ vi, 1 ≤ xi ≤ 1018), обозначающих ребро между вершинами ui и vi, на котором написано число xi. Далее следуют m строк, которые описывают гостей Богдана. Каждое описание содержит три или четыре целых числа и имеет вид:

    • 1 ai bi yi — соответствует гостям, выбравшим операцию первого типа.
    • 2 pi ci — соответствует гостям, выбравшим операцию второго типа.
    Гарантируется, что все запросы корректны, а именно 1 ≤ ai, bi ≤ n, 1 ≤ pi ≤ n - 1, 1 ≤ yi ≤ 1018 и 1 ≤ ci < xpi, где xpi означает число, записанное на ребре pi в этот момент времени, что необязательно равно значению xpi в начале, так как к ребру уже могли применяться операции уменьшения значения. Рёбра нумеруются от 1 до n - 1 в порядке из записи во входных данных.
    Выходные данные

    Для каждого гостя, выбравшего операцию первого типа, выведите результирующее значение для выбранного им yi.

    Примечание

    Изначально дерево выглядит так:

    На первый запрос ответом будет = 2

    После изменения третьего ребра дерево выглядит так:

    На второй запрос ответом будет = 4

    В третьем запросе начальная и конечная вершина совпадает, то есть ответом будет исходное число 20.

    После изменения четвертого ребра дерево выглядит так:

    В последнем запросе ответом будет = 3

    B. Паша и телефон

    Бинарный поиск математика *1600

    Паша совсем недавно купил себе новый телефон jPager и начал вносить в него номера телефонов своих друзей. Каждый номер состоит ровно из n цифр.

    Также у Паши есть число k и две последовательности длины n / k (n делится на k) a1, a2, ..., an / k и b1, b2, ..., bn / k. Разобьем телефонный номер на блоки длины k. Первый блок будет образован цифрами из телефонного номера, находящимися на позициях 1, 2,..., k, второй блок будет образован цифрами из телефонного номера, стоящими на позициях k + 1, k + 2, ..., k и так далее. Паша считает телефонный номер хорошим, если i-й блок, представленный в виде целого числа, делится нацело на ai, и при этом этот блок не начинается с цифры bi.

    Чтобы представить блок длины k в виде целого числа, выпишем его отдельно как последовательность c1, c2,...,ck. Теперь вычислим значение выражения c1·10k - 1 + c2·10k - 2 + ... + ck.

    Паша просит вас посчитать количество хороших телефонных номеров длины n для данных k, ai и bi. Поскольку это число может быть большим, выведите остаток от деления его на 109 + 7.

    Входные данные

    В первой строке входных данных записаны два числа n и k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ min(n, 9)) — длина всех телефонных номеров и длина каждого блока соответственно. Гарантируется, что n делится нацело на k.

    Во второй строке входных данных следует через пробел n / k целых положительных чисел —последовательность a1, a2, ..., an / k (1 ≤ ai < 10k).

    В третьей строке входных данных следует через пробел n / k целых положительных чисел — последовательность b1, b2, ..., bn / k (0 ≤ bi ≤ 9).

    Выходные данные

    Выведите целое число — количество номеров длины n, являющихся, по мнению Паши, хорошими.

    Примечание

    В первом тестовом примере хорошими телефонными номерами являются 000000, 000098, 005600, 005698, 380000, 380098, 385600, 385698.

    D. Вилбур и деревья

    дп математика сортировки Теория вероятностей *2300

    Свинка по имени Вилбур всегда хотел быть бобром, так что сегодня он решил притвориться бобром и грызть деревья, чтобы повалить их.

    Имеется n деревьев, расположенных вдоль прямой. Дерево номер i расположено в позиции xi, при этом все позиции деревьев различны.

    Все деревья обладают одинаковой высотой, равной h. Когда Вилбур прогрызает какое-либо дерево, оно падает налево с вероятностью p или направо с вероятностью 1 - p. Если, падая, дерево задевает другое дерево, то задетое дерево так же начинает падать в этом же направлении. Дерево может задеть другое дерево, только если расстояние между ними строго меньше h.

    Рассмотрим следующий пример: имеются четыре дерева с координатами 1, 3, 5 и 8 соответственно, и h = 3. Дерево, стоявшее в позиции 1, падает направо и задевает дерево с координатой 3. То дерево, в свою очередь, также падает и роняет дерево с координатой 5. Расстояние между 5 и 8 равно 3, поэтому последнее дерево не будет задето и останется стоять.

    Пока ещё есть стоящие деревья, Вилбур равновероятно выбирает либо самое левое, либо самое правое дерево и роняет его. Если осталось только одно дерево, то Вилбур точно уронит его. Вилбур хочет знать математическое ожидание суммарной длины участков земли, покрытых упавшими деревьями, после того, как не останется ни одного стоящего дерева. Пожалуйста, помогите Вилбуру.

    Входные данные

    В первой строке входных данных содержатся два целых числа n и h (1 ≤ n ≤ 2000, 1 ≤ h ≤ 108) и вещественное число p (0 ≤ p ≤ 1), записанное с использованием не более чем шести знаков после точки.

    В следующей строке содержатся n целых чисел x1, x2, ..., xn ( - 108 ≤ xi ≤ 108), записанных в произвольном порядке.

    Выходные данные

    Выведите единственное вещественное число — математическое ожидание суммарной длины всех участков земли, покрытых деревьями, когда они все упадут. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    Рассмотрим пример, у нас два дерева с высотой 2.

    Есть три варианта развития событий:

    1. Оба дерева упадут налево. Либо правое дерево упадет налево первым с вероятностью (при этом повалив левое дерево), либо левое дерево упадет налево и затем правое дерево упадет налево, вероятность этого равна . Общая вероятность равна .

    2. Оба дерева упадут направо. Это аналогично (1), так что вероятность такого события равна .

    3. Левое дерево упадет налево, а правое дерево упадет направо. Это единственный оставшийся вариант, так что его вероятность должна быть .

    В вариантах 1 и 2 всего будет покрыто 3 единичных отрезка земли, а в варианте 3 — 4 единичных отрезка. Следовательно, математическое ожидание равно .

    A. Делимость

    математика *1600

    Найдите количество чисел кратных k в отрезке [a, b]. Другими словами, вам нужно найти количество целых чисел x таких, что a ≤ x ≤ b и x делится на k.

    Входные данные

    В единственной строке входных данных находится три целых числа k, a, b (1 ≤ k ≤ 1018; - 1018 ≤ a ≤ b ≤ 1018).

    Выходные данные

    Выведите ответ на задачу.

    A. Хитрая сумма

    математика *900

    В этой задаче вам требуется найти сумму всех целых чисел от 1 до n, причём степени двойки нужно учитывать в сумме со знаком минус.

    Например, при n = 4 сумма равна:  - 1 - 2 + 3 - 4 =  - 4, поскольку 1, 2 и 4 являются 20, 21 и 22 соответственно.

    Вычислите ответ для t значений n.

    Входные данные

    В первой строке ввода записано число t (1 ≤ t ≤ 100) — количество чисел, для которых вам нужно вычислить запрашиваемую сумму.

    В каждой из следующих t строк находится по одному целому числу n (1 ≤ n ≤ 109).

    Выходные данные

    Для каждого из t чисел n выведите значение искомой суммы.

    Примечание

    Первый пример разобран в условии задачи.

    D. Спанч Боб и Квадраты

    математика Перебор *1900

    Спанч Боб уже устал придумывать оправдания для своих странных действий и вычислений, поэтому просто попросил вас найти все такие пары n и m, что в табличке, состоящей из n рядов и m столбцов, существует ровно x различных квадратов. Например, в табличке 3 × 5 существует 15 квадратов со стороной один, 8 квадратов со стороной два и 3 квадрата со стороной три. Итого в табличке 3 × 5 существует 15 + 8 + 3 = 26 различных квадратов.

    Входные данные

    В первой строке входных данных записано единственное целое число x (1 ≤ x ≤ 1018) — требуемое количество квадратов внутри искомых табличек.

    Выходные данные

    В первой строке выведите единственное число k — количество табличек, внутри которых существует ровно x квадратов.

    Далее выведите k пар чисел, описывающих эти таблички. Пары выводите в порякде возрастания n, а при равенстве — в порядке возрастания m.

    Примечание

    В табличке 1 × 2 количество способов выбрать квадрат 1 × 1 равняется 2. Итого — 2 способа.

    В табличке 2 × 3 количество способов выбрать квадрат 1 × 1 равняется 6, а квадрат 2 × 2 — 2 способа. Итого — 8 способов.

    D. Спаситель

    математика Перебор снм *2500

    Миша решил помочь Паше и Акиму помириться. У него есть хитрый план — уничтожить все смешливые грибы. Он знает, что смешливые грибы замечательно лопаются от смеха. На полянках растут грибы. На t-ой полянке растет a[t] грибов.

    Ещё Миша знает, что у полянок, на которых растут грибы, есть уникальная способность. Полянка (например, i) может передать свой смех на другую полянку (например, j) если существует целое число (например, b) такое, что некоторая перестановка чисел a[i], a[j] и b является красивой тройкой (i ≠ j). Красивая тройка — это такие три попарно взаимно простые числа x, y, z, что: x2 + y2 = z2.

    Миша хочет узнать, на каком минимальном количестве полянок ему нужно посмеяться, чтобы все смешливые грибы лопнули.

    Входные данные

    В первой строке находится одно целое число n (1 ≤ n ≤ 106) — количество полянок. В следующей строке содержится n целых чисел ai — количество грибов на полянке (1 ≤ ai ≤ 107). Все количества различны.

    Выходные данные

    Выведите одно число — минимальное количество полянок, на которых Миша должен посмеяться, чтобы все грибы лопнули.

    E. Грибные гномы

    математика матрицы *2600

    Жили-были где-то в чаще грибного леса грибные гномы. Они были знамениты на всю округу своими волшебными грибами. Грибы были волшебны тем, что между каждыми двумя соседними грибами каждую минуту вырастал ещё один, с массой, равной сумме масс соседних. Грибные гномы любили порядок, поэтому они всегда сажали грибы в одну линию по увеличению их массы. Так вот... Гномы посадили грибы и ушли есть. Через x минут они вернулись и увидели, что выросли новые грибы, а поэтому возрастающий порядок был нарушен. Гномы пересадили все грибы в правильном порядке, то есть отсортировали по увеличению массы. И опять ушли есть (это были очень прожорливые гномы). Какая суммарная масс по модулю p будет у грибов ещё через y минут?

    Входные данные

    В первой строке содержится четыре целых числа n, x, y, p (1 ≤ n ≤ 106, 0 ≤ x, y ≤ 1018, x + y > 0, 2 ≤ p ≤ 109) — количество грибов, число минут после первой посадки, число минут после второй посадки и модуль. В следующей строке содержится n целых чисел ai — веса грибов в неубывающем порядке (0 ≤ ai ≤ 109).

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).

    Выходные данные

    В ответе должно быть одно число — суммарная масса грибов по модулю p в конце, после x + y минут.

    B. Липшицева последовательность

    математика Структуры данных *2100

    Функция называется Липшицевой, если найдётся такое действительное число K, что неравенство |f(x) - f(y)| ≤ K·|x - y| выполняется для всех . Мы будем иметь дело с более... дискретным вариантом этого термина.

    Для массива определим его константу Липшица следующим образом:

    • если n < 2,
    • если n ≥ 2, по всем 1 ≤ i < j ≤ n

    Другими словами,  — это наименьшее неотрицательное целое число, такое, что |h[i] - h[j]| ≤ L·|i - j| выполняется для всех 1 ≤ i, j ≤ n.

    Вам дан массив размера n и q запросов вида [l, r]. Для каждого запроса рассмотрим подмассив ; определите сумму констант Липшица всех подмассивов .

    Входные данные

    В первой строке входных данных записано два числ n и q (2 ≤ n ≤ 100 000, 1 ≤ q ≤ 100) — длина массива и количество запросов соответственно.

    Во второй строке записано n целых чисел ().

    Следующие q строк описывают запросы, i-я из них содержит два числа li и ri (1 ≤ li < ri ≤ n).

    Выходные данные

    Выведите ответы на все запросы в том порядке, в котором они даны во входных данных. Для i-го запроса выведите единственное целое число — сумму констант Липшица всех подмассивов .

    Примечание

    В первом запросе первого примера константы Липшица подмассивов длиной не менее 2 таковы:

    Ответом на запрос является их сумма.

    C. Клеофас и n-тлон

    дп математика Теория вероятностей *2300

    Клеофас участвует в n-тлоне — турнире, состоящим из n различных соревнований по n различным дисциплинам (пронумерованным от 1 до n). В n-тлоне m участников, и каждый из них участвует во всех соревнованиях.

    По итогам каждого из n соревнований участникам присваиваются ранги от 1 до m таким образом, что никаким двум участникам не даётся одинаковый ранг, то есть ранги в каждом соревновании формируют перестановку чисел от 1 до m. Результат участника на соревновании равняется его/её рангу в нём, при этом чем хуже выступил участник, тем выше это значение.

    Общий результат каждого участника высчитывается как сумма результатов этого участника по всем соревнованиям.

    Итоговое место каждого участника равняется 1 + k, где k равняется количеству участников, у которых общий результат строго меньше общего результата данного участника.

    Соревнования по n-тлону уже завершились, но результаты ещё не опубликованы. Клеофас помнит свои ранги в каждом конкретном соревновании, но ничего не помнит о том, как выступили другие участники. Исходя из этой информации, Клеофас хотел бы узнать математическое ожидание своего итогового места.

    Все участники одинаково хороши во всех дисциплинах, так что в каждом соревновании все возможные исходы (перестановки рангов всех, кроме Клеофаса) равновероятны.

    Входные данные

    В первой строке входного файла записано два целых числа n и m (1 ≤ n ≤ 100, 1 ≤ m ≤ 1000) — количество соревнований и количество участников соответственно.

    Далее следуют n строк, i-я из которых содержит целое число xi (1 ≤ xi ≤ m) — ранг Клеофаса в i-м соревновании.

    Выходные данные

    Выведите единственное вещественное число — математическое ожидание итогового места Клеофаса. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 9.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    В первом примере общий результат Клеофаса равняется 6. Ни один участник не может получить общий результат менее 6 (но возможно, что у другого участника тоже будет общий счет 6), поэтому итоговое место Клеофаса всегда будет 1.

    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. Муудулярная Арифметика

    Комбинаторика математика поиск в глубину и подобное снм теория чисел *1800

    Как подобает любому порядочному школьнику, Кевин Сан изучает коровометрию, коровоматику и криптобычество в Буреновском государственном университете (БГУ) под руководством Фермера Ивана. На последнем занятии по математическому упрощению уравнений (МУУ) Кевин столкнулся со странным функциональным уравнением, для решения которого он нуждается в вашей помощи. Даны два целых числа k и p, при этом p — нечётное простое число и функциональное уравнение:

    для некоторой функции . (Равенство должно выполняться для любого целого x от 0 до p - 1 включительно).

    Кевин просит вас посчитать количество различных функций f, удовлетворяющих этому уравнению. Поскольку ответ может быть достаточно большим, вы должны вывести остаток от деления этого числа на 109 + 7.

    Входные данные

    Входные данные состоят из двух целых чисел p и k (3 ≤ p ≤ 1 000 000, 0 ≤ k ≤ p - 1). Гарантируется, что р — нечётное простое число.

    Выходные данные

    Выведите единственное целое число — количество различных функций f, удовлетворяющих уравнению, по модулю 109 + 7.

    Примечание

    В первом примере p = 3 и k = 2. Подходят следующие функции:

    1. f(0) = 0, f(1) = 1, f(2) = 2.
    2. f(0) = 0, f(1) = 2, f(2) = 1.
    3. f(0) = f(1) = f(2) = 0.

    C. Легенды Лиги

    игры математика *2200

    Кевин и Ники Сан изобрели новую игру под названием «Легенды Лиги». В этой игре два игрока по очереди совершают ходы, изменяющие состояние игры. Кевин ходит первым. Изначально есть n групп коров, в i-й группе находится ai коров. Каждый ход игрок призывает силу Солнечного света и использует её, чтобы совершить одно из двух действий:

    1. Удалить одну корову из выбранной непустой группы.
    2. Взять группу коров четного размера x (x > 0) и заменить её на k групп по x коров в каждой.

    Игрок, который удаляет последнюю корову, выигрывает. Для данных n, k и последовательности a1, a2, ..., an помогите Кевину и Ники определить, кто обладает выигрышной стратегией, если оба они играют оптимально.

    Входные данные

    Первая строка входных данных содержит два целых числа n и k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ 109).

    Вторая строка содержит n целых чисел a1, a2, ... an (1 ≤ ai ≤ 109), описывающих начальное состояние игры.

    Выходные данные

    Выведите имя игрока-победителя, то есть либо "Kevin", либо "Nicky" (без кавычек).

    Примечание

    Во втором примере Ники может выиграть, используя следующую стратегию. Кевин ходит первым, и он должен удалить корову из единственной имеющейся группы, так что в группе останется 2 коровы. Тогда Ники делит её на 2 группы размером 1. Кевин своим ходом обязательно сделает одну из групп пустой, а Ники сделает пустой другую группу, таким образом удалив последнюю корову в игре.

    D. Размышления о жвачных

    геометрия математика *2900

    Кевин Сан размышляет о происхождении коров, стоя в точке (0, 0) декартовой плоскости. Также на плоскости расположены n прямых , каждая из которых описывается уравнением вида ax + by = c. Кевин Сан заметил, что никакие две прямые не параллельны и что никакие три прямые не проходят через одну точку.

    Для каждой тройки (i, j, k), такой что 1 ≤ i < j < k ≤ n, Кевин рассматривает треугольник, образованный тремя линиями . Он называет треугольник оригинальным, если описанная окружность этого треугольника содержит начало координат (точку (0, 0)). Так как Кевин считает, что перипетии бычьей жизни непосредственно связаны с такими треугольниками, он хочет знать количество оригинальных треугольников, образованных неупорядоченными тройками прямых из данного множества.

    Входные данные

    Первая строка входных данных содержит единственное число n (3 ≤ n ≤ 2000) — количество прямых.

    Следующие n строк описывают прямые . В i-й из этих строк содержатся три целых числа ai, bi и ci (|ai|, |bi|, |ci| ≤ 10 000, ai2 + bi2 > 0), определяющие уравнение aix + biy = ci прямой .

    Выходные данные

    Выведите единственное целое число — количество троек (i, j, k) с i < j < k, таких что прямые образуют оригинальный треугольник.

    Примечание

    Обратите внимание, что в первом примере некоторые прямые проходят через начало координат.

    Во втором примере существует ровно одна тройка прямых: y = 1, x + y = 2, x - y =  - 2. Треугольник, образованный ими, имеет вершины (0, 2), (1, 1), ( - 1, 1). Описанная окружность этого треугольника задаётся уравненим x2 + (y - 1)2 = 1. Действительно, точка (0, 0) принадлежит данной окружности.

    E. Пастушеские странности

    Деревья математика разделяй и властвуй снм Структуры данных *3000

    В стране Бурении есть n пастбищ, но нет дорог, их соединяющих. Конечно, это ужасная ситуация, поэтому Кевин Сан планирует исправить её, построив m двунаправленных дорог. Каждая дорога соединит какую пару пастбищ. Для того чтобы перемещение по дорогам было более эффективным, он также планирует замостить некоторые из этих новых дорог булыжником.

    Кевин очень дотошен в вопросе мощения путей. Так как он любит нечётные числа, то хочет, чтобы к каждому пастбищу вело нечётное число мощеных дорог. Назовём замощение дорог солнечным, если каждому пастбищу инцидентно нечётное количество замощёных дорог. Кроме того, короткие дороги нравятся Кевину больше, чем длинные, поэтому он хочет, чтобы самая длинная мощёная дорога была как можно короче. После добавления очередной дороги Кевин хочет знать, может ли он добиться солнечного замощения дорог Бурении, и если это так, то надо найти минимальную возможную длину самой длинной дороги, которую он замостит.

    Входные данные

    Первая строка входных данных содержит два числа n и m (2 ≤ n ≤ 100 000, 1 ≤ m ≤ 300 000) — количество пастбищ и дорог соответственно.

    Следующие m строк содержат по три целых числа ai, bi и li. Они описывают i-ю дорогу, соединяющую пастбища ai и bi (1 ≤ ai, bi ≤ n; ai ≠ bi) и имеющую длину li (1 ≤ li ≤ 109).

    Дороги приведены в том порядке, в котором они добавляются.

    Выходные данные

    Выведите m целых чисел, i-е из которых обозначает минимальную возможную длину самой длинной дороги в солнечном замощении после добавления первых i дорог. Если не существует такого замощения, что каждое пастбище инцидентно нечётному количеству мощёных дорог, то выведите  - 1.

    Обратите внимание, что каждый раз рассматривается только гипотетическое замощение — ваш ответ после добавления i-й дороги не должен никак зависеть от ваших предыдущих ответов.

    Примечание

    В первом примере после добавления i-й дороги пути Кевин должен вымостить следующие из них:

    1. Никакой набор дорог не подходит.
    2. Дорога номер 1 (длина 4) и номер 2 (длина 8).
    3. Дорога номер 1 (длина 4) и номер 2 (длина 8).
    4. Дорога номер 3 (длина 2) и номер 4 (длина 3).

    Во втором примере нет ни одного солнечного замощения.

    A. Сайтама громит гостиницу

    математика реализация *1000

    Опять Сайтама ненарочно уничтожил гостиницу. Чтобы расплатиться с гостиничной компанией, Генос вызвался управлять лифтом в одной из уцелевших гостиниц этой компании. Лифт обладает рядом особенностей: он всегда начинает движение с верхнего этажа, может двигаться только вниз и имеет бесконечную вместимость. Этажи пронумерованы от 0 до s, при этом лифт всегда находится на этаже номер s в момент времени 0.

    Лифту требуется ровно 1 секунда, чтобы переместиться ровно на 1 этаж вниз. Временем, которое тратится на посадку и высадку пассажиров, можно пренебречь. У Геноса есть список, детально описывающий, когда и на какой этаж прибывает очередной пассажир. Пожалуйста, определите минимальное количество секунд, за которое можно доставить всех пассажиров на этаже номер 0.

    Входные данные

    В первой строке входных данных записано два целых числа n и s (1 ≤ n ≤ 100, 1 ≤ s ≤ 1000) — количество пассажиров и номер верхнего этажа соответственно.

    В каждой из следующих n строк записано по два целых числа fi и ti (1 ≤ fi ≤ s и 1 ≤ ti ≤ 1000) — номер этажа и время прибытия в секундах для i-го пассажира.

    Выходные данные

    Выведите единственное целое число — минимальное количество времени в секундах, необходимое для того, чтобы высадить всех пассажиров на этаже с номером 0.

    Примечание

    В первом примере необходимо потратить не меньше 11 секунд, чтобы доставить всех пассажиров на этаж номер 0. Одним из способов это сделать является:

    1. Доехать до этажа номер 5: занимает 2 секунды.

    2. Взять пассажира номер 3.

    3. Доехать до этажа номер 3: занимает 2 секунды.

    4. Подождать, пока подойдет пассажир номер 2: занимает 4 секунды.

    5. Взять пассажира номер 2.

    6. Доехать до этажа номер 2: занимает 1 секунду.

    7. Взять пассажира номер 1.

    8. Доехать до этажа номер 0: занимает 2 секунды.

    9. Высадить всех пассажиров.

    Итого получается 2 + 2 + 4 + 1 + 2 = 11 секунд.

    C. Балансировка нагрузки

    математика реализация *1500

    Для обработки запросов к некоторому сетевому сервису используются n серверов. Известен текущий план распределения запросов между серверами: i-ый сервер должен обработать mi запросов.

    Было решено выполнить балансировку нагрузки, переназначая задания между серверами. Более формально, пусть ma — количество запросов, которые обрабатывает наиболее загруженный сервер, а mb — количество запросов, которые обрабатывает наименее загруженный сервер. Нагрузка будет считаться сбалансированной, если разность ma - mb будет минимально возможной.

    За одну секунду можно переназначить один запрос. То есть, за одну секунду можно выбрать любую пару серверов, снять ровно один запрос с одного сервера и назначить этот же запрос другому серверу.

    Перед вами стоит задача найти минимальное количество секунд, по истечении которых нагрузка серверов будет сбалансирована.

    Входные данные

    В первой строке содержится целое положительное число n (1 ≤ n ≤ 105) — количество серверов.

    Во второй строке содержится последовательность неотрицательных целых чисел m1, m2, ..., mn (0 ≤ mi ≤ 2·104), где mi — количество запросов, изначально предназначенных для обработки i-м сервером.

    Выходные данные

    Выведите одно целое неотрицательное число — минимальное количество секунд, по истечении которых нагрузка серверов будет сбалансирована.

    Примечание

    В первом тестовом примере достаточно потратить 2 секунды. В каждую секунду необходимо переназначить запрос со 2-го сервера на 1-й. После двух секунд первому серверу будет назначено 3 запроса, а второму серверу — 4.

    Во втором тестовом примере нагрузка серверов уже сбалансирована.

    Один из оптимальных ответов для третьего тестового примера:

    1. переназначить запрос с 4-го сервера на 1-й сервер (последовательность m станет равной 2 2 3 3 5);
    2. переназначить запрос с 5-го сервера на 1-й сервер (последовательность m станет равной 3 2 3 3 4);
    3. переназначить запрос с 5-го сервера на 2-й сервер (последовательность m станет равной 3 3 3 3 3).

    Это один из возможных способов выполнить балансировку нагрузки серверов за 3 секунды.

    C. Схватить Валериана

    математика *2000

    Сейчас 260 год н. э., Шапур, будучи необычайно умным человеком, стал правителем Персии. Теперь он — Его Величество Шапур, Царь царей Ирана и не-Ирана.

    Недавно римляне объявили войну Персии. Их цель была — захватить Армению. Естественно, Шапур победил их армию, и взял в плен генерала Филиппа. Теперь Шапур собирается схватить Валериана, римского императора.

    Побежденный Валериан трусливо спрятался в комнате на самом верху башни своего замка. Чтобы схватить его, Шапур должен открыть много дверей с хитрыми замками. К счастью, Валериан слишком напуган чтобы делать сложные замки на дверях.

    Каждый замок состоит из 4 частей. Первая часть представляет собой целое число a. Вторая часть — это либо целое число b, либо странный символ R. Третья часть — всегда целое число c, а четвертая часть — пустая, как-будто в ней нужно что-то записать. Открыв несколько дверей, Шапур быстро разгадал секрет замка. c — целое число в системе счисления a, чтобы открыть дверь, нужно записать его в системе счисления b. Плохая новость: R обозначает римскую систему счисления — непозиционную систему счисления, которая используется только в Римской империи. Так что открыть дверь не так просто!

    Далее описывается эта странная система счисления, в которой даже нет нуля:

    Римские числа основаны на семи символах: черта (обозначается буквой I) — единица, стропило (обозначается буквой V) — пять, крест (обозначается буквой X) — десять, C (как сокращение от Centum, рим. век) — сто, и так далее:

    • I=1
    • V=5
    • X=10
    • L=50
    • C=100
    • D=500
    • M=1000

    Символы повторяются несколько раз, чтобы получать числа, кратные степеням десяти (1, 10, 100, 1, 000). Символ V подставляется вместо пяти символов I: I 1, II 2, III 3, V 5, VI 6, VII 7 и так далее. То же самое для символов L и X, D и C: X 10, XX 20, XXX 30, L 50, LXXX 80; CC 200, DCC 700, и так далее. При повторении 4 или 9 символов, используется принцип вычитания: IV 4, IX 9, XL 40, XC 90, CD 400, CM 900.

    В позиционных системах счисления для оснований больше 10 используется: A = 10, B = 11, и так далее.

    Помогите Шапуру восстановить мир в Персии, и особенно в Армении.

    Входные данные

    Первая строка содержит два целых числа a и b (2 ≤ a, b ≤ 25). Только b может быть заменена символом R, что означает римскую систему счисления.

    Следующая строка содержит неотрицательное целое число c в системе счисления a, которое может содержать лидирующие нули, но его длина не превосходит 103.

    Гарантируется, что если используется римская система счисления, число будет меньше либо равно 300010, и не будет равно нулю. Иначе число будет не больше 101510.

    Выходные данные

    Выведите в единственной строке целое число c в системе счисления b. Не выводите лидирующие нули.

    Примечание

    Подробно о римских числах: http://ru.wikipedia.org/wiki/Римские_цифры

    A. Паша и палка

    Комбинаторика математика *1000

    У Паши есть прямая деревянная палка целой положительной длины n. Он хочет сделать ровно три распила и получить четыре куска палки целой положительной длины, суммарная длина которых, очевидно, будет равна n.

    Паша любит прямоугольники, но в то же время очень не любит квадраты, поэтому хочет знать, сколько существует способов разрезать палку на четыре части таким образом, чтобы из получившихся кусков палки можно было сложить какой-нибудь прямоугольник, но нельзя было сложить квадрат.

    Перед вами стоит задача помочь Паше — посчитать количество таких способов. Два способа считаются различными, если отличаются наборы длин получившихся кусков, то есть для какой-то длины x количество палок длины x в одном способе не равно количеству палок такой же длины в другом способе.

    Входные данные

    В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 2·109) — длина имеющейся палки.

    Выходные данные

    Выведите в первую строку выходных данных единственное целое число — количество способов разделить Пашину палку на четыре части ненулевой длины таким образом, чтобы можно было соединить концы получившихся частей и получить прямоугольник, но не квадрат.

    Примечание

    В первом тестовом примере существует одно корректное разделение с длинами {1, 1, 2, 2}.

    Во втором тестовом примере существует четыре корректных разделения с длинами {1, 1, 9, 9}, {2, 2, 8, 8}, {3, 3, 7, 7} и {4, 4, 6, 6}. Обратите внимание, что {5, 5, 5, 5} не подходит.

    B. HDD - устаревшая технология

    математика реализация *1200

    При хранении данных на жестких дисках типа HDD данные группируются по секторам. Все файлы разбиваются на фрагменты, которые в свою очередь записываются в некоторых секторах жесткого диска. При этом сектора, в которых находится один файл не обязательно следуют друг за другом и могут располагаться в произвольном порядке.

    Одной из проблем HDD-носителей является то, что магнитная головка должна перемещаться от одного сектора к другому, чтобы считать один файл.

    Вам требуется определить время за которое будет считан файл, разбитый на n фрагментов. В i-м секторе записан фрагмент файла номер fi (1 ≤ fi ≤ n). При этом в различных секторах находятся в различные фрагменты. Будем считать, что изначально магнитная головка находится в секторе, в котором записан первый фрагмент. Считывание происходит следующим образом: сначала считывается первый фрагмент, затем магнитная головка перемещается к сектору, содержащему второй фрагмент, считывается второй фрагмент и так далее пока не будет считан n-й фрагмент. Фрагменты считываются один за другим по порядку от 1-го до n-го.

    На перемещение магнитной головки от a-го сектора до b-го уходит |a - b| единиц времени. Временем считывания информации можно пренебречь.

    Входные данные

    В первой строке находится целое положительное число n (1 ≤ n ≤ 2·105) — количество фрагментов файла.

    Во второй строке находятся n различных целых чисел fi (1 ≤ fi ≤ n) — номер фрагмента, записанного в i-м секторе.

    Выходные данные

    Выведите одно целое число — количество единиц времени, необходимое для считывания файла.

    Примечание

    Во втором примере магнитная головка двигается следующим образом:

    • 1->2: передвижение из сектора 1 в сектор 5 — требует 4 единицы времени
    • 2->3: передвижение из сектора 5 в сектор 2 — требует 3 единицы времени
    • 3->4: передвижение из сектора 2 в сектор 4 — требует 2 единицы времени
    • 4->5: передвижение из сектора 4 в сектор 3 — требует 1 единицы времени

    Таким образом, ответ равен 4 + 3 + 2 + 1 = 10.

    C. Заменить до правильной скобочной последовательности

    математика Разбор выражений Структуры данных *1400

    Вам задана строка s, состоящая из открывающих и закрывающих скобок четырех видов <>, {}, [], (). Все скобки делятся на два типа: открывающие и закрывающие. Разрешается заменить любую скобку на любую другую такого же типа. Например, скобку < можно заменить на скобку {, но нельзя заменить на скобку ) или >.

    Далее приводится стандартное определение правильной скобочной последовательности, с которым вы возможно уже знакомы.

    Определим правильную скобочную последовательность. Пустая строка считается таковой. Пусть строки s1 и s2 являются правильными скобочными последовательностями, тогда строки <s1>s2, {s1}s2, [s1]s2, (s1)s2 также являются правильными скобочными последовательностями.

    Например, строка "[[(){}]<>]" является правильной скобочной последовательностью, а строки "[)()" и "][()()" — нет.

    Определите наименьшее количество замен, необходимое для того, чтобы сделать строку s правильной скобочной последовательностью.

    Входные данные

    Единственная строка содержит непустую строку s, состоящую только из открывающих и закрывающих скобок, заданных четырех видов. Длина строки s не превосходит 106.

    Выходные данные

    Если получить правильную скобочную последовательность из строки s невозможно выведите слово Impossible.

    Иначе выведите наименьшее количество замен, необходимое для получения правильной скобочной последовательности из строки s.

    E. Корень квадратный из перестановки

    графы Комбинаторика Конструктив математика поиск в глубину и подобное *2200

    Перестановка длины n — это такой массив длины n, который содержит каждое из чисел от 1 до n ровно по одному разу. Например, q = [4, 5, 1, 2, 3] — это перестановка. Для перестановки q ее квадратом называется такая перестановка p что p[i] = q[q[i]] для всех i = 1... n. Например, квадрат перестановки q = [4, 5, 1, 2, 3] равен p = q2 = [2, 3, 4, 5, 1].

    Эта задача об обратном понятии — квадратном корне. Вам задана перестановка p ваша задача найти такую перестановку q, что q2 = p. Если искомых перестановок q несколько, найдите любую из них.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 106) — количество элементов в перестановке p.

    Во второй строке находятся n различных чисел pi (1 ≤ pi ≤ n) — элементы перестановки p.

    Выходные данные

    Если перестановки q такой, что q2 = p не существует, выведите число "-1".

    Если же ответ существует, то нужно вывести его. Единственная строка должна содержать n различных чисел qi (1 ≤ qi ≤ n) — элементы перестановки q. Если существует несколько перестановок q, удовлетворяющих условию q·q = p, то разрешается вывести любую из них.

    C. Бусы

    Конструктив математика *2500

    Иван хочет сделать бусы в подарок своей возлюбленной. Бусы — это замкнутая в цикл последовательность бусинок разных цветов. Иван называет бусы красивыми относительно разреза в точке между соседними бусинками, если цепочка бус, остающаяся после этого разреза, является палиндромом (читается одинаково в обе стороны).

    У Ивана есть бусинки n цветов. Он хочет составить бусы, которые будут являться красивыми относительно наибольшего числа разрезов, при этом он обязательно хочет использовать все имеющиеся бусинки. Помогите ему составить наиболее красивые бусы.

    Входные данные

    В первой строке входных данных задано единственное число n (1 ≤ n ≤ 26) — количество цветов бусинок. Во второй строке через пробел записано n целых положительных чисел ai — количество бусинок i-го цвета.

    Гарантируется, что сумма ai не меньше двух и не превосходит 100 000.

    Выходные данные

    В первой строке выведите единственное число — наибольшее количество красивых разрезов, которого можно добиться. Во второй строке выведите бусы, обладающие таким числом красивых разрезов.

    Каждый цвет бусинок кодируется соответствующей строчной английской буквой (начиная с a), содержимое бус можно выводить начиная с любой позиции. Если правильных ответов несколько, разрешается вывести любой.

    Примечание

    В первом тесте бусы не могут иметь более одного красивого разреза. Пример бус с одним красивым разрезом приведен на картинке.

    Во втором тесте бусы можно составить единственным образом.

    B. Программа Гены

    математика реализация *1400

    Идёт 4527 год, а всеми любимая игра про танки ещё существует. Как существует и программа великого Гены, написанная в 2016 году. Цель этой программы — по известным количествам танков, которые идут в бой от каждой страны, найти их произведение. Ведь если оно слишком большое, то сервера не успеют распределить танки по командам, и случится коллапс!

    В мире ровно n различных стран, и от i-й страны в игру было добавлено ai танков. Так как создатели игры перфекционисты, число танков от каждой страны является красивым. Красивое число в понимании разработчиков — это такое число, что его десятичная запись состоит только из '1' и '0' и при этом содержит не более одной единицы. Однако из-за жалоб игроков некоторое количество танков одной страны было удалено из игры, в результате чего число танков от этой страны могло перестать быть красивым.

    Ваша цель — написать программу, решающую данную задачу, чтобы на всякий случай проверить корректность программы Гены.

    Входные данные

    В первой строке входных данных написано количество стран n (1 ≤ n ≤ 100 000). Вторая строка содержит n неотрицательных целых чисел ai без ведущих нулей — количество танков от i-й страны.

    Гарантируется, что вторая строка содержит хотя бы n - 1 красивое число, и суммарная длина записей всех чисел в ней не превосходит 100 000.

    Выходные данные

    Выведите одно число без ведущих нулей — произведение чисел танков, выставленных от каждой из стран.

    Примечание

    В примере 1 числа 10 и 1 - красивые, число 5 - нет.

    В примере 2 число 11 некрасивое (содержит две '1'), остальные - красивые.

    В примере 3 число 3 некрасивое, остальные - красивые.

    D. Множители

    математика теория чисел *2000

    У Айрата есть число n, представленное в виде разложения на m простых множителей pi, то есть n = p1·p2·...·pm. Айрат получил секретную информацию, что произведение всех делителей n по модулю 109 + 7 — пароль от секретной базы данных. Теперь осталось только вычислить это значение.

    Входные данные

    В первой строке входных данных находится число m(1 ≤ m ≤ 200 000) — количество чисел в разложении числа n на простые множители.

    Во второй строке записаны m простых чисел pi (2 ≤ pi ≤ 200 000).

    Выходные данные

    Выведите одно число — произведение всех делителей числа n, вычисленное по модулю 109 + 7.

    Примечание

    В первом примере n = 2·3 = 6. Делителями числа 6 являются 1, 2, 3 и 6, их произведение 1·2·3·6 = 36.

    Во втором примере 2·3·2 = 12. Делители числа 12 — 1, 2, 3, 4, 6 и 12. 1·2·3·4·6·12 = 1728.

    E. Шестиугольники

    Бинарный поиск математика реализация *2100

    Айрат ищет идеальный код. Свои поиски он решил начать с бесконечного поля, замощённого шестиугольниками. Для удобства на поле задана система координат, посмотрите на рисунок, чтобы определить как вычисляются координаты шестиугольников.

    Айрат обыскивает поле, стартовав с точки (0, 0) и идя по спирали (см. рисунок). Но иногда он забывает, в какой точке поля сейчас находится. Помогите Айрату найтись — определите координаты шестиугольника, на котором стоит Айрат после n ходов.

    Входные данные

    Во входных данных записано единственное целое число n (0 ≤ n ≤ 1018) — число ходов, сделанных Айратом.

    Выходные данные

    Выведите два целых числа x и y — координаты Айрата через n ходов.

    E. Сумма остатков

    математика реализация теория чисел *2200

    Посчитайте значение суммы n mod 1 + n mod 2 + n mod 3 + ... + n mod m. Поскольку ответ может быть достаточно большим, вам нужно посчитать его по модулю 109 + 7 (остаток при делении на число 109 + 7).

    Оператор модуля a mod b обозначает взятие остатка при делении числа a на число b. Например, 10 mod 3 = 1.

    Входные данные

    В единственной строке находятся два целых числа n, m (1 ≤ n, m ≤ 1013) — параметры суммы.

    Выходные данные

    Выведите целое число s — остаток значения искомой суммы при делении на число 109 + 7.

    A. Слоник

    математика *800

    Слоник решил сходить в гости к другу. Оказалось, что дом слоника находится в точке 0, а дом его друга в точке x(x > 0) координатной прямой. За один шаг слоник может переместиться на 1, 2, 3, 4 или 5 позиций вперёд. Помогите ему определить, за какое минимальное количество шагов он может добраться до дома друга.

    Входные данные

    В первой строке входных данных записано одно целое число x (1 ≤ x ≤ 1 000 000) — координата дома друга слоника.

    Выходные данные

    Выведите минимальное количество шагов, которые необходимо сделать слонику, чтобы попасть из точки 0 в точку x.

    Примечание

    В первом примере слоник может за один шаг передвинуться на 5 позиций и достигнуть точки x.

    Во втором примере слоник может попасть в точку x, сходив на 3, 5 и 4 позиции. Есть и другие способы получить оптимальный ответ, но слоник не может достичь x быстрее, чем за 3 шага.

    G. Слизни объединяются

    дп математика матрицы Теория вероятностей *3300

    Ваш друг подарил вам на день рождения бесконечное количество слизней толщины 1 и 2, и вы решили поиграть, используя этих слизней.

    Вы разбиваете подоконник на n ячеек и выбираете некоторое целое число p, которое будет использоваться в игре. Затем, до тех пор пока в последней ячейке нет слизня, выполняется следующая последовательность действий:

    1. С вероятностью выбирается слизень толщины 1, а с вероятностью выбирается слизень толщины 2. Выбранный слизень помещается в ячейку номер n.
    2. Вы последовательно перемещаете нового слизня влево, то есть в направлении ячейки с номером 1. Если он сталкивается с другим слизнем, который при этом имеет одинаковую с ним толщину v, то они объединяются в одного слизня толщины v + 1. Так продолжается до тех пор, пока слизень не дойдет до конца доски или не столкнётся со слизнем, толщина которого отлична от его значения.

    Вы играли в эту игру несколько раз, и она вам наскучила. Теперь вы хотите для данных значений n и p вычислить математическое ожидание суммы значений толщины всех слизней на подоконнике после завершения игры.

    Входные данные

    В первой строке входа будет записано два целых числа n, p (1 ≤ n ≤ 109, 1 ≤ p < 109).

    Выходные данные

    Выведите математическое ожидание суммарной толщины всех слизней на доске после завершения игры. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 4.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    В первом примере подоконник разбит на две ячейки, при этом с вероятностью 0.5 мы добавляем слизня толщины 1, а с вероятностью 0.5 — толщины 2.

    В конце игры подоконник может выглядеть как 1 2 с вероятностью 0.25, 2 1 с вероятностью 0.375, 3 2 с вероятностью 0.1875, 3 1 с вероятностью 0.1875. Таким образом математическое ожидание равно (1 + 2)·0.25 + (2 + 1)·0.375 + (3 + 2)·0.1875 + (3 + 1)·0.1875 = 3.5625.

    A. Сон Студента

    жадные алгоритмы математика *1300

    Как утверждает статистика, студенты спят не более трёх часов в сутки. Но даже в мире грёз, мерно посапывая, они не всегда могут избавиться от чувства нависшей угрозы.

    Спит Бедный Студент и снится ему, как сидит он на экзамене по математическому анализу у самого страшного преподавателя современности, трёхкратного героя Советского Союза, лауреата нобелевской премии по отчислению студентов, многоуважаемого профессора Петра Палыча.

    Ни на один вопрос не смог ответить Бедный Студент. Значит, вместо большого просторного офиса придётся ему идти работать на ториевые шахты. Но подождите! Пётр Палыч решил дать Студенту последний шанс! Да, такое может быть только во сне.

    И профессор начал: «Встретились венерянская девочка и марсианский мальчик на Земле и захотели прогуляться, держась за руки. Но вот беда: у девочки на левой руке al пальцев, а на правой - ar пальцев. У мальчика, соответственно, bl и br. Им будет удобно держаться за руки только тогда, когда никакая пара пальцев девочки не будет соприкасаться между собой, то есть между любыми двумя пальцами девочки есть палец мальчика. И вместе с этим, никакая тройка пальцев мальчика не должна соприкасаться между собой. Определите, можно ли им взяться за руки так, чтобы обоим было удобно?»

    Мальчику и девочке всё равно, кто пойдёт слева, а кто справа. Разница лишь в том, что если мальчик пойдёт слева от девочки, то он возьмёт своей правой рукой её левую руку, а если он пойдёт справа — то наоборот.

    Входные данные

    В первой строке даны два натуральных числа, не превышающие 100: количество пальцев на левой и правой руках венерянской девочки, соответственно. Во второй строке даны два натуральных числа, не превышающие 100: количество пальцев на левой и правой руках марсианского мальчика, соответственно.

    Выходные данные

    Выведите YES или NO: ответ на вопрос Петра Палыча.

    Примечание

    Мальчику и девочке не принципиально, кто пойдёт слева, а кто справа.

    A. Робот профессора GukiZ

    математика реализация *800

    Профессор GukiZ собрал нового робота. Робот находится в точке с координатами (x1, y1) и должен попасть в точку (x2, y2). За один шаг робот может изменить (уменьшить или увеличить) любую из своих координат (возможно обе) на единицу. Таким образом, у робота имеется 8 возможных ходов. Определите наименьшее количество шагов за которое робот сможет попасть в точку назначения.

    Входные данные

    В первой строке находится пара целых чисел x1, y1 ( - 109 ≤ x1, y1 ≤ 109) — исходное положение робота.

    Во второй строке находится пара целых чисел x2, y2 ( - 109 ≤ x2, y2 ≤ 109) — конечное положение робота.

    Выходные данные

    Выведите целое число d — наименьшее количество ходов, необходимое роботу, чтобы попасть в точку назначения.

    Примечание

    В первом примере робот должен четыре раза увеличить обе свои координаты на единицу, оказавшись в точке (4, 4). Затем он должен увеличить только координату y на единицу. Таким образом, он попадёт в точку (4, 5).

    Во втором примере робот должен три раза одновременно увеличивать координату x и уменьшать координату y.

    C. Мокрая Акула и цветы

    Комбинаторика математика Теория вероятностей теория чисел *1700

    В подчинении у Мокрой Акулы находится n акул, сидящих за круглым столом. Таким образом, соседями являются акулы с номерами i и i + 1 для всех i от 1 до n - 1, а так же акулы с номерами 1 и n.

    Каждая акула в течение дня вырастит случайное количество цветков si — целое число от li до ri, при этом все варианты равновероятны. У Мокрой Акулы есть любимое простое число p, от которого он совершенно без ума! Если для какой-то пары соседних акул i и j произведение количества выращенных ими цветков si·sj делится на p, то Мокрая Акула радуется и даёт каждой из этих акул по 1000 бурлей.

    В конце дня акулы собираются вместе и складывают все подаренные бурли. Вычислите математическое ожидание этого количества.

    Входные данные

    В первой строке входных данных записаны целые числа n и p (3 ≤ n ≤ 100 000, 2 ≤ p ≤ 109) — количество акул и любимое простое число Мокрой Акулы соответственно. Гарантируется, что p является простым числом.

    Каждая из последующих n строк содержит описание одной акулы. В i из них записаны числа li и ri (1 ≤ li ≤ ri ≤ 109) — диапазон возможного количества цветов, выращенных i-й акулой. Не забудьте, что реальное количество цветов выбирается равновероятно на этом отрезке, включая границы.

    Выходные данные

    Выведите единственное вещественное число — математическое ожидание суммарного количества бурлей, которое получат акулы. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    Положительное целое число называется простым, если оно не делится ни на какое другое положительное целое число, кроме себя и 1. При этом число 1 простым не является.

    Рассмотрим первый пример из условия. Первая акула выращивает от 1 до 2 цветков, вторая от 420 до 421, а третья от 420420 до 420421. Возможны восемь вариантов количества выращенных цветков (s0, s1, s2):

    1. (1, 420, 420420): 1·420 = 420, 420·420420 = 176576400 и 420420·1 = 420420. Каждая акула в каждой паре получит по 1000 бурлей, то есть в итоге каждая акула получит по 2000 бурлей, и сумма будет равна 6000 бурлей.
    2. (1, 420, 420421): В этом варианте 420421·1 не делится на 2, поэтому первая и третья акулы получат только по 1000 бурлей, а вторая всё ещё получит 2000. Итоговая сумма — 4000 бурлей.
    3. (1, 421, 420420): сумма 4000
    4. (1, 421, 420421): сумма 0.
    5. (2, 420, 420420): сумма 6000.
    6. (2, 420, 420421): сумма 6000.
    7. (2, 421, 420420): сумма 6000.
    8. (2, 421, 420421): сумма 4000.

    Математическое ожидание равняется .

    Во втором примере никакая комбинация количества цветов не приносит акулам бурлей.

    D. Крыса Квеш и сыр

    Конструктив математика Перебор *2400

    Мокрая Акула предложил Крысе Квешу выбрать три положительных числа x, y и z от 0.1 до 200.0 включительно. Крыса Квеш хочет удивить Мокрую Акулу, поэтому он выбирает все числа ровно с одним знаком после десятичной точки.

    Мокрая Акула знает, что Крыса Креш хочет получить как можно больше сыра, и он решил предоставить ему такую возможность. Он предлагает скомбинировать имеющиеся числа x, y и z одним из следующих двенадцати способов:

    1. a1 = xyz;
    2. a2 = xzy;
    3. a3 = (xy)z;
    4. a4 = (xz)y;
    5. a5 = yxz;
    6. a6 = yzx;
    7. a7 = (yx)z;
    8. a8 = (yz)x;
    9. a9 = zxy;
    10. a10 = zyx;
    11. a11 = (zx)y;
    12. a12 = (zy)x.

    Пусть m — максимальное среди всех ai, а c — такой минимальный индекс (от 1 до 12), что ac = m. Именно это c вас и просит найти Крыса Креш. Поскольку он хотел бы увидеть, сколько именно сыра он получит, то он просит вывести не индекс c, а соответствующее ему выражение.

    Входные данные

    Единственная строка входных данных содержит три вещественных числа x, y и z (0.1 ≤ x, y, z ≤ 200.0), каждое из них дано ровно с одним знаком после десятичной точки.

    Выходные данные

    Среди выражений xyz, xzy, (xy)z, (xz)y, yxz, yzx, (yx)z, (yz)x, zxy, zyx, (zx)y и (zy)x выберите одно с максимальным значением. Если правильных ответов несколько, то выведите то, которое встречается в списке раньше.

    xyz выводите как «x^y^z» (скобки не используются), а (xy)z как (x^y)^z (скобки используются).

    A. Бесконечная последовательность

    математика реализация *1000

    Рассмотрим бесконечную последовательность целых чисел: 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5.... Эта последовательность образована следующим образом: сначала выписано число 1, затем числа от 1 до 2, затем числа от 1 до 3, затем числа от 1 до 4 и так далее. Обратите внимание, что это последовательность целых чисел, а не цифр. Например, число 10 впервые встречается в этой последовательности на 55 позиции (элементы нумеруются с единицы).

    Найдите число, находящееся на n-й позиции, если нумерация начинается с единицы.

    Входные данные

    В единственной строке находится целое число n (1 ≤ n ≤ 1014) — позиция числа, которое нужно найти.

    Обратите внимание, что заданное число не помещается в 32-битном типе данных. Для сохранения числа вы можете использовать, например, тип long long в языке C++ или тип long в языке Java.

    Выходные данные

    Выведите n-й элемент последовательности (элементы нумеруются с единицы).

    F. Сумма k-x степеней

    математика *2600

    Известны следующие формулы , , . Также математиками были получены аналогичные формулы и для больших степеней.

    Вам требуется найти значение суммы по модулю 109 + 7 (то есть нужно найти остаток при делении значения суммы на число 109 + 7).

    Входные данные

    В единственной строке находится пара целых чисел n, k (1 ≤ n ≤ 109, 0 ≤ k ≤ 106).

    Выходные данные

    Выведите целое число a — остаток значения искомой суммы, при делении на число 109 + 7.

    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. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    В первом тестовом примере оптимальная стратегия — называть двоих друзей по очереди.

    E. Преобразование последовательности

    бпф дп Комбинаторика математика *3300

    Определим преобразование P последовательности a1, a2, ..., an как b1, b2, ..., bn, где bi = a1 | a2 | ... | ai для всех i = 1, 2, ..., n. Символом | будем обозначать операцию побитового ИЛИ.

    Вася поочередно применяет преобразование P ко всем последовательностям длины n из целых чисел от 1 до 2k - 1 включительно. Он хочет знать, для скольких последовательностей результат преобразования будет строго возрастающей последовательностью. Помогите ему посчитать это число по модулю 109 + 7.

    Входные данные

    В единственной строке заданы два целых числа n и k (1 ≤ n ≤ 1018, 1 ≤ k ≤ 30 000).

    Выходные данные

    В единственной строке выведите количество подходящих последовательностей по модулю 109 + 7.

    A. Спасти Люка

    математика *800

    Люк Скайуокер оказался заперт в измельчителе мусора между двумя прессами. Его спасением уже занимается R2D2, но Люку нужно оставаться живым как можно дольше. Для простоты будем считать, что всё происходит на прямой, прессы изначально находятся в координатах 0 и L и движутся навстречу друг другу со скоростями v1 и v2 соответственно. Люк имеет ширину d и может занять любую позицию между прессами. Люк умирает, как только расстояние между прессами станет меньше его толщины. Ваша задача — определить максимальное время, которое Люк сможет оставаться живым.

    Входные данные

    В первой строке входных данных записаны четыре целых числа d, L, v1, v2 (1 ≤ d, L, v1, v2 ≤ 10 000, d < L) — толщина Люка, координата второго пресса и скорости первого и второго прессов соответственно.

    Выходные данные

    Выведите одно вещественное число — максимальное время, в течение которого Люк может оставаться живым. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    В первом тесте Люку нужно расположиться в середине отрезка, то есть в координатах [2;4], так как прессы двигаются с одинаковой скоростью.

    Во втором тесте ему нужно расположиться в координатах . В таком случае оба пресса придвинутся к его краям одновременно.

    A. Гость из прошлого

    математика реализация *1700

    Коля Герасимов очень любит кефир, и в своём 1984 году он освоил все тонкости покупки этого чудесного напитка. Но однажды, как вам, наверное, известно, он попал в далёкий 2084 год, где покупка кефира представляет собой более сложный процесс.

    Будущее будущим, а кушать хочется всегда, поэтому Коля отправился в местную молочную лавку. В 2084 году кефир продают в литровых пластиковых бутылках по a копеек за штуку и в литровых бутылках из стекла по b копеек за штуку. При этом пустую стеклянную бутылку можно сдать и получить назад c (c < b) копеек, а пластиковую бутылку сдать нельзя.

    У Коли в кармане есть n копеек, и он очень голоден, поэтому хочет выпить как можно больше литров кефира. Так как в его время не было пластиковых бутылок, он совсем не знает, как действовать. Поэтому он обратился за помощью к вам, как к единственному знакомому в будущем.

    Входные данные

    В первой строке входных данных задаётся число n (1 ≤ n ≤ 1018) — количество копеек у Коли в кармане.

    В строках со второй по четвертую по одному записаны числа a, b и c (1 ≤ a ≤ 1018, 1 ≤ c < b ≤ 1018) — стоимость пластиковой бутылки с кефиром, стоимость стеклянной бутылки с кефиром и сколько копеек можно получить, сдав пустую стеклянную бутылку, соответственно.

    Выходные данные

    Выведите одно целое число — максимальное количество литров кефира, которое сможет выпить Коля.

    Примечание

    В первом примере Коля может купить один литр в стеклянной бутылке, затем сдать эту бутылку и снова купить стеклянную бутылку. Таким образом, он сможет выпить два литра кефира.

    Во втором примере Коля может купить две пластиковые бутылки и получить два литра кефира или купить сначала один литр в стекле, потом сдать бутылку и купить одну бутылку в пластике. В обоих случаях он купит два литра кефира.

    D. Контрольная по арифметике

    Конструктив математика реализация *2400

    Отличник Витя учится в третьем классе. На последнем уроке математики в четверти учительница Оксана Филипповна дала итоговую контрольную работу по арифметике. На контрольной сообразительный Витя быстрее всех справился со стандартными заданиями. Поскольку до конца урока оставалось ещё много времени, учительница предложила ему решить более сложное упражнение.

    Рассмотрим операцию переворота целого положительного числа: при её применении десятичные цифры числа записываются в обратном порядке, затем если у результата есть ведущие нули, они отбрасываются. Например, при перевороте из числа 123 получается число 321, из числа 130 — число 31, а из числа 31 — число 13.

    Оксана Филипповна загадала целое положительное число a без ведущих нулей и применила к нему операцию переворота, получилось число ar. После этого она сложила a и ar, дала Вите их сумму n и попросила его найти исходное число a.

    Поскольку в предложенном учительницей примере числа a и ar были небольшими, Витя быстро угадал правильный ответ и задумался над построением общего алгоритма для решения задачи. Его интересует, как по заданному числу n найти какое-либо a или определить, что такого a не существует. Помогите Вите разработать такой алгоритм.

    Входные данные

    В первой строке входных данных находится одно целое число n (1 ≤ n ≤ 10100 000).

    Выходные данные

    В случае если не существует ни одного целого положительного числа a без ведущих нулей такого, что a + ar = n, выведите единственное число 0.

    В противном случае выведите подходящее a без пробелов и ведущих нулей. Если удовлетворяющих условию вариантов несколько, выведите любой.

    Для лучшего понимания формата вывода рекомендуется изучить примеры.

    Примечание

    В первом примере 4 = 2 + 2, a = 2 — единственный вариант.

    Во втором примере 11 = 10 + 1, a = 10 — единственный вариант. Обратите внимание, что вариант a = 01 не подходит, поскольку a не может иметь ведущие нули.

    Легко проверить, что в третьем примере ни одного подходящего a не существует.

    В четвёртом примере 33 = 30 + 3 = 12 + 21, и существует три варианта для a: a = 30, a = 12, a = 21. Любой из них является правильным ответом.

    B. Карты

    дп Конструктив математика *1300

    У Кэтрин есть колода из n карт, каждая карта либо красная, либо зеленая, либо синяя. Пока в колоде есть ещё хотя бы две карты, Кэтрин выполняет одно из двух действий:

    • взять две (необязательно соседние) карты различных цветов и заменить их на одну карту третьего цвета;
    • взять две (необязательно соседние) карты одного и того же цвета и заменить их на одну карту этого цвета;

    Она применяет эти операции до тех пор, пока не останется ровно одна карта. Определите все возможные цвета этой последней карты.

    Входные данные

    Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 200) — изначальное количество карт в колоде.

    Следующая строка содержит строку s длины n — цвета карт в колоде. s содержит только символы «B», «G», и «R», обозначающие синий, зелёный и красный соответственно.

    Выходные данные

    Выведите одну строку, содержащую от одного до трёх символов, — возможные цвета последней карты (используйте те же символы, что и во входных данных) в алфавитном порядке.

    Примечание

    В первом примере у Кэтрин одна красная карта и одна синяя карта, которые она может поменять только на зелёную карту.

    Во втором примере у Кэтрин две зелёных карты и одна красная карта. У неё два варианта: она может обменять две зелёных карты на одну зелёную, а затем обменять новую зелёную карту и красную карту на синюю карту. Или же она может обменять зелёную и красную карты на синюю карту, затем обменять синюю карту и оставшуюся зелёную карту на красную карту.

    В третьем примере у Кэтрин есть только синие карты, так что она может обменять их только на другие синие карты.

    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, используя блоки по три кубика.

    E. Простая асимметрия

    Бинарный поиск математика Тернарный поиск *2400

    Назовём простой асимметрией набора чисел разность (не модуль разности) между средним значением и медианой. Вам дан список из n чисел, необязательно различных. Требуется выбрать какое-то непустое подмножество этих чисел (возможны повторения) с максимальным значением простой асимметрии.

    Средним значением набора чисел является среднее арифметическое всех его элементов. Медианой набора чисел назовём средний элемент, если набор отсортирован. Для наборов чётного размера медианой будем называть среднее арифметическое двух средних элементов при сортировке.

    Входные данные

    В первой строке входных данных записано число n (1 ≤ n ≤ 200 000) — количество чисел в наборе.

    Во второй строке записано n целых чисел xi (0 ≤ xi ≤ 1 000 000) — элементы набора.

    Выходные данные

    В первой строке выведите число k (1 ≤ k ≤ n) — размер подмножества.

    Во второй строке выведите k чисел — элементы выбранного подмножества в любом порядке.

    Если оптимальных ответов несколько, то разрешается вывести любой.

    Примечание

    В первом примере оптимальным подмножеством является со средним значением 5, медианой 2 и значением простой асимметрии 5 - 2 = 3.

    Во втором примере оптимальным подмножеством является . Обратите внимание, что разрешены одинаковые элементы.

    В последнем примере у любого подмножества среднее значение равно медиане, поэтому максимальная простая асимметрия равна 0.

    G. Лототроны

    дп жадные алгоритмы математика Структуры данных *3100

    Джонни участвует в карнавале, на котором проводится n лотерей. В ходе лотереи с номером i разыгрывается приз ценностью pi. Каждый участник покупает сколько-то лотерейных билетов, а затем произвольным образом распределяет их между n лототронами. В конце карнавала из каждого лототрона случайным образом достают один билет, и его обладатель выигрывает соответствующий приз. Один человек вполне может выиграть и несколько призов с разных лототронов.

    Правила карнавальных лотерей запрещают одному участнику владеть более чем половиной билетов в лототроне, то есть никто не может положить в один лототрон больше билетов, чем все остальные участники вместе взятые. В начале лотереи организаторы кладут в каждый лототрон один билет и не извлекают его оттуда до конца карнавала.

    Джонни купил t лотерейных билетов и теперь думает, как же распределить их по лототронам. Сейчас в i-м лототроне находится li билетов. Джонни наблюдает, как остальные участники лотереи время от времени меняют свои решения и перемещают по одному билету. После каждого такого перемещения Джонни хочет знать максимальное математическое ожидание выигрыша, которого он может добиться, разместив билеты оптимальным способом. Разумеется, Джонни не может использовать больше чем t билетов и нарушать правила лотереи, помещая в один лототрон больше билетов, чем все остальные участники лотереи вместе взятые.

    Входные данные

    В первой строке входных данных записаны числа n, t и q (1 ≤ n, t, q ≤ 200 000) — количество лототронов, количество билетов в распоряжении Джонни и количество изменений соответственно.

    Во второй строке записаны n чисел pi (1 ≤ pi ≤ 1000), i-е из которых задаёт ценность приза в i-й лотерее.

    В третьей строке записано n чисел li (1 ≤ li ≤ 1000) — изначальное количество билетов в каждом лототроне.

    Далее следуют q строк с описанием изменений. Каждое описание состоит из двух целых чисел tk и rk (1 ≤ tk ≤ 2, 1 ≤ rk ≤ n) — тип изменения и номер лототрона. Если tk = 1, то кто-то добавляет один билет в лототрон rk, а если tk = 2, то кто-то убирает билет из лототрона rk.

    Гарантируется, что после любой операции в каждом лототроне есть хотя бы 1 билет.

    Выходные данные

    Выведите q строк, каждая строка должна содержать одно вещественное число — максимально возможное математическое ожидание выигрыша Джонни после выполнения первых k изменений. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    В первом примере у Джонни есть только один билет. Призы имеют ценность 4 и 5, а в лототронах изначально находятся 1 и 2 билета соответственно. После первого изменения в каждом лототроне лежит по 2 билета, так что если Джонни поместит свой билет во второй лототрон, то математическое ожидание выигрыша будет равно . После второго изменения во втором лототроне находится три билета, так что наиболее выгодной стратегией будет положить билет в первый лототрон — математическое ожидание выигрыша равно . После третьего изменения Джонни должен положить свой билет в первый лототрон, тогда математическое ожидание выигрыша равно .

    Во втором примере у Джонни больше билетов, чем он может использовать по правилам карнавальной лотереи. Например, после первого изменения, в лототронах лежат 7, 6 и 6 билетов соответственно, так что Джонни может использовать только 19 своих билетов и выиграть каждый приз с вероятностью .

    A. Уравнение с исключающим ИЛИ

    дп математика *1700

    Известно, что два положительных целых числа a и b в сумме дают s, а их побитовое исключающее «ИЛИ» (также известно как XOR) равно x. Сколько существует подходящих упорядоченных пар (a, b)?

    Входные данные

    В первой строке входных данных записаны два целых числа s и x (2 ≤ s ≤ 1012, 0 ≤ x ≤ 1012) — значения суммы и побитового исключающего «ИЛИ» соответственно.

    Выходные данные

    Выведите одно целое число — количество подходящих пар положительных целых чисел a и b. Если решений не существует, выведите 0.

    Примечание

    В первом примере подходят следующие пары: (2, 7), (3, 6), (6, 3), (7, 2).

    Во втором примере решения являются только (1, 2) и (2, 1).

    A. Теннисный турнир

    математика реализация *1000

    Проходит теннисный турнир, в котором соревнуются n участников. Участники играют по олимпийской системе, где победители проходят дальше, а проигравшие навсегда вылетают из турнира.

    Турнирная сетка составляется следующим образом (далее m количество участников текущего раунда):

    • находится k, равное максимальной степени числа 2, что k ≤ m,
    • k участников соревнуются в текущем раунде и половина из них проходит в следующий раунд, оставшиеся m - k участников проходят в следующий раунд без борьбы,
    • когда остаётся только один участник, турнир завершается.

    В каждом матче требуется b бутылок воды для каждого участника и одна бутылка для судьи. Кроме этого, каждому игроку выдаётся p полотенец на весь турнир.

    Определите количество бутылок и полотенец, необходимое для проведения турнира.

    Обратите внимание, что это теннисный турнир, поэтому в каждом матче соревнуются два участника (один из них выигрывает, а другой проигрывает).

    Входные данные

    В единственной строке находится три целых числа n, b, p (1 ≤ n, b, p ≤ 500) — количество участников турнира и параметры, описанные в условии задачи.

    Выходные данные

    Выведите два целых числа x и y — количество бутылок и полотенец, необходимое для проведения турнира.

    Примечание

    В первом примере будет три раунда:

    1. в первом раунде будет два матча и для каждого необходимо по 5 бутылок воды (по две бутылки игрокам и одну судье),
    2. во втором раунде будет только один матч, поэтому нам нужно ещё 5 бутылок воды,
    3. в третьем раунде также будет один матч, поэтому нам нужно ещё 5 бутылок воды.

    Таким образом, всего нам нужно 20 бутылок воды.

    Во втором примере ни один участник не пройдёт ни в какой раунд напрямую.

    B. Закон Мура

    математика *1200

    Мэрия ИТ-града решила установить на главной площади города символ научно-технического прогресса — табло, в реальном времени демонстрирующее действие закона Мура.

    Закон Мура заключается в том, что количество транзисторов, размещаемых на кристалле интегральной схемы, удваивается каждые 24 месяца. Следствием закона Мура является то, что примерно так же экспоненциально от времени растёт и производительность компьютеров.

    Вам нужно подготовить для отображения на табло информацию, которая будет меняться каждую секунду. Будем считать, что каждую секунду количество транзисторов увеличивается ровно в 1.000000011 раз.

    Входные данные

    Единственная строка входных данных содержит пару целых чисел n (1000 ≤ n ≤ 10 000) и t (0 ≤ t ≤ 2 000 000 000) — количество транзисторов в начальный момент времени и количество секунд, прошедших с начального момента времени.

    Выходные данные

    Выведите одно число — оценку количества транзисторов на кристалле через t секунд после начального момента. Относительная погрешность Вашего ответа не должна превышать 10 - 6.

    C. Счастливые номера

    Комбинаторика математика *1100

    В новом здании налоговой инспекции ИТ-града было решено номера всех кабинетов сделать счастливыми.

    Счастливым называется номер, состоящий только из цифр 7 и 8. Найдите максимальное количество кабинетов в новом здании налоговой инспекции, если на табличку с номером кабинета помещается не более чем n-значное число.

    Входные данные

    Единственная строка входных данных содержит одно целое число n (1 ≤ n ≤ 55) — максимальная длина числа, которое помещается на табличку.

    Выходные данные

    Выведите одно целое число — максимальное количество кабинетов, которые можно занумеровать различными счастливыми номерами длины не более n.

    D. Шестиугольники!

    математика *1100

    После успешно прохождения испытательного срока в компании ИТ-града, которая занимается играми, Петя вошёл в группу программистов, которая занимается созданием новой пошаговой стратегии в стиле известной «Heroes of Might & Magic». Одним из элементов игры являются пошаговые бои больших отрядов противников на бесконечных полях, где каждая ячейка представляет собой шестиугольник.

    Некоторые из магических эффектов персонажей способны воздействовать сразу на несколько ячеек поля, которые находятся от ячейки применения эффекта на расстоянии не более n. Расстоянием между ячейками назовём минимальное количество переходов через границу ячейки, позволяющее попасть из одной выбранной ячейки в другую.

    Легко заметить, что количество ячеек, которое подпадает под магический эффект, достаточно быстро растёт при увеличении числа n, что может отрицательно сказываться на производительности игры. Поэтому Петя решил написать программу, которая бы по числу n определяла количество ячеек, которые придётся перерисовать при применении эффекта, чтобы гейм-дизайнеры могли поддерживать баланс между масштабностью эффектов и производительностью игры. Помогите ему в этом. Найдите количество шестиугольников, расстояние от которых до заданной клетки не превышает n.

    Входные данные

    Единственная строка входных данных содержит одно целое число n (0 ≤ n ≤ 109).

    Выходные данные

    Выведите одно целое число — количество шестиугольников, расстояние от которых до заданной клетки не превышает n.

    E. Прямоугольник

    математика *1900

    Разрабатывая инструменты для создания карт локаций для пошаговых боёв в новой игре, Петя столкнулся со следующей задачей.

    Карта поля состоит из шестиугольных сот. Так как локации планируются очень большие, гейм-дизайнер хочет иметь инструмент для быстрого заполнения участка поля одинаковыми вражескими юнитами. Выглядеть это будет следующим образом: гейм-дизайнер будет выделять на карте прямоугольную область, и на каждой соте, центр которой попадает в выделенный прямоугольник, должен появиться выбранный вражеский юнит.

    Более формально, если гейм-дизайнер выбрал соты с координатами (x1, y1) и (x2, y2), где x1 ≤ x2 и y1 ≤ y2, то заполняются все соты с координатами центров (x, y), такие что x1 ≤ x ≤ x2 и y1 ≤ y ≤ y2. Прямоугольная система координат введена таким образом, что одна из сторон сот параллельна оси OX, все центры шестиугольников имеют целочисленные координаты, для каждого целого x есть соты с центром с такой x-координатой и для каждого целого y есть соты с центром с такой y-координатой. Гарантируется, что разность x2 - x1 делится нацело на 2.

    В процессе выполнения задачи Петя решил, что прежде чем отрисовать указанных юнитов, он хочет выводить на экран пользователя количество юнитов, которые в итоге будут отрисованы на карте.

    Помогите ему реализовать подсчёт этих юнитов до отрисовки.

    Входные данные

    Единственная строка входных данных содержит четыре целых числа x1, y1, x2, y2 ( - 109 ≤ x1 ≤ x2 ≤ 109,  - 109 ≤ y1 ≤ y2 ≤ 109) — координаты центров двух сот.

    Выходные данные

    Выведите одно целое число — количество сот, подлежащих заполнению.

    F. Подбор кадров

    Комбинаторика математика *1300

    В одной из компаний ИТ-града было принято решение создать группу инновационных разработок численностью от 5 до 7 человек и набрать для этого новых сотрудников. После размещения объявлений в компанию поступило n анкет. Теперь отделу кадров предстоит непростая задача оценить каждый возможный состав группы и выбрать один из них. Ваша задача — посчитать, сколько вариантов состава новой группы необходимо будет рассмотреть отделу кадров.

    Входные данные

    Единственная строка входных данных содержит одно целое число n (7 ≤ n ≤ 777) — количество потенциальных новых сотрудников, приславших анкеты.

    Выходные данные

    Выведите одно целое число — количество различных вариантов состава новой группы.

    G. Переходящие вымпелы

    Комбинаторика математика *1600

    В одной ИТ-компании ввиду урезания бюджета вместо премий была введена новая система нематериальных поощрений сотрудников.

    Особо отмечаются два вида действий: исправление критичных багов и предложение новых интересных фич. Человек, исправивший критичный баг, получает себе на стол вымпел «Исправил критичный баг». Человек, предложивший новую интересную фичу, получает себе на стол вымпел «Предложил новую фичу».

    Ввиду ограниченности бюджета новой системы поощрений было закуплено всего 5 вымпелов «Исправил критичный баг» и 3 вымпела «Предложил новую фичу».

    Чтобы этих вымпелов хватило надолго, их было решено сделать переходящими: когда человек исправляет новый критичный баг, один из ранее распределённых вымпелов «Исправил критичный баг» переходит ему на стол. Когда человек предлагает новую интересную фичу, один из ранее распределённых вымпелов «Предложил новую фичу» переходит ему на стол.

    У одного человека на столе может стоять несколько вымпелов одного типа и, разумеется, могут стоять вымпелы обоих типов. Всего в ИТ-компании n столов. Найдите количество способов распределения описанных вымпелов по этим столам, если известно, что каждый из вымпелов находится на каком-то из столов, и каждый стол достаточно велик, чтобы содержать любое количество вымпелов.

    Входные данные

    Единственная строка входных данных содержит одно целое число n (1 ≤ n ≤ 500) — количество столов в ИТ-компании.

    Выходные данные

    Выведите одно целое число — количество способов расставить вымпелы по n столам.

    H. Скамейки

    Комбинаторика математика *1400

    Городской парк ИТ-града содержит n дорожек, идущих с востока на запад и n дорожек, идущих с севера на юг. Каждая дорожка, идущая с севера на юг, пересекается с каждой дорожкой, идущей с востока на запад, таким образом, всего пересечений n2.

    Город выделил деньги на закупку пяти скамеек. Чтобы казалось, что скамеек много, было решено поставить их на как можно большее количество дорожек. Очевидно, такому условию удовлетворяет следующая схема размещения: каждая скамейка размещается на пересечении дорожек, на каждой дорожке находится не более одной скамейки.

    Помогите администрации парка сосчитать количество способов расставить скамейки.

    Входные данные

    Единственная строка входных данных содержит одно целое число n (5 ≤ n ≤ 100) — количество дорожек, идущих с востока на запад и с севера на юг.

    Выходные данные

    Выведите одно целое число — количество способов расставить скамейки.

    I. Автостоянка

    Комбинаторика математика *1700

    Чтобы быстро набрать штат высококвалифицированных специалистов, одна из новых компаний ИТ-града пошла на беспрецедентный шаг. Она решила дарить каждому сотруднику автомобиль, причём сотрудник сам может выбрать одну из четырёх различных марок.

    Автостоянка перед офисом представляет собой одну линию из (2n - 2) парковочных мест. К сожалению, общее число машин оказалось больше, чем вместимость парковки. Более того, даже количество машин одной любой марки оказалось больше, чем количество парковочных мест! Поэтому свободных мест на стоянке не бывает никогда.

    Любуясь ровным рядом машин, директор подумал, что стоянка выглядела бы ещё красивее, если бы на ней нашлись ровно n подряд стоящих машин одинаковой марки. Помогите директору определить количество способов такого заполнения парковки.

    Входные данные

    Единственная строка входных данных содержит целое число n (3 ≤ n ≤ 30) — количество стоящих подряд машин одной марки.

    Выходные данные

    Выведите единственное целое число — количество способов заполнить стоянку машинами четырех марок требуемым образом

    Примечание

    Обозначим марки так: A — Астон Мартин, B — Бентли, M — Мерседес-Майбах, Z — запорожец. Для n = 3 подходят следующие варианты заполнения стоянки: AAAB AAAM AAAZ ABBB AMMM AZZZ BBBA BBBM BBBZ BAAA BMMM BZZZ MMMA MMMB MMMZ MAAA MBBB MZZZ ZZZA ZZZB ZZZM ZAAA ZBBB ZMMM

    Изначально планировалось раздавать спортивные автомобили марок Феррари, Ламборджини, Мазерати и Бугатти, но от этой идеи отказались, поскольку по разбитым дорогам ИТ-града на этих автомобилях с маленьким клиренсом невозможно проехать.

    J. Делимость

    математика теория чисел *1100

    Компания ИТ-града, выпускающая компьютерные игры, придумала новый способ поощрения своих сотрудников. Когда случается выпуск новой игры, пользователи начинают активно её покупать, а компания отслеживает количество продаж с точностью до каждой транзакции. Каждый раз, когда очередное количество продаж делится нацело на все числа от 2 до 10, всем разработчикам начисляется небольшая премия.

    Гейм-дизайнер Петя знает, что компания вот-вот выпустит релиз новой игры, в разработке которой он участвовал. На основании прошлого опыта он прогнозирует, что в течение месяца игру купят n человек. Теперь Петя хочет определить, сколько раз ему будет начислена премия. Помогите ему это узнать.

    Входные данные

    Единственная строка входных данных содержит одно целое число n (1 ≤ n ≤ 1018) — прогноз на количество человек, которые купят игру.

    Выходные данные

    Выведите одно целое число — количество чисел от 1 до n, делящихся на все числа от 2 до 10.

    K. Неделимость

    математика теория чисел *1500

    Компания ИТ-града, выпускающая компьютерные игры, решила модернизировать свой способ поощрения сотрудников. Теперь он выглядит следующим образом. Когда случается выпуск новой игры, пользователи начинают активно её покупать, а компания отслеживает количество продаж с точностью до каждой транзакции. Каждый раз, когда очередное количество продаж не делится нацело ни на одно из чисел от 2 до 10, всем разработчикам начисляется небольшая премия.

    Гейм-дизайнер Петя знает, что компания вот-вот выпустит релиз новой игры, в разработке которой он участвовал. На основании прошлого опыта он прогнозирует, что в течение месяца игру купят n человек. Теперь Петя хочет определить, сколько раз ему будет начислена премия. Помогите ему это узнать.

    Входные данные

    Единственная строка входных данных содержит одно целое число n (1 ≤ n ≤ 1018) — прогноз на количество человек, которые купят игру.

    Выходные данные

    Выведите одно целое число — количество чисел от 1 до n, не делящихся нацело ни на одно из чисел от 2 до 10.

    L. Взлом кода

    математика реализация *1400

    Защита популярной программы, разработанной одной из компаний ИТ-града, устроена следующим образом. При установке на компьютер пользователя она выводит случайное пятизначное число, которое нужно отослать СМС-сообщением на определённый номер телефона. В ответном СМС приходит код активации программы.

    Юный хакер Вася дизассемблировал данную программу и нашёл алгоритм, который преобразует выведенное число в код активации. Примечание: разумеется, Вася — законопослушный хакер, и он сделал это из самых благородных целей — чтобы продемонстрировать разработчику несовершенство их способа защиты.

    Найденный алгоритм выглядит следующим образом. Сначала цифры числа перемешиваются в следующем порядке <первая цифра><третья цифра><пятая цифра><четвёртая цифра><вторая цифра>. Например, из числа 12345 в результате перемешивания должно получиться число 13542. На втором этапе число возводится в пятую степень. Для числа 12345 после перемешивания и возведения в степень должен получиться результат 455 422 043 125 550 171 232. Ответом будут 5 последних цифр этого результата. Для числа 12345 ответом должно быть 71232.

    Васе осталось лишь написать программу-генератор ключей активации, реализующую данный алгоритм. А Вы сможете это сделать?

    Входные данные

    Единственная строка входных данных содержит положительное целое пятизначное число, для которого нужно найти код активации.

    Выходные данные

    Выведите ровно 5 цифр без пробелов — найденный код активации программы.

    M. Поворот

    геометрия математика *1800

    Вася устроился в одну из компаний ИТ-града, которая занимается машинным зрением. Команда, в которую попал Вася, занимается созданием программно-аппаратного комплекса для идентификации людей по лицу.

    Одним из ноу-хау проекта является камера, вращающаяся вокруг оптической оси при съёмке. Люди видят диковинку — вращающуюся камеру — подходят к ней, чтобы лучше рассмотреть, смотрят прямо в неё. А камера их в это время снимает. Что может быть лучше для качественной идентификации?

    Но не всё оказалось так просто. Вместе с камерой оказались повёрнуты и снимки, которые камера делает (при повороте камеры по часовой стрелке содержимое кадра оказывается повёрнуто против часовой стрелки). А алгоритм идентификации умеет работать только с лицами, незначительно отклонёнными от вертикали.

    Васе поручили исправить недочёт — поворачивать снятую картинку так, чтобы изображение было отклонено как можно меньше от вертикали. При этом требования оказались довольно жёсткими. Во-первых, поворачивать картинку можно только на угол, кратный 90 градусам, чтобы ни в коем случае не утратить ни одного бита информации об изображении. Во-вторых, кадры с камеры оказались настолько большими, а кадров в секунду так много, что справиться с поворотом могло только аппаратное решение на основе FPGA, а это решение умеет поворачивать изображение только на 90 градусов по часовой стрелке. Конечно, поворот на 90 градусов по часовой стрелке можно применить несколько раз, но из соображений производительности лучше всё-таки минимизировать количество поворотов.

    Помогите Васе реализовать программу, которая по углу поворота камеры определит, какое минимальное количество поворотов изображения на 90 градусов по часовой стрелке необходимо выполнить, чтобы получить картинку, на которой направление вверх как можно меньше отклонено от вертикали.

    На следующем рисунке изображены кадры, полученные с не повёрнутой камеры, затем с повёрнутой на 90 градусов по часовой стрелке, затем с повёрнутой на 90 градусов в обратную сторону. Стрелками показано направление на «истинный верх».

    На следующем рисунке изображён процесс поворота изображения на 90 градусов по часовой стрелке аппаратным решением на основе FPGA.

    Входные данные

    Единственная строка входных данных содержит одно целое число x ( - 1018 ≤ x ≤ 1018) — угол поворота камеры в градусах. Положительное значение означает поворот камеры по часовой стрелке, отрицательное — против часовой.

    Выходные данные

    Выведите одно целое число — минимальное необходимое количество поворотов на 90 градусов по часовой стрелке.

    Примечание

    Когда камера повёрнута на 60 градусов против часовой стрелки (второй пример), изображение с неё повёрнуто на 60 градусов по часовой стрелке. Один поворот изображения на 90 градусов по часовой стрелке даёт общий поворот в 150 градусов по часовой стрелке, и отклонение от «истинного верха» для одного поворота составляет 150 градусов. Два поворота изображения на 90 градусов по часовой стрелке дают общий поворот в 240 градусов по часовой стрелке, и отклонение от «истинного верха» для двух поворотов составляет 120 градусов, потому что 240 градусов по часовой стрелке — это то же самое, что 120 градусов против часовой стрелки. Три поворота изображения на 90 градусов дают общий поворот 330 градусов по часовой стрелке, и отклонение от «истинного верха» для трёх поворотов составляет 30 градусов, потому что 330 градусов по часовой стрелке — это то же самое, что 30 градусов против часовой стрелки.

    Из отклонений 60, 150, 120 и 30 градусов минимальным является 30, оно достигается при трёх поворотах изображения на 90 градусов по часовой стрелке.

    N. Прогноз

    математика *1300

    Департамент экономического развития ИТ-града составил модель развития города до 2100 года.

    Для подготовки отчёта о перспективах роста требуется получить из этой модели оценки показателей роста.

    Для получения оценок нужно решить квадратное уравнение. Поскольку департамент экономического развития ИТ-града строит только реалистичные модели, то у этого квадратного уравнения есть решение, причём есть ровно два различных вещественных корня.

    Больший из корней соответствует оптимистичному сценарию, меньший — пессимистичному. Помогите получить эти оценки, сначала оптимистичную, потом пессимистичную.

    Входные данные

    Единственная строка входных данных содержит три целых числа a, b, c ( - 1000 ≤ a, b, c ≤ 1000) — коэффициенты уравнения ax2 + bx + c = 0.

    Выходные данные

    В первой строке выведите больший из корней уравнения, во второй строке выведите меньший. Абсолютная или относительная погрешность не должна превосходить 10 - 6.

    Q. Пирамиды

    геометрия математика *1700

    Администрации ИТ-града не даёт покоя слава египетских пирамид. Существует проект возведения комплекса пирамид недалеко от города в местности под названием Изумрудная долина. Особенностью комплекса будет то, что пирамиды будут не только четырёхугольные, как в Египте, но также треугольные и пятиугольные. Разумеется, количество бюджетных средств под постройку зависит от объёма пирамид. Ваша задача — рассчитать объём пилотного проекта из трёх пирамид — одной треугольной, одной четырёхугольной и одной пятиугольной.

    У первой пирамиды в основании находится равносторонний треугольник, и все 6 рёбер пирамиды имеют одинаковую длину. У второй пирамиды в основании находится квадрат, и все 8 рёбер пирамиды имеют одинаковую длину. У третьей пирамиды в основании находится правильный пятиугольник, и все 10 рёбер пирамиды имеют одинаковую длину.

    Входные данные

    Единственная строка входных данных содержит три целых числа l3, l4, l5 (1 ≤ l3, l4, l5 ≤ 1000) — длины рёбер треугольной, четырёхугольной и пятиугольной пирамид соответственно.

    Выходные данные

    Выведите одно число — суммарный объём пирамид. Абсолютная или относительная погрешность не должна превосходить 10 - 9.

    R. Игра

    игры математика *1200

    В вузе ИТ-града существует такая легенда. Студенту, не ответившему ни на один вопрос на экзамене по теории игр, преподаватель даёт последний шанс. Студенту нужно сыграть с преподавателем в игру.

    Игра происходит на квадратном клетчатом поле n × n. Изначально все клетки поля пусты. На каждом ходу игрок выбирает пустую клетку, не имеющую общих сторон с закрашенными клетками, и закрашивает её. Касание закрашенных клеток углами допускается. На следующем ходу то же самое делает второй игрок, после него первый и так далее. Тот, кому некуда сделать ход, проигрывает.

    Преподаватель уже выбрал размер поля n и предоставил студенту выбор ходить первым или вторым. Что должен выбрать студент, чтобы выиграть в игре? Будем считать, что оба игрока играют оптимально.

    Входные данные

    Единственная строка входных данных содержит одно целое число n (1 ≤ n ≤ 1018) — размер поля.

    Выходные данные

    Выведите число 1, если при оптимальной игре обоих игроков выиграет игрок, делающий первый ход, иначе число 2.

    D. Самая длинная подпоследовательность

    математика Перебор теория чисел *2100

    Вам задан массив a из n элементов и число m. Рассмотрим некоторую подпоследовательность a и значение наименьшего общего кратного (НОК) её элементов. Обозначим этот НОК буквой l. Найдите самую длинную подпоследовательность массива a со значением l ≤ m.

    Подпоследовательностью массива a называется массив, который получается из a удалением некоторых элементов. Разрешено удалять ноль или все элементы массива.

    НОК пустого массива равен 1.

    Входные данные

    В первой строке находится пара целых чисел n и m (1 ≤ n, m ≤ 106) — размер массива a и параметр, описанный в условии задачи.

    Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 109) — элементы массива a.

    Выходные данные

    В первой строке выведите два целых числа l и kmax (1 ≤ l ≤ m, 0 ≤ kmax ≤ n) — значение НОК и количество элементов в оптимальной подпоследовательности.

    Во второй строке выведите kmax целых чисел — позиции элементов в исходной последовательности, в возрастающем порядке.

    Заметим, что вы можете найти и вывести любую подпоследовательность с наибольшей длиной.

    E. Вор в магазине

    бпф дп математика разделяй и властвуй *2400

    Вор пробрался в магазин.

    Как всегда у него с собой любимый рюкзак. В рюкзаке может поместиться k предметов. В магазине присутствует n типов товаров, причём товаров каждого типа бесконечное количество. Стоимость единицы товара i-го типа равна ai.

    Вор жадный, поэтому решил набить рюкзак до отказа. Таким образом, он возьмёт с собой ровно k товаров, причём товары некоторых типов он может взять в нескольких экземплярах.

    Определите всевозможные суммы стоимостей товаров, которые могут оказаться в рюкзаке вора.

    Входные данные

    В первой строке находится пара целых чисел n и k (1 ≤ n, k ≤ 1000) — количество типов товаров и количество предметов, которые вор украдёт.

    Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 1000) — стоимости товаров по типам от 1 до n.

    Выходные данные

    В единственной строке выведите через пробел всевозможные суммы стоимостей товаров, которые могут оказаться в рюкзаке вора. Числа нужно выводить в порядке возрастания.

    A. Тёмный и Светлый

    математика Перебор теория чисел *1100

    Данте сражается со «Спасителем». Чтобы нанести ему решающий удар мечом, он сначала должен уничтожить его щит. У Данте есть два пистолета, Тёмный и Светлый, каждый из которых может произвести любое неотрицательное количество выстрелов.

    Каждая пуля, попавшая в щит, наносит a единиц урона, если она была выпущена из Тёмного пистолета, и b единиц урона, если она была выпущена из Светлого. Чтобы разрушить щит, Данте должен нанести ровно c единиц урона. Проверьте, возможно ли это.

    Входные данные

    В первой строке входного файла записаны три целых числа a, b и c (1 ≤ a, b ≤ 100, 1 ≤ c ≤ 10 000) — количество единиц урона, который наносится Тёмным и Светлым пистолетами за один выстрел, и количество единиц урона, который необходимо нанести щиту, соответственно.

    Выходные данные

    Если Данте может нанести ровно c единиц урона, то выведите «Yes» (без кавычек), в противном случае выведите «No» (без кавычек).

    Примечание

    Во втором примере Данте может выпустить 1 пулю из Тёмного пистолета и 2 пули из Светлого, таким образом он нанесёт по щиту 1·3 + 2·2 = 7 единиц урона.

    B. Тривиальная задача

    Конструктив математика Перебор теория чисел *1300

    Мистер Санта поручил всем сильнейшим программистам мира решить тривиальную задачу. Он даёт им целое положительное число m и просит найти количество таких целых положительных чисел n, что десятичная запись факториала числа n будет заканчиваться ровно на m нулей. А вы считаете себя достаточно сильным программистом, чтобы решить эту задачу?

    Входные данные

    В единственной строке входных данных записано целое число m (1 ≤ m ≤ 100 000) — требуемое количество нулей в конце десятичной записи факториала.

    Выходные данные

    Сначала выведите k — количество таких целых чисел n, что их факториал заканчивается на m нулей. Затем выведите эти k целых чисел в порядке возрастания.

    Примечание

    Факториал n равняется произведению всех целых чисел от 1 до n включительно, то есть n! = 1·2·3·...·n.

    В первом примере 5! = 120, 6! = 720, 7! = 5040, 8! = 40320 и 9! = 362880.

    D. Фибоначчиеватость

    дп математика Перебор реализация хэши *2000

    Яш недавно узнал о числах Фибоначчи. Он так обрадовался этому знанию, что решил называть произвольную последовательность фибоначчиеватой, если

    1. последовательность состоит хотя бы из двух элементов;
    2. f0 и f1 произвольные;
    3. fn + 2 = fn + 1 + fn при всех n ≥ 0.

    Вам дана последовательность целых чисел a1, a2, ..., an. Вам требуется переставить элементы последовательности таким образом, чтобы как можно более длинный её префикс был фибоначчиеватой последовательностью.

    Входные данные

    В первой строке входных данных записано единственное число n (2 ≤ n ≤ 1000) — длина последовательности ai.

    Во второй строке записаны n целых чисел a1, a2, ..., an (|ai| ≤ 109).

    Выходные данные

    Выведите количество элементов в самом длинном возможном фибоначчиеватом префиксе после перестановки элементов.

    Примечание

    В первом примере, если переставить элементы исходной последовательности следующим образом  - 1, 2, 1, то вся последовательность ai будет фибоначчиеватой.

    Во втором примере оптимальным способом переставить элементы является , , , , 28.

    G. Яш и деревья

    битмаски математика поиск в глубину и подобное Структуры данных теория чисел *2800

    Яш любит играть с деревьями, особенно если в этой игре замешаны простые числа. На его 20-й день рождения ему подарили корневое дерево, состоящее из n вершин, на котором он должен теперь отвечать на запросы. Услышав про деревья и простые числа, Яш так переполнился восхищением, что отвечать на запросы придётся теперь вам. Корнем дерева является вершина с номером 1. В каждой вершине записано некоторое целое число ai. Дополнительно нам дано целое число m.

    Поступают запросы двух типов:

    1. Для данной вершины v и целого числа x — увеличить все ai в поддереве v на x.
    2. Для данной вершины v — найти количество таких простых чисел p, меньших m, что найдётся вершина u в поддереве вершины v и целое число k, такие что au = p + m·k.
    Входные данные

    В первой строке входных данных записаны целые числа n и m (1 ≤ n ≤ 100 000, 1 ≤ m ≤ 1000) — количество вершин в дереве и значение m, используемое в запросах, соответственно.

    Во второй строке записаны n целых чисел ai (0 ≤ ai ≤ 109) — изначальные значения, записанные в вершинах дерева.

    Далее следует n - 1 строка, описывающая дерево. В каждой из них записаны два целых числа ui и vi (1 ≤ ui, vi ≤ n) — индексы вершин, соединённых i-м ребром.

    В следующей строке записано число q (1 ≤ q ≤ 100 000) — количество запросов к дереву, которые требуется обработать.

    В каждой из последних q строк записано 1 v x или 2 v (1 ≤ v ≤ n, 0 ≤ x ≤ 109), которые определяют запрос первого или второго типа соответственно. Гарантируется, что будет хотя бы один запрос второго типа.

    Выходные данные

    Для каждого запроса второго типа выведите количество подходящих простых чисел.

    A. Номера домов

    *особая задача Конструктив математика *1100

    Главная улица в Берляндии представляет собой прямую, вдоль которой построены n домов (n — чётное число). Дома расположены с обеих сторон улицы. Дома с нечётными номерами находятся с одной стороны улицы и нумеруются от 1 до n - 1 в порядке от начала улицы к её концу (на картинке слева направо). Дома с чётными номерами находятся с другой стороны улицы и нумеруются от 2 до n в порядке от конца улицы к её началу (на картинке справа налево). Соответствующие дома с чётными и нечётными номерами находятся строго друг напротив друга, то есть напротив дома номер 1 находится дом номер n, напротив дома номер 3 находится дом номер n - 2, напротив дома номер 5 находится дом номер n - 4 и так далее.

    Васе необходимо как можно скорее добраться до дома номер a. Он заезжает с начала улицы и двигается на автомобиле по ней до дома номер a. Чтобы доехать от начала улицы до домов с номерами 1 и n, он тратит ровно 1 секунду. На то, чтобы проехать расстояние между двумя соседними домами, он также тратит ровно одну секунду. Вася может припарковаться с любой стороны дороги, поэтому расстояние от начала улицы до домов, стоящих друг напротив друга, следует считать одинаковым.

    Перед вами стоит задача: найти минимальное время, по истечении которого Вася сможет добраться до дома с номером a.

    Входные данные

    В первой строке входных данных содержатся два целых числа n и a (1 ≤ a ≤ n ≤ 100 000) — количество домов на улице и номер дома, до которого нужно доехать Васе, соответственно. Гарантируется, что число n чётно.

    Выходные данные

    Выведите единственное целое число — минимальное время, за которое Вася сможет добраться от начала улицы до дома с номером a.

    Примечание

    В первом примере на улице всего четыре дома, по два с каждой стороны. Дом номер 2 будет последним по правую руку движения Васи.

    Второй пример соответствует картинке с n = 8. Дом номер 5 — предпоследний по левой (относительно Васи) стороне дороги.

    C. Медвежонок и многочлены

    математика реализация хэши *2200

    У полярного медвежонка Лимака мало игрушек, поэтому он постоянно играет с многочленами (полиномами).

    Он считает многочлен правильным, если тот имеет степень n и все его коэффициенты являются целыми числами не превосходящими k по абсолютному значению. Формально, пусть a0, a1, ..., an это коэффициенты многочлена . Тогда многочлен P(x) является правильным если выполнены следующие условия:

    • ai является целым числом для всех i от 0 до n;
    • |ai| ≤ k для всех i от 0 до n;
    • an ≠ 0.

    Лимаку недавно подарили правильный многочлен P с коэффициентами a0, a1, a2, ..., an. Он обратил внимание, что P(2) ≠ 0 и теперь хочет это исправить. Лимак хочет изменить ровно один коэффициент многочлена P, так чтобы получить правильный многочлен Q степени n, такой что Q(2) = 0. Вычислите, сколькими способами он может это сделать. Два способа следует считать различными, если коэффициенты полученных многочленов различаются.

    Входные данные

    В первой строке входных данных записаны целые числа n и k (1 ≤ n ≤ 200 000, 1 ≤ k ≤ 109) — степень многочлена и ограничение на абсолютное значение его коэффициентов.

    Во втором строке записано n + 1 целое число a0, a1, ..., an (|ai| ≤ k, an ≠ 0) — коэффициенты правильного многочлена . Гарантируется, что P(2) ≠ 0.

    Выходные данные

    Выведите количество способов изменить ровно один коэффициент многочлена P, так чтобы получить правильный многочлен Q, для которого Q(2) = 0.

    Примечание

    В первом примере дан многочлен P(x) = 10 - 9x - 3x2 + 5x3.

    Существуют три способа изменить коэффициенты подходящим образом:

    1. Установить a0 =  - 10, так чтобы Q(x) =  - 10 - 9x - 3x2 + 5x3. Действительно, Q(2) =  - 10 - 18 - 12 + 40 = 0.
    2. Поменять a2 =  - 8. Тогда Q(x) = 10 - 9x - 8x2 + 5x3 и Q(2) = 10 - 18 - 32 + 40 = 0.
    3. Последний способ — сделать a1 =  - 19. Тогда Q(x) = 10 - 19x - 3x2 + 5x3 и Q(2) = 10 - 38 - 12 + 40 = 0.

    Во втором примере дан тот же самый многочлен, но значение k равно 12 вместо 109. Первые два способа по прежнему работает, а в третьем получается |a1| > k и соответствующий Q не является правильным. Таким образом, ответ для этого примера равен 2.

    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).

    Выходные данные

    Выведите искомое число.

    E. Простой отрезок

    *особая задача математика Перебор теория чисел *1800

    Простое число это такое число, у которого ровно два различных натуральных делителя. Например, числа 2, 3, 17, 97 — простые, а числа 1, 10, 120 — нет.

    Для заданного числа n найдите наиболее короткий отрезок чисел [a, b] такой, что a ≤ n ≤ b, а числа a и b — простые.

    Входные данные

    В единственной строке входных данных задано целое число n (2 ≤ n ≤ 10000).

    Выходные данные

    Выведите пару искомых чисел a и b через пробел.

    D. Маленький Артёмка и случайные величины

    дп математика реализация Теория вероятностей *2400

    Маленький Артёмка решил изучить теорию вероятностей. Он нашёл отличный задачник и прорешал его почти полностью. Однако есть задача, с которой он никак не может справиться, поэтому просит вас помочь ему.

    Имеются два игральных кубика, на которых при броске выпадают целочисленные значения от 1 до n. Для каждого кубика каждое значение выпадает с некоторой фиксированной вероятностью (разумеется, сумма этих вероятностей равна 1), при этом для разных кубиков эти вероятности могут отличаться.

    Оба кубика бросаются одновременно, после чего вычисляются значения max(a, b) и min(a, b), где a равно значению, выпавшему на первом кубике, а b равно значению, выпавшему на втором кубике. Вам неизвестны вероятности выпадения конкретных значений на кубиках, но вы знаете для каждого x, с какой вероятностью max(a, b) будет равно x и с какой вероятностью min(a, b) будет равно x. Восстановите любое корректное распределение вероятностей для величин a и b. Гарантируется, что хотя бы одно подходящее распределение существует.

    Входные данные

    Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 100 000) — количество возможных значений на обоих кубиках.

    Во второй строке записан массив из n вещественных чисел с не более чем восемью цифрами после десятичной точки  — распределение вероятности для величины max(a, b), то есть i-е из этих числе равно вероятности того, что max(ab) = i. Гарантируется, что сумма чисел в массиве равна 1. В третей строке записано распределение вероятности для min(a, b) в аналогичном формате.

    Выходные данные

    Выведите два описания распределений вероятности для величины a (первый кубик) на первой строке и для величины b (второй кубик) на второй строке.

    Ваш ответ будет считаться правильным, если вероятность каждого значения max(a, b) и min(a, b), вычисленная по предоставленным вами распределениям, будет отличаться от указанных во входных данных не более чем на 10 - 6 по абсолютному значению. Вероятности должны быть неотрицательными вещественными числами, сумма вероятностей внутри одного распределения должна отличаться от 1 не более чем на 10 - 6.

    E. Медвежонок и уничтожение поддеревьев

    Деревья дп математика Теория вероятностей *2700

    Лимак — это маленький медвежонок гризли. Однажды он нападёт на страну оленей, но пока что он занимается уничтожением деревьев в компьютерной ролевой игре. Лимак начинает с дерева, состоящего из одной вершины. Эта вершина имеет индекс 1 и является корнем дерева.

    Время от времени игра выбирает некоторое поддерево, и Лимак атакует его. Когда Лимак атакует поддерево, он разрушает каждое его ребро независимо с вероятностью . Штрафом Лимака после атаки на поддерево является целое число, равное высоте поддерева после атаки. Высотой поддерева называется самый длинный простой путь, начинающийся в корне поддерева и заканчивающийся в какой-нибудь вершине поддерева.

    Вам требуется обрабатывать запросы двух типов.

    • 1 v обозначает запрос первого типа. В дерево добавляется новая вершина, и её родителем является вершина v. Вершина получает минимальный свободный индекс (таким образом, вершины получают номера 2, 3, ...).
    • 2 v обозначает запрос второго типа. Предположим, Лимак атакует поддерево вершины v. Чему в таком случае равно математическое ожидание штрафа, который он получит?

    В запросах второго типа только предполагается, что Лимак атакует поддерево, но на самом деле никакие рёбра не разрушаются, и этот запрос никак не влияет на последующие.

    Входные данные

    В первой строке входных данных записано целое число q (1 ≤ q ≤ 500 000) — количество запросов.

    Затем следуют q строк. В i-й из них записаны два целых числа typei и vi (1 ≤ typei ≤ 2). Если typei = 1, то vi означает предка новой вершины, а если typei = 2, то требуется вывести ответ для поддерева, корнем которого является vi.

    Гарантируется, что будет хотя бы один запрос второго типа, то есть выходные данные не будут пустыми.

    Также гарантируется, что к моменту поступления i-го запроса вершина vi уже существует.

    Выходные данные

    Для каждого запроса второго типа выведите одно вещественное число — математическое ожидание штрафа Лимака после атаки на соответствующее поддерево. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

    Примечание

    На рисунке ниже представлен первый пример. Красными кружочками обозначены запросы второго типа.

    F. Медведи и сок

    meet-in-the-middle дп математика *2900

    В гостинице поселились n медведей, но там есть только p спальных мест. Медведи планируют закатить большую вечеринку на несколько ночей (и дней).

    Медведи любят пить сок. Они не любят вино, но не могут отличить его от сока ни по вкусу, ни по запаху.

    Медведь ложится спать, только если он выпил вина, при этом он уходит спать через несколько часов после этого. Он проснётся только спустя много дней, когда вечеринка уже будет окончена.

    Хозяин гостиницы Радевуш хочет предложить медведям несколько бочек с напитками. При этом ровно одна бочка будет содержать вино, а в остальных будет содержаться сок. После этого Радевуш предложит медведям определить, в какой бочке находится вино.

    Каждую ночь происходит следующее (ровно в таком порядке):

    1. Каждый медведь выбирает какой-то (возможно, пустой) набор бочек. Одна и та же бочка может быть выбрана несколькими медведями.
    2. Каждый медведь выпивает по одному стакану из каждой бочки, которую он выбрал.
    3. Все медведи, пившие вино, отправляются спать (то есть те медведи, у которых в множестве выбранных бочек была бочка с вином). Они просыпаются спустя много дней, когда вся вечеринка уже окончена. Если свободных спальных мест недостаточно, то медведи автоматически проигрывают.

    В конце вечеринки, если однозначно можно определить, в какой бочке находится вино, и хотя бы один медведь не спит, то медведи выигрывают (если, конечно, они не проиграли раньше, потому что кому-то не хватило спальных мест).

    Радевуш хотел бы, чтобы медведи выиграли. Он рассматривает q сценариев игры. В i-м сценарии вечеринка продолжается i ночей. Далее пусть Ri обозначает максимальное количество бочек, для которого медведи точно смогут выиграть, если будут действовать оптимально. Обозначим . Вам требуется вычислить , где означает побитовое исключающее или (также известное как XOR).

    Обратите внимание, что одна и та же бочка может быть выбрана несколькими медведями и все они одновременно пойдут спать, если она содержит вино.

    Входные данные

    В единственной строке входных данных записаны три целых числа n, p и q (1 ≤ n ≤ 109, 1 ≤ p ≤ 130, 1 ≤ q ≤ 2 000 000) — количество медведей, количество спальных мест и количество сценариев соответственно.

    Выходные данные

    Выведите единственное целое число, равное .

    Примечание

    В первом примере в гостинице находятся 5 медведей и есть только 1 спальное место. Имеем R1 = 6, R2 = 11, R3 = 16, так что ответ равен . Проанализируем стратегию для сценария с 2 днями. Всего есть R2 = 11 бочек, и 10 из них содержат сок.

    • В первую ночь i-й медведь выбирает бочку i.
      • Если одна из 5 бочек содержит вино, то соответствующий медведь отправится спать. Таким образом, медведи выигрывают, потому они теперь знают где находится вино и есть хотя бы один не спящий медведь.
      • Если никто из 5 медведей не ушёл спать, то на вторую ночь i-й медведь пьёт из бочки 5 + i.
        • Если хотя бы одна из бочек 6 – 10 содержит вино, то соответствующий медведь отправится спать, и медведи победят.
        • Если никто из медведей опять не уйдёт спать, то они точно будут знать, что вино находится в бочке 11.

    Во втором примере есть только один медведь. Он не может ничего пить (то есть он выбирает пустое множество бочек каждую ночь), потому что если он уйдёт спать, то медведи сразу проигрывают. Таким образом, для любого числа дней Ri = 1 и ответ равен .

    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.

    F. Ароматные эксперименты

    Комбинаторика математика теория чисел *2500

    Чтобы отпраздновать установление мира, Бесси, Элси и Фермер Джон собираются посадить несколько грядок с цветами, что позволит им дополнительно украсить роскошные луга Бовинии. Как известно любому садоводу, на каждой грядке необходимо посадить одинаковые цветы в одинаковом порядке. Изначально у Фермера Джона есть n различных типов цветов, ai цветов типа i.

    В каждый из q последующих дней Фермер Джон получит некоторое количество цветов нового типа. В день j он получит cj цветов одного типа, отличного от всех типов, имевшихся у него до этого.

    Поскольку Фермер Джон знает баланс между экстравагантностью и минимализмом, он хочет посадить цветы ровно k различных типов. Кроме того, если какой-то тип был выбран для использования, то Джон хочет посадить все цветы этого типа. Дополнительно: цветы будут посажены на несколько грядок таким образом, что для каждого из k выбранных типов, количество цветов этого типа на каждой грядке одинаково. Поскольку Джон — фанат всеобщего равенства, он хочет, чтобы количество грядок при этом было максимально.

    Для каждого из q дней Фермер Джон хотел бы знать сумму по всем возможным способам выбрать k типов, максимального количества грядок, которое он может сделать для этого подмножества типов. Поскольку это число может быть достаточно большим, выведите его по модулю 109 + 7.

    Входные данные

    В первой строке входных данных записаны три целых числа n, k и q (1 ≤ k ≤ n ≤ 100 000, 1 ≤ q ≤ 100 000).

    В i-й из следующих n строк записано число ai (1 ≤ ai ≤ 1 000 000) — количество цветов типа i, изначально имеющееся у Фермера Джона.

    В j-й из следующих q строк записано число cj (1 ≤ cj ≤ 1 000 000) — количество цветов нового типа, которые Фермер Джон получает в день j.

    Выходные данные

    Для каждого из q дней выведите сумму максимально возможного количества грядок по всем способам выбрать ровно k типов цветов. Ответ выводите по модулю 109 + 7.

    Примечание

    В первом примере k = 3. После первого дня у Фермера Джона есть (4, 6, 9, 8) цветов разных типов.

    Если выбрать (4, 6, 8), то можно разбить их на 2 грядки по 2, 3, 4 цветка соответствующего типа на каждой.

    Если выбрать (4, 6, 9), (4, 9, 8) или (6, 9, 8), то можно будет сделать только одну грядку. Таким образом, сумма по всем подмножествам размера k = 3 равняется 2 + 1 + 1 + 1 = 5.

    После второго дня у Фермера Джона (4, 6, 9, 8, 6) цветов. Сумма количества грядок по всем способам равняется 1 + 2 + 2 + 1 + 1 + 2 + 2 + 3 + 1 + 1 = 16.

    Во втором примере k = 1. Имея x цветов одного единственного типа, Фермер Джон всегда может разбить их на x грядок. Таким образом, ответы 6 + 5 + 4 + 3 + 2 = 20 для первого дня и 6 + 5 + 4 + 3 + 2 + 1 = 21 для второго.

    A. Гарри Поттер и три заклинания

    математика реализация *1800

    Давным-давно (наверное, еще в первой книге) великий алхимик, создатель философского камня Николас Фламель научил Гарри Поттера трем полезным заклинаниям. Первое из них позволяет превратить a граммов песка в b граммов свинца, второе — c граммов свинца в d граммов золота и третье — e граммов золота в f граммов песка. Когда Гарри рассказал об этих заклинаниях своим друзьям, Рон Уизли был в восторге: ведь если получится превращать песок в свинец, свинец в золото, часть золота — снова в песок и так далее, то можно будет, начиная с небольшого количества песка, получить огромное количество золота! Даже бесконечное количество золота! Гермиона Грейнджер, напротив, отнеслась к этой идее скептически. Она утверждает, что согласно закону сохранения материи невозможно получить бесконечное количество материи даже при помощи магии. Наоборот, количество материи при превращениях может даже уменьшаться, переходя в магическую энергию. Несмотря на то, что аргументы Гермионы выглядят убедительно, Рон не собирается ей верить. По его мнению, Гермиона придумала свой закон сохранения материи только для того, чтобы Гарри с Роном перестали заниматься ерундой, а лучше шли учить уроки. Поэтому Рон уже набрал некоторое количество песка для экспериментов и, кажется, ссоры между друзьями не избежать...

    Помогите Гарри определить, кто из его друзей прав, и все-таки предотвратить ссору. Для этого вам придется выяснить, можно ли из некоторого конечного количества песка получить количество золота, большее любого наперед заданного числа.

    Входные данные

    В первой строке заданы 6 целых чисел a, b, c, d, e, f (0 ≤ a, b, c, d, e, f ≤ 1000).

    Выходные данные

    Выведите «Ron», если имея некоторое конечное количество песка (и не имея вообще золота и свинца), возможно получить сколь угодно большое количество золота, т.е. прав Рон. В противном случае выведите «Hermione».

    Примечание

    Разберем первый пример. Начнем с 500 граммов песка. Применяя 5 раз первое заклинание, превратим их в 1000 граммов свинца. Затем 4 раза применим второе заклинание и получим 600 граммов золота. Из них выделим 400 и превратим их снова в песок. Получим 500 граммов песка и 200 граммов золота. Применяя все те же операции к 500 граммам песка повторно, можно будет каждый раз получать дополнительные 200 граммов золота. Таким образом можно получить 200, 400, 600 и т.д. граммов золота, т.е. начиная с конечного количества песка (500 граммов) можно получить количество золото, большее любого наперед заданного числа.

    В четвертом примере, применяя заклинания, невозможно получить ни песок, ни свинец, ни золото.

    В пятом примере сколь угодно большое количество золота можно получить, применяя только второе заклинание, которое позволяет получать 1 грамм золота из ничего. Отметим, что при наличии такого второго заклинания первое и третье вообще не влияют на ответ.

    Более интересный седьмой пример. В нем тоже можно начать с нулевого количества песка. С помощью третьего заклинания можно получать песок из ничего. Получим так 10000 граммов песка. Из них, применяя 100 раз первое заклинание, получим 100 граммов свинца, а из них — 1 грамм золота. Нам удалось получить 1 грамм золота, начиная с нулевого количества песка! Ясно, что таким образом можно получить сколь угодно большое количество золота.

    A. Хранители

    геометрия математика Структуры данных *1400

    Хранители в опасности, и Доктор Манхэттен со своим другом Дэниелом Драйбергом должны срочно их предупредить. Всего в команде хранителей n человек, i-й из которых находится в точке плоскости с координатами (xi, yi).

    Как всем известно, доктор Манхэттен вычисляет расстояние между двумя хранителями i и j по формуле |xi - xj| + |yi - yj|. Дэниел, как обычный человек, считает, что расстояние равно .

    Сейчас успех операции зависит от того, сколько существует пар (i, j) (1 ≤ i < j ≤ n), таких что расстояние между хранителем i и хранителем j, вычисленное Доктором Манхэттеном, равняется расстоянию между ними, вычисленному Дэниелом. Вычислить эту величину попросили именно вас.

    Входные данные

    В первой строке входных данных записано число n (1 ≤ n ≤ 200 000) — количество хранителей.

    В каждой из следующих n строк записаны два целых числа xi и yi (|xi|, |yi| ≤ 109).

    Некоторые позиции могут совпадать.

    Выходные данные

    Выведите количество пар хранителей, таких что расстояние между ними, вычисленное доктором Манхэттеном, равно расстоянию, вычисленному Дэниелом.

    Примечание

    В первом примере расстояние между хранителем 1 и хранителем 2 равняется |1 - 7| + |1 - 5| = 10 в понимании Доктора Манхэттена и в понимании Дэниела. Для пар (1, 1), (1, 5) и (7, 5), (1, 5) расстояния, вычисленные Доктором Манхэттеном и Дэниелом, совпадают.

    A. Джойстики

    дп жадные алгоритмы математика реализация *1100

    Друзья собрались поиграть в приставку. У них есть два джойстика и только одна зарядка. Изначально первый джойстик заряжен на a1 процентов, а второй на a2 процентов. Подключать джойстик к зарядке можно только вначале каждой минуты. За минуту игры джойстик без зарядки разряжается на 2 процента, а с зарядкой заряжается на 1 процент.

    Игра продолжается пока заряд обоих джойстиков строго положителен. Таким образом, если в начале очередной минуты у какого-либо джойстика остаётся 1 процент заряда, то его необходимо подключить к зарядке или игра будет остановлена. Если у какого-то джойстика остаётся 0 процентов зарядки, то игра останавливается.

    Определите максимальное время в минутах, которое может продлиться игра. Делать паузы в игре нельзя, то есть каждую минуту оба джойстика обязательно должны быть в игре. В силу особенности конструкции, каждый из джойстиков может быть заряжен более чем на 100 процентов.

    Входные данные

    В первой строке входных данных содержатся два целых положительных числа a1, a2 (1 ≤ a1, a2 ≤ 100) — начальный процент заряда первого и второго джойстика соответственно.

    Выходные данные

    Выведите единственное целое число — максимальное количество минут, которое может продолжаться игра. Игра продолжается пока какой-либо из джойстиков не разрядится.

    Примечание

    В первом примере игра может продолжаться 6 минут, например, при такой последовательности действий:

    • в первую минуту подключаем к зарядке первый джойстик и начинаем игру, к концу первой минуты первый джойстик будет заряжен на 4%, а второй — на 3%;
    • не меняя зарядку играем еще минуту, к концу второй минуты первый джойстик будет заряжен на 5%, а второй — на 1%;
    • перед третьей минутой переключаем зарядку на второй джойстик, после нее первый будет заряжен на 3%, второй — на 2%;
    • не меняя зарядку играем еще минуту, к концу второй минуты первый джойстик будет заряжен на 1%, а второй — на 3%;
    • перед пятой минутой переключаем зарядку на первый джойстик, после нее первый будет заряжен на 2%, второй — на 1%;
    • перед шестой минутой переключаем зарядку на второй джойстик, после нее первый будет заряжен на 0%, второй — на 2%.

    Так как первый джойстик полностью разрядился, продолжать игру далее нельзя.

    A. Габриел и гусеница

    математика реализация *1400

    Ученик 9-ого класса Габриел, прогуливаясь после уроков по лесу, заметил на одном из деревьев гусеницу, которая находилась на высоте h1 см от земли. На высоте h2 см (h2 > h1), на том же дереве, висело яблоко, к которому ползла гусеница.

    Габриел, будучи любопытным мальчиком, решил узнать, когда гусеница наконец доберётся до плода. Он заметил, что в дневное время гусеница за час поднимается на a см, а ночью за час сползает на b см.

    Через сколько дней нужно вернуться Габриелу в лес, чтобы увидеть как гусеница забирается на яблоко, если день у гусеницы начинается в 10 утра, а заканчивается в 22 вечера. Уроки у Габриела заканчиваются в 14 часов дня. Можно считать, что Габриел заметил гусеницу непосредственно в 14 часов дня.

    Обратите внимание, что лес в котором прогуливался Габриел не простой, а волшебный. Поэтому гусеница может сползти по стволу под землю, а затем подняться к яблоку.

    Входные данные

    В первой строке находится пара целых чисел h1, h2 (1 ≤ h1 < h2 ≤ 105) — высота положения гусеницы и яблока в сантиметрах.

    Во второй строке находится пара целых чисел a, b (1 ≤ a, b ≤ 105) — расстояние, на которое гусеница взбирается днём и сползает ночью, в сантиметрах за час.

    Выходные данные

    Выведите единственное целое число k — количество дней, через которое Габриелу нужно будет вернуться в лес, чтобы увидеть гусеницу, забирающуюся на яблоко.

    Если гусеница никогда не сможет забраться на яблоко, то выведите  - 1.

    Примечание

    В первом примере в 22 часа того же дня гусеница оказывается на высоте 26. К 10 утра следующего дня она сползает до высоты 14. И наконец в 18 часов того же дня она добирается до яблока.

    Обратите внимание, в последнем примере гусеница в первую ночь сползает под землю, но на следующий день съедает яблоко.

    F. Муравьи на круге

    Конструктив математика *2800

    n муравьёв находятся на круге длины m. Каждый муравей может двигаться со скоростью в одну единицу длины в единицу времени. Изначально i-й муравей находится в позиции si и смотрит в направлении di (L или R). Позиции пронумерованы в порядке против часовой стрелки, начиная с некоторой точки. Изначальные положения всех муравьёв различны.

    Муравьи двигаются одновременно. Два муравья при столкновении меняют напраление своего движения на противоположное. Обратите внимание, что возможна ситуация, когда половину единицы времени муравей движется в одном направлении, затем сталкивается с другим муравьём и двигается в противоположном направлении в течении оставшейся половины единицы времени.

    Определите положения всех муравьёв спустя t единиц времени.

    Входные данные

    В первой строке находятся три целых числа n, m и t (2 ≤ n ≤ 3·105, 2 ≤ m ≤ 109, 0 ≤ t ≤ 1018) — количество муравьёв, длина круга и количество единиц времени.

    В каждой из следующих n строк находится целое целое число si и символ di (1 ≤ si ≤ m, di равно L либо R) — положение и направление движения i-го муравья в начале. Направления L и R соответствуют направлениям по и против часов стрелки, соответственно.

    Гарантируется, что все позиции si различны.

    Выходные данные

    Выведите n целых чисел xj — положение j-го муравья по прошествии t единиц времени. Муравьи пронумерованы от 1 до n в порядке их появления во входных данных.

    G. Ход простым

    Комбинаторика математика теория чисел *3100

    У кошечки Сони есть массив, состоящий из n целых положительных чисел. У этого массива есть 2n подпоследовательности. Для каждой подпоследовательности Соня вычисляет минимальное количество действий, которые необходимо совершить, чтобы сделать все элементы равными. Возможны следующие действия:

    • Выбрать один элемент подпоследовательности и умножить его на простое число;
    • Выбрать какой-нибудь элемент подпоследовательности и поделить его на простое число. При этом данный элемент должен обязательно делиться на выбранное простое число.

    Чему равна сумма минимального количества необходимых операций по всем 2n подпоследовательностям? Найдите и выведите это значение по модулю 109 + 7.

    Входные данные

    В первой строке входных данных записано единственное число n (1 ≤ n ≤ 300 000) — длина массива.

    Во второй строке записаны n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 300 000) — элементы массива.

    Выходные данные

    Выведите сумму минимального количества операций, необходимых, чтобы уравнять все элементы подпоследовательности по всем подпоследовательностям данного массива. Значение выводите по модулю 109 + 7.

    Примечание

    В первом примере возможны 8 различных подпоследовательностей: (60, 60, 40), (60, 60), (60, 40), (60, 40), (60), (60), (40) и () (пустая подпоследовательность).

    Все элементы подпоследовательности (60, 60, 40) можно сделать одинаковыми за два действия: сперва разделить 40 на 2 и получить 20, а затем умножить 20 на 3 и получить 60. За меньшее количество действий сделать все элементы равными невозможно.

    Две подпоследовательности равны (60, 40), и для каждой из них придётся также сделать не меньше 2 операций.

    В каждой из оставшихся подпоследовательностей все элементы и так уже равны, поэтому на них мы потратим 0 операций. Таким образом, ответ равен 2 + 2 + 2 = 6.

    A. Круглый дом

    математика реализация *1000

    Вася живёт в круглом доме, подъезды которого последовательно пронумерованы целыми числами от 1 до n. Причём подъезды номер n и номер 1 являются соседними.

    Сегодня Васе стало скучно, и он решил погулять во дворе. Вася живёт в подъезде номер a, и он решил, что его прогулка будет заключаться в движении вокруг дома в порядке возрастания номеров подъездов на b подъездов (в таком порядке после подъезда номер n следует подъезд номер 1). Отрицательное значение b соответствует движению в порядке убывания номеров подъездов на |b| подъездов (в таком порядке после подъезда номер 1 следует подъезд номер n). Если же b = 0, то Вася предпочитает гулять рядом со своим подъездом.

    Иллюстрация для n = 6, a = 2, b =  - 5.

    Помогите Васе определить номер подъезда, возле которого он окажется в конце своей прогулки.

    Входные данные

    В единственной строке входного файла через пробел заданы три целых числа n, a и b (1 ≤ n ≤ 100, 1 ≤ a ≤ n,  - 100 ≤ b ≤ 100) — количество подъездов в доме Васи, номер его подъезда и длина его прогулки соответственно.

    Выходные данные

    Выведите единственное целое число k (1 ≤ k ≤ n) — номер подъезда, возле которого Вася окажется в конце своей прогулки.

    Примечание

    Первый пример проиллюстрирован рисунком из условия.

    D. Велосипедная гонка

    геометрия математика реализация *1500

    Мария участвует в велосипедной гонке.

    Гоночная трасса проходит по берегу озера Люцерн, точно повторяя его контур. Как известно, берег озера состоит только из прямых участков, направленных на север, юг, восток или запад.

    Введём систему координат, направив ось Ox с запада на восток, а ось Oy — с юга на север. В качестве позиции старта гонки выбирается самая южная (а если таких несколько, то самая западная из них) точка трассы. Участники начинают гонку, двигаясь на север. На всех прямых участках трассы участники едут в одном из четырёх направлений (север, юг, восток или запад) и меняют направление движения только на поворотах между прямыми участками. Участники, конечно, никогда не поворачивают назад, то есть не меняют направление движения с северного на южное или с восточного на западное (или наоборот).

    Мария ещё юна, поэтому она чувствует себя уверенно не на всех поворотах. А именно, Мария чувствует себя неуверенно, если при неудачном или несвоевременном повороте она попадёт в воду. Иными словами, Мария считает поворот опасным, если при его игнорировании она сразу попадает в воду.

    Помогите Маше подготовиться к соревнованию — определите количество опасных поворотов на трассе.

    Входные данные

    В первой строке входных данных находится целое число n (4 ≤ n ≤ 1000) — количество прямых участков трассы.

    В следующих (n + 1)-й строке находятся пары целых чисел (xi, yi) ( - 10 000 ≤ xi, yi ≤ 10 000). Первая из этих точек является позицией старта. i-й прямой участок трассы начинается в точке (xi, yi) и заканчивается в точке (xi + 1, yi + 1).

    Гарантируется, что:

    • первый прямой участок направлен на север;
    • самая южная (а если таких несколько, то самая западная из них) точка трассы — первая точка;
    • последняя точка совпадает с первой (то есть с позицией старта);
    • любая пара прямых участков трассы не имеет общих точек (за исключением соседних, имеющих ровно одну общую точку);
    • никакая пара точек (кроме первой и последней) не совпадает;
    • никакие два соседних прямых участка не направлены в одну и ту же сторону или в противоположные стороны.
    Выходные данные

    Выведите единственное целое число — количество опасных поворотов на трассе.

    Примечание

    Первый пример соответствует картинке:

    На картинке видно, что оказаться в воде при неудачном стечении обстоятельств можно только на повороте в точке (1, 1). Таким образом, ответ равен 1.

    D. Петя и его друзья

    Конструктив математика теория чисел *1700

    У маленького Пети скоро день рождения. В связи с таким замечательным событием, друзья Пети решили подарить ему конфеты. Всего друзей у Пети ровно n.

    Напомним определение наибольшего общего делителя: НОД(a1, ..., ak) = d, где d — такое максимальное натуральное число, что каждое ai (1 ≤ i ≤ k) делится нацело на d. При этом мы считаем, что все ai больше нуля.

    Друзья, зная, что Петя серьезно увлекается программированием, заранее договорились, что 1-ый друг подарит a1 конфет, 2-ой друг — a2 конфет, ..., n-ый друг — an конфет. При этом, они хотят, чтобы для любых i и j (1 ≤ i, j ≤ n) НОД(ai, aj) был не равен 1. Но в то же время, они хотят, чтобы НОД(a1, a2, ..., an) = 1. Еще одно условие: все ai должны быть различны.

    Помогите друзьям выбрать подходящие числа a1, ..., an.

    Входные данные

    В первой строке записано целое число n (2 ≤ n ≤ 50).

    Выходные данные

    Если ответа не существует, выведите "-1" без кавычек. Иначе выведите набор из n различных натуральных чисел — a1, a2, ..., an, по одному числу в строке. Каждое из чисел должно состоять не более чем из 100 цифр, и не должно содержать ведущих нулей. Если решений несколько, выведите любое.

    Не забудьте, что все условия должны выполняться:

    • Для любых i и j (1 ≤ i, j ≤ n): НОД(ai, aj) ≠ 1
    • НОД(a1, a2, ..., an) = 1
    • Для любых i и j (1 ≤ i, j ≤ n, i ≠ j): ai ≠ aj

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

    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 элементов.

    Если существует несколько решений, выведите любое.

    E. Различные подмножества по всем кортежам

    Комбинаторика математика *2300

    Для последовательности a из n целых чисел от 1 до m, включительно, введём обозначение f(a) — количество различных подпоследовательностей a (включая пустую подпоследовательность).

    Вам заданы два положительных целых числа n и m. Пусть S это множество всех последовательностей длины n с элементами от 1 до m. Найдите значение суммы f(a) по всем a из S по модулю 109 + 7.

    Входные данные

    В единственной строке находится пара целых чисел n и m (1 ≤ n, m ≤ 106) — количество элементов в массивах и верхняя граница для элементов.

    Выходные данные

    Выведите одно целое число c — искомую сумму по модулю 109 + 7.

    A. Азартный Ним

    битмаски математика матрицы Теория вероятностей *2400

    Кратко напомним правила игры Ним. Имеется n кучек камней, при этом в кучке i изначально лежит ai камней. Два игрока по очереди выбирают непустую кучку и берут из неё произвольное положительное количество камней. Проигрывает тот, кто не может сделать ход.

    Петя и Вася давно устали от обычного Нима, поэтому придумали свою версию игры и назвали её «Азартный Ним». У них есть n двусторонних карточек, на одной стороне i-й карточки написано число ai, а на другой bi. Перед началом игры карты выкладываются на стол, при этом каждая карта независимо от других равновероятно кладётся одной из двух сторон вверх. Получается некоторая последовательность c1, c2, ..., cn, где ci равно ai или bi. После этого Петя и Вася делают n кучек камней (при этом в кучке номер i лежит ci камней) и играют в Ним. Петя ходит первым.

    Известно, что и Петя и Вася играют в Ним оптимально. Найдите вероятность победы Пети. Ответ выведите как несократимую дробь.

    Входные данные

    В первой строке входных данных записано целое число n (1 ≤ n ≤ 500 000) — количество карт в колоде.

    Каждая из последующих n строк содержит описание одной карты, состоящее из двух чисел ai и bi (0 ≤ ai, bi ≤ 1018).

    Выходные данные

    Выведите ответ в виде несократимой дроби p / q. Если вероятность победы Пети равна нулю, то выведите 0/1.

    C. Двоичная табличка

    битмаски бпф дп математика Перебор разделяй и властвуй *2600

    Дана таблица из n строк и m столбцов. В каждой ячейке таблицы записано число 0 или 1. За один ход разрешается выбрать произвольную строку или столбец и инвертировать все значения, то есть 0 заменить на 1, а 1 на 0. Какого минимального количества единиц в таблице можно добиться, выполняя данные действия?

    Входные данные

    В первой строке входных данных записаны два числа n и m (1 ≤ n ≤ 20, 1 ≤ m ≤ 100 000) — количество строк в таблице и количество столбцов соответственно.

    Следующие n строк описывают строки таблицы. Все они имеют длину m и состоят только из цифр «0» и «1».

    Выходные данные

    Выведите одно число — минимальное возможное количество единиц после выполнения произвольной последовательности ходов.

    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 строк содержат по одному сокращению. Каждое сокращение содержит не более девяти цифр.

    Выходные данные

    Для каждого сокращения, встречающегося во входных данных, выведите в том же порядке год, в который проходила соответствующая олимпиада.

    A. Ребус

    жадные алгоритмы Конструктив математика Разбор выражений *1800

    Вам дан ребус вида ? + ? - ? + ? = n, то есть состоящий из знаков вопроса, разделённых знаками «+» и «-», знака равенства и целого положительного числа n. Требуется заменить каждый из знаков вопроса на целое число от 1 до n так, чтобы равенство выполнялось.

    Входные данные

    Во входных данных содержится ребус. Гарантируется, что ребус состоит из не более чем 100 знаков вопроса, число n целое положительное и не превосходит 1 000 000, все знаки и числа разделены пробелом, знаки арифметических операций стоят только между двумя знаками вопроса.

    Выходные данные

    В первой строке выходных данных выведите «Possible» (без кавычек), если ребус имеет решение, и «Impossible» (без кавычек) в противном случае.

    Если решение ребуса существует, то во второй строке выведите ребус, в котором вопросики заменены на целые числа от 1 до n. Следуйте формату, используемому в примерах.

    A. Сложный НОД

    математика теория чисел *800

    Наибольший общий делитель НОД(a, b) двух положительных целых чисел a и b равняется самому большому целому числу, на которое без остатка делятся оба числа a и b. Известны эффективные алгоритмы для нахождения НОД(a, b), например, алгоритм Эвклида. Усложним требования и будем просить решить более сложную задачу — нужно найти НОД среди всех чисел от a до b включительно.

    Формально, найдите максимальное целое число, на которое без остатка делится каждое из чисел a, a + 1, a + 2, ..., b. Чтобы было бы ещё сложнее, разрешим a и b достигать числа гугол, 10100 — такие числа не помещаются даже в 64-битный тип целых чисел!

    Входные данные

    В единственной строке входных данных дано два числа a и b (1 ≤ a ≤ b ≤ 10100).

    Выходные данные

    Выведите одно число — НОД всех чисел от a до b включительно.

    F. Четыре делителя

    дп математика сортировки Структуры данных теория чисел *2400

    Если число a делится на число b, то b называется делителем числа a.

    К примеру, у числа 12 есть 6 положительных делителей. Это числа 1, 2, 3, 4, 6 и 12.

    Определим функцию D(n) — количество чисел от 1 до n (включительно), которые имеют ровно четыре положительных делителя.

    Между числами 1 и 10 только числа 6, 8 и 10 имеют четыре положительных делителя. Таким образом, D(10) = 3.

    Вам задано число n. Найдите значение D(n).

    Входные данные

    В единственной строке находится целое число n (1 ≤ n ≤ 1011) — параметр из условия задачи.

    Выходные данные

    Выведите единственное целое число c — количество чисел от 1 до n (включительно) с ровно четырьмя положительными делителями.

    A. Проливной дождь

    геометрия математика *1100

    Многие люди в Берляндии терпеть не могут дожди, но не вы. Дождь умиротворяет, приводит ваши мысли в порядок. За эти годы у вас сложилась славная традиция — каждый раз, когда идёт дождь, вы выходите на улицу и некоторое время молча стоите под ним, созерцая окружающий мир, наслаждаясь прохладой и влагой, размышляя о великих делах, которые вам предстоит сделать.

    В этот раз, впрочем, всё немного изменилось. Вы вышли на улицу c кружкой, наполненной вашим любимым напитком — водой. В какой-то момент, попивая воду, вы заметили, что этот процесс несколько затянулся — кружка никак не опустошалась из-за того, что всё время наполнялась дождём. Заинтересовавшись этим, вы решили составить формальную модель происходящего и, таким образом, узнать, а можно ли вообще выпить всю воду из кружки в такой ситуации.

    Итак, ваша кружка представляет собой цилиндр диаметром d сантиметров. Начальный уровень воды в ней составляет h сантиметров от дна.

    Вы пьёте из неё воду со скоростью v миллилитров в секунду. При этом дождь идёт с такой скоростью, что если бы вы не пили воду из кружки, то за секунду уровень воды в ней увеличивался бы на e сантиметров. Как потребление воды из кружки вами, так и ее пополнение дождем происходят равномерно и непрерывно.

    Ваша задача — найти время, по истечении которого кружка опустеет, или указать, что этого никогда не произойдёт. Гарантируется, что если возможно выпить всю воду, то это произойдёт не позднее, чем через 104 секунд.

    Напомним, что один миллилитр равен одному кубическому сантиметру.

    Входные данные

    В единственной строке находятся четыре целых числа d, h, v, e (1 ≤ d, h, v, e ≤ 104), где:

    • d — диаметр цилиндрической кружки,
    • h — начальный уровень воды в ней,
    • v — скорость того, как вы пьете воду из кружки в миллилитрах в секунду,
    • e — увеличение уровня воды в секунду за счет дождя, если бы вы не пили из кружки.
    Выходные данные

    Если кружку опустошить невозможно, выведите «NO» (без кавычек).

    Иначе выведите в первой строке «YES» (без кавычек), а во второй вещественное число — время в секундах, по истечении которого кружка опустеет. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 4. Гарантируется, что если ответ существует, то не превосходит 104.

    Примечание

    В первом примере вода наполняет стакан быстрее, чем вы пьёте из него.

    Во втором примере площадь дна равна , откуда можно сделать вывод, что вы опускаете уровень воды на в секунду. Вода же поднимается на 1 в секунду. Таким образом, вы опустошите чашку за секунд.

    A. Маленький Артёмка и Подарки

    математика *800

    Маленький Артёмка получил на день рождения n камней, которые он сразу захотел подарить Маше. Артёмка знает, что Маше важны не сами подарки, а факт их получения, поэтому он хочет дарить Маше камни как можно больше раз. При этом Маша помнит только последний подарок, поэтому расстроится, если Артёмка два раза подряд подарит ей одинаковое количество камней. Например, Артём может подарить Маше 3 камня, потом 1 камень, а затем ещё 3 камня, но не может подарить ей 3 камня два раза подряд.

    Сколько максимум подарков Маше сможет сделать Артёмка?

    Входные данные

    В единственной строке входных данных записано целое число n (1 ≤ n ≤ 109) — количество камней, полученных Артёмкой на день рождения.

    Выходные данные

    Выведите максимальное количество раз, которое Артёмка сможет подарить Маше камни.

    Примечание

    В первом примере единственный подарок, который можно сделать Маше, будет состоять из 1 камня.

    Во втором примере Артёмка может подарить Маше 1 или 2 камня, но подарить 1 камень два раза подряд нельзя.

    В третьем примере можно сначала подарить Маше 2 камня, а затем 1.

    В четвёртом примере можно сначала подарить Маше 1 камень, затем снова 2, а затем опять 1.

    A. Выходные

    жадные алгоритмы Конструктив математика Перебор *900

    На планете Марс год длится ровно n дней (високосных годов на Марсе не бывает). При этом недели у марсиан такие же, как у землян — 5 рабочих дней и затем 2 выходных.

    Перед вами стоит задача — определить минимально и максимально возможное количество выходных дней в году на Марсе.

    Входные данные

    В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 1 000 000) — количество дней в году на Марсе.

    Выходные данные

    Выведите два целых числа — минимально и максимально возможное количество выходных дней в году на Марсе.

    Примечание

    В первом тестовом примере год на Марсе состоит из 14 дней, а значит независимо от того, с какого дня начинается год, в нём в любом случае будет ровно 4 выходных.

    Во втором тестовом примере дней в году на Марсе всего 2, и они оба могут быть как рабочими днями, так и выходными.

    A. Бесконечная последовательность

    математика *1100

    Вася любит всё бесконечное. Сейчас он изучает свойства последовательности s, первым элементом которой является a (s1 = a), а разность между любыми соседними элементами равна c (si - si - 1 = c). В частности, Васю интересует, является ли его любимое число b элементом данной бесконечной последовательности, то есть существует ли такое целое положительное i, что si = b? Разумеется, он просит вас ответить на этот вопрос.

    Входные данные

    В первой строке входных данных записаны три целых числа a, b и c ( - 109 ≤ a, b, c ≤ 109) — первый элемент последовательности, любимое число Васи и разность между соседними элементами последовательности соответственно.

    Выходные данные

    Если b является элементом последовательности выведите «YES» (без кавычек), иначе «NO» (без кавычек).

    Примечание

    В первом примере последовательность начинается с чисел 1, 4, 7, поэтому 7 является её элементом.

    Во втором примере любимое число Васи совпадает с первым элементом последовательности.

    В третьем примере все элементы последовательности больше любимого числа Васи.

    В четвёртом примере последовательность начинается с чисел 0, 50, 100, а все последующие элементы больше любимого числа Васи.

    B. Восстановление картины

    Конструктив математика Перебор *1400

    Вася подрабатывает сторожем в галерее. К сожалению, во время его дежурства была украдена одна из самых дорогих картин. Вася не хочет быть уволен, поэтому ему нужно срочно восстановить картину, но он помнит только несколько фактов о ней.

    • Картина представляет собой квадрат 3 × 3, в каждой клетке которого стоит целое число от 1 до n, при этом в различных клетках могут находиться как различные, так и одинаковые числа.
    • Сумма чисел в любом из четырёх квадратов 2 × 2 равна сумме чисел в верхнем левом квадрате 2 × 2.
    • Четыре известных числа a, b, c и d были расставлены так, как показано на рисунке ниже.

    Помогите Васе определить количество различных квадратов, не противоречащих ни одному из этих фактов. Заметим, что это количество может быть равно нулю, если Вася что-то перепутал.

    Два квадрата считаются различными, если существует клетка, в которой в разных квадратах стоят различные числа.

    Входные данные

    В первой строке входных данных записаны пять целых чисел n, a, b, c и d (1 ≤ n ≤ 100 000, 1 ≤ a, b, c, d ≤ n) — максимально возможное значение целого числа в любой клетке квадрата и четыре числа, которые Вася помнит.

    Выходные данные

    Выведите одно целое число — количество возможных квадратов, не противоречащих ничему, что помнит Вася.

    Примечание

    Все возможные квадраты в первом тесте

    Все возможные квадраты во втором тесте

    B. Пирамида из бокалов

    математика математика реализация *1500

    Студентка Мария успешно завершила обучение в престижном вузе и теперь гуляет на выпускном. Студенты много мечтают о красивой жизни, поэтому одногруппники Маши решили соорудить небольшую пирамидку из одинаковых бокалов для шампанского. Получилась пирамида высоты n, такая что на самом верху стоял 1 бокал, на уровне ниже — 2 бокала, ещё ниже — 3 бокала и так далее. В последнем, самом нижнем уровне было ровно n бокалов.

    Машин одногруппник Влад вызвался наполнять пирамиду шампанским. Он тысячу раз видел в кино, как эффектно распространяется по бокалам шампанское, перетекая с более высоких этажей на более низкие. Он взял бутылку и начал лить её содержимое в бокал, расположенный на верхнем уровне.

    За одну секунду Влад выливает в верхний бокал количество шампанского, равное по объёму в точности одному бокалу. Если бокал полностью наполнен, а в него льётся шампанское, то все излишки поровну распределяются между двумя бокалами, на которых расположен данный. Если переполненный бокал стоит на нижнем уровне, то шампанское просто выливается на стол. В рамках данной задачи будем считать, что шампанское растекается по пирамиде мгновенно. Влада интересует, сколько бокалов будут наполнены до краёв через t секунд, когда бутылка подойдёт к концу.

    На рисунках изображены пирамиды, состоящие из трёх уровней.

    Входные данные

    В единственной строке входных данных записаны два целых числа n и t (1 ≤ n ≤ 10, 0 ≤ t ≤ 10 000) — высота пирамиды и количество единиц времени, через которое бутылка закончится.

    Выходные данные

    Выведите единственное число — количество наполненных доверху бокалов в пирамиде через t секунд.

    Примечание

    В первом примере через 5 секунд будет наполнен верхний бокал, два бокала на втором сверху уровне, и средний бокал в нижнем уровне. Два крайних бокала в нижнем уровне будут заполнены наполовину.

    B. Пирамида из бокалов

    математика математика реализация *1500

    Студентка Мария успешно завершила обучение в престижном вузе и теперь гуляет на выпускном. Студенты много мечтают о красивой жизни, поэтому одногруппники Маши решили соорудить небольшую пирамидку из одинаковых бокалов для шампанского. Получилась пирамида высоты n, такая что на самом верху стоял 1 бокал, на уровне ниже — 2 бокала, ещё ниже — 3 бокала и так далее. В последнем, самом нижнем уровне было ровно n бокалов.

    Машин одногруппник Влад вызвался наполнять пирамиду шампанским. Он тысячу раз видел в кино, как эффектно распространяется по бокалам шампанское, перетекая с более высоких этажей на более низкие. Он взял бутылку и начал лить её содержимое в бокал, расположенный на верхнем уровне.

    За одну секунду Влад выливает в верхний бокал количество шампанского, равное по объёму в точности одному бокалу. Если бокал полностью наполнен, а в него льётся шампанское, то все излишки поровну распределяются между двумя бокалами, на которых расположен данный. Если переполненный бокал стоит на нижнем уровне, то шампанское просто выливается на стол. В рамках данной задачи будем считать, что шампанское растекается по пирамиде мгновенно. Влада интересует, сколько бокалов будут наполнены до краёв через t секунд, когда бутылка подойдёт к концу.

    На рисунках изображены пирамиды, состоящие из трёх уровней.

    Входные данные

    В единственной строке входных данных записаны два целых числа n и t (1 ≤ n ≤ 10, 0 ≤ t ≤ 10 000) — высота пирамиды и количество единиц времени, через которое бутылка закончится.

    Выходные данные

    Выведите единственное число — количество наполненных доверху бокалов в пирамиде через t секунд.

    Примечание

    В первом примере через 5 секунд будет наполнен верхний бокал, два бокала на втором сверху уровне, и средний бокал в нижнем уровне. Два крайних бокала в нижнем уровне будут заполнены наполовину.

    E. Последняя битва человека против ИИ

    математика *2400

    Прошло 100 лет с тех пор, как в последний раз человек обыграл компьютер в Го. Технологии шагнули далеко вперёд, и роботы захватили нашу планету! Настало время финальной интеллектуальной схватки людей и машин. Если человек проиграет — всем нам конец, если выиграет — роботы покинут нашу планету.

    В качестве интеллектуального состязания было принято выбрать следующую игру: есть многочлен

    P(x) = anxn + an - 1xn - 1 + ... + a1x + a0, 
    коэффициенты которого будут определять игроки, и число k. Каждый игрок на своем ходу выбирает некоторый индекс j, такой что коэффициент aj при xj еще не определен, и вписывает своё число (любое, в том числе отрицательное или вещественное, в том числе 0) в данную ячейку. Компьютер ходит первым, а человек — вторым. Человек объявляется победителем, если многочлен P(x) без остатка делится на Q(x) = x - k.

    Говорят, что многочлен P(x) без остатка делится на многочлен Q(x), если существует представление P(x) = B(x)Q(x), где B(x) также является многочленом от x.

    Прошло несколько ходов от начала игры, и вас заинтересовало, правда ли, что в текущей позиции человек может гарантировать себе победу, как бы ни действовал компьютер.

    Входные данные

    В первой строке входных данных содержатся два целых числа n и k (1 ≤ n ≤ 100 000, |k| ≤ 10 000) — размер многочлена и число k.

    В i-й из последующих n + 1 строк содержится либо символ «?», если значение коэффициента при xi - 1 ещё не определено, либо целое число ai, если коэффициент при xi - 1 уже известен (|ai| ≤ 10 000). Любое из чисел, в том числе an может быть равно 0.

    Обратите внимание, не гарантируется, что вам дана позиция игры, в которой сейчас ходит компьютер.

    Выходные данные

    Выведите «Yes» (без кавычек), если человечество сможет спастись, и «No» (без кавычек) в противном случае.

    Примечание

    В первом тестовом примере компьютер первым ходом присвоил a0 значение  - 1, таким образом на следующем ходу человек может присвоить оставшемуся коэффициенту перед x значение 0.5 и победить.

    Во втором тестовом примере все коэффициенты уже проставлены и получившийся многочлен делится на x - 100, поэтому человек выиграл.

    B. Ваня и кухонный комбайн

    математика реализация *1400

    Ваня измельчает картофель в вертикальном кухонном комбайне. В любой момент времени в комбайне помещается количество картофеля высоты не более h, при этом комбайн измельчает k сантиметров картофеля за секунду. Если картофеля в комбайне меньше k сантиметров, то за данную секунду комбайн измельчает весь оставшийся в нём картофель.

    У Вани есть n картофелин, высота i-й из которых равна ai. Он поочередно засовывает в комбайн картофелины, начиная с картофелины номер 1 и заканчивая картофелиной номер n. Формально, каждую секунду происходит следующее:

    1. Если у Вани ещё остались картофелины, то он последовательно засовывает их в комбайн, пока там не кончится место.
    2. Комбайн измельчает k сантиметров картофеля (или просто всё, что есть в комбайне).

    По имеющейся информации о параметрах комбайна и картофелин вычислите, за какое время весь картофель будет измельчён.

    Входные данные

    В первой строке входных данных находятся числа n, h и k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ h ≤ 109) — количество картофелин, высота комбайна и количество картофеля, измельчаемое за одну секунду, соответственно.

    Во второй строке записаны n целых чисел ai (1 ≤ ai ≤ h) — высоты картофелин.

    Выходные данные

    Выведите одно целое число — количество секунд, которые потребуются на измельчение всего имеющегося картофеля.

    Примечание

    Рассмотрим первый пример.

    1. Сначала Ваня засовывает в комбайн картофелину высотой 5. Через одну секунду в комбайне остаётся картофель высотой 2.
    2. Теперь Ваня засовывает картофелину высотой 4, и через секунду там остаётся количество картофеля высоты 3.
    3. Ваня засовывает картофель высотой 3, через секунду там снова столб картофеля высотой 3.
    4. Ваня засовывает картофелины высотой 2 и 1, через секунду опять остаётся количество картофеля высоты 3.
    5. На этой секунде комбайн измельчает весь оставшийся картофель и завершает свою работу.

    Во втором примере Ваня засовывает в комбайн картофелину высотой 5 и ждёт две секунды, чтобы она полностью измельчилась. Аналогично для 4 следующих картофелин. Итого потребуется 2·5 = 10 секунд.

    В третьем примере Ваня сразу засовывает в комбайн весь имеющийся картофель и ждёт 2 секунды.

    A. Вася любит числа

    математика реализация *800

    Вася очень любит числа n и k. Сейчас Вася хочет найти наименьшее целое число x большее n такое, что x делится нацело на число k.

    Входные данные

    В единственной строке находится пара целых чисел n и k (1 ≤ n, k ≤ 109).

    Выходные данные

    Выведите наименьшее целое число x > n, делящееся на число k.

    C. Мила и шоколад

    математика реализация теория чисел *1600

    Маленькой Миле дали задачу. У неё есть n досок, пронумерованных целыми числами от 1 до n. Она должна покрасить их странным образом.

    Непокрашенная доска может быть покрашены в красный цвет, если её номер делится на число a, а также может быть покрашена в синий цвет, если её номер делится на число b. Таким образом, доска номер которой делится на a и на b может быть покрашена как в красный, так и в синий цвет.

    После покраски она получит p шоколадок за каждую доску красного цвета и q шоколадок за каждую доску синего цвета.

    Обратите внимание, что она может красить доски в любом порядке.

    Помогите Миле найти наибольшее количество шоколадок, которые она может получить.

    Входные данные

    Единственная строка содержит пять целых чисел n, a, b, p и q (1 ≤ n, a, b, p, q ≤ 109).

    Выходные данные

    Выведите одно целое число s — наибольшее количество шоколадок, которые может получить Мила.

    Обратите внимание, что ответ может не поместиться в 32-битном типе данных. Для сохранения числа вы можете использовать, например, тип long long в языке C++ или тип long в языке Java.

    D. Итерированная линейная функция

    математика теория чисел *1700

    Рассмотрим линейную функцию f(x) = Ax + B. Введём обозначение g(0)(x) = x и g(n)(x) = f(g(n - 1)(x)), при n > 0. Для заданных целых значений A, B, n и x найдите значение g(n)(x) по модулю 109 + 7.

    Входные данные

    В единственной строке находятся четыре целых числа A, B, n и x (1 ≤ A, B, x ≤ 109, 1 ≤ n ≤ 1018) — параметры из условия задачи.

    Обратите внимание, что данное значение n может быть слишком большим, поэтому вы должны использовать 64-битный тип данных. В языке C++ вы можете использовать тип long long и в языке Java вы можете использовать тип long.

    Выходные данные

    Выведите одно целое число s — значение g(n)(x) по модулю 109 + 7.

    E. Очередной турнир ситхов

    битмаски дп математика Теория вероятностей *2200

    Всем известны правила турнира ситхов. В турнире сражаются n участников. Турнир начинается со случайного выбора двух ситхов, который проводят первый бой. Как только один из них проигрывает, его место занимает другой, случайно выбранный еще не сражавшийся ситх. Надо ли говорить, что каждый бой турнира ситхов заканчивается смертью одного из соперников? Турнир заканчивается, когда в живых остается лишь один ситх.

    Джедай Иван случайно оказался в списке участников такого турнира. Однако его владение светлой стороной силы столь велико, что он способен влиять на исход выбора как участников, которые начнут турнир, так и каждого следующего участника поединка. Разумеется, он не станет упускать подвернувшийся шанс улучшить свое положение. Помогите ему рассчитать, насколько велики его шансы победить в турнире.

    Входные данные

    В первой строке записано единственное число n (1 ≤ n ≤ 18) — количество участников турнира ситхов.

    В каждой из следующих n строк записано n вещественных чисел, образующих матрицу pij (0 ≤ pij ≤ 1). Каждый ее элемент pij равен вероятности того, что i-й участник победит j-го в поединке один на один.

    Элементы на главной диагонали pii равны нулю. Для любых различных i, j выполняется pij + pji = 1. Все вероятности указаны не более чем с шестью знаками после запятой.

    Джедай Иван находится в списке участников под номером 1.

    Выходные данные

    Выведите единственное вещественное число — вероятность, с которой Джедай Иван останется в живых по итогам турнира. Абсолютная или относительная погрешность ответа не должна превышать 10 - 6.

    A. Медвежонок и простота за 100

    интерактив Конструктив математика *1400

    Это интерактивная задача. В формате выходных данных вы найдёте информацию о том, как сбрасывать буфер вывода (делать операцию 'flush').

    Медвежонок Лимак загадывает некоторое целое число в интервале [2, 100]. Вам необходимо определить, является ли загаданное число простым или составным.

    Целое число x > 1 называется простым, если у него есть ровно два различных делителя, 1 и x. Если целое число x > 1 не является простым, оно называется составным.

    Вы можете сделать до 20 запросов о делителях загаданного числа. Каждый запрос — это одно целое число в интервале [2, 100]. Проверяющая программа выведет «yes», если целое число из запроса является делителем загаданного числа, и «no» в противном случае.

    Например, если загадано число 14, то проверяющая программа выведет «yes» только для запросов 2, 7 или 14.

    Когда вы закончите задавать вопросы, выведите «prime» (если считаете, что загаданное число простое) или «composite» (если считаете, что загаданное число составное), сделайте операцию 'flush' и завершите работу программы.

    Вы получите вердикт Wrong Answer, если сделаете больше 20 запросов о делителях или если ваша программа выведет число не из интервала [2, 100]. Разумеется, вы получите вердикт Wrong Answer, если неправильно определите тип загаданного числа.

    Вы получите вердикт Idleness Limit Exceeded, если не будете ничего выводить (а тестирующая программа будет ожидать ввода) или забудете сделать операцию 'flush' после какого-нибудь вывода (смотри ниже).

    Входные данные

    После каждого запроса требуется считать одну строку из входных данных (стандартный ввод). Эта строка будет «yes» (без кавычек), если выведенное число является делителем загаданного, и «no» (без кавычек) в противном случае.

    Выходные данные

    Не более 20 раз вы можете сделать запрос — вывести целое число в диапазоне [2, 100] в одной строке. Обязательно требуется вывести перевод строки и сделать операцию 'flush'. После сброса буфера необходимо считать ответ на запрос из входных данных.

    В любой момент можно перестать делать запросы и вывести «prime» (без кавычек) или «composite» (без кавычек). После этого требуется сделать 'flush' и завершить программу.

    Для сброса буфера вывода (то есть для операции 'flush') сразу после вывода числа или ответа и перевода строки можно сделать:

    • fflush(stdout) в языке C++;
    • System.out.flush() в Java;
    • stdout.flush() в Python;
    • flush(output) в Pascal;
    • смотрите документацию для других языков.

    Взломы. Чтобы совершить взлом, вам требуется указать загаданное число — одно целое число в интервале [2, 100]. Разумеется, у взламываемого решения не будет возможности прочитать это число из входных данных.

    Примечание

    Ниже приведён пример протокола общения для первого и второго примеров.

    В первом примере Лимак загадал число 30.

    Загаданное число делится на 2 и 5, следовательно, является составным. Обратите внимание, что не требуется точно угадывать загаданное число.

    Во втором примере Лимак загадал число 59.

    Число 59 является делителем загаданного числа, но в интервале [2, 100] есть только одно число с таким делителем, и оно является простым. Обратите внимание, что ответ известен уже после второго запроса, но не запрещается продолжать спрашивать (если при этом не превышается лимит на 20 запросов).

    D. Медведь и преследование

    графы математика Перебор поиск в глубину и подобное реализация Теория вероятностей *2900

    В Беарляндии n городов, пронумерованных целыми числами от 1 до n. Они соединены m двунаправленными дорогами. Дорога номер i соединяет два различных города ai и bi, и никакие две дороги не соединяют одну и ту же пару городов. От любого города можно добраться до любого другого, используя только данные дороги.

    Расстоянием между городами a и b называется минимальное количество дорог, которыми придётся воспользоваться, чтобы попасть из a в b.

    Лимак — медведь гризли. Он преступник, и ваша задача его поймать, или, по крайней мере, попытаться. У вас осталось только два дня (сегодня и завтра), а затем он улизнёт навсегда.

    Ваше главное оружие — БВД (Беарляндский Высокоточный Детектор). Когда вы используете БВД, находясь при этом в каком-нибудь городе, он сообщает вам расстояние между городом, где вы находитесь, и городом, где сейчас находится Лимак. К сожалению, БВД может быть использован только один раз в день.

    Вам мало что известно о местоположении Лимака, поэтому вы предполагаете, что он находится в одном из n городов страны, выбранном случайно и с равной вероятностью (то есть Лимак изначально находится в каждом городе с вероятностью ). Вы разработали следующий план:

    1. Выбрать один из городов и применить там БВД.
      • Сразу после применения БВД можно попытаться поймать Лимака (но это может быть плохой идеей). В этом случае вы выбираете какой-то город и ищете Лимака там. Если Лимак действительно в этом городе, то вы выигрываете, в противном случае Лимак становится осторожнее, и его уже никогда не поймать (вы проигрываете).
    2. Подождать 24 часа и снова применить БВД. Вы знаете, что за это время Лимак обязательно изменит своё местоположение, а именно, он выберет случайно и равновероятно одну дорогу ведущую из его текущего города и пройдёт по ней в соседний город.
    3. На следующий день вы можете снова выбрать любой город и применить БВД там.
    4. Теперь уже обязательно попробовать поймать Лимака. Для этого вы выбираете какой-то город и ищете в нём Лимака. Если он там, то вы побеждаете, если нет — проигрываете.

    Каждый раз, когда вам требуется выбрать город, вы можете выбирать любой из n городов, то есть мгновенное перемещение не является для вас проблемой.

    Чему равна вероятность поймать Лимака, если вы будете действовать оптимально?

    Входные данные

    В первой строке входных данных записаны два числа n и m (2 ≤ n ≤ 400, ) — количество городов и количество дорог соответственно.

    Затем следуют m строк, описывающих дороги. В i-й из этих строк записаны два числа ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — номера городов, соединённых i-й дорогой.

    Гарантируется, что никакая пара городов не соединена более чем одной дорогой и что от любого города можно добраться до любого другого, используя только данные дороги.

    Выходные данные

    Выведите одно вещественное число — вероятность обнаружить Лимака, если действовать оптимально. Ваш ответ будет считаться правильным, если его абсолютная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если |a - b| ≤ 10 - 6.

    Примечание

    В первом примере Беарляндия состоит из трёх городов, и между каждой парой этих городов есть дорога. Рассмотрим один из оптимальных сценариев.

    1. Использовать БВД в городе 1.
      • С вероятностью Лимак окажется в этом городе, и БВД выдаст расстояние 0. В таком случае нужно сразу хватать Лимака — мы точно не ошибёмся.
      • С вероятностью расстояние равно 1, потому что Лимак находится в городе 2 или городе 3. В этом случае оптимально будет дождаться следующего дня.
    2. Вы ждёте, а Лимак переходит в соседний город.
      • С вероятностью Лимак находился в городе 2 и перешёл в город 3.
      • он перешёл из 2 в 1.
      • он перешёл из 3 в 2.
      • он перешёл из 3 в 1.
    3. Снова использовать БВД в городе 1 (хотя разрешено сделать это и в любом другом городе).
      • Если расстояние 0, то Лимак находится в городе 1 (вы побеждаете).
      • Если расстояние 1, то Лимак либо в городе 2, либо в городе 3. Тогда попробуем поискать его в городе 2 (или 3, не имеет значения).

    Пользуясь такой стратегией, вы проиграете, только если Лимак был изначально в городе 2 и перешёл в город 3. Вероятность проигрыша равна . Ответ равен .

    D. Дерево полураспада

    дп математика разделяй и властвуй Структуры данных Теория вероятностей *2500

    В последнее время Петя очень увлекся физикой. Анна Викторовна, его учительница, заметив Петину тягу к знаниям дала ему увлекательную физическую головоломку — дерево полураспада.

    Дерево полураспада представляет собой полное двоичное дерево высоты h. Высота двоичного дерева — максимум среди расстояний (в ребрах) от корня дерева до его листьев. В процессе изучения, Петя добавляет в его вершины электроны, а также вызывает случайный распад дерева с помощью синхрофазотрона. Случайным распадом называется процесс при котором вдоль пути от корня к случайному листку удаляются все ребра. Вероятности выбора листьев равны между собой. Естественно, так как казенное имущество портить ученикам воспрещается, после каждого такого распада Петя возвращает все удаленные ребра на место.

    Распавшись, дерево разлагается на компоненты связности. Зарядом такой компоненты называется суммарное количество электронов в вершинах, что принадлежат ей. Потенциалом разрушенного дерева называется максимальный заряд среди его компонент связности. Каждый раз вызывая случайный распад дерева, Петя предварительно хочет знать каково математическое ожидание потенциала дерева после его разрушения.

    Входные данные

    Первая строка будет содержать два целых числа h и q (1 ≤ h ≤ 30, 1 ≤ q ≤ 105). Далее идут q строк в каждой из которых будет запрос одного из двух типов:

    • add v e

      В вершину с номером v Петя добавляет e электронов (1 ≤ v ≤ 2h + 1 - 1, 0 ≤ e ≤ 104). v и e — целые числа.

      Вершины в дереве нумеруются следующим образом: корень имеет номер 1, потомки вершины x имеют номера 2x и 2x + 1.

    • decay

      Петя провоцирует распад дерева.

    Выходные данные

    Для каждого запроса decay следует вывести математическое ожидание потенциала дерева после его разрушения. Абсолютная или относительная погрешность ответа не должна превышать 10 - 4.

    A. Алёна и числа

    Конструктив математика теория чисел *1100

    Когда пухленькая девочка Алёна доела очередную булочку, она придумала два целых числа n и m. Алёна решила выписать на доске в один столбик все числа от 1 до n, а в другой столбик — все числа от 1 до m. Девочка решила посчитать, сколько пар чисел она может выбрать, чтобы сумма чисел была кратна 5, если первое число пары — это произвольное число из первого столбика, а второе число пары — произвольное число из второго столбика.

    Формально, Алёне интересно, сколько существует пар целых чисел (x, y), таких что 1 ≤ x ≤ n, 1 ≤ y ≤ m и равно 0.

    Алёна затрудняется посчитать искомое количество, потому что она блондинка. Помогите ей в этом.

    Входные данные

    В единственной строке входных данных находятся два целых числа n и m (1 ≤ n, m ≤ 1 000 000), разделённые пробелом.

    Выходные данные

    В единственной строке выведите ответ на задачу — количество пар целых чисел (x, y), таких что 1 ≤ x ≤ n, 1 ≤ y ≤ m, а (x + y) делится на 5.

    Примечание

    В первом примере подходят следующие пары чисел:

    • для x = 1 подходят y, равные 4 или 9;
    • для x = 2 подходят y, равные 3 или 8;
    • для x = 3 подходят y, равные 2, 7 или 12;
    • для x = 4 подходят y, равные 1, 6 или 11;
    • для x = 5 подходят y, равные 5 или 10;
    • для x = 6 подходят y, равные 4 или 9.

    В третьем примере подходит единственная пара чисел (1, 4).

    D. Плитка шоколада

    *особая задача математика *1400

    Плитка шоколада имеет прямоугольную форму и состоит из n × m долек, то есть плитка состоит из n рядов по m долек шоколада в каждом ряду.

    Известно, что каждая долька шоколада весит 1 грамм. Перед вами стоит задача для каждой из q плиток шоколада определить, возможно ли с помощью некоторого количества (возможно нулевого) разламываний плитки получить кусок весом p грамм. Итоговый кусок плитки шоколада должен быть цельным, а разламывания производятся вдоль линии раздела долек во всю длину текущего куска.

    Входные данные

    В первой строке входных данных следует целое положительное число q (1 ≤ q ≤ 100) — количество плиток шоколада.

    В каждой из следующих q строк заданы по три целых числа n, m и p (1 ≤ n, m, p ≤ 1000) — размер шоколадки, а также вес куска, который должен быть из нее получен.

    Выходные данные

    Выходные данные должны содержать q строк, причем i-я строка должна быть равна «Yes» (без кавычек), если возможно выполнить поставленную задачу для соответствующей по порядку шоколадки, или «No» в противном случае.

    A. Разбойничьи часы

    дп Комбинаторика математика Перебор *1700

    Разбойники, напавшие на карету Герды, уже давным-давно успешно скрываются от королевских преследователей. Чтобы последним было сложнее догадаться о времени очередного нападения, разбойники используют собственные альтернативные часы.

    Во-первых, так как королевские воины плохо разбираются в математике, разбойники используют в своих цифровых часах семеричную систему счисления. Во-вторых, они делят сутки на n часов, а час — на m минут. Личные часы каждого разбойника поделены на две части: в первой из них ровно столько разрядов, чтобы показать все возможные значения часа (от 0 до n - 1), а во второй — все возможные значения минут (от 0 до m - 1). В-третьих, если значение часа или минуты умещается в меньшее число разрядов, чем есть в соответствующей части часов, то запись дополняется нулями слева.

    Обратите внимание, для записи числа 0 требуется один разряд.

    Маленькой разбойнице интересно, сколько в течение дня существует таких моментов времени (то есть фиксированных значений часов и минут), что все цифры на часах в этот момент различны. Помогите ей посчитать это значение.

    Входные данные

    В первой строке входных данных находятся два целых числа, записанных в десятичной системе счисления, n и m (1 ≤ n, m ≤ 109) — число часов в одном дне и минут в одном часе соответственно.

    Выходные данные

    В первой строке выходного файла должно содержаться единственное число, записанное в десятичной системе счисления — количество пар значений часа и минуты, таких что все отображаемые на часах цифры различны.

    Примечание

    Для первого теста все возможные пары будут такими: (0: 1), (0: 2), (1: 0), (1: 2).

    Для второго теста все возможные пары будут такими: (02: 1), (03: 1), (04: 1), (05: 1), (06: 1).

    A. Разбойничьи часы

    дп Комбинаторика математика Перебор *1700

    Разбойники, напавшие на карету Герды, уже давным-давно успешно скрываются от королевских преследователей. Чтобы последним было сложнее догадаться о времени очередного нападения, разбойники используют собственные альтернативные часы.

    Во-первых, так как королевские воины плохо разбираются в математике, разбойники используют в своих цифровых часах семеричную систему счисления. Во-вторых, они делят сутки на n часов, а час — на m минут. Личные часы каждого разбойника поделены на две части: в первой из них ровно столько разрядов, чтобы показать все возможные значения часа (от 0 до n - 1), а во второй — все возможные значения минут (от 0 до m - 1). В-третьих, если значение часа или минуты умещается в меньшее число разрядов, чем есть в соответствующей части часов, то запись дополняется нулями слева.

    Обратите внимание, для записи числа 0 требуется один разряд.

    Маленькой разбойнице интересно, сколько в течение дня существует таких моментов времени (то есть фиксированных значений часов и минут), что все цифры на часах в этот момент различны. Помогите ей посчитать это значение.

    Входные данные

    В первой строке входных данных находятся два целых числа, записанных в десятичной системе счисления, n и m (1 ≤ n, m ≤ 109) — число часов в одном дне и минут в одном часе соответственно.

    Выходные данные

    В первой строке выходного файла должно содержаться единственное число, записанное в десятичной системе счисления — количество пар значений часа и минуты, таких что все отображаемые на часах цифры различны.

    Примечание

    Для первого теста все возможные пары будут такими: (0: 1), (0: 2), (1: 0), (1: 2).

    Для второго теста все возможные пары будут такими: (02: 1), (03: 1), (04: 1), (05: 1), (06: 1).

    C. Оптимальная точка

    Бинарный поиск математика *2900

    Когда река принесла Герду к дому старой чародейки, та захотела сделать её своей приёмной дочерью. Чтобы Герда забыла про Кая, она волшебством убрала все розы из своего сада глубоко под землю.

    Крот, живущий в саду, теперь может любоваться на розы, не вылезая на поверхность. Как известно, кроты слепы, но чародейка даровала этому кроту особое зрение. Он может видеть любые объекты под землёй, находящиеся на любом расстоянии от него и даже загороженные другими объектами. Но при этом то, насколько хорошо крот видит объект, зависит от манхэттенского расстояния до объекта.

    Крот хочет найти оптимальную точку для наблюдения за розами, то есть такую точку, что её координаты являются целыми числами, а максимальное манхэттенское расстояние от неё до всех роз является минимально возможным.

    Помогите ему найти оптимальную точку для наблюдения за розами.

    Манхэттенским расстоянием между точками (x1,  y1,  z1) и (x2,  y2,  z2) называется величина |x1 - x2| + |y1 - y2| + |z1 - z2|.

    Входные данные

    В первой строке входных данных записано число t (1 ≤ t ≤ 100 000) — количество тестовых случаев. Затем следует ровно t блоков, каждый из которых описывает ровно один тест.

    В первой строке каждого блока записано одно число ni (1 ≤ ni ≤ 100 000) — количество роз в тесте. Затем следует ровно ni строк, в каждой из которых задаётся три целых числа — координаты соответствующей розы. Обратите внимание, две и более роз могут быть расположены в одной точке.

    Сумма всех ni не превосходит 100 000, все координаты по абсолютной величине не больше 1018.

    Выходные данные

    Для каждого из t тестовых случае выведите три целых числа — координаты оптимальной точки для наблюдения за розами в соответствующем тесте. Если оптимальных точек несколько, вы можете вывести любую из них.

    Координаты оптимальной точки могут совпадать с координатами роз.

    Примечание

    В первом тесте максимальное манхэттенское расстояние равно 4.

    Во втором тесте максимальное манхэттенское расстояние равно 0. Координаты роз могут совпадать как друг с другом, так и с оптимальной точкой.

    B. Игра с остатками

    китайская теорема об остатках математика теория чисел *1800

    Сегодня Пари и Арий играют в игру Остатки.

    Пари выбирает два положительных целых числа x и k и говорит Арию kx не говорит). Арий должен найти . Известны n древних чисел c1, c2, ..., cn, и для каждого из них Арий может спросить у Пари . Для данного k и набора древних чисел определите, правда ли, что Арий выигрывает для любого значения x?

    Запись означает остаток от деления x на y.

    Входные данные

    В первой строке входных данных записаны два целых числа n и k (1 ≤ n,  k ≤ 1 000 000) — количество древних чисел и значение k, выбранное Пари.

    Во второй строке записаны n целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 1 000 000).

    Выходные данные

    Выведите «Yes» (без кавычек), если Арий может выиграть для любого x, и «No» (без кавычек) в противном случае.

    Примечание

    В первом примере Арий может узнать значение , потому что 5 является одним из древних чисел.

    Во втором примере Арий не может знать наверняка. Например, 1 и 7 дают одинаковые остатки при делении на 2 и 3, но разные при делении на 7.

    B. Любимые палиндромы

    Конструктив математика *1000

    Один друг Пари очень любит палиндромные числа. Число является палиндромом, если оно одинаково читается в обоих направлениях. Например числа 12321, 100001 и 1 являются палиндромами, а числа 112 и 1021 нет.

    Пари тоже старается полюбить палиндромы, но, видимо, только особенные и очень одарённые люди могут увидеть в них что-то особенное. Пари любит числа чётной длины (то есть состоящие из чётного количество цифр), так что теперь она пытается подбирать числа, которые одновременно имеют чётную длину и являются палиндромами (например 11 и 122221). Может быть, в них она сможет увидеть что-то особенное?

    Пари просит вас написать программу, вычисляющую n-е палиндромное число чётной длины (при этом n может быть гигантским), сможете ли вы ей помочь?

    Входные данные

    В единственной строке входных данных записано целое число n (1 ≤ n ≤ 10100 000).

    Выходные данные

    Выведите n-е палиндромное число чётной длины.

    Примечание

    Первые 10 палиндромных чисел чётной длины это 11, 22, 33, ..., 88, 99 и 1001.

    C. Майк и шоколадные воры

    Бинарный поиск Комбинаторика математика *1700

    Плохие новости в деревне Майка — неизвестные воры украли много шоколадок с местного завода! Ужас!

    Кроме любви к сладкому, воры из окрестностей еще и известные жадины. Поэтому когда один из воров забирает несколько шоколадок для себя, следующий вор забирает ровно в k раз больше шоколадок. Значение k (k > 1) является секретным целым числом, известным только ворам. Также известно, что рюкзак любого вора выдерживает ограниченное количество шоколадок, однако и это целое число n остается в тайне между ворами. Кроме того, Майк знает, что всего в краже шоколадок участвовали четыре вора.

    Число n известно только ворам, однако по слухам, число способов, которыми воры могли разобрать шоколадки (при фиксированном n, но не фиксированном k) равно m. Два способа украсть шоколадки считаются различными, если найдется вор (а их следует нумеровать в порядке взятия ими шоколадок), что количество шоколадок, взятое им, различается в этих способах.

    Майк хочет поймать воров, поэтому ему важно знать больше об их сумках, и значение n поможет ему в этом. Помогите Майку найти наименьшее подходящее значение n или сообщите, что слухи ложны и подходящего n не существует.

    Входные данные

    В единственной строке входных данных содержится целое число m (1 ≤ m ≤ 1015) — слух о числе способов украсть шоколадки.

    Выходные данные

    Выведите единственное целое число n — максимальное количество шоколадок, которое может выдержать портфель любого из воров. Если таких n несколько, выведите наименьшее из них.

    Если таких n не существует и слухи ложны, выведите  - 1.

    Примечание

    В первом примере из условия наименьшим подходящим n является n = 8, и количества украденных каждым вором шоколадок равны (1, 2, 4, 8).

    Во втором примере из условия наименьшим подходящим n является n = 54 с количествами: (1, 2, 4, 8),  (1, 3, 9, 27),  (2, 4, 8, 16),  (2, 6, 18, 54),  (3, 6, 12, 24),  (4, 8, 16, 32),  (5, 10, 20, 40),  (6, 12, 24, 48).

    В третьем примере подходящего к ровно десяти способам n не существует.

    A. Юный физик

    математика реализация *1000

    В одной школе в 11 классе учится мальчик Вася. Как-то раз Вася решил посмотреть матч своей любимой хоккейной команды. А поскольку мальчик очень любит хоккей, даже больше, чем физику, он забыл сделать уроки. В частности, забыл сделать задачки по физике. На следующий день учитель очень разозлился на Васю, и решил его проучить. Он дал нерадивому ученику, казалось бы, простую задачку: дано покоящееся тело в пространстве, и даны силы, действующие на него. Тело можно считать материальной точкой с координатами (0; 0; 0). Васе нужно было ответить, находится ли оно в равновесии. «Ерунда!» — подумал Вася, нужно лишь проверить, что сумма всех векторов равна 0, и принялся решать задачу. Но впоследствии оказалось, что этих сил может быть очень-очень много, и Вася не справится без вашей помощи. Помогите ему. Напишите программу, которая определяет по заданным векторам сил, покоится тело или движется.

    Входные данные

    В первой строке задано натуральное число n (1 ≤ n ≤ 100), далее следует n строк по три целых числа в каждой: координата xi, координата yi и координата zi вектора силы, приложенной к телу ( - 100 ≤ xi, yi, zi ≤ 100).

    Выходные данные

    Выведите слово "YES" если тело находится в равновесии, или слово "NO" если не находится.

    D. Свопы в перестановке

    математика поиск в глубину и подобное снм *1700

    Вам задана перестановка чисел 1, 2, ..., n, а также m пар позиций (aj, bj).

    На каждом шагу вы можете выбрать некоторую пару из заданного набора и поменять местами числа на этих позициях. Найдите лексикографически максимальную перестановку, которую можно получить такими операциями.

    Пусть p и q — это две перестановки чисел 1, 2, ..., n. Перестановка p считается лексикографически меньше перестановки q, если существует число 1 ≤ i ≤ n такое, что pk = qk для всех 1 ≤ k < i и pi < qi.

    Входные данные

    В первой строке находится пара целых чисел n и m (1 ≤ n, m ≤ 106) — длина перестановки p и количество пар позиций.

    Во второй строке находятся n различных целых чисел pi (1 ≤ pi ≤ n) — элементы перестановки p.

    В следующих m строках находятся пары чисел (aj, bj) (1 ≤ aj, bj ≤ n) — пары позиций для обмена местами чисел. Обратите внимание, что вам заданы позиции обменов, а не значения.

    Выходные данные

    Выведите строку с n различными целыми числами p'i (1 ≤ p'i ≤ n) — лексикографически максимальную перестановку, которую можно получить.

    B. Puzzles

    Деревья математика поиск в глубину и подобное Теория вероятностей *1700

    Барни живет в USC (United States of Charzeh). USC состоит из n городов с номерами от 1 до n и n - 1 дорог между ними. Города и дороги в USC формируют корневое дерево (и Барни понятия не имеет, почему оно корневое). Корню дерева соответствует город номер 1. Таким образом, начиная в городе 1, по дорогам можно добраться до любого другого города.

    Незнакомка завладела сердцем Барни, и теперь он хочет ее найти. Он начинает поиски в городе номер 1, и, (так как он Барни Стинсон, а не кто-то еще), и для поисков использует случайный поиск в глубину. Этот алгоритм можно описать с помощью следующего псевдокода:


    let starting_time be an array of length n
    current_time = 0
    dfs(v):
    current_time = current_time + 1
    starting_time[v] = current_time
    shuffle children[v] randomly (each permutation with equal possibility)
    // children[v] is vector of children cities of city v
    for u in children[v]:
    dfs(u)

    Как было сказано ранее, Барни начинает свое путешествие в корне дерева (что эквивалентно вызову dfs(1)).

    Теперь Барни нужно собрать рюкзак, и поэтому он хочет знать больше о предстоящем путешествии: для каждого города i Барни хочет знать математическое ожидание величины starting_time[i]. Барни — друг Джона Сноу, и поэтому ничего не знает, в связи с чем просит вас ему помочь.

    Входные данные

    В первой строке содержится единственное целое число n (1 ≤ n ≤ 105) — число городов в USC.

    Во второй строке содержится n - 1 число p2, p3, ..., pn (1 ≤ pi < i), где pi — номер города, являющегося предком города i в дереве, другими словами, в USC есть дорога между городами pi и i.

    Выходные данные

    В единственной строке выведите n чисел, значение i-го из которых равно математическому ожиданию величины starting_time[i].

    Ответ для каждого города будет засчитан, если его абсолютная или относительная погрешность не превосходит 10 - 6.

    C. PLEASE

    дп Комбинаторика математика матрицы реализация *2000

    Как известно, работа Барни это «PLEASE», и ему в целом нечем заняться на работе, и поэтому он решил сыграть в «чашки и ключ». В этой игре участвуют три одинаковые чашки, выставленные в ряд слева направо. Изначально ключ к сердцу Барни находится под стоящей посередине чашкой.

    Затем, за один ход Барни меняет местами чашку посередине с одной из двух других чашек случайным образом (он выберет каждую с одинаковой вероятностью), так что выбранная чашка становится посередине. Игра длится n ходов, и в каждом из них Барни независимо выбирает чашку для обмена со средней на каждом ходу, а ключ всегда остается под чашкой, под которой был в самом начале.

    После n-го хода Барни просит девушку указать на чашку, содержащую ключ. Девушка указывает на стоящую посередине чашку, но Барни отвлекся во время игры и не знает, находится ли там ключ или нет. Поэтому Барни просит вас сообщить ему вероятность того, что девушка указала на правильную чашку.

    Число ходов n может быть очень большим, поэтому Барни не сообщил вам его. Вместо этого он дал вам массив a1, a2, ..., ak, такой, что

    другими словами, n равно произведению чисел данного массива.

    Из-за проблем с точностью Барни просит вас сообщить ответ в виде несократимой дроби. Другими словами, найдите ответ в виде p / q, причем , где  — наибольший общий делитель. Так как p и q могут быть очень большими, достаточно вывести остаток от деления каждого из них на 109 + 7.

    Заметьте, что мы хотим, чтобы наибольший общий делитель p и q был равен 1, а не наибольший общий делитель их остатков от деления на 109 + 7.

    Входные данные

    В первой строке содержится единственное целое число k (1 ≤ k ≤ 105) — количество элементов в массиве, данном Барни.

    Во второй строке содержатся k целых чисел a1, a2, ..., ak (1 ≤ ai ≤ 1018) — элементы массива.

    Выходные данные

    В единственной строке выведите строку вида x / y, где x — остаток от деления p на 109 + 7, а y — остаток от деления q на 109 + 7.

    A. Случай с ананасом

    математика реализация *900

    У Теда есть ананас, который лает как бульдог! В момент времени t (в секундах) ананас лает первый раз, а затем каждые s секунд лает дважды с промежутком в одну секунду. Таким образом, он лает в моменты времени t, t + s, t + s + 1, t + 2s, t + 2s + 1 и так далее.

    Утром Барни проснулся и хочет съесть ананас Теда, но Барни не может есть ананас, пока тот лает. Барни собирается съесть ананас в момент времени x (в секундах), поэтому он просит вас сообщить, будет ли он лаять в это время.

    Входные данные

    В единственной строке входных данных содержатся три целых числа t, s и x (0 ≤ t, x ≤ 109, 2 ≤ s ≤ 109) — момент времени, когда ананас лает в первый раз, количество секунд между лаянием ананаса, и момент времени, когда Барни хочет съесть ананас соответственно.

    Выходные данные

    В единственной строке выведите «YES» (без кавычек) если в момент времени x ананас будет лаять или «NO» в противном случае.

    Примечание

    В первом и втором примерах из условия ананас будет лаять в моменты 3, 13, 14, ..., так что в момент 4 он лаять не будет, но будет лаять в момент 3.

    В третьем и четвертом примерах из условия ананас будет лаять в моменты 3, 11, 12, 19, 20, 27, 28, 35, 36, 43, 44, 51, 52, 59, ..., так что и в момент 51, и в момент 52 он будет лаять.

    B. Барникл

    математика Перебор реализация Строки *1400

    Барни, находясь в баре, загляделся на красивую девушку. Он хочет точным выстрелом пронзить ее стрелой любви, и поэтому ему нужно знать расстояние между ним и девушкой.

    Барни попросил бармена Карла сообщить ему, чему равно это расстояние, но тот был так занят разговорами с другими посетителями, что написал значение расстояния (а это вещественное число) на салфетке. Однако, для этого Карл использовал экспоненциальную запись числа. Экспоненциальная запись некоторого вещественного числа x это запись в форме AeB, где A — некоторое вещественное число, B — целое число, а x равняется A × 10B. В нашей задаче A может принимать вещественные значения от 0 до 9, а B неотрицательно.

    Барни плохо знаком с экспоненциальной записью, поэтому он просит вас сообщить ему, чему равно расстояние в его обычной десятичной записи с минимально возможным количеством знаков после десятичной точки (или без десятичной точки, если его значение целое). Смотрите формат выходных данных для более подробной информации.

    Входные данные

    Первая и единственная строка входных данных содержит экспоненциальную запись числа в виде a.deb, где a, d и b — целые числа, а e соответствует обычному символу 'e' (0 ≤ a ≤ 9, 0 ≤ d < 10100, 0 ≤ b ≤ 100) — экспоненциальную запись искомого расстояния.

    a и b не содержат ведущих нулей, а d не содержит нулей в конце своей записи (но может быть равно 0). Также, b не может быть отличным от 0, если a равно 0.

    Выходные данные

    В единственной строке выведите вещественное число x (искомое расстояние) в его десятичной записи.

    То есть, если x — целое число, выведите его значение без дробной части и десятичной точки и без ведущих нулей.

    В противном случае, выведите x в виде p.q, где p и q — целые числа, p не содержит ведущих нулей (но может быть равным нулю), а q не содержит нулей в конце своей записи (и не может быть равным нулю).

    C. Прямая

    математика теория чисел *1800

    Своим уравнением Ax + By + C = 0 задана прямая на плоскости. Требуется найти любую принадлежащую этой прямой точку, координаты которой — целые числа от  - 5·1018 до 5·1018 включительно, или выяснить что таких точек нет.

    Входные данные

    В первой строке содержатся три целых числа A, B и C ( - 2·109 ≤ A, B, C ≤ 2·109) — соответствующие коэффициенты уравнения прямой. Гарантируется, что A2 + B2 > 0.

    Выходные данные

    Если искомая точка существует, выведите ее координаты, иначе выведите единственное число -1.

    A. Печеньки

    математика *1300

    Клычок — коллекционер печенек. Однажды он решил взять коробку и уложить в нее печеньки некоторым образом. Если взять квадрат размера k × k, разбитый на клетки размера 1 × 1 и закрасить в нем главную диагональ вместе с клетками, лежащими выше нее, то закрашенная область будет равна области, занимаемой одной печенькой размера k. У Клычка так же есть коробка с квадратным основанием 2n × 2n, разбитая на клетки размера 1 × 1. В коробке печеньки не должны перекрываться, и их нельзя переворачивать или поворачивать. На рисунках изображены печеньки размера 2 и 4 соответственно:

    Для укладки печенек маленький морж использует следующий алгоритм. Он берет из хранилища самую большую печеньку, которая может поместиться на некоторое место в коробке, и кладет ее туда. Все бы хорошо, но у маленького моржа в хранилище есть бесконечно много печенек размера 2 и больше, а печеньки размера 1 отсутствуют, следовательно, в коробке останутся пустые клетки. Его интересует, сколько же пустых клеток окажется в итоге.

    Входные данные

    В первой строке записано единственное целое число n (0 ≤ n ≤ 1000).

    Выходные данные

    Выведите единственное число, равное количеству пустых клеток в коробке. Ответ следует вывести по модулю 106 + 3.

    Примечание

    Если коробка имеет основание 23 × 23 (как в примере), то печеньки в нее будут уложены следующим образом:

    A. Как можно быстрее

    Бинарный поиск математика *1900

    На каникулах n школьников решили сходить на экскурсию и собрались все вместе. Им необходимо преодолеть путь длиной l метров. Каждый из школьников будет идти со скоростью v1. Чтобы быстрее добраться до экскурсии было принято решение арендовать автобус, вместимостью k человек (то есть одновременно в автобусе не может находиться более k человек) и скоростью v2. Чтобы никого из школьников не укачало, каждый из них хочет сесть в автобус не более одного раза.

    Перед вами стоит задача определить минимальное время, по истечении которого все n школьников смогут добраться до места проведения экскурсии. Считайте, что посадка и высадка пассажиров, а также разворот автобуса, происходят мгновенно и этим временем можно пренебречь.

    Входные данные

    В первой строке следует пять целых положительных чисел n, l, v1, v2 и k (1 ≤ n ≤ 10 000, 1 ≤ l ≤ 109, 1 ≤ v1 < v2 ≤ 109, 1 ≤ k ≤ n) — количество школьников, расстояние от места сбора до места проведения экскурсии, скорость каждого школьника, скорость машины и количество мест в машине.

    Выходные данные

    Выведите вещественное число — минимальное время, по истечении которого все школьники доберутся до места проведения экскурсии. Относительная или абсолютная погрешность ответа не должна превышать 10 - 6.

    Примечание

    В первом тестовом примере нужно сразу посадить все 5 школьников в автобус. Так как он едет со скоростью 2, а нужно преодолеть расстояние равное 10, то школьники доберутся до экскурсии за время равное 10 / 2 = 5.

    B. Клетки не под боем

    математика Структуры данных *1200

    У Васи есть изначально пустая квадратная шахматная доска размера n × n, и он последовательно выставляет на неё m ладей.

    Клетка поля находится под боем ладьи, если существует хотя бы одна ладья, находящаяся в том же столбце или в той же строке, что и эта клетка. Если в клетке находится ладья, то она также находится под боем.

    Вам известны позиции, в которые Вася будет выставлять ладей на доску. Перед вами стоит задача определить количество клеток, которые находятся не под боем, после каждой выставленной на доску ладьи.

    Входные данные

    В первой строке входных данных находятся два числа n и m (1 ≤ n ≤ 100 000, 1 ≤ m ≤ min(100 000, n2)) — размер доски и количество ладей, которые будут выставлены на доску.

    В следующих m строках следует по два целых числа xi и yi (1 ≤ xi, yi ≤ n) — номер строки и номер столбца клетки поля, в которую будет выставлена i-я ладья. Ладьи будут выставлять на доску в порядке следования во входных данных. Гарантируется, что в любую клетку поля будет выставлено не более одной ладьи.

    Выходные данные

    Выведите m чисел, i-е из которых равно количеству клеток, находящихся не под боем, после выставления на доску первых i ладей.

    Примечание

    На рисунке ниже изображено состояние доски после выставления каждой из трёх ладей. Серым цветом отмечены клетки, находящиеся не под боем.

    B. Степени двойки

    математика Перебор реализация Структуры данных *1500

    Вам задано n чисел a1, a2, ..., an. Найдите количество пар индексов i, j (i < j) таких, что ai + aj является степенью двойки (то есть найдется такое целое число x, что ai + aj = 2x).

    Входные данные

    В первой строке следует целое положительное число n (1 ≤ n ≤ 105) — количество чисел.

    Во второй строке следует n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

    Выходные данные

    Выведите количество пар индексов i, j (i < j) таких, что ai + aj является степенью числа 2.

    Примечание

    В первом примере в ответ входят следующие пары индексов: (1, 4) и (2, 4).

    Во втором примере каждая пара индексов (i, j) (где i < j) входит в ответ.

    D. Дорога до почты

    математика *1900

    У Василия есть машина и он хочет добраться от дома до почты. Расстояние, которое ему нужно преодолеть, равно d километрам.

    Машина у Василия не новая — после того, как она проезжает k километров, она каждый раз ломается и её надо чинить t секунд. После починки машины Василий может снова ехать на ней (но после k километров она опять сломается и так далее). Изначально, можно считать, что машина только что из ремонта.

    На проезд одного километра на машине Василий тратит a секунд, на похождение одного километра пешком — b секунд (a < b).

    Перед вами стоит задача определить, за какое минимальное время Василий сможет добраться до почты, если в любой момент времени он может оставить машину и пойти пешком?

    Входные данные

    В первой строке следует 5 целых положительных чисел d, k, a, b, t (1 ≤ d ≤ 1012; 1 ≤ k, a, b, t ≤ 106; a < b), где:

    • d — расстояние от дома до почты;
    • k — расстояние, которое может проехать машина без поломок;
    • a — время проезда одного километра на машине;
    • b — время прохождения одного километра пешком;
    • t — время, которое тратит Василий на ремонт автомобиля.
    Выходные данные

    Выведите минимальное время, по истечении которого Василий сможет добраться до почты.

    Примечание

    В первом примере Василию нужно проехать первые 2 километра на машине (за 2 секунды), а затем дойти оставшиеся 3 километра пешком (за 12 секунд). Таким образом, ответ равен 14-ти секундам.

    Во втором примере Василию выгодно проехать первые 2 километра на машине (за 2 секунды), затем починить машину (за 5 секунд) и проехать еще 2 километра на машине (за 2 секунды). После этого ему нужно дойти оставшийся 1 километр пешком (за 4 секунды). Таким образом, ответ равен 13-ти секундам.

    B. Мишка и путешествие

    математика реализация *1400

    Маленькая Мишка — большая путешественница. В каких только странах она не побывала! После долгих раздумий о том, куда бы поехать в этом году, выбор её пал на XXX — прекрасную, но малоизвестную северную страну.

    Вот несколько интересных фактов об этой стране:

    1. В состав XXX входят n городов, k из которых (только представьте себе!) являются столицами.
    2. Все города этой страны красивы, но по-разному. Красота i-го города описывается величиной ci.
    3. Все города последовательно соединены дорогами, включая 1-й и n-й город, образуя замкнутый маршрут 1 — 2 — ... — n — 1. Формально, для каждого 1 ≤ i < n существует дорога между городами i и i + 1, и еще одна между городами 1 и n.
    4. Каждый город-столица напрямую соединен дорогами со всеми остальными городами. Формально, если город x — столица, то для каждого 1 ≤ i ≤ n,  i ≠ x, существует дорога между городами x и i.
    5. Между любыми двумя городами существует не более одной дороги.
    6. Стоимость проезда между городами напрямую зависит от показателей их красоты. Так, если между городами i и j существует дорога, то стоимость проезда по ней равна ci·cj.

    Мишка уже начала собираться в путешествие, но ещё не определилась со своим маршрутом, а потому попросила вас помочь ей оценить суммарную стоимость проезда по всем дорогам XXX. Формально, по всем различным парам городов a и b (a < b), таких, что a и b соединены дорогой, требуется посчитать сумму произведений ca·cb. Поможете ей?

    Входные данные

    В первой строке входных данных содержатся числа n и k (3 ≤ n ≤ 100 000, 1 ≤ k ≤ n) — количество городов в XXX и количество столиц среди них соответственно.

    Во второй строке содержится n целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 10 000) — показатели красоты каждого из городов.

    В третьей строке содержится k различных целых чисел id1, id2, ... idk (1 ≤ idi ≤ n) — номера городов, являющихся столицами. Номера городов заданы в порядке возрастания.

    Выходные данные

    Выведите единственное целое число — суммарную стоимость проезда по всем существующим дорогам в XXX.

    Примечание

    Рисунок, описывающий первый пример:

    Несложно посчитать, что суммарная стоимость дорог равна 17.

    Рисунок, описывающий второй пример:

    Несложно посчитать, что суммарная стоимость дорог равна 71.

    C. Чёрная вдова

    графы дп математика реализация *2900

    Наталья Романова собирается протестировать новое оружие, которое ей выдали в S.H.I.E.L.D. Чтобы определить результат эксперимента, ей требуется найти количество решений следующего уравнения:

    Здесь означает логическое ИЛИ (OR), а означает логическое исключающее ИЛИ (то есть XOR), а vi, j — булевы переменные и их отрицания. Наталья называет левую часть уравнения XNF формулой. Каждое условие в скобках называется клаузой, а переменные vi, j — литералами.

    На самом деле в уравнении Натальи левая часть является 2-XNF-2 формулой от переменных x1, x2, ..., xm и их отрицаний. XNF формула называется 2-XNF-2 формулой, если:

    1. ki ≤ 2 для всех 1 ≤ i ≤ n, то есть размер каждой клаузы не превосходит двух.
    2. Каждая переменная встречается в формуле суммарно (как с отрицанием, так и без него) не более чем дважды. Обратите внимание, что переменная может дважды встретиться с отрицанием и ни разу без него (или наоборот).

    У Натальи есть формула от m переменных, состоящая из n клауз. Обязательно посмотрите на примеры, чтобы убедиться, что вы правильно понимаете, как задаётся формула.

    Наталья больше любит практику, чем теорию, поэтому просит вас найти количество решений уравнения, чтобы уже начать стрелять. Формально, требуется найти количество способов установить значения булевых переменных x1, ..., xm в true или false (всего существует 2m способов), так что равенство будет выполнено. Поскольку это число может быть очень большим, выведите остаток от его деления на 109 + 7.

    Обратите внимание, что какая-то переменная может дважды появиться в одной и той же клаузе, а может не появиться вообще ни разу (однако присвоение ей true или false всё равно даёт разные способы).

    Входные данные

    В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100 000) — количество клауз и количество переменных соответственно.

    В следующих n строках описывается формула. В i-й из них сначала следует число ki — количество литералов в i-й клаузе. Далее следуют ki ненулевых целых чисел ai, 1, ..., ai, ki. Если ai, j > 0, то vi, j равняется xai, j, в противном случае это отрицание x - ai, j (1 ≤ ki ≤ 2,  - m ≤ ai, j ≤ m, ai, j ≠ 0).

    Выходные данные

    Выведите ответ по модулю 1 000 000 007 (109 + 7).

    Примечание

    В первом примере уравнение имеет следующий вид:

    Во втором примере уравнение выглядит так:

    В третьем примере уравнение принимает вид:

    B. Человек-паук

    игры математика *1100

    Питер Паркер планирует сыграть с Доктором Октопусом в игру о циклах. Циклом называется последовательность вершин, такая что первая вершина соединена со второй, вторая — с третьей и так далее, а последняя, в свою очередь, соединена с первой. Цикл может состоять и из одной изолированной вершины.

    В начале игры имеются k циклов, i-й из которых состоит ровно из vi вершин. Игроки ходят по очереди, Питер ходит первым. За один ход игрок должен выбрать какой-нибудь цикл, состоящий хотя бы из 2 вершин (обозначим размер выбранного цикла за x), и заменить его двумя непустыми циклами размера p и x - p для некоторого 1 ≤ p < x, выбор которого остаётся на усмотрение игрока. Игрок, который не может сделать ход, проигрывает (и расстаётся с жизнью!).

    Питер хочет протестировать несколько изначальных конфигураций игры, перед тем как вступить в схватку с Доктором Октопусом. Изначально набор циклов пуст. Перед i-м тестом Питер добавляет в набор цикл, состоящий из ai вершин (обратите внимание: набор является мультимножеством, то есть может содержать несколько циклов одинакового размера). После добавления каждого цикла Питер хочет знать, кто выигрывает на текущем наборе?

    Питер вообще неплохо разбирается в математике, но сейчас решил обратиться к вам за помощью.

    Входные данные

    В первой строке входных данных записано целое число n (1 ≤ n ≤ 100 000) — количество тестов, которые собирается провести Питер.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), i-е из которых равно количеству вершин в цикле, добавленном перед i-м тестом.

    Выходные данные

    Выведите результаты всех тестов в порядке, в котором они проводятся. Выводите 1, если при оптимальной игре победит игрок, который ходит первым, и 2 в противном случае.

    Примечание

    Рассмотрим первый пример:

    В первом тесте Питера есть только один цикл, состоящий из 1 вершины, поэтому первый игрок не может сделать ход и проигрывает.

    Во втором тесте есть один цикл длины 1 и один цикл длины 2. Первый игрок делит второй цикл на два цикла длины 1, после чего второй игрок не может сделать ход и проигрывает.

    В третьем тесте имеются циклы размера 1, 2 и 3. Первый игрок может поделить последний цикл на циклы длины 1 и 2, после чего останется набор 1, 1, 2, 2, в котором можно сделать ровно два хода — делить циклы длины 2 на два цикла длины 1. Таким образом, оба игрока сделают по одному ходу, и второй проиграет.

    Рассмотрим второй тестовый пример:

    Циклы длины 1 бесполезны, потому что с ними никогда нельзя сделать ход, поэтому можно считать, что их просто нет.

    Когда появляется цикл длины 5, у первого игрока есть два варианта хода: поделить его на 1 и 4 или на 2 и 3.

    • Если поделить на циклы длины 1 и 4, то своим ходом второй игрок поделит 4 на два цикла длины 2, после чего останется два однозначно определяемых хода.
    • Если поделить на циклы длины 2 и 3, то второй игрок поделит цикл длины 3 на 2 и 1, опять оставив ситуацию когда есть два однозначных хода.

    Таким образом, второй игрок может гарантировать себе победу во всех тестах второго примера.

    C. Пифагоровы тройки

    математика теория чисел *1500

    Катя учится в пятом классе. В ее классе недавно проходили прямоугольные треугольники и теорему Пифагора. Оказывается, существуют такие тройки целых положительных чисел, что из трех отрезков, длины которых соответствуют тройке, можно составить прямоугольный треугольник. Подобные тройки чисел называются Пифагоровыми тройками.

    К примеру, Пифагоровыми тройками являются тройки чисел (3, 4, 5), (5, 12, 13) и (6, 8, 10).

    И вот Катя задалась вопросом: можно ли фиксировать длину одной из сторон прямоугольного треугольника и найти любую Пифагорову тройку, соответствующую ей? Заметьте, что сторона, длина которой фиксируется, может быть как катетом, так и гипотенузой.

    Катя без проблем справилась с этой задачкой. Интересно, а вы сможете?

    Входные данные

    В первой и единственной строке содержится целое число n (1 ≤ n ≤ 109) — длина одной из сторон прямоугольного треугольника.

    Выходные данные

    В единственной строке выведите два целых числа m и k (1 ≤ m, k ≤ 1018), такие что числа n, m и k образуют Пифагорову тройку.

    В случае, если Пифагоровой тройки, содержащей число n, не существует, выведите  - 1. Если ответов несколько, выведите любой.

    Примечание

    Иллюстрация к первому примеру из условия.

    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.

    E. Студенческий лагерь

    дп математика *3100

    Примерный студент МАИ Алёша получил путёвку в студенческий лагерь Алушта на берегу моря. К сожалению, рядом с лагерем наступила пора сильного бриза, и он рискует быть разрушенным!

    Здание лагеря представляет собой прямоугольник высотой n + 2 бетонных блока и шириной m блоков. Каждый день бриз дует с моря, и каждый блок, кроме блоков верхнего и нижнего ряда, левее которого нет других неразрушенных блоков, разрушается с вероятностью . Аналогично каждую ночь сильный бриз дует на море, и каждый блок, кроме верхнего и нижнего ряда, правее которого нет других неразрушенных блоков, разрушается с той же вероятностью p. Обратите внимание, что верхние и нижние блоки неразрушимы, то есть всего существует n·m разрушимых блоков.

    Время бурь продлится k дней и k ночей. В случае если за это время здание лагеря разделится на хотя бы две компоненты связности, оно разрушится, и Алёше придется искать другое времяпрепровождение на лето.

    Найдите вероятность того, что Алёше не придётся искать новое занятие на лето, и он сможет отдохнуть в летнем лагере.

    Входные данные

    В первой строке входных данных заданы два целых числа n и m (1 ≤ n, m ≤ 1500), определяющие размеры разрушимой части здания.

    Во второй строке заданы два целых числа a и b (1 ≤ a ≤ b ≤ 109), задающих вероятность разрушения блоков. Гарантируется, что числа a и b взаимно просты.

    В третьей строке задано целое число k (0 ≤ k ≤ 100 000) — количество дней и ночей, в течение которых будет дуть сильный ветер.

    Выходные данные

    Пусть ответ в виде несократимой дроби равен . Выведите одно целое число, равное . Гарантируется, что при данных ограничениях .

    Примечание

    В первом тестовом примере каждый из четырёх блоков разрушается с вероятностью . Для того чтобы здание не разрушилось, существует 7 вариантов того, как может выглядеть здание после одного дня, если оно не потеряло связность, то есть искомая вероятность равна , а значит нужно вывести

    B. Индикатор прогресса

    математика реализация *1300

    Индикатор прогресса (progress bar) — это элемент графического интерфейса, отображающий на сколько выполнен тот или иной процесс на данный момент. Рассмотрим следующий вид такого индикатора:

    Индикатор представляет собой n квадратиков, расположенный в ряд. Для определенности пронумеруем их натуральными числами от 1 до n слева направо. Каждый квадратик имеет насыщенность (ai для i-го квадратика), которая измеряется целым числом от 0 до k. При отображении индикатора для некоторого i (1 ≤ i ≤ n) квадратики 1, 2, ... , i - 1 имеют насыщенность k, квадратики i + 1, i + 2, ... , n имеют насыщенность 0, а насыщенность квадратика i может принимать любое значение от 0 до k.

    То есть в индикаторе всегда первые несколько квадратиков имеют насыщенность k, последние несколько квадратиков имеют насыщенность 0, отличную от 0 и k насыщенность может иметь не более одного квадратика.

    Степень завершенности процесса измеряется в процентах. Пусть процесс выполнен на t%. Тогда выполняется неравенство:

    Пример подобного индикатора можно видеть на рисунке.

    Для заданных n, k, t определите насыщенности всех квадратиков ai индикатора прогресса.

    Входные данные

    Через пробел перечислены 3 целых числа n, k, t (1 ≤ n, k ≤ 100, 0 ≤ t ≤ 100).

    Выходные данные

    Выведите n чисел. i-ое из них должно быть равно ai.

    C. Рыцари круглого стола

    дп математика теория чисел *1600

    За круглым столом сидят n рыцарей на одинаковом расстоянии друг от друга. Каждый из них пребывает либо в хорошем настроении, либо в плохом.

    Волшебник Мерлин предсказал королю Артуру, что грядущий месяц окажется особенно удачливым, если найдется такой правильный многоугольник, что во всех его вершинах находятся рыцари в хорошем настроении. Иначе грядущий месяц сулит неудачи.

    Выпуклый многоугольник называется правильным, если все его стороны равны, а так же равные все его углы. В этой задаче мы считаем правильными только многоугольники хотя бы с 3 вершинами, то есть невырожденные.

    На рисунке ниже приведены примеры таких многоугольников. Зеленые точки означают рыцарей в хорошем настроении, а красные - в плохом.

    Королю Артуру известны настроения всех рыцарей. Помогите ему узнать — будет следующий месяц удачливым или нет.

    Входные данные

    В первой строке находится число n — количество рыцарей за круглым столом (3 ≤ n ≤ 105). Во второй строке через пробел перечислены настроения всех n рыцарей в порядке обхода стола. «1» означает, что рыцарь пребывает в хорошем настроении, «0» — что в плохом.

    Выходные данные

    Выведите «YES» без кавычек, если следующий месяц окажется удачливым. Иначе выведите «NO».

    C. Магический нечётный квадрат

    Конструктив математика *1500

    Найдите матрицу n × n из различных чисел от 1 до n2 такую, что сумма в любой строке, столбце и обеих главных диагоналях нечётна.

    Входные данные

    В единственной строке находится нечётное целое число n (1 ≤ n ≤ 49).

    Выходные данные

    Выведите n строк по n целых чисел в каждой. Все числа должны быть различными и находиться в пределах от 1 до n2. Сумма в любой строке, столбце и обеих главных диагоналях должны быть нечётной.

    D. Две арифметические прогрессии

    математика теория чисел *2500

    Вам заданы две арифметические прогрессии: a1k + b1 и a2l + b2. Найдите количество целых чисел x таких, что L ≤ x ≤ R и x = a1k' + b1 = a2l' + b2, для некоторых целых k', l' ≥ 0.

    Входные данные

    В единственной строке находятся шесть целых чисел a1, b1, a2, b2, L, R (0 < a1, a2 ≤ 2·109,  - 2·109 ≤ b1, b2, L, R ≤ 2·109, L ≤ R).

    Выходные данные

    Выведите искомое количество целых чисел x.

    D. Направленные дороги

    графы Комбинаторика математика поиск в глубину и подобное *1900

    Кодер ZS и Бабуин Крис довольно долго путешествовали по Удайлэнду. Они узнали, что он состоит из n городов, пронумерованных от 1 до n.

    В Удайлэнде существует ровно n направленных дорог. i-ая из них выходит из города с номером i и ведет в другой город с номером ai (ai ≠ i). Кодер ZS может поменять направление любой из дорог в Удайлэнде, то есть, если дорога вела от города A к городу B до смены направления, она будет вести от города B к городу A после него.

    Кодер ZS считает дороги в Удайлэнде запутанными, если существует последовательность различных городов A1, A2, ..., Ak (k > 1), таких, что для каждого 1 ≤ i < k существует дорога, ведущая из города Ai в город Ai + 1 и еще одна из города Ak в город A1. Другими словами, дороги запутанные, если некоторые из них образуют направленный цикл из каких-то городов.

    Теперь Кодеру ZS'у интересно, сколько наборов дорог изначальной конфигурации (всего их 2n) он может выбрать, таких, что после смены направления каждой из дорог в наборе ровно по одному разу, результирующая сеть дорог не будет запутанной.

    Заметьте, что после смены направления позволяется существовать городу, из которого выходит несколько дорог, или городу, из которого не выходит ни одной дороги, или нескольким дорогам между одной и той же парой городов.

    Входные данные

    Первая строка содержит единственное целое число n (2 ≤ n ≤ 2·105) — количество городов в Удайлэнде.

    Следующая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ n, ai ≠ i), ai означает, что существует дорога, ведущая из города i в город ai.

    Выходные данные

    Выведите единственное целое число — количество способов поменять направление какого-нибудь набора дорог так, что весь набор дорог станет не запутанным. Так как ответ может быть очень большим, выведите остаток от его деления на 109 + 7.

    Примечание

    Рассмотрим первый пример из условия. Существует 3 города и 3 дороги. Города пронумерованы от 1 до 3, а дороги изначально имеют вид , , . Пронумеруем дороги от 1 до 3 в соответствующем порядке.

    Наборы дорог, для которых Кодер ZS может сменить направление (чтобы сделать дороги не запутанными), это наборы {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}. Заметьте, что пустой набор дорог не подходит, поскольку, если не менять направление ни одной дороги, то города 1, 2, 3 образуют направленный цикл, так что дороги будут запутанными. Аналогично, смена направления каждой дороги приводит к запутанной конфигурации. Таким образом, всего существует 6 возможных наборов, для которых Кодер ZS может поменять направление.

    Следующий рисунок изображает всевозможные способы ориентации дорог из первого примера так, что сеть дорог не является запутанной:

    E. ZS и Парадокс дней рождения

    математика Теория вероятностей теория чисел *2300

    Кодер ZS недавно узнал об интересной идее, так называемом Парадоксе дней рождения. Он утверждает, что среди произвольной группы из 23 человек с примерно 50% вероятностью найдутся двое, дни рождения которых совпадают. Кодер ZS нашел это очень интересным, и решил проверить это на жителях Удайлэнда.

    Продолжительность года в Удайлэнде равна 2n дням. Кодер ZS хочет расспросить k жителей Удайлэнда, день рождения каждого из которых совпадает с одним из 2n дней (с равной вероятностью). ZS'а интересует вероятность того, что хотя бы двое из них родились в один и тот же день.

    Кодер ZS знает, что ответ можно записать в виде несократимой дроби . Он хочет найти значения A и B (ему не нравится работать с вещественными числами). Поможете ему?

    Входные данные

    Первая и единственная строка содержит два целых числа n и k (1 ≤ n ≤ 1018, 2 ≤ k ≤ 1018), означающих, что в продолжительность года — 2n дней, а Кодер ZS хочет расспросить ровно k людей.

    Выходные данные

    Если вероятность того, что хотя бы двое из k людей имеют совпадающий день рождения в году продолжительностью 2n дней, равняется (A ≥ 0, B ≥ 1, ), выведите A и B в единственной строке.

    Так как эти числа могут быть очень большими, выведите остатки от их деления на 106 + 3. Заметьте, что A и B должны быть взаимно простыми до того, как берутся их остатки от деления на 106 + 3.

    Примечание

    В первом примере из условия, продолжительность года в Удайлэнде равна 23 = 8 дней. Вероятность того, что 2 человека имеют день рождения в один и тот же день среди группы из 2 человек, очевидно равна , поэтому A = 1, B = 8.

    Во втором примере из условия, в Удайлэнде всего 21 = 2 дня в году, но группа состоит из 3 человек, поэтому в любом случае у двоих из них совпадут дни рождения. Таким образом, вероятность равна 1 и A = B = 1.

    A. Мемори и вороны

    математика реализация *800

    В ряд записаны n целых чисел b1, b2, ..., bn. Для всех i от 1 до n специальная ворона вычисляет значение ai по следующей процедуре:

    • Ворона устанавливает ai равным 0.
    • Затем ворона прибавляет bi к ai, потом вычитает bi + 1, потом прибавляет bi + 2 и так далее. Формально: ai = bi - bi + 1 + bi + 2 - bi + 3....

    Мемори собрала с ворон значения a1, a2, ..., an и теперь хочет восстановить изначальную последовательность b1, b2, ..., bn, сможете ли вы помочь ей в этом?

    Входные данные

    В первой строке входных данных записано целое число n (2 ≤ n ≤ 100 000) — количество чисел в обеих последовательностях.

    В следующей строке записаны n целых чисел, i-е из которых равняется ai ( - 109 ≤ ai ≤ 109).

    Выходные данные

    Выведите n целых чисел, соответствующих последовательности b1, b2, ..., bn. Гарантируется, что ответ единственный и помещается в 32-битный целочисленный тип.

    Примечание

    В первом примере вороны сообщают значения 6,  - 4, 8,  - 2 и 3, для индексов 1, 2, 3, 4 и 5 соответственно. Можно проверить, что исходная последовательность 2, 4, 6, 1, 3 дала бы именно такие ответы. Например, 6 = 2 - 4 + 6 - 1 + 3, а  - 4 = 4 - 6 + 1 - 3.

    Во втором примере последовательность 1,  - 3, 4, 11, 6 соответствует информации, полученной от ворон. Например, 5 = 11 - 6, а 6 = 6.

    C. Мемори и деволюция

    жадные алгоритмы математика *1600

    Мемори изучает деволюцию различных объектов, в данный момент треугольников. Она начинает с равностороннего треугольника со сторонами, равными x, и хочет выполнить несколько операций так, чтобы получить равносторонний треугольник со сторонами y.

    За одну секунду Мемори может изменить длину ровно одной стороны текущего треугольника так, чтобы он оставался невырожденным треугольником (то есть треугольником ненулевой площади). В любой момент времени все стороны треугольника должны иметь целочисленную длину.

    За какое минимальное количество секунд Мемори сможет получить равносторонний треугольник с длиной стороны y?

    Входные данные

    В единственной строке входных данных записаны два целых числа x и y (3 ≤ y < x ≤ 100 000) — изначальная и желаемая длина всех сторон треугольника соответственно.

    Выходные данные

    Выведите одно целое число — минимальное количество секунд, которое потребуется Мемори, чтобы получить равносторонний треугольник со стороной y, если она начинает с равностороннего треугольника со стороной x.

    Примечание

    В первом примере Мемори начинает с равностороннего треугольника со стороной 6 и хочет получить равносторонний треугольник со стороной 3. Обозначим треугольник со сторонами a, b и c как (a, b, c). Мемори может выполнить следующие преобразования: .

    Во втором примере Мемори может проделать такие изменения: .

    В третьем примере возможным ответом является .

    D. Мемори и игра

    дп Комбинаторика математика *2200

    Мемори и ее друг Лекс соревнуются, кто наберёт большее количество баллов в одной популярной игре. Изначально у Мемори a очков, а у Лекса b очков. За один ход и Мемори, и Лекс получают какое-то количество очков в диапазоне [ - k;k] (то есть одно целое число из множества  - k,  - k + 1,  - k + 2, ...,  - 2,  - 1, 0, 1, 2, ..., k - 1, k) и прибавляют его к своему текущему счёту. Игра состоит ровно из t раундов. Однако, Мемори и Лекс играют довольно плохо, поэтому каждый из них просто получает в каждом из раундов случайное число.

    Мемори хочет знать количество различных сценариев игры, в которых у неё в конце будет строго больше очков, чем у Лекса. Два сценария игры считаются различными, если существует раунд, в котором хотя бы один из двух игроков получил разное количество очков. Таким образом, всего существует (2k + 1)2t различных сценариев игры. Поскольку ответ может быть очень большим, выведите остаток от его деления на 109 + 7.

    Входные данные

    В первой и единственной строке входных данных записаны четыре целых числа a, b, k и t (1 ≤ a, b ≤ 100, 1 ≤ k ≤ 1000, 1 ≤ t ≤ 100) — количество очков и Мемори, и Лекса в начале игры, а также число k и количество раундов соответственно.

    Выходные данные

    Выведите количество сценариев игры, интересных Мемори по модулю 1 000 000 007 (109 + 7).

    Примечание

    В первом примере Мемори начинает с 1, а Лекс с 2. Если Лекс получит  - 2 очка, то Мемори может получить 0, 1 или 2, чтобы победить. Если Лекс получит  - 1 очков, то Мемори для победы нужно 1 или 2. Если Лекс получит 0, то Мемори подойдёт только 2. Если же Лекс получит 1 или 2 очка, то Мемори уже не сможет победить. Таким образом, существует 3 + 2 + 1 = 6 возможных сценариев игры, в которых Мемори побеждает.

    E. Мемори и казино

    математика Структуры данных Теория вероятностей *2500

    В ряд расположены n казино. Если Мемори играет в казино i, то с вероятностью pi она выигрывает и переходит в казино справа (i + 1) или уходит совсем (если i = n), а с вероятностью 1 - pi она проигрывает и двигается налево (i - 1) или тоже уходит (если i = 1).

    Будем говорить, что Мемори доминирует на отрезке i... j, если её перемещения удовлетворяют следующим условиям:

    • Она начинает в казино i.
    • Она никогда не проигрывает в казино i.
    • Она завершает путешествие по отрезку победой в казино j.

    Обратите внимание, что если Мемори пойдет налево из казино 1 или направо из казино n, то её прогулка по казино сразу завершается.

    Теперь Мемори хочет, чтобы вы обработали для неё несколько запросов:

    • 1 i a b: присвоить .
    • 2 l r: вывести вероятность того, что Мемори будет доминировать на отрезке l... r, то есть вероятность того, что, начав в казино l, она впервые выйдет за пределы отрезка l... r после победы в казино r.

    Гарантируется, что в любой момент времени последовательность p неубывающая, то есть pi ≤ pi + 1 для всех i от 1 до n - 1.

    Входные данные

    В первой строке входных данных записаны два целых числа n и q (1 ≤ n, q ≤ 100 000) — количество казино и количество запросов соответственно.

    В следующих n строках содержатся целые числа ai и bi (1 ≤ ai < bi ≤ 109) — дробь определяет вероятность pi выиграть в казино i.

    Следующие q строк содержат запросы в одном из двух видов, описанных в условии (1 ≤ a < b ≤ 109, 1 ≤ i ≤ n, 1 ≤ l ≤ r ≤ n).

    Гарантируется, что во входных данных встретится хотя бы один запрос типа 2, то есть выходные данные будут не пусты. Дополнительно гарантируется, что в любой момент времени последовательность p является неубывающей.

    Выходные данные

    Для каждого запроса типа 2 выведите одно вещественное число — вероятность того, что Мемори будет доминировать на соответствующем интервале. Ваш ответ будет считаться правильным, если его абсолютная ошибка не будет превосходить 10 - 4.

    А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если |a - b| ≤ 10 - 4.

    A. Встреча друзей

    математика реализация *1100

    Сегодня в большом лесу произойдёт долгожданное событие — ёжик Филя приедет погостить к своей подруге Соне!

    Соня — сова, поэтому она днём спит, а в с минуты l1 по r1 включительно она готова развлекать гостя. Также в течение минуты k Соня отвлекается на чистку перьев и забывает обо всём. В этот момент она не может развлекать Филю.

    Филя очень много работает, поэтому планирует приехать в гости с минуты l2, по минуту r2 включительно.

    Определите, сколько минут Филя и Соня смогут провести вместе.

    Входные данные

    В единственной строке входных данных записаны целые числа l1, r1, l2, r2 и k (1 ≤ l1, r1, l2, r2, k ≤ 1018, l1 ≤ r1, l2 ≤ r2) — границы отрезков времени, когда друзья могут уделить время друг другу, и минута, в течение которой Соня чистит перья.

    Выходные данные

    Выведите одно целое число — количество минут, которые Соня и Филя смогут провести вместе.

    Примечание

    В первом примере друзья общаются в течение 9-й и 10-й минут.

    Во втором примере друзья общаются с 50-й по 74-ю минуту и затем с 76-й по 100-ую.

    A. Плюс и квадратный корень

    Конструктив математика *1600

    Кодер ZS играет в игру. В игре есть число, которое отображается на экране и две кнопки, ' + ' (плюс) и '' (квадратный корень). Изначально на экране отображается число 2. В игре всего n + 1 уровень и Кодер ZS начинает на уровне 1.

    Когда Кодер ZS находится на уровне k, он может:

    1. Нажать кнопку ' + '. Эта операция увеличивает число на экране ровно на k. Таким образом, если на экране отображалось число x, оно становится равным x + k.
    2. Нажать кнопку ''. Пусть на экране отображается число x. После нажатия этой кнопки число становится равным . После этого Кодер ZS переходит на следующий уровень, так что его текущий уровень становится равным k + 1. Эта кнопка может быть нажата только когда x является полным квадратом, т.е. x = m2 для некоторого целого положительного m.

    В дополнение, после каждого хода, если Кодер ZS находится на уровне k и число на экране равно m, то m должно делиться на k. Заметьте, что это условие проверяется только после нажатия на кнопку, к примеру, если Кодер ZS находится на уровне 4 и текущее число равно 100, он нажимает кнопку '' и число становится равным 10. В этот момент 10 не делится на 4, однако нажатие все же корректно, так как после него Кодер ZS находится на уровне 5, а 10 делится на 5.

    Кодеру ZS'у нужна ваша помощь в прохождении игры — он хочет достичь уровня n + 1. Другими словами, ему нужно нажать кнопку '' n раз. Помогите ему определить, сколько раз ему следует нажимать кнопку ' + ' перед нажатием кнопки '' на каждом уровне.

    Заметьте, что Кодер ZS хочет найти любую последовательность нажатий, позволяющую достичь уровня n + 1, но не обязательно такую, в которой число нажатий минимально.

    Входные данные

    Первая и единственная строка входных данных содержит единственное целое число n (1 ≤ n ≤ 100 000), означающее, что Кодер ZS хочет достичь уровня n + 1.

    Выходные данные

    Выведите n неотрицательных целых чисел, по одному в строке. i-ое из них должно равняться количеству раз, сколько Кодеру ZS'у нужно нажать кнопку ' + ' перед нажатием кнопки '' на уровне i.

    Каждое число не должно превышать 1018. Впрочем, число на экране может превышать 1018.

    Гарантируется, что хотя бы одно решение существует. Если существует несколько решений, выведите любое из них.

    Примечание

    В первом примере из условия:

    На первом уровне, Кодер ZS нажимает кнопку ' + ' 14 раз (а число на экране изначально равно 2), так что число становится равным 2 + 14·1 = 16. Затем Кодер ZS нажимает кнопку '' и число становится равным .

    После этого, на втором уровне, ZS нажимает кнопку ' + ' 16 раз, так что число становится равным 4 + 16·2 = 36. Затем ZS нажимает кнопку '', переходя на следующий уровень и меняя число на .

    Наконец, на третьем уровне, ZS нажимает кнопку ' + ' 46 раз, так что число становится равным 6 + 46·3 = 144. После этого он нажимает кнопку '' опять, меняя число на .

    Число 12 безусловно делится на 4, так что Кодер ZS может достигнуть уровня 4.

    Заметьте так же, что нажатие кнопки ' + ' 10 раз на третьем уровне перед переходом на следующий уровень не работает, так как число станет равным 6 + 10·3 = 36, и когда кнопка '' будет нажата, число станет , а Кодер ZS окажется на уровне 4. Впрочем, 6 не делится на 4, так что это неправильное решение.

    Во втором примере из условия:

    На первом уровне Кодер ZS нажимает кнопку ' + ' 999999999999999998 раз (а число на экране изначально равно 2), так что число становится равным 2 + 999999999999999998·1 = 1018. Затем Кодер ZS нажимает кнопку '' и число становится равным .

    После этого, на втором уровне, ZS нажимает кнопку ' + ' 44500000000 раз, так что число становится равным 109 + 44500000000·2 = 9·1010. Затем ZS нажимает кнопку '', переходя на следующий уровень и меняя число на .

    Число 300000 делится на 3, так что Кодер ZS может достигнуть уровня 3.

    E. Дополни перестановки

    бпф графы Комбинаторика математика *3400

    Кодеру ZS'у даны две перестановки p и q множества {1, 2, ..., n}, но некоторые из их элементов заменены 0. Расстояние между двумя перестановками p и q определяется как минимальное количество обменов двух элементов, необходимое, чтобы превратить p в q. ZS может менять местами только любые два элемента перестановки p.

    Кодер ZS хочет найти количество способов заменить нули положительными целыми числами из множества {1, 2, ..., n} так, что p и q будут являться перестановками {1, 2, ..., n}, а расстояние между p и q в точности равно k.

    Кодер ZS хочет найти ответ для всех 0 ≤ k ≤ n - 1. Поможете ему?

    Входные данные

    Первая строка входных данных содержит целое число n (1 ≤ n ≤ 250) — количество элементов в перестановках.

    Вторая строка содержит n целых чисел, p1, p2, ..., pn (0 ≤ pi ≤ n) — перестановка p. Гарантируется, что существует хотя бы один способ заменить нули так, что p станет перестановкой {1, 2, ..., n}.

    Вторая строка содержит n целых чисел, q1, q2, ..., qn (0 ≤ qi ≤ n) — перестановка q. Гарантируется, что существует хотя бы один способ заменить нули так, что q станет перестановкой {1, 2, ..., n}.

    Выходные данные

    Выведите n целых чисел, i-е из них должно соответствовать ответу для k = i - 1. Так как ответ может быть довольно большим, а Кодер ZS любит странные простые числа, выведите ответы по модулю 998244353 = 223·7·17 + 1, который является простым.

    Примечание

    В первом примере из условия существует всего один способ заменить нули так, что потребуется 0 обменов для превращения p в q — это p = (1, 2, 3), q = (1, 2, 3).

    Существует два способа заменить нули так, что требуется 1 обмен для превращения p в q. Один из них — p = (1, 2, 3), q = (3, 2, 1), тогда обмен 1 и 3 в p превращает ее в q. Другой способ — p = (1, 3, 2), q = (1, 2, 3). В этом случае работает обмен 2 и 3.

    Наконец, существует всего один способ заменить нули так, что потребуется 2 обмена для превращения p в q — p = (1, 3, 2), q = (3, 2, 1). Тогда мы можем превратить p в q вот так: .

    A. Организация фестиваля

    Комбинаторика математика теория чисел *2900

    Прокопатели — известная музыкальная группа, поэтому уже 80 лет их приглашают на фестиваль ENTER, чтобы выступить в качестве неожиданных гостей. В начале своей карьеры они были не так успешны, поэтому зарабатывали на жизнь копанием каналов, откуда и произошло название группы. В любом случае, они очень любят ездить в турне, и их энергии хватает на невероятно долгие поездки. Однако, они терпеть не могут проводить два последовательных дня не давая концерта, поэтому стараются избегать такой ситуации.

    Турне определяется как последовательность концертов и выходных дней. Требуется посчитать количество способов выбрать k различных турне одинаковой длины между l и r.

    Например, пусть k = 2, l = 1 и r = 2. Будем обозначать день с концертом как {1}, а выходной как {0}. Возможными турами являются: {0}, {1}, {00}, {01}, {10}, {11}, но тур {00} не подходит, поскольку содержит два выходных дня подряд. Теперь найдём количество способов выбрать k = 2 тура одинаковой длины в диапазоне длин [1;2]. Перечислим их: {0,1}; {01,10}; {01,11}; {10,11}.

    Поскольку расписание Прокопателей уже достаточно плотно занято, то они просят вас посчитать ответ по модулю 1 000 000 007 (109 + 7).

    Входные данные

    В первой строке входных данных записаны три целых числа k, l и r (1 ≤ k ≤ 200, 1 ≤ l ≤ r ≤ 1018).

    Выходные данные

    Выведите одно целое число: остаток от деления количества способов выбрать k различных туров одинаковой длины на 1 000 000 007.

    H. Лига покермонов

    математика Теория вероятностей *2400

    Добро пожаловать в мир покермонов, жёлтых мышеподобных существ, обожающих играть в покер!

    Для распределения по покермонским лигам зарегистрировались n тренеров и существует t команд, каждая из которых должна быть определена в одну из конференций. Поскольку отношения между тренерами сильно натянутые, есть e пар тренеров, которые ненавидят друг друга. Отношение ненависти взаимно, все пары различны, никакой тренер не ненавидит сам себя. У каждого тренера есть список команд длиной li, в которые он хотел бы вступить.

    Вам требуется распределить тренеров по командам и команды по конференциям таким образом, что выполнены следующие условия:

    • каждый тренер попадёт ровно в одну команду;
    • каждая команда будет только в одной конференции;
    • уровень ненависти между конференциями будет хотя бы e / 2;
    • каждый тренер будет в команде из своего списка.

    Уровень ненависти между конференциями определяется как количество пар тренеров в командах из разных конференций, которые ненавидят друг друга.

    Входные данные

    В первой строке входных данных записаны два целых числа n (4 ≤ n ≤ 50 000) и e (2 ≤ e ≤ 100 000) — количество тренеров покермонов и количество пар тренеров, которые ненавидят друг друга.

    Тренеры нумеруются от 1 до n. В последующих e строках даны пары целых чисел a и b (1 ≤ a, b ≤ n), означающих, что пара тренеров a и b ненавидит друг друга.

    Следующие 2n строк описывают предпочтения тренеров в порядке от тренера 1 к тренеру n. Сначала следует число li (16 ≤ li ≤ 20) — количество команд в списке предпочтений данного тренера, затем li индексов команд ti, j (1 ≤ ti, j ≤ T) — номера команд, в которые хотел бы вступить данный тренер.

    В списке одного тренера каждая команда встретиться не более одного раза. Команды в списках нумеруются таким образом, что каждое число из множества {1, 2, 3, …, T} встречается хотя бы один раз. Здесь T может быть до 1 000 000.

    Выходные данные

    Выведите две строки. В первой строке должно содержаться n чисел, определяющих в какую команду должен вступить каждый из тренеров. Во второй строке должно содержаться t чисел, определяющих к какой конференции должна принадлежать соответствующая команда (1 или 2).

    A. Ефим и странная оценка

    дп математика реализация *1700

    Ефим только что получил оценку за контрольную работу. Сначала он расстроился, увидев её, поскольку ожидал увидеть более приятный результат. Но затем он придумал хитрый план, как улучшить свой балл.

    Ефим учится в необычной школе, так что оценка может выражаться очень длинным дробным числом. За одну секунду Ефим может попросить учителя округлить результат в произвольном месте после запятой (в том числе округлить до целого числа).

    До конца перемены осталось t секунд, так что Ефиму нужно незамедлительно действовать. Помогите ему определить максимальный результат, который он сможет получить, потратив на это не более t секунд. Обратите внимание, что Ефим может использовать не все t секунд, в том числе он может вообще ни разу не попросить учителя округлить оценку.

    В данной задаче используются классические правила округления: если выполняется округление до разряда n, то смотрят на цифру, стоящую в разряде n + 1. Если эта цифра меньше 5, то разряд n остаётся без изменений, а все последующие цифры заменяются на 0 (и отбрасываются). Если же в разряде n + 1 стоит цифра 5 или больше, то цифра в разряде n увеличивается на 1, выполняются все необходимые переносы (если требуется), все последующие разряды заменяются на 0. В конце все нули обязательно отбрасываются.

    Например, если число 1.14 округлить до первого разряда после запятой, то получится 1.1, а если если округлить до целых число 1.5, то получится 2. Округление числа 1.299996121 до пятого знака после запятой даст число 1.3.

    Входные данные

    В первой строке входных данных содержатся два целых числа n и t (1 ≤ n ≤ 200 000, 1 ≤ t ≤ 109) — длина оценки, полученной Ефимом, и количество секунд до конца перемены соответственно.

    Во второй строке записана сама оценка. Гарантируется, что оценка является положительным числом, в ней присутствует хотя бы одна цифра после запятой и её запись не заканчивается на 0.

    Выходные данные

    Выведите максимальный результат, который может получить Ефим. Не выводите незначащие нули.

    Примечание

    В первых двух примерах изначальная оценка Ефима 10.245. За первую секунду Ефим может получить 10.25, а за вторую — 10.3. Обратите внимание, что ответ 10.30 будет засчитан как неверный.

    В третьем примере Ефиму невыгодно округлять полученную оценку.

    C. Саша и массив

    математика матрицы Структуры данных *2300

    У Саши есть массив целых чисел a1, a2, ..., an. Необходимо быстро выполнить m запросов. Запросы бывают двух типов:

    1. 1 l r x — увеличить все числа на отрезке от l до r на значение x;
    2. 2 l r — найти , где f(x) — х-е число Фибоначчи. Поскольку эта величина может быть очень большой, выведите остаток от её деления на 109 + 7.

    В данной задаче определим числа Фибоначчи следующим образом: f(1) = 1, f(2) = 1, f(x) = f(x - 1) + f(x - 2) для x > 2.

    Саша — очень талантливый мальчик. Он в уме отвечает на все запросы за пять секунд. Получится ли у вас написать программу, которая не уступит ему в скорости?

    Входные данные

    В первой строке входных данных содержатся два числа n и m (1 ≤ n ≤ 100 000, 1 ≤ m ≤ 100 000) — количество элементов массива и количество запросов соответственно.

    В следующей строке содержатся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

    Следующие m строк описывают запросы. В каждой из них находятся числа tpi, li, ri и, возможно, xi (1 ≤ tpi ≤ 2, 1 ≤ li ≤ ri ≤ n, 1 ≤ xi ≤ 109), (tpi = 1 соответствует запросу первого типа, tpi = 2 — второго).

    Гарантируется, что во входных данных будет присутствовать хотя бы один запрос второго типа.

    Выходные данные

    Для каждого запроса второго типа в отдельной строке выведите ответ на запрос по модулю 109 + 7.

    Примечание

    Изначально массив a равен 1, 1, 2, 1, 1.

    Ответ на первый запрос равен f(1) + f(1) + f(2) + f(1) + f(1) = 1 + 1 + 1 + 1 + 1 = 5.

    После запроса 1 2 4 2 массив a равен 1, 3, 4, 3, 1.

    Ответ на второй запрос равен f(3) + f(4) + f(3) = 2 + 3 + 2 = 7.

    Ответ на третий запрос равен f(1) + f(3) + f(4) + f(3) + f(1) = 1 + 2 + 3 + 2 + 1 = 9.

    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) минимизировать не требуется.

    При выводе последовательности следуйте формату примеров.

    C. Замечательные числа

    *особая задача математика *1200

    Натуральное число a является делителем натурального числа b тогда и только тогда, когда существует натуральное число c, такое что a × c = b.

    Царь Астиаг называет натуральное число замечательным, если количество его четных делителей совпадает с количеством его нечетных делителей.

    Например, у числа 3 всего два делителя 3 и 1, оба — нечетные. Значит 3 — не замечательное число. Но, например, число 2 делится на 2 и на 1. Один делитель четный, другой — нечетный, значит 2 — замечательное число.

    Определите, является ли заданное натуральное число x замечательным.

    Входные данные

    В первой строке записано одно натуральное число x (1 ≤ x ≤ 103).

    Выходные данные

    Выведите yes, если число x — замечательное. Иначе выведите no. Регистр значения не имеет.

    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 (слева направо).

    Выходные данные

    Выведите одно число, минимальной количество скважин, которое должен выкопать доктор Мосаддык, чтобы выкачать всю нефть.

    Это количество совпадает с количеством областей, на которые распадается прямоугольник после удаления всех пустых строк и столбцов.

    B. Пароли

    математика реализация сортировки Строки *1100

    Ваня собирается зайти на свой любимый сайт Codehorses. Всего Ваня использует n различных паролей для сайтов, однако, какой именно пароль он указывал при регистрации на Codehorses, он не помнит.

    Ваня будет вводить пароли в порядке неубывания их длин, а пароли одинаковой длины — в произвольном порядке. Как только Ваня введет правильный пароль, он сразу окажется авторизован на сайте. Ваня не будет вводить один и тот же пароль несколько раз.

    На ввод любого пароля Ваня тратит одну секунду. Однако, если Ваня k раз введет неправильный пароль, то следующую попытку ввода он сможет совершить только через 5 секунд. Каждую попытку ввода Ваня совершает незамедлительно, то есть всегда, когда у него есть возможность вводить очередной пароль, Ваня этим занят.

    Сообщите, сколько секунд потребуется Ване, чтобы зайти на Codehorses, в лучшем для него случае (если он потратит минимально возможное количество секунд) и в худшем для него случае (если он потратит максимально возможное количество секунд).

    Входные данные

    В первой строке входных данных содержится два целых числа n и k (1 ≤ n, k ≤ 100) — количество паролей Вани и количество неудачных попыток, после которых доступ к сайту блокируется на 5 секунд.

    В следующих n строках содержатся пароли, по одному в строке — различные непустые строки, состоящие из букв латинского алфавита и цифр. Длина каждого пароля не превосходит 100 символов.

    Заключительная строка входных данных содержит пароль Вани к Codehorses. Гарантируется, что пароль Вани к Codehorses совпадает с одним из n его паролей.

    Выходные данные

    Выведите два целых числа — время (в секундах), которое потребуется Ване для авторизации на Codehorses в лучшем для него случае и худшем для него случае соответственно.

    Примечание

    Рассмотрим первый тест. Так как все пароли одинаковой длины, Ваня может ввести правильный пароль как первым, так и последним. Если он вводит правильный пароль первым, то он тратит на это ровно 1 секунду. Следовательно, ответ в лучшем случае равен 1. Если же он вводит его последним, до этого он введёт остальные 4 пароля. Он потратит 2 секунды на ввод первых 2 неправильных паролей, после этого ему придется подождать 5 секунд, так как он ввёл 2 неправильных пароля. Потом он потратит ещё 2 секунды на ввод 2 неправильных паролей, опять подождёт 5 секунд и наконец введёт верный пароль, потратив на это ещё 1 секунду. Итого в худшем случае он сможет авторизоваться за 15 секунд.

    Рассмотрим второй тест. Как бы Ваня ни вводил пароли, он не сможет добиться того, чтобы доступ к сайту заблокировался. Так как необходимый пароль имеет длину 2, Ваня в любом случае введёт сначала все пароли длины 1, потратив на это 2 секунды. Затем, в лучшем случае, он сразу введёт необходимый пароль, и ответ в лучшем случае будет равен 3, а в худшем случае сначала введёт неверный пароль длины 2, и только потом верный, и потратит 4 секунды.

    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, а произведение всех элементов массива должно быть минимально возможным.

    Если ответов несколько, выведите любой.

    A. Новый год: встреча друзей

    математика реализация сортировки *800

    В Лайнландии на прямой Ox живут три друга. Первый живет в точке x1, второй живет в точке x2, а третий — в точке x3. Они собираются вместе встретить Новый Год, для чего им необходимо всем оказаться в одной точке. Какое минимальное суммарное расстояние им надо пройти, чтобы собраться вместе в одной точке и встретить Новый год?

    Гарантируется, что правильный ответ всегда является целым числом.

    Входные данные

    В первой строке следует три различных целых числа x1, x2 и x3 (1 ≤ x1, x2, x3 ≤ 100) — координаты домов первого, второго и третьего друга.

    Выходные данные

    Выведите единственное целое число — минимальное суммарное расстояние, которое нужно пройти друзьям, чтобы собраться вместе.

    Примечание

    В первом тестовом примере друзья должны встретиться в точке 4. Таким образом, первый друг должен пройти расстояние 3 (от точки 7 до точки 4), второй друг также должен пройти расстояние 3 (от точки 1 до точки 4), а третий друг не должен никуда идти, так как живёт в точке 4.

    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).

    G. Xor-матическое число графа

    битмаски графы Деревья математика теория чисел *2600

    Вам дан неориентированный граф, состоящий из n вершин и m ребер. На каждом ребре написано целое неотрицательное число.

    Назовем тройку чисел (u, v, s) интересной, если 1 ≤ u < v ≤ n и между вершинами u и v существует путь (необязательно простой, то есть может содержать какие-то вершины и рёбра по несколько раз), такой что xor чисел, написанных на рёбрах этого пути, равен s. При вычислении значения s для какого-нибудь пути, каждое ребро участвует в xor столько раз, сколько раз оно встречает на данном пути. Нетрудно доказать, что таких троек конечное количество.

    Посчитайте сумму по модулю 109 + 7 значений числа s по всем интересным тройкам.

    Входные данные

    Первая строка входных данных содержит два числа n и m (1 ≤ n ≤ 100 000, 0 ≤ m ≤ 200 000) — количество вершин и рёбер в заданном графе.

    Следующие m строк содержат по три целых числа ui, vi и ti (1 ≤ ui, vi ≤ n, 0 ≤ ti ≤ 1018, ui ≠ vi) — номера вершин, которые соединяет i-е ребро, и число, написанное на этом ребре. Гарантируется, что граф не содержит петель и кратных рёбер.

    Выходные данные

    Выведите единственное число, равное искомой сумме по модулю 109 + 7.

    Примечание

    В первом примере существует 6 интересных троек:

    1. (1, 2, 1)
    2. (1, 3, 2)
    3. (1, 4, 3)
    4. (2, 3, 3)
    5. (2, 4, 2)
    6. (3, 4, 1)
    Искомая сумма равна 1 + 2 + 3 + 3 + 2 + 1 = 12.

    В втором примере существует 12 интересных троек:

    1. (1, 2, 1)
    2. (2, 3, 2)
    3. (1, 3, 3)
    4. (3, 4, 4)
    5. (2, 4, 6)
    6. (1, 4, 7)
    7. (1, 4, 8)
    8. (2, 4, 9)
    9. (3, 4, 11)
    10. (1, 3, 12)
    11. (2, 3, 13)
    12. (1, 2, 14)
    Искомая сумма равна 1 + 2 + 3 + 4 + 6 + 7 + 8 + 9 + 11 + 12 + 13 + 14 = 90.

    B. Еда в самолёте

    математика реализация *1200

    В самолёте SuperPuperJet бесконечное количество рядов, пронумерованных положительными целыми числами, начиная с 1, в порядке от кабины пилотов к хвосту самолёта. В каждом ряду по шесть мест, обозначенных буквами от «a» до «f». Места «a», «b» и «c» расположены по левую сторону от прохода (если смотреть в сторону кабины), а места «d», «e» и «f» — по правую. При этом места «a» и «f» расположены рядом с окнами, а места «c» и «d» — у прохода.

     

    Пришло время обеда, и две стюардессы приступили к раздаче еды. Для этого они двигаются от первых рядов к хвосту, при этом всё время стоят друг от друга через ряд, из-за наличия между ними тележки с едой. Таким образом, в начале одна стюардесса обслуживает ряд 1, а другая ряд 3. Как только оба ряда будут обслужены, они передвинут тележку на один ряд вперёд, после чего первая стюардесса обслужит ряд 2, а вторая — ряд 4. Затем они сдвинутся на три ряда, первая стюардесса обслужит ряд 5, а вторая — ряд 7, после чего они опять сдвинутся на один ряд вперёд и так далее.

    Стюардессы работают с одинаковой скоростью, обслуживая одного пассажира за 1 секунду и передвигаясь вперёд на один ряд также за 1 секунду. Каждая стюардесса сначала обслуживает пассажиров на местах справа от прохода (то есть по левую руку от себя, так как стюардессы смотрят в сторону хвоста), а затем пассажиров слева от прохода. При этом пассажиры всегда обслуживаются в порядке от окна к центру. Таким образом, в каждом ряду первым будет обслужен пассажир на месте «f», а последним — пассажир на месте «c». Считайте, что все места в самолёте заняты.

    Вася сидит на месте s в ряду n и хочет узнать, через сколько секунд он получит свой долгожданный обед.

    Входные данные

    В единственной строке входных данных описывается место Васи в формате ns, где n (1 ≤ n ≤ 1018) — номер ряда и s — место в данном ряду, обозначенное символом от «a» до «f». Номер ряда и номер места не разделяются пробелом.

    Выходные данные

    Выведите единственное целое число — количество секунд, через которое Вася получит свой обед.

    Примечание

    В первом примере Вася будет первым, кого обслужит первая стюардесса, поэтому Вася получит свою еду через 1 секунду.

    Во втором примере стюардессы сначала потратят 6 секунд на обслуживание рядов 1 и 3, затем за 1 секунду сдвинутся на один ряд вперёд. Поскольку каждая стюардесса сначала обслуживает места справа от прохода в порядке от окна к проходу, Вася получит свою еду ещё через 3 секунды. Итого 6 + 1 + 3 = 10.

    A. Превращение: из A в B

    математика Перебор поиск в глубину и подобное *1000

    У Василия есть число a, которое он хочет превратить в число b. Для этого он может производить два типа операций:

    • умножить имеющееся у него число на 2 (то есть заменить число x числом x);
    • приписать к имеющемуся у него числу цифру 1 справа (то есть заменить число x числом 10·x + 1).

    Вам надо помочь Василию получить из числа a число b с помощью описанных операций, либо сообщить, что это невозможно.

    Обратите внимание, что в этой задаче не требуется минимизировать количество операций. Достаточно найти любой из способов получить из числа a число b.

    Входные данные

    В первой строке записаны два целых положительных числа a и b (1 ≤ a < b ≤ 109) — число, которое есть у Василия, и число, которое он хочет получить.

    Выходные данные

    Если получить число b из числа a невозможно, выведите «NO» (без кавычек).

    В противном случае в первую строку выведите «YES» (без кавычек). Во вторую строку выведите число k — количество чисел в последовательности превращений. В третьей строке выведите последовательность превращений x1, x2, ..., xk, причём:

    • x1 должно быть равно a,
    • xk должно быть равно b,
    • число xi должно быть получено с помощью одной из двух операций из числа xi - 1 (1 < i ≤ k).

    Если ответов несколько, разрешается вывести любой из них.

    C. Восстановление массива

    интерактив Конструктив математика *1400

    Это интерактивная задача. Вам нужно использовать операцию flush после вывода каждого запроса. Например, в C++ вы должны использовать функцию fflush(stdout), в Java — использовать System.out.flush(), а в Паскале — flush(output).

    В этой задаче вам надо восстановить массив, который заранее вам неизвестен. Вы можете считать, что жюри загадало некоторый массив a, про который вам известна только его длина n.

    Единственное допустимое действие — узнать сумму пары элементов, указав их индексы i и j (индексы должны быть различными). В результате запроса для индексов i и j вы получите сумму ai + aj.

    Известно, что восстановить весь загаданный массив можно не более чем за n запросов. Напишите программу, которая восстановит загаданный жюри массив a длины n за не более чем n запросов на сумму двух элементов (в каждом запросе индексы двух элементов должны быть различны).

    Протокол взаимодействия

    Каждый тест в этой задаче состоит из одного массива, который ваша программа должна восстановить.

    В первой строке входных данных следует целое положительное число n (3 ≤ n ≤ 5000) — длина загаданного массива. В первую очередь ваша программа должна прочитать это число.

    Далее ваша программа должна выводить в стандартный вывод запросы на сумму двух элементов массива, либо сообщить о том, что загаданный жюри массив уже найден.

    • В случае, если программа осуществляет запрос на сумму, то следует вывести строку вида «? i j» (i и jразличные целые числа от 1 до n) — индексы элементов массива, сумму которых ваша программа запрашивает.
    • В случае, если программа сообщает восстановленный массив, то следует вывести строку вида «a1 a2 ... an» (гарантируется, что все ai в правильно восстановленном массиве — положительные целые числа и не превосходят 105), где ai равно числу, стоящему в массиве в позиции i.

    Результатом запроса на сравнение является единственное целое число, равное ai + aj.

    Для массива длины n ваша программа должна сделать не более n запросов на сумму. Обратите внимание, что вывод строки вида «a1 a2 ... an» не считается запросом и не учитывается при подсчете их количества.

    Не забывайте использовать операцию flush после каждой выведенной строки.

    После вывода ответа ваша программа должна завершиться.

    Примечание

    Вы можете взламывать, задавая тесты следующего вида:

    • в первой строке должно быть записано целое число n (3 ≤ n ≤ 5000) — длина массива,
    • во второй строке должны быть записаны целые числа a1, a2, ..., an (1 ≤ ai ≤ 105) — элементы загаданного массива.

    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»), так и справа. Таким образом, чтобы наверняка попасть в него, надо произвести два выстрела: один в левую часть, другой в правую.

    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 частей он снова разрубает на две последним разрезом.

    E. Morrowindows

    математика теория чисел *2400

    Вася играет в The Elder Trolls III: Morrowindows. У него есть огромный список предметов в инвентаре, благо, ограничения на размер вещей нету. Сколько же всего предметов Вася не знает, но уверен, что их не больше чем x и не меньше, чем 2. В новом патче к игре появилась возможность просматривать инвентарь в n различных режимах. Отображение в режиме i представляет собой разбиение списка всех предметов инвентаря на страницы, на каждой из которых (кроме, может быть, последней) отображается ровно ai предметов. Кроме того, в каждом режиме показывается, сколько страниц bi занимает полный список. Прекрасно! Возможно, этой информации будет достаточно для Васи, чтобы найти заветное число. Более того, очень интересно, в каком наименьшем количестве режимов Васе придется просмотреть инвентарь, чтобы определить количество предметов в нем?

    Вася не может использовать информацию, полученную при просмотре одного режима, для выбора других режимов. Сначала Вася выбирает множество режимов, а затем просматривает инвентарь в этих режимах.

    Зная числа ai и x и предполагая, что Вася очень умный, установите, сможет ли он однозначно определить количество предметов в его инвентаре и за какое число просмотров он сможет это сделать, если он знает числа ai, x и может узнать число bi, посмотрев список в режиме i.

    Входные данные

    В первой строке заданы 2 числа n и x (0 ≤ n ≤ 105, 2 ≤ x ≤ 109). Во второй строке заданы целые числа ai (1 ≤ ai ≤ 109). Все числа ai не обязательно различны.

    Выходные данные

    Если Вася сможет однозначно определить количество предметов в инвентаре, то нужно вывести наименьшее возможное количество режимов, необходимых для этого. В противном случае следует вывести  - 1.

    Примечание

    Во втором примере Вася не сможет определить количество предметов однозначно, поскольку как 3 предмета, так и 4 предмета будут отображаться на 2 страницах.

    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.

    F. Видеокарты

    математика Перебор реализация Структуры данных теория чисел *1900

    Маленький Влад обожает играть в популярную игру Bota-2 на своем компьютере. На днях разработчики сообщили о выходе её продолжения под названием Bota-3. Разумеется, Влад тут же её приобрёл, но оказалось, что компьютер Влада слишком старый для этой игры, поэтому он отправился в магазин за обновлением для него.

    В магазине Влад увидел n видеокарт, i-я из которых имеет свою мощность ai, выражаемую целым положительным числом. Для того, чтобы игра точно заработала, Влад решил купить не одну, а несколько видеокарт и объединить их мощности по новейшей технологии. Для использования этой технологии одна из видеокарт выбирается в качестве ведущей, а все остальные видеокарты подключаются к ней в качестве вторичных. Для корректной работы этой конструкции необходимо, чтобы мощность каждой видеокарты была кратна мощности ведущей видеокарты. Для обеспечения совместимости мощность каждой вторичной видеокарты может быть понижена до любого меньшего целого положительного значения. При этом мощность опорной видеокарты должна оставаться оригинальной, то есть не может быть уменьшена.

    У Влада очень много денег, поэтому он может купить любые видеокарты. Помогите ему выбрать такие видеокарты, чтобы после необходимого понижения их мощностей и соединения их по новой технологии суммарная итоговая мощность видеокарт была максимальной.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 200 000) — количество видеокарт в магазине.

    Во второй строке находится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 200 000), обозначающих мощности видеокарт.

    Выходные данные

    В единственной строке выведите целое число — максимальную возможную суммарную итоговую мощность видеокарт.

    Примечание

    В первом примере выгодно купить видеокарты с мощностями 3, 15 и 9. В таком случае можно выбрать видеокарту с мощностью 3 ведущей, а все остальные видеокарты будут с ней совместимы. Суммарная мощность в таком случае будет равна 3 + 15 + 9 = 27. Если же купить все видеокарты и выбрать видеокарту с мощностью 2 ведущей, то мощности каждой из остальных трёх видеокарт придётся понизить на 1, чтобы они стали кратны 2, а значит итоговая мощность будет 2 + 2 + 14 + 8 = 26, что менее выгодно. Обратите внимание, что не разрешается понижать мощность ведущей видеокарты, то есть получить сумму мощностей 3 + 1 + 15 + 9 = 28 нельзя.

    Во втором примере выгодно купить все видеокарты, а в качестве ведущей выбрать видеокарту с мощностью 2. Видеокарта с мощностью 7 с ней несовместима, поэтому её мощность придется понизить до 6. Суммарная мощность будет равна 8 + 2 + 2 + 6 = 18.

    A. Куплю лопату

    Конструктив математика Перебор реализация *800

    Поликарпу срочно понадобилась лопата! Он пришёл в магазин и выбрал подходящую. Лопата, которая подошла Поликарпу, продается по цене k бурлей. Считайте, что в магазине неограниченное количество таких лопат.

    В кармане у Поликарпа есть неограниченное количество «дестюльников» (монет номиналом в 10 бурлей) и ровно одна монета номинала r (1 ≤ r ≤ 9).

    Какое наименьшее количество лопат придётся купить Поликарпу, чтобы он смог расплатиться за покупку без сдачи? Очевидно, что за 10 лопат он сможет расплатиться без сдачи (заплатив требуемую сумму «дестюльниками», не используя монету номинала r), но, возможно, он сможет купить меньшее количество лопат и расплатиться без сдачи. Обратите внимание, что Поликарп должен купить хотя бы одну лопату.

    Входные данные

    В единственной строке входных данных записаны два целых числа k и r (1 ≤ k ≤ 1000, 1 ≤ r ≤ 9) — цена одной лопаты и номинал монеты в кармане Поликарпа, отличной от «дестюльника».

    Помните, что ещё у него в кармане неограниченное количество монет номинала 10, то есть их хватит на покупку любого количества лопат.

    Выходные данные

    Выведите искомое минимальное количество лопат, которые нужно купить Поликарпу, чтобы расплатиться без сдачи.

    Примечание

    В первом примере Поликарп может купить 9 лопат, заплатив 9·117 = 1053 бурлей. В самом деле, эту сумму он может заплатив используя монеты номиналом 10 бурлей и одну монету номиналом 3 бурля. Купить меньшее количество лопат (и при этом расплатиться без сдачи), он не может.

    Во втором примере Поликарпу достаточно купить одну лопату.

    В третьем примере Поликарп должен купить 2 лопаты, заплатив 2·15 = 30 бурлей. Эту сумму он, очевидно, может заплатить без сдачи.

    C. Санаторий

    Бинарный поиск жадные алгоритмы Конструктив математика реализация *1200

    Василий провел свой отпуск в санатории и, вернувшись, обнаружил, что совершенно забыл о подробностях отдыха!

    В столовой санатория каждый день проходили завтрак, обед и ужин (конечно, именно в таком порядке). Единственное, что осталось у Василия — карточка из столовой, в которой находится запись о том, сколько раз он посещал завтрак, обед или ужин (таким образом, запись представляет собой три неотрицательных целых числа). Василий мог иногда пропустить ту или иную трапезу, например, в один и тот же день он мог посетить завтрак и ужин, но пропустить обед, а в какой-то из дней он мог не ходить в столовую вовсе.

    Василий уже не помнит, в какое время суток он приехал в санаторий (перед завтраком, перед обедом, перед ужином, или после ужина), а в какое уехал (до завтрака, до обеда, до ужина или после ужина) поэтому он готов рассматривать любой из этих вариантов. После приезда в санаторий Василий не покидал его до момента отъезда. Обратите внимание, Василий мог уехать из санатория в тот же день, что и приехал.

    По записи в карточке помогите Василию определить, какое наименьшее количество трапез в столовой санатория он мог пропустить. Трапезы, проходящие в день приезда Василия до его приезда и трапезы, проходящие в день отъезда Василия после его отъезда, пропущенными считать не следует.

    Входные данные

    В единственной строке входных данных содержатся три целых числа b, d и s (0 ≤ b, d, s ≤ 1018,  b + d + s ≥ 1) — количество завтраков, обедов и ужинов, которые посетил Василий во время отдыха в санатории, соответственно.

    Выходные данные

    Выведите единственное целое число — наименьшее возможное количество трапез, пропущенных Василием.

    Примечание

    В первом примере из условия Василий пропустил бы один ужин, если, например, приехал бы к завтраку, пробыл два дня в санатории (включая день приезда) и уехал после завтрака третьего дня.

    Во втором примере из условия Василий мог приехать к завтраку, сходить на него, и сразу же покинуть санаторий, не пропустив ни одной трапезы.

    В третьем примере из условия Василий мог пробыть в санатории один полный день, не пропустив ни одной трапезы.

    B. Парад

    математика *1100

    Совсем скоро в Берляндии состоится парад победы над инопланетными захватчиками. К сожалению, в войне погибли все солдаты, и теперь армия состоит исключительно из новобранцев, многие из которых даже не знают, с какой ноги начинается марш. Гражданское население тоже плохо понимает, с какой ноги начинается марш, поэтому важно лишь, чтобы как можно больше солдат шли в одну ногу.

    В параде будут принимать участие n пеших колонн, i-я из которых состоит из li солдат, начинающих марш с левой ноги, и ri солдат, начинающих марш с правой ноги.

    Красота парада вычисляется по следующей формуле: если L — это суммарное количество солдат на параде, начинающих марш с левой ноги, а R — это суммарное количество солдат на параде, начинающих марш с правой ноги, то красота будет равна |L - R|.

    Вы можете выбрать не более чем одну колонну, и изменить с какой ноги начинают марш все солдаты данной колонны. Формально, разрешается не более одного раза выбрать какой-то индекс i и поменять местами значения li и ri.

    Найдите номер колонны, при смене шага в которой красота парада станет максимально возможной, или определите, что такой операцией улучшить красоту парада нельзя.

    Входные данные

    В первой строке содержится одно число n (1 ≤ n ≤ 105) — количество пеших колонн. В следующих n строках находятся пары целых чисел li и ri (1 ≤ li, ri ≤ 500) — количество солдат в i-й колонне, начинающих марш с левой и с правой ноги соответственно.

    Выходные данные

    Выведите одно целое число k — номер колонны, в которой следует сменить шаг, или 0, если максимальная красота уже достигнута.

    Считайте, что колонны пронумерованы от 1 до n в порядке их задания во входных данных. Если решений несколько, выведите любое.

    Примечание

    В первом примере, если вы не дадите приказ какой-либо колонне сменить шаг, то количество солдат, начинающих марш с левой ноги, будет равно 5 + 8 + 10 = 23, а с правой — 6 + 9 + 3 = 18. В таком случае красота парада будет равна |23 - 18| = 5.

    Если вы дадите приказ сменить ногу третьей колонне, то количество солдат, марширующих с левой ноги, будет равно 5 + 8 + 3 = 16, а с правой — 6 + 9 + 10 = 25. В таком случае красота парада будет равна |16 - 25| = 9.

    Каким-либо другим приказом невозможно достичь большей красоты. Таким образом, максимально достижимая красота равна 9.

    E. Сон на уроке

    Конструктив математика Структуры данных *2400

    Учебный год только начался, а уроки и олимпиады уже занимают всё свободное время. Неудивительно, что сегодня Ольга уснула на уроке литературы. Оле приснилось, что она находится на лестнице.

    Лестница состоит из n ступенек. Ступеньки пронумерованы снизу вверх (то есть 1-я — самая нижняя, а n-я — самая верхняя). Над каждой ступенькой висит стрелка, указывающая направление движения (вверх или вниз) с этой ступеньки, причем, как только Оля уходит с очередной ступеньки, направление стрелки над ней меняется на противоположное, то есть направление «вверх» меняется на направление «вниз», а направление «вниз» — на направление «вверх».

    Оля всегда перемещается на следующую ступеньку в том направлении, что указано на текущей ступеньке.

    Если Оля выйдет за пределы лестницы, то она упадёт и проснётся. Выходом за пределы лестницы считается движение вниз с первой ступеньки или движение вверх с последней (то есть n-й) ступеньки.

    За одну секунду Оля движется на одну ступеньку вверх или вниз в соответствии с направлением стрелки, расположенной на ступеньке, на которой была Оля в начале секунды.

    Для каждой ступеньки посчитайте длительность сна, если Оля оказывается на этой ступеньке в самом начале сна.

    Падение Оли занимает тоже одну секунду, то есть, если она оказалась на первой ступеньке и идёт вниз, то она проснётся в следующую секунду.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 106) — количество ступенек на лестнице.

    Вторая строка содержит строку s длины n, обозначающую направление стрелок на ступеньках. Символ i строки s обозначает изначальное направление на стрелке над i-ой ступенькой и равен либо 'U' (означает, что стрелка направленна вверх), либо 'D' (означает, что стрелка направленна вниз).

    Выходные данные

    Выведите n чисел, i-е из которых соответствует продолжительности сна Оли в секундах, или равно  - 1 в том случае, если Оля никогда не выйдет за пределы лестницы, если в начале сна она окажется на i-й ступеньке.

    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.

    F. Антон и школа

    битмаски Конструктив математика реализация *2500

    Антон учится в школе. Его любимый предмет — массивоведение. Этот предмет ему легко даётся, он обычно решает задачи по массивоведению очень быстро.

    Однажды, когда Антон в очередной раз справился со всеми задачами по массивоведению за десять минут, учительница дала ему задачу посложнее: даны два массива b и c длины n, и надо найти массив a такой, что

    где a and b обозначает операцию побитового И, а a or b обозначает операцию побитового ИЛИ.

    Хотя Антон обычно решает задачи по массивоведению очень быстро, эта задача оказалась ему не по зубам. Поэтому он решил обратиться к Вам за помощью. Помогите Антону решить эту задачу!

    Входные данные

    В первой строке входных данных находится одно целое число n (1 ≤ n ≤ 200 000) — размер массивов b и c.

    Во второй строке входных данных находится n целых чисел bi (0 ≤ bi ≤ 109) — элементы массива b.

    В третьей строке входных данных находится n целых чисел ci (0 ≤ ci ≤ 109) — элементы массива c.

    Выходные данные

    Если решения не существует, выведите одно число  - 1.

    Иначе в единственной строке выходных данных выведите через пробел n целых неотрицательных чисел ai — элементы массива a. Если решений несколько, разрешается вывести любое из них.

    C. Теннисный Чемпионат

    жадные алгоритмы Комбинаторика Конструктив математика *1600

    Бразильский город Рио-де-Жанейро принимает крупный теннисный турнир, и Остап Бендер не намерен пропускать это событие. В турнире примут участие n теннисистов, причём с первого же матча будет идти игра на выбывание — проигравший сразу покидает турнир.

    Организаторы ещё не составили сетку чемпионата, но известно, что два игрока могут играть друг с другом, если и только если количество игр, уже проведённых одним из них, отличается от количества игр, проведённых другим, не более чем на одну игру (в любую сторону). Разумеется, оба игрока должны были выиграть все свои встречи, чтобы всё ещё участвовать в турнире.

    Пока турнир не начался и зрители ищут, чем занять себя в ожидании, Остап решил вычислить, в каком максимальном количестве партий может принять участие победитель турнира. Скорее всего, без вашей помощи ему не справиться.

    Входные данные

    В единственной строке входных данных записано целое число n (2 ≤ n ≤ 1018) — количество участников турнира.

    Выходные данные

    Выведите одно целое число — максимальное количество партий, в которых может принять участие победитель турнира.

    Примечание

    Во всех примерах будем считать, что турнир выигрывает участник с номером 1.

    В первом примере будет всего одна игра, поэтому ответ очевидно 1.

    Во втором примере первый игрок может последовательно обыграть игрока 2, а затем игрока 3.

    В третьем примере первый игрок не может последовательно обыграть всех остальных, так как если он сыграет с игроками 2 и 3, то у него будет уже две партии, а игрока номер 4 — ноль партий. Тогда они не смогут сыграть и турнир не завершится. Таким образом, ответ 2 и он достигается на сетке турнира, в которой сначала играют пары (1, 2) и (3, 4), а затем победители этих пар играют друг с другом.

    D. Налоги

    математика теория чисел *1600

    В стране, где старик Фунт сейчас проживает и занимается различными махинациями, крайне необычные правила вычисления подоходного налога. Так, Фунт, который за год заработал n (n ≥ 2) бурлей, должен уплатить налог, равный по величине максимальному делителю числа n (отличного от самого n, разумеется). Например, если n = 6, то Фунт должен уплатить 3 бурля, если n = 25, то 5 бурлей, а если n = 2, то 1 бурль.

    Поскольку Фунт ещё не сидел при капитализме, то он решился на мошенничество. А именно, он собирается разбить исходное n на несколько частей n1 + n2 + ... + nk = n (значение k произвольно, в том числе допустимо k = 1) и уплатить налог за каждую часть отдельно. Чтобы мошенничество Фунта не было совсем уж очевидным, следует избегать частей, равных 1, то есть ni ≥ 2 для всех i от 1 до k.

    Остап Бендер хочет знать, сколько денег минимально придется заплатить Фунту, если для уплаты налога он разобьёт изначальную сумму n на части оптимальным образом.

    Входные данные

    В первой строке входных данных записано единственное целое число n (2 ≤ n ≤ 2·109) — годовой доход Фунта, с которого следует уплатить налог.

    Выходные данные

    Выведите одно целое число — минимальное количество денег, которое придется платить старику Фунту, если он разбил исходную сумму на части оптимальным образом.

    D. Перестановки

    математика матрицы *2800

    Остап Бендер обеспокоен тем, что люди уже стали забывать, что он — Великий Комбинатор, поэтому он решил срочно подтянуть свои знания по комбинаторике. Сейчас Остап изучает перестановки длины n. У него есть список из m разрешённых пар, пара ai и bi означает, что разрешается на место ai ставить число bi.

    Остап знает, что количество перестановок, использующих только разрешённые пары, нечётно. Теперь он хочет для каждой пары установить, правда ли, что если удалить данную пару из списка (и только её) разрешённых, то количество подходящих перестановок по-прежнему будет нечётным.

    Входные данные

    В первой строке входных данных записаны два числа n и m (1 ≤ n ≤ 2000, n ≤ m ≤ min(n2, 500 000)) — количество элементов перестановки. Затем следуют m строк, в каждой из которых содержится некоторая разрешённая пара (ai, bi) (1 ≤ ai, bi ≤ n). Гарантируется, что никакая разрешённая пара не встречается во входных данных дважды и что количество подходящих перестановок (то есть использующих только разрешённые пары позиция-элемент) нечётно.

    Выходные данные

    Выведите m строк, по одной для каждой разрешённой пары. В i-й строке выведите «YES», если после удаления i-й разрешённой пары (и только её) количество подходящих перестановок останется нечётным, и «NO» в противном случае.

    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 участников с наилучшим счётом, должен совпадать с набором, указанным во входных данных. Если подходящих ответов несколько, разрешается вывести любой из них.

    F. Грязные тарелки

    Конструктив математика *3300

    После очередного праздника у Никиты на кухне образовалась стопка грязных тарелок. Их надо помыть и поставить в сушилку, при этом в сушилке тарелки тоже должны стоять в стопке, причем размеры тарелок должны возрастать сверху вниз. Все размеры тарелок различны.

    У Никиты не очень много свободного места, а именно, есть место только для еще одной стопки тарелок. Поэтому он может выполнять лишь две операции:

    • Взять любое количество от 1 до a верхних тарелок из стопки с грязными тарелками, помыть их и положить в том же порядке на верх промежуточной стопки.
    • Взять любое количество от 1 до b верхних тарелок из промежуточной стопки и положить в том же порядке на верх стопки в сушилке.

    Обратите внимание, что при выполнении любой из операций тарелки кладутся на стопку в том же порядке, в каком они были перед выполнением операции.

    Вам известны размеры тарелок s1, s2, ..., sn в порядке их лежания в стопке с грязными тарелками сверху вниз, а также числа a и b. Все размеры тарелок различны. Напишите программу, которая будет определять, может ли Никита расположить все тарелки в сушилке в возрастающем сверху вниз порядке, и если может, то найдите какой-нибудь, не обязательно оптимальный, порядок действий для этого.

    Входные данные

    В первой строке записаны три целых числа n, a и b (1 ≤ n ≤ 2000, 1 ≤ a, b ≤ n). Вторая строка содержит последовательность целых чисел s1, s2, ..., sn (1 ≤ si ≤ n) — размеры тарелок в порядке их следования сверху вниз. Все размеры различны.

    Выходные данные

    В первую строку выведите «YES», если решение существует. В этом случае во вторую строку выведите k — количество операций. Далее в k строках выведите сами операции по одной в строке. Каждая из них описывается двумя числами tj, cj, где tj = 1, если операция соответствует помывке cj тарелок и помещению их в промежуточную стопку, и tj = 2, если операция описывает перемещение cj тарелок из промежуточной стопки в сушилку. Если решений несколько, то выведите любое из них. Будьте внимательны: в задаче не требуется минимизировать количество операций.

    Если решения не существует, то в единственную строку выведите «NO».

    Примечание

    В первом примере изначально тарелки были в порядке 2, 3, 6, 4, 1, 5. Рассмотрим то, что получалось после каждой операции:

    • [1 2]: Грязная стопка: 6, 4, 1, 5. Промежуточная стопка: 2, 3. В сушилке пусто.
    • [1 1]: Грязная стопка: 4, 1, 5. Промежуточная стопка: 6, 2, 3. В сушилке пусто.
    • [2 1]: Грязная стопка: 4, 1, 5. Промежуточная стопка: 2, 3. Сушилка: 6.
    • [1 2]: Грязная стопка: 5. Промежуточная стопка: 4, 1, 2, 3. Сушилка: 6.
    • [1 1]: Грязных тарелок нет. Промежуточная стопка: 5, 4, 1, 2, 3. Сушилка: 6.
    • [2 1]: Грязных тарелок нет. Промежуточная стопка: 4, 1, 2, 3. Сушилка: 5, 6.
    • [2 1]: Грязных тарелок нет. Промежуточная стопка: 1, 2, 3. Сушилка: 4, 5, 6.
    • [2 3]: Все тарелки в сушилке: 1, 2, 3, 4, 5, 6.

    Во втором примере можно помыть сразу все тарелки и затем все вместе переставить в сушилку.

    В третьем примере так сделать нельзя, т. к. нельзя переставлять более одной тарелки одновременно. Можно помыть все тарелки по одной, тогда в промежуточной стопке они будут в обратном порядке, а затем переставить все тарелки по одной. В итоге порядок в сушилке будет правильный.

    E. Гоша выходит на охоту

    дп математика Перебор Потоки сортировки Структуры данных Теория вероятностей *3000

    Гоша выходит на охоту. Его цель — поймать как можно больше покемонов. У Гоши есть a покеболов и b ультраболов. Всего покемонов n. Они пронумерованы числами от 1 до n. Про i-го покемона Гоша знает, что если бросить в него покеболом, то с вероятностью pi данный покемон будет пойман. Если бросить в i-го покемона ультраболом, то он будет пойман с вероятностью ui. В каждого покемона можно бросить не более чем одним болом каждого типа.

    Охота происходит следующим образом: Гоша сначала выбирает не более чем a покемонов, в которых он будет бросать покеболами, и не более чем b покемонов, в которых он будет бросать ультраболами. После этого Гоша бросает в выбранных покемонов выбранными болами. Если он бросает в покемона и покеболом, и ультраболом, то данный покемон будет пойман, если он будет пойман хотя бы одним из двух болов. Результаты бросков независимы.

    Гоша хочет узнать, чему равно математическое ожидание количества пойманных покемонов, если он будет действовать оптимально. Иными словами, он хочет узнать максимально возможное математическое ожидание.

    Входные данные

    В первой строке входных данных записано три целых числа n, a и b (2 ≤ n ≤ 2000, 0 ≤ a, b ≤ n) — количество покемонов, количество покеболов и количество ультраболов.

    Во второй строке записано n вещественных чисел p1, p2, ..., pn (0 ≤ pi ≤ 1), где pi — вероятность, что Гоша поймает i-го покемона, если бросит в него покеболом.

    В третьей строке записано n вещественных чисел: u1, u2, ..., un (0 ≤ ui ≤ 1), где ui — вероятность, что Гоша поймает i-го покемона, если бросит в него ультраболом.

    Все вероятности заданы ровно с тремя знаками после десятичного разделителя.

    Выходные данные

    Выведите максимально возможное математическое ожидание количества пойманных покемонов. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 4.

    A. Громкий Owf Arpa и дьявольский план Mehrdad

    математика поиск в глубину и подобное *1600

    Как вы заметили, в стране Arpa живут милые девушки.

    Все люди в стране Arpa пронумерованы от 1 до n. Каждый из них любит ровно одного человека, i-й человек любит человека с номером crushi.

    Однажды Arpa громко крикнул Owf с верхушки дворца и в стране Arpa началась веселая игра по следующим правилам.

    Игра состоит из раундов. Пусть человек с номером x начинает раунд: он звонит человеку crushx, говорит: «Oww...wwf» (буква w повторяется t раз) и немедленно бросает трубку. Если t > 1, то человек с номером crushx звонит человеку с номером crushcrushx и говорит: «Oww...wwf» (буква w повторяется t - 1 раз) и немедленно бросает трубку. Раунд продолжается до тех пор, пока кто-то не получает «Owf» (t = 1). Этот человек объявляется проигравшим в этом раунде и раунд заканчивается. Два раунда не могут происходить одновременно.

    У Mehrdad есть ужасный план чтобы сделать игру еще смешнее. Он хочет найти такое минимальное t (t ≥ 1), что для каждого человека x, если x начинает раунд и y — проигравший в этом раунде, то если раунд начнет y, то x будет проигравшим. Найдите такое t, если это возможно.

    Заметим, что в стране Arpa возможно такое, что человек любит самого себя (т. е. crushi = i).

    Входные данные

    Первая строка входных данных содержит целое число n (1 ≤ n ≤ 100) — количество людей в стране Arpa.

    Вторая строка содержит n целых чисел, i-е из которых равняется crushi (1 ≤ crushi ≤ n) — номеру человека, которого любит i-й человек.

    Выходные данные

    Если не существует t удовлетворяющего условию, выведите -1. Иначе выведите минимальное из таких t.

    Примечание

    Предположим, в первом тесте из условия t = 3.

    Если первый человек начинает раунд, то:

    Первый человек звонит второму и говорит «Owwwf», затем второй человек звонит третьему и говорит «Owwf», затем третий человек звонит первому и говорит «Owf», поэтому первый человек становится проигравшим в этом раунде. Поэтому условие удовлетворено, если x равно 1.

    Процесс аналогичен, если начинает второй или третий человек.

    Если четвертый человек начинает раунд, то:

    Четвертый человек звонит самому себе и говорит «Owwwf», затем он звонит себе еще раз и говорит «Owwf», затем он звонит себе опять и говорит «Owf», поэтому он сам и становится проигравшим в этом раунде. Поэтому условие удовлетворено, если x равно 4.

    В последнем тесте из условия если начинает первый человек, то проигравшим становится второй, и наоборот.

    A. Сложный экзамен Arpa и наивный чит Mehrdad

    математика реализация теория чисел *1000

    Существует остров под названием страна Arpa, красивые девушки живут на нем.

    Mehrdad хочет стать министром страны Arpa. Arpa приготовил ему экзамен. Экзамен состоит из одной задачи: по заданному числу n определите последнюю цифру числа 1378n.

    Mehrdad озадачен и обратился за помощью к вам. Помогите ему!

    Входные данные

    Единственная строка содержит целое число n (0  ≤  n  ≤  109).

    Выходные данные

    Выведите одно целое число — последнюю цифру числа 1378n.

    Примечание

    В первом тесте из примера последняя цифра числа 13781 = 1378 равна 8.

    Во втором тесте из примера последняя цифра числа 13782 = 1378·1378 = 1898884 равна 4.

    B. Очевидная задача Arpa и ужасающее решение Mehrdad

    математика Перебор теория чисел *1500

    В стране Arpa живут прекрасные девушки, как мы уже отмечали раньше.

    Однажды Arpa задумался над очевидной задачей:

    Дан массив и целое число x. Посчитайте число пар индексов i, j (1 ≤ i < j ≤ n) таких, что , где  — операция побитовый xor (в примечаниях дано определение).

    Mehrdad тут же придумал ужасающее решении, в которое никто не мог поверить. Теперь Arpa нужна ваша помощь в написании решения к этой задаче.

    Входные данные

    Первоя строка содержит два целых числа n и x (1 ≤ n ≤ 105, 0 ≤ x ≤ 105) — число элементов в массиве и число x.

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105) — элементы массива.

    Выходные данные

    Выведите одно целое число: ответ на задачу.

    Примечание

    В первом примере существует только одна пара индексов i = 1 и j = 2. , поэтому ответ равен 1.

    Во втором примере две подходящие пары это i = 3, j = 4 (т. к. ) и i = 1, j = 5 (т. к. ).

    Операция побитовый xor принимает два целых битовых числа одинаковой длины и выполняет логическую операцию xor на каждой паре соответсвующих бит. Результат в позиции равен 1, если и только если только первый бит 1 или только второй бит 1, и результат равен 0 если оба бита 0 или оба бита 1. Больше информации о побитовом xor можно найти здесь: https://ru.wikipedia.org/wiki/Битовые_операции#.D0.98.D1.81.D0.BA.D0.BB.D1.8E.D1.87.D0.B0.D1.8E.D1.89.D0.B5.D0.B5_.D0.98.D0.9B.D0.98_.28XOR.29.

    C. Владик и дроби

    Конструктив математика Перебор теория чисел *1500

    Владик и Хлоя решили определить, кто из них лучше разбирается в математике. Владик заявил, что сможет для любого положительного целого n представить дробь вида в виде суммы трех попарно различных положительных дробей вида .

    Помогите Владику сделать это, то есть найти для заданного n три различных положительных целых числа x, y и z такие, что . Так как Хлоя не сможет проверить ответ Владика, если эти числа будут слишком большие, он просит вас вывести числа не превосходящие 109.

    Если подходящего ответа не существует, выведите -1.

    Входные данные

    В единственной строке содержится одно целое число n (1 ≤ n ≤ 104).

    Выходные данные

    Если решение существует, выведите 3 различных целых числа x, y и z (1 ≤ x, y, z ≤ 109, x ≠ y, x ≠ z, y ≠ z). Иначе выведите -1.

    Если существует несколько решений, выведите любое из них.

    A. Компот

    математика реализация *800

    У Николая есть a лимонов, b яблок и c груш. Он решил приготовить из них компот. По рецепту фрукты должны быть в соотношении 1: 2: 4, то есть на каждый лимон в компоте должно быть ровно 2 яблока и ровно 4 груши. При этом фрукты нельзя измельчать, ломать или разрезать, поэтому в компот обязательно должны попасть целиком фрукты — лимоны, яблоки и груши.

    Перед вами стоит задача определить максимальное суммарное количество лимонов, яблок и груш, из которых можно сварить компот по рецепту. Возможна ситуация, когда Николай не сможет для приготовления компота использовать ни одного фрукта, в таком случае выведите 0.

    Входные данные

    В первой строке следует целое положительное число a (1 ≤ a ≤ 1000) — количество лимонов, которые есть у Николая

    Во второй строке следует целое положительное число b (1 ≤ b ≤ 1000) — количество яблок, которые есть у Николая.

    В третьей строке следует целое положительное число c (1 ≤ c ≤ 1000) — количество груш, которые есть у Николая.

    Выходные данные

    Выведите максимальное суммарное количество лимонов, яблок и груш, из которых можно сварить компот по рецепту.

    Примечание

    В первом примере Николай может использовать для приготовления компота 1 лимон, 2 яблока и 4 груши, поэтому ответ 1 + 2 + 4 = 7.

    Во втором примере Николай может использовать для приготовления компота 3 лимона, 6 яблок и 12 груш, поэтому ответ 3 + 6 + 12 = 21.

    В третьей примере Николаю не хватит груш, чтобы приготовить сколько-нибудь компота, поэтому ответ 0.

    C. Трамвай

    Конструктив математика реализация *1600

    Трамвай в Берляндии ходит по прямой от точки 0 до точки s и обратно, преодолевая 1 метр за t1 секунд в обоих направлениях. То есть трамвай ходит равномерно прямолинейно, мгновенно разворачиваясь в точках x = 0 и x = s.

    В точке x1 находится Игорь. Ему нужно попасть в точку x2. Игорь преодолевает 1 метр за t2 секунд.

    Перед вами стоит задача определить минимальное время, за которое Игорь может добраться из точки x1 в точку x2, если известно, где находится трамвай и в каком направлении он едет в момент, когда Игорь пришел в точку x1.

    Игорь может неограниченное количество раз заходить в трамвай в любой момент времени, когда позиции его и трамвая совпадают. Точки, в которых Игорь может заходить и выходить из трамвая, не обязательно целочисленные. Считайте, что любая высадка/посадка происходит мгновенно. Игорь может произвольным образом перемещаться по прямой (но не быстрее, чем 1 метр за t2 секунд) или даже стоять на месте.

    Входные данные

    В первой строке следуют три целых числа s, x1 и x2 (2 ≤ s ≤ 1000, 0 ≤ x1, x2 ≤ s, x1 ≠ x2) — максимальная координата точки, до которой доезжает трамвай, точка, в которой находится Игорь и точка, в которую ему нужно попасть.

    Во второй строке следуют два целых числа t1 и t2 (1 ≤ t1, t2 ≤ 1000) — время в секундах, за которое трамвай преодолевает 1 метр, и время в секундах, за которое Игорь преодолевает 1 метр.

    В третьей строке следуют два целых числа p и d (1 ≤ p ≤ s - 1, d равняется 1 или ) — позиция трамвая в момент, когда Игорь пришел в точку x1, а также направление движения трамвая в этот же момент. Если , то трамвай движется в направлении от точки s в точку 0. Если d = 1, то трамвай движется в направлении от точки 0 в точку s.

    Выходные данные

    Выведите минимальное время в секундах, за которое Игорь может добраться из точки x1 в точку x2.

    Примечание

    В первом примере Игорю выгоднее пойти пешком и не ждать трамвай. Таким образом, ему нужно пройти 2 метра и он сможет это сделать суммарно за 8 секунд, так как он преодолевает 1 метр за 4 секунды.

    Во втором примере Игорь может, например, пойти в сторону точки x2 и дойти до точки 1 за 6 секунд (так как ему нужно пройти для этого 3 метра, а он преодолевает 1 метр за 2 секунды). В этот момент времени, трамвай также будет находится в точке 1, поэтому Игорь может зайти в него, и доехать оставшийся 1 метр за 1 секунду. Таким образом, Игорь доберётся до точки x2 суммарно за 7 секунд.

    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-е число должно равняться числу на карточке, на которую она была поменяна.

    Если ответов несколько, разрешается вывести любой из них.

    A. Размер монитора

    математика Перебор *800

    Крупная компания решила запустить новую серию прямоугольных мониторов, при этом решив, что на мониторе должно быть ровно n пикселей.

    Перед вами стоит задача определить размеры прямоугольного монитора — количество a строк (рядов) из пикселей и количество b столбцов из пикселей, чтобы:

    • на мониторе было ровно n пикселей,
    • количество строк не превышало количество столбцов, то есть a ≤ b,
    • разница b - a была минимально возможной.
    Входные данные

    В первой строке следует целое положительное число n (1 ≤ n ≤ 106) — количество пикселей, которые должны быть на мониторе.

    Выходные данные

    Выведите два числа — количество рядов и количество столбцов, которые должны быть на мониторе.

    Примечание

    В первом примере минимальная возможная разница равна 2, тогда на мониторе должно быть 2 ряда по 4 пикселя.

    Во втором примере минимальная возможная разница равна 0, тогда на мониторе должно быть 8 рядов по 8 пикселей.

    В третьем примере минимальная возможная разница равна 4, тогда на мониторе должен быть 1 ряд, состоящий из 5 пикселей.

    F. Игорь и интересные числа

    дп Комбинаторика математика Перебор *2500

    Игорь очень любит 16-ричную систему счисления и считает целое положительное число в 16-ричной системе счисления интересным, если каждая цифра и буква в нём встречается не более t раз. Например, если t = 3, то числа 13a13322, aaa, abcdef0123456789 — интересные, а числа aaaa, abababab и 1000000 — нет.

    Перед вами стоит задача найти k-е по счёту интересное для Игоря число в 16-ричной системе счисления. Число не должно содержать лидирующих нулей.

    Входные данные

    В первой строке следует два целых числа k и t (1 ≤ k ≤ 2·109, 1 ≤ t ≤ 10) — номер искомого числа и максимальное число раз, которое может встречаться цифра или буква в интересном числе.

    Можно показать, что при таких ограничениях ответ всегда существует.

    Выходные данные

    Выведите единственное целое число в 16-ричной системе счисления, которое является k-м по счёту интересным для Игоря числом в 16-ричной системе счисления.

    Примечание

    Первые 20 чисел, которые является интересными, если t = 1: 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, 10, 12, 13, 14, 15. Поэтому ответ на первый пример равен 12.

    A. Санта-Клаус и место в классе

    математика реализация *800

    Санта-Клаус пришел на рождественскую олимпиаду раньше всех, и ему предстоит первым занять свое место за партой! В аудитории, где находится его место, находятся n рядов по m парт, при этом за каждой партой находятся два рабочих места. Ряды пронумерованы слева направо от 1 до n, а парты в ряду — 1 до m начиная от доски. Обратите внимание, что в отличии от театров и кинотеатров ряды идут не параллельно экрану/доске, а перпендикулярно (см. рисунок).

    Организаторы рождественской олимпиады пронумеровали все рабочие места числами от 1 до 2nm. Места пронумерованы по рядам (т. е. сначала пронумерованы все места первого ряда, затем — все места второго и так далее), в одном ряду места пронумерованы начиная от доски (т. е. с первой парты этого ряда), за одной партой сначала пронумеровано место слева, затем — место справа.

    Рисунок иллюстрирует первый и второй примеры входных/выходных данных.

    Санта-Клаус знает, что его место имеет номер k. Помогите ему узнать, в каком ряду за какую парту ему нужно сесть, а также слева его место или справа!

    Входные данные

    В единственной строке находятся три целых числа n, m и k (1 ≤ n, m ≤ 10 000, 1 ≤ k ≤ 2nm) — число рядов и число парт в каждом ряду, а так же номер места Санта-Клауса.

    Выходные данные

    Выведите два целых числа: номер ряда r, номер парты d, а также символ s, означающий сторону парты, за которую нужно сесть Санта-Клаусу. Символ s должен быть «L», если ему нужно сесть за левую сторону, и «R», если место Санта-Клауса справа.

    Примечание

    Первый и второй примеры показаны на картинке. Зеленым выделено место Санта-Клауса в первом примере, а голубым — его место во втором примере.

    В третьем примере два ряда по четыре парты, а место Санта-Клауса — четвертое. Значит, его место в первом ряду за второй партой справа.

    C. Санта-Клаус и его Робот

    Конструктив математика *1400

    У Санта-Клауса есть Робот, который живёт на клетчатой плоскости и умеет перемещаться по линиям сетки. Если ему дать последовательность из m точек p1, p2, ..., pm с целыми координатами, то он сделает следующее: обозначим точку, в которой он сейчас находится, через p0. Тогда Робот сначала поедет по некоторому кратчайшему пути из p0 в p1 (обратите внимание, поскольку Робот ездит только по линиям сетки, кратчайших путей может быть несколько), затем, доехав до p1, поедет к точке p2, опять же, по какому-то кратчайшему пути, затем к точке p3, и так далее, пока не пройдёт все точки в заданном порядке. Некоторые из точек в последовательности могут совпадать, тогда Санта-Клаус должен посетить их несколько раз в порядке, соответствующем последовательности.

    Пока Санта-Клауса не было, кто-то дал Роботу несколько точек. Эта последовательность точек была утерян, но у вас есть протокол перемещений Робота (каждое перемещение на единицу длины). Узнайте, пожалуйста, минимальную возможную длину последовательности, заданной Роботу.

    Входные данные

    В первой строке задано единственное натуральное число n (1 ≤ n ≤ 2·105) — число перемещений Робота на единичный отрезок. Во второй строке дан протокол перемещений Робота в виде n символов, каждый из которых равен L, R, U или D, записанных без пробелов. k-й символ означает, что на k-м шаге Робот переместился на единицу длины в направлении, соответствующем этому символу: L означает, что он двигался влево, R — вправо, U — вверх и D — вниз. Смотрите иллюстрации к примерам для большего понимания.

    Выходные данные

    В единственной строке выведите минимальную возможную длину последовательности, заданной Роботу.

    Примечание

    Ниже приведены иллюстрации к первым трём тестам.

    Последний пример показывает, что каждая точка в последовательности должна быть посчитана столько раз, сколько она в ней встречается.

    A. Задача Бахгольда

    жадные алгоритмы математика реализация теория чисел *800

    Задача Бахгольда формулируется очень просто. Дано целое положительное число n. Требуется представить его в виде суммы максимального количества простых слагаемых. Известно, что представление в виде суммы простых существует для всех целых положительных чисел, больших 1.

    Напомним, целое положительное число k называется простым, если оно больше 1 и у него ровно два целых положительных делителя — 1 и k.

    Входные данные

    В единственной строке записано целое число n (2 ≤ n ≤ 100 000).

    Выходные данные

    В первой строке выведите целое число k — максимально возможное количество простых слагаемых.

    В следующей строке выведите k чисел — сами простые слагаемые. Их сумма должна быть равна n. Числа можно выводить в любом порядке. Если оптимальных решений несколько, разрешается вывести любое из них.

    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).

    A. Новый год и спешка

    Бинарный поиск математика Перебор реализация *800

    В последний день уходящего 2016 года Лимак собирается принять участие в соревновании по спортивному программированию. Соревнование начнётся в 20:00 и будет продолжаться четыре часа, то есть ровно до полуночи. Участникам будет предложено n задач, упорядоченных по возрастанию сложности, то есть задача 1 будет самой лёгкой, а задача номер n — самой сложной. Лимак знает, что ему потребуется i минут на решение i-й задачи.

    Друзья Лимака планирую устроить роскошную новогоднюю вечеринку и Лимак хочет прибыть в полночь или ранее. Он знает, что ему требуется ровно k минут чтобы добрать до места проведения вечеринки от своего дома, где он собирается участвовать в соревновании.

    Сколько максимум задач может успеть решить Лимак, так чтобы не опоздать на новогоднюю вечеринку?

    Входные данные

    В первой строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 10, 1 ≤ k ≤ 240) — количество задач в соревновании и количество минут, за которое Лимак доберётся от дома до места проведения вечеринки.

    Выходные данные

    Выведите одно целое число, равное максимальному количеству задач, которое может решить Лимак, так чтобы прибыть на новогоднюю вечеринку ровно в полночь или раньше.

    Примечание

    В первом примере на соревновании участникам предложено 3 задачи и Лимаку требуется 222 минуты, чтобы доехать до места проведения вечеринки. Для решения задач требуется 5, 10 и 15 минут соответственно. Лимак может решить первые две задачи, потравив на это 5 + 10 = 15 минут, после чего выехать в 20:15 и приехать на вечеринку в 23:57 (через 222 минуты). Таким образом он решит две задачи, но на решение третьей времени уже не хватит и ответ равен 2.

    Во втором примере Лимак может решить все 4 задачи за 5 + 10 + 15 + 20 = 50 минут. В 20:50 он сможет выехать из дома и прибыть на вечеринку ровно в полночь.

    В третьем примере Лимаку нужна только 1 минута, чтобы оказаться на вечеринке, так что ему хватит времени для решения всех 7 задач.

    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. Польшар и Гипотеза

    графы математика Перебор теория чисел *800

    Польшар — юный, умный шар. Он заинтересовался простыми числами. Он придумал следующую гипотезу: «Существует натуральное число n такое, что для любого натурального m число n·m + 1 является простым».

    К сожалению, Польшар еще неопытен и не знает, что его гипотеза неверна. Можете опровергнуть ее? Напишите программу, которая найдет контрпример для любого n.

    Входные данные

    Ввод состоит из одного целого числа из гипотезы Польшара n (1 ≤ n ≤ 1000).

    Выходные данные

    Выведите такое m, что n·m + 1 не является простым. Ваш ответ будет считаться правильным, если вы выведете любое подходящее m такое, что 1 ≤ m ≤ 103. Гарантируется, что ответ существует.

    Примечание

    Натуральное число большее 1 называется простым, если у него нет натуральных делителей кроме 1 и его самого.

    В первом примере 3·1 + 1 = 4. Можно вывести 1.

    Во втором примере 4·1 + 1 = 5. Вывести 1 нельзя, т. к. 5 — простое. Однако, m = 2 подойдет, т. к. 4·2 + 1 = 9, что не является простым числом.

    G. Польшар и Много других шаров

    бпф дп Комбинаторика математика разделяй и властвуй теория чисел *3200

    Польшар стоит в ряд со многими другими шарами. Точнее, в ряд стоят ровно n шаров. Шары гордятся за свою родную землю — и хотят доказать, что она стронг.

    Шары решили начать с выборов ровно m групп шаров, каждая должна состоять либо из одного шара, либо из двух рядом стоящих. Каждый шар может состоять не более чем в одной группе.

    Шары хотят впечатлить своих врагов. Они просят вас посчитать количество таких разбиений на группы для каждого m, где 1 ≤ m ≤ k. Выведите отстаток от деления каждого из этих чисел на 998244353, враги все равно будут впечатлены.

    Входные данные

    В единственной строке находятся два целых числа n и k (1 ≤ n ≤ 109, 1 ≤ k < 215) — число шаров и максимальное число групп, соответственно.

    Выходные данные

    Выведите последовательность из k целых чисел. Число i должно быть равно искомому числу способов выбрать ровно i групп в соответствии с правилами Польшара.

    Примечание

    В первом примере можно разделить шары на группы следующим образом:

    {1}, {2}, {3}, {12}, {23}.

    {12}{3}, {1}{23}, {1}{2}, {1}{3}, {2}{3}.

    {1}{2}{3}.

    Поэтому нужно вывести 5 5 1.

    E. Байтландские монеты

    дп Комбинаторика математика *3200

    В Байтландии в ходу монеты n разных видов. Для удобства расчётов, достоинство монеты вида k обязательно делит достоинство монеты k + 1, а достоинство монеты вида 1 равно 1 тугрик. Отношение достоинств монет вида k + 1 и k равно ak. Также известно, что для любого x есть не более 20 видов монет, имеющих достоинство x.

    У Байтазара с собой есть ровно bk монет вида k, и сейчас ему нужно заплатить ровно m тугриков. Также известно, что Байтазар не носит с собой более 3·105 монет. Байтазар хочет узнать, сколько у него есть способов заплатить m тугриков. Способы считаются различными, если для некоторого k в способах различается количество монет вида k. Как и всех в Байтландии, Байтазара количество способов интересует исключительно по модулю 109 + 7.

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 3·105) — число видов монет.

    Во второй строке записано n - 1 целых чисел a1, a2, ..., an - 1 (1 ≤ ak ≤ 109) — отношения между достоинствами монет. Гарантируется, что для любого x есть не более 20 видов монет, имеющих достоинство x.

    В третьей строке записано n неотрицательных целых чисел b1, b2, ..., bn — количество монет каждого вида, имеющихся у Байтазара. Гарантируется, что их сумма не превосходит 3·105.

    В четвёртой строке записано одно целое число m (0 ≤ m < 1010000) — сумма в тугриках, которую Байтазар должен заплатить.

    Выходные данные

    В единственной строке выведите одно число — количество способов заплатить ровно m тугриков по модулю 109 + 7.

    Примечание

    В первом примере у Байтазара есть 4 монеты достоинства 1, и нужно заплатить 2 тугрика. Способ единственен.

    Во втором примере у Байтазара есть по 4 монеты двух различных видов достоинства 1, и нужно заплатить 2 тугрика. Теперь способов 3: заплатить одну монету первого вида, одну — второго, заплатить две монеты первого вида, или заплатить две монеты второго вида.

    В третьем примере достоинства монет равны 1, 3, 9.

    F. Длинное число

    математика Разбор выражений теория чисел *3400

    Рассмотрим следующую грамматику:

    • <expression> ::= <term> | <expression> '+' <term>
    • <term> ::= <number> | <number> '-' <number> | <number> '(' <expression> ')'
    • <number> ::= <pos_digit> | <number> <digit>
    • <digit> ::= '0' | <pos_digit>
    • <pos_digit> ::= '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

    Эта грамматика задаёт число в десятичной системе счисления по следующим правилам:

    • <number> задаёт себя,
    • <number>-<number> (l-r, l ≤ r) задаёт число, полученное как конкатенация всех чисел от l до r, записанных без ведущих нулей. Например, 8-11 задает число 891011,
    • <number>(<expression>) задаёт число, полученное как конкатенация <number> копий числа, задаваемого <expression>,
    • <expression>+<term> задаёт число, полученное как конкатенация чисел, задаваемых <expression> и <term>.

    Пример: 2(2-4+1)+2(2(17)) задаёт число 2341234117171717.

    Дано выражение, выведите остаток от деления числа, которое оно задаёт, на 109 + 7.

    Входные данные

    В единственной строке ввода записана непустая строка длины не более 105, соответствующая заданной грамматике. В частности, для термов вида l-r гарантируется l ≤ r.

    Выходные данные

    В единственной строке выведите остаток от деления числа, задаваемого выражением, на 109 + 7.

    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.

    A. Праздник равенства

    математика реализация *800

    В Берляндии наступил праздник равенства. В честь праздника король решил за счёт государственной казны уравнять благосостояние всех граждан Берляндии.

    Всего в Берляндии n граждан, благосостояние каждого из которых оценивается целым числом в ai бурлей (бурль — денежная единица Берляндии).

    Вы — королевский казначей, которому требуется посчитать минимальные расходы королевства на подарок короля. Король может только давать деньги, а отбирать их он не имеет права.

    Входные данные

    В первой строке входных данных содержится целое число n (1 ≤ n ≤ 100) — количество граждан Королевства.

    Во второй строке содержатся n чисел a1, a2, ..., an, где ai (0 ≤ ai ≤ 106) — благосостояние i-го гражданина.

    Выходные данные

    В единственную строку выходных данных выведите выведите целое число S — минимальное количество бурлей, которое придётся потратить.

    Примечание

    В первом примере, если прибавить первому гражданину 4 бурля, второму 3, третьему 2 и четвёртому 1, то у всех граждан благосостояние станет равным 4.

    Во втором примере достаточно дать третьему гражданину один бурль.

    В третьем примере нужно отдать по два бурля первому и третьему гражданам, чтобы благосостояние всех граждан стало равным 3.

    В четвёртом примере можно никому ничего не давать, так как у всех граждан уже по 12 бурлей.

    C. Несправедливый опрос

    Бинарный поиск Конструктив математика реализация *1700

    На уроке литературы Серёжа заметил чудовищную несправедливость, ему кажется, что некоторых учеников спрашивают чаще чем других.

    Рассадка в классе представляет собой прямоугольник, в котором n рядов по m учащихся в каждом.

    Учительница опрашивает учеников в следующем порядке: сначала она спрашивает всех учеников с первого ряда в порядке их рассадки на ряду, после опроса всех учеников на очередном ряду она переходит к следующему, по порядку следования опроса, ряду. Если учительница опросила последний ряд, то направление опроса сменяется, то есть опрашивается предыдущий ряд. Порядок опроса рядов выглядит следующим образом: 1-й ряд, 2-й ряд, ..., n - 1-й ряд, n-й ряд, n - 1-й ряд, ..., 2-й ряд, 1-й ряд, 2-й ряд, ...

    Порядок опроса учеников на одном ряду всегда один и тот же: 1-й ученик, 2-й ученик, ..., m-й ученик.

    За урок учительница успела опросить ровно k вопросов у учеников в порядке описанном выше. Серёжа сидит в x-м ряду, на y-м по порядку месте. Сергей решил доказать учителю, что ученики опрашиваются неравномерно, помогите ему вычислить три величины:

    1. максимальное количество вопросов, заданных одному из учеников,
    2. минимальное количество вопросов, заданных одному из учеников,
    3. сколько раз учительница спросила Серёжу.

    Если в классе только один ряд, то учительница всегда опрашивает детей с него.

    Входные данные

    Первая и единственная строка содержит пять целых чисел n, m, k, x и y (1 ≤ n, m ≤ 100, 1 ≤ k ≤ 1018, 1 ≤ x ≤ n, 1 ≤ y ≤ m).

    Выходные данные

    Выведите три числа:

    1. максимальное количество вопросов, заданных одному из учеников,
    2. минимальное количество вопросов, заданных одному из учеников,
    3. сколько раз учительница спросила Серёжу.
    Примечание

    Порядок опроса учеников в первом тесте:

    1. ученик с первого ряда сидящий за первой партой, то есть Серёжа;
    2. ученик с первого ряда сидящий за второй партой;
    3. ученик с первого ряда сидящий за третьей партой;
    4. ученик с первого ряда сидящий за первой партой, то есть Серёжа;
    5. ученик с первого ряда сидящий за второй партой;
    6. ученик с первого ряда сидящий за третьей партой;
    7. ученик с первого ряда сидящий за первой партой, то есть Серёжа;
    8. ученик с первого ряда сидящий за второй партой;

    Порядок опроса учеников во втором тесте:

    1. ученик с первого ряда сидящий за первой партой;
    2. ученик с первого ряда сидящий за второй партой;
    3. ученик со второго ряда сидящий за первой партой;
    4. ученик со второго ряда сидящий за второй партой;
    5. ученик с третьего ряда сидящий за первой партой;
    6. ученик с третьего ряда сидящий за второй партой;
    7. ученик с четвёртого ряда сидящий за первой партой;
    8. ученик с четвёртого ряда сидящий за второй партой, то есть Серёжа;
    9. ученик с третьего ряда сидящий за первой партой;

    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.

    F. Геометрические прогрессии

    математика Перебор теория чисел *2400

    Для заданных n, l и r найдите количество различных геометрических прогрессий, каждая из которых состоит из n различных целых чисел не меньших l и не больших r. Иными словами, для каждой прогрессии должно выполняться: l ≤ ai ≤ r и ai ≠ aj , где a1, a2, ..., an —геометрическая прогрессия, 1 ≤ i, j ≤ n и i ≠ j.

    Геометрическая прогрессия — последовательность чисел a1, a2, ..., an, в которой каждое последующее число, начиная со второго, получается из предыдущего умножением его на определённое, не равное нулю, число d — знаменатель прогрессии. Заметим что в рамках нашей задачи d может быть не целым, например в прогрессии 4, 6, 9, знаменатель прогрессии .

    Две прогрессии a1, a2, ..., an и b1, b2, ..., bn различны, если найдётся такое i (1 ≤ i ≤ n), что ai ≠ bi.

    Входные данные

    Первая и единственная строка содержит три целых числа n, l и r (1 ≤ n ≤ 107, 1 ≤ l ≤ r ≤ 107).

    Выходные данные

    Выведите одно целое число K — ответ на задачу.

    Примечание

    Возможные прогрессии для первого теста из примеров:

    • 1;
    • 2;
    • 3;
    • 4;
    • 5;
    • 6;
    • 7;
    • 8;
    • 9;
    • 10.

    Возможные прогрессии для второго теста из примеров:

    • 6, 7;
    • 6, 8;
    • 6, 9;
    • 7, 6;
    • 7, 8;
    • 7, 9;
    • 8, 6;
    • 8, 7;
    • 8, 9;
    • 9, 6;
    • 9, 7;
    • 9, 8.

    Возможные прогрессии для третьего теста из примеров:

    • 1, 2, 4;
    • 1, 3, 9;
    • 2, 4, 8;
    • 4, 2, 1;
    • 4, 6, 9;
    • 8, 4, 2;
    • 9, 3, 1;
    • 9, 6, 4.

    Возможные прогрессии для четвёртого теста из примеров:

    • 4, 6, 9;
    • 9, 6, 4.

    C. Мутация

    битмаски дп математика *2700

    Ученые планеты Олимпия проводят очередной эксперимент в области мутации примитивных организмов. Геном организма с этой планеты может быть представлен в виде строки из первых K заглавных букв английского алфавита. Для каждой пары типов генов было установлено риск возникновения заболевания ai, j, при условии что гены этих типов стоят подряд в геноме, где i — номер первого гена (нумерация начинается с 1), j — номер второго гена. Ген 'A' имеет номер 1, 'B' имеет номер 2 и так далее. Например, a3, 2 отвечает за пару 'CB'. Риск возникновения заболевания у организма равен сумме рисков для каждой пары соседних генов в геноме и измеряется он в рискограммах.

    Ученые уже получили базовый организм, из которого путем мутации могут быть получены другие организмы. Механизм мутации включает удаление всех генов определенных типов. Такое удаление дополнительно увеличивает риск возникновения заболевания, причем для каждого типа генов было определено число ti — на сколько увеличится риск заболевания организма, если все гены типа i будут удалены. Например, t4 отвечает за суммарный риск, добавляющийся при удалении всех генов типа 'D'.

    Цель ученых — посчитать количество различных организмов, которые можно получить из базового описанным выше путем, причем риск возникновения заболевания у которых не превышает T рискограмм. Два организма считаются разными, если строки задающие их геномы отличаются. Геном полученного организма должен состоять хотя бы из одного гена.

    Входные данные

    Первая строка входного файла содержит 3 целых числа: N (1 ≤ N ≤ 200000) — длину генома начального организма, K (1 ≤ K ≤ 22) — максимальный номер буквы, которая может встречаться в геноме и T (1 ≤ T ≤ 2·109) — максимальный допустимый риск возникновения заболевания. Вторая строка содержит геном базового организма — строку длины N, состоящий только из первых K заглавных букв английского алфавита.

    Третья строка содержит K чисел, t1, t2, ..., tK, где ti — дополнительное значение риска, которое добавляется при удалении всех генов типа i.

    Следующие K строк содержат матрицу ai, j. i-я строка содержит K чисел.j-ое число в строке с номером i задает риск возникновения заболевания для пары генов, первый из которых соответствует i-ой букве, а второй — j-ой букве.

    Все числа во входном файле целые, неотрицательные и все кроме T не превышают 109. Все риски заданы в рискограммах. Гарантируется, что наибольший возможный риск заболевания организма, который может быть получен из исходного, строго меньше 231.

    Выходные данные

    Единственная строка выходного файла должна содержать одно целое число — искомое количество разных организмов с риском возникновения заболевания не более T рискограммов, которые могут быть получены из базового путем описанным в условии.

    Примечание

    Объяснение: возможно получить такие организмы (в скобках указано риски): BACAC (11), ACAC (10), BAA (5), B (6), AA (4).

    D. Плюс и XOR

    дп жадные алгоритмы математика *1700

    Побитовое исключающее ИЛИ (или побитовое сложение по модулю два) — это бинарная операция, действие которой эквивалентно применению логического исключающего ИЛИ к каждой паре битов, которые стоят на одинаковых позициях в двоичной записи операндов. Иными словами, если соответствующие биты операндов различны, то соответствующий двоичный разряд результата равен 1; если же биты одинаковые, то двоичный разряд результата равен 0.

    Например, если X = 10910 = 11011012, а Y = 4110 = 1010012 тогда:

    X xor Y  =  6810  =  10001002.

    Напишите программу, которая по двум целым неотрицательным числам A и B найдет такие неотрицательные целые числа X и Y, для которых выполняются условия:

    • A  =  X + Y
    • B  =  X xor Y, где xor — побитовое исключающее или.
    • X — наименьшее среди чисел, для которых выполняются условия 1 и 2.
    Входные данные

    Первые две строки входного файла содержат соответственно целые числа A и B (0 ≤ A, B ≤ 264 - 1).

    Выходные данные

    Единственная строка выходного файла должна содержать два целых неотрицательных числа X и Y, либо единственное число  - 1, если таких пар не существует.

    E. Точки

    математика реализация *1700

    На плоскости задано N точек. Напишите программу, которая найдет сумму квадратов расстояний между всеми парами точек.

    Входные данные

    Первая строка входного файла содержит единственное натуральное число N (1 ≤ N ≤ 100 000) — количество точек. Последующие N строк содержат по два целых числа X и Y ( - 10 000 ≤ X, Y ≤ 10 000) — координаты точек. Данные могут содержать совпадающие точки.

    Выходные данные

    Единственная строка выходного файла должна содержать сумму квадратов расстояний между всеми парами точек.

    A. Петя и календарь

    математика реализация *800

    Петя решил сделать календарь на текущий месяц. Для этого он рисует таблицу, в которой столбцы будут соответствовать неделям (неделя — семь последовательных дней, начинающиеся в понедельник и заканчивающиеся в воскресение), строки — дням недели, а в клетках таблицы будут записаны числа месяца. Например, календарь на январь 2017-го года выглядит так:

    Петя задался вопросом: а сколько столбцов будет в этой таблице, если известно, какой это месяц и каким днем недели является первое число? Год считается невисокосным.

    Входные данные

    В единственной строке находятся два целых числа m и d (1 ≤ m ≤ 12, 1 ≤ d ≤ 7) — номер месяца на календаре (январь — первый месяц, декабрь — двенадцатый) и день недели первого числа этого месяца (1 — понедельник, 7 — воскресенье).

    Выходные данные

    Выведите единственное число: число столбцов в таблице.

    Примечание

    Первый пример соответствует январю 2017, показанному в таблице в условии.

    Во втором примере 1-е января — понедельник, поэтому месяц помещается в 5 столбцах.

    В третьем примере 1-е ноября — суббота, достаточно 5 столбцов.

    A. Даша и лестница

    Конструктив математика Перебор реализация *1000

    По пути на занятия по программированию тигра Дашу ждало первое испытание — огромная лестница!

    Ступеньки лестницы были пронумерованы, начиная с единицы до бесконечности. Как известно, тигры очень любят все чередующееся, не исключено, что это как-то связано с их окраской. Поэтому на некотором отрезке своего пути она посчитала два числа — количество ступенек с чётными и нечётными номерами.

    Вам необходимо проверить, существует ли такой промежуток ступенек c l-й по r(1 ≤ l ≤ r), для которого числа, посчитанные Дашей, верны.

    Входные данные

    В единственной строке вам заданы два целых числа a, b (0 ≤ a, b ≤ 100) — количество чётных и нечётных ступенек соответственно.

    Выходные данные

    В единственной строке выходных данных выведите «YES», если отрезок ступенек, описанный входными данными существует, и «NO» в противном случае.

    Примечание

    В первом примере один из подходящих промежутков от 1 до 5. В этом интервале две четные ступеньки — 2 и 4, и три нечетных: 1, 3 и 5.

    B. Даша и друзья

    математика Перебор реализация *1300

    Бег с препятствиями на кольцевом треке очень популярен в стране, в которой живет Даша, поэтому немудрено, что по пути на занятия она смогла застать следующую картину:

    Трек представляет собой окружность длины L, в различных точках которой находятся n препятствий. Спортсмены всегда пробегают трек против часовой стрелки, если смотреть на него сверху. Все препятствия расположены на целочисленном расстоянии друг от друга вдоль трека.

    Ее друзья попугай Кефа и леопард Саша участвовали в соревнованиях и каждый из них пробежал один круг. Каждый из друзей стартовал из некоторой целочисленной точки трека. Оба друга, для каждого из n препятствий записали расстояние от своего старта вдоль трека. Таким образом, каждый из них записал n чисел в порядке возрастания, каждое из этих чисел было в пределах от 0 до L - 1 включительно.

    Рассмотрим пример. Пусть L = 8, синие кружки — препятствия, а зеленые точки — старты Кефы (A) и Саши (B). Тогда Кефа выпишет последовательность [2, 4, 6], а Саша — [1, 5, 7].

    В стране есть разные треки, у всех из них совпадает общая длина и количество препятствий, но положения препятствий могут быть разные. Даше интересно, пробежали ли Саша и Кефа они один и тот же трек, или они участвовали на разных треках.

    Напишите программу, которая проверит, что трек Кефы и трек Саши совпадают (то есть один может быть получен из другого изменением точки старта). Обратите внимание, что они всегда пробегают трек в одинаковом направлении — против часовой стрелки, если смотреть на него сверху.

    Входные данные

    В первой строке записаны два целых числа n и L (1 ≤ n ≤ 50, n ≤ L ≤ 100) — количество препятствий на треке и его длина.

    Во второй строке записаны n различных целых чисел в порядке возрастания — расстояния от старта Кефы до каждого из препятствий в порядке их преодоления. Все числа целые, лежат в границах от 0 до L - 1 включительно.

    Во второй строке записаны n различных целых чисел в порядке возрастания — расстояния от старта Саши до каждого из препятствий в порядке их преодоления. Все числа целые, лежат в границах от 0 до L - 1 включительно.

    Выходные данные

    Выведите «YES» (без кавычек), если Кефа и Саша пробежали совпадающие треки (то есть такие, что положения всех препятствий совпадают, если начать из одинаковых точек трека). Выведите «NO» (без кавычек) в противном случае.

    Примечание

    Первый пример разобран в условии.

    A. k-й делитель

    математика теория чисел *1400

    Даны два натуральных числа n и k. Найдите k-й в порядке возрастания делитель числа n, либо сообщите, что его не существует.

    Делителем числа n является любое натуральное число, на которое число n делится без остатка.

    Входные данные

    В первой строке следуют два целых числа n и k (1 ≤ n ≤ 1015, 1 ≤ k ≤ 109).

    Выходные данные

    Если у числа n менее k делителей, выведите -1.

    В противном случае, выведите k-й в порядке возрастания делитель числа n.

    Примечание

    В первом пример у числа 4 есть три делителя: 1, 2 и 4. Второй из них — 2.

    Во втором примере у числа 5 есть только два делителя, 1 и 5. Ответ -1, потому что третьего делителя нет.

    C. Тимофей и перемодулирование

    математика Перебор реализация теория чисел *2600

    Тимофей очень любит числа, но, к сожалению, он еще не умеет работать с большими числами, поэтому он выполняет все операции по своему любимому простому модулю m. А еще Тимофей любит арифметические прогрессии и всюду их ищет.

    На день рождения ему подарили последовательность различных целых чисел a1, a2, ..., an. Тимофею стало интересно, можно ли переставить элементы последовательности так, чтобы она стала арифметической прогрессией по модулю m.

    Арифметическая прогрессия по модулю m длины n с первым элементом x и разницей d — это последовательность целых чисел x, x + d, x + 2d, ..., x + (n - 1)·d, где каждый элемент взят по модулю m.

    Входные данные

    В первой строке находятся два целых числа m и n (2 ≤ m ≤ 109 + 7, 1 ≤ n ≤ 105, m — простое) — любимый простой модуль Тимофея и число элементов в последовательности.

    Во второй строке даны n различных целых чисел a1, a2, ..., an (0 ≤ ai < m) — элементы последовательности.

    Выходные данные

    Выведите -1, если невозможно переставить элементы последовательности так, чтобы она стала арифметической прогрессией по модулю m.

    Иначе, выведите два целых числа — первый элемент получившейся прогрессии x (0 ≤ x < m) и ее разницу d (0 ≤ d < m).

    Если ответов несколько, выведите любой.

    A. Вас вызывает Таймыр

    математика Перебор реализация *800

    Товарищ Дюжиков занимается подбором артистов для дня рождения Тимофея и заодно принимает поздравления с Таймыра.

    Итак, товарища Дюжикова раз в n минут вызывает с Таймыра Илюша-альпинист, то есть в минуты n, 2n, 3n и так далее. Раз в m минут приходят артисты и выступают, то есть в минуты m, 2m, 3m и так далее. Поскольку связь работает плохо, ни одного звонка пропустить нельзя, зато вот артистов очень много. Если день длится z минут (то есть состоит из минут 1, 2, ..., z), сколько артистов надо утопить, чтобы во время звонков не было артистов? Считайте, что и звонок, и выступление артиста длятся ровно одну минуту.

    Входные данные

    Единственная строка содержит три целых числа — n, m, z (1 ≤ n, m, z ≤ 104)

    Выходные данные

    Выведите единственное число — минимальное количество артистов, которых надо утопить, чтобы во время звонков не было артистов.

    Примечание

    В первом тесте артисты приходят ежеминутно, так же звонит и Илья, поэтому всех артистов надо утопить.

    Во втором тесте артисты со звонком пересекаются на 2-ой и 4-ой минутах.

    В третьем тесте они пересекаются только на 6-ой минуте.

    A. Слишком много контестов

    математика реализация *900

    В самых разных частях света ежегодно проводится множество соревнований по каль... то есть простите, бильярду, и команда Джинотега старается посетить их все. Если соревнование проходит далеко от родного города участников, команда летит на самолёте туда и обратно.

    Лучшие друзья Джинотеги, команда Base, взломали почту ребят и нашла там все их электронные посадочные талоны за этот год. На каждом талоне написаны города вылета и прилёта. Теперь друзьям интересно, где же Джинотега сейчас, дома или на каком-нибудь соревновании? Base знают, что

    • у них есть данные обо всех полётах Джинотеги за этот год (в произвольном порядке),
    • Джинотега летает только из дома на соревнования и обратно,
    • после каждого соревнования Джинотега обязательно возвращается домой (однако они могут летать на соревнование в один город несколько раз),
    • и наконец, в начале года все участники Джинотеги были дома.

    Помогите им определить, где же Джинотега находится сейчас!

    Входные данные

    В первой строке входного файла содержится единственное целое число n: количество полётов, совершённых командой (1 ≤ n ≤ 100). Во второй строке содержится строка из 3 заглавных латинских букв: название аэропорта в родном городе Джинотеги. Каждая из следующих n строк содержит информацию об очередном полёте в формате «XXX->YYY», где «XXX» — аэропорт вылета, а «YYY» — аэропорт прилёта. Ровно один из этих аэропортов — домашний аэропорт Джинотеги.

    Гарантируется, что информация о полётах согласована с предположениями друзей, описанных в основной части условия.

    Выходные данные

    Если Джинотега сейчас находится дома, выведите «home» (без кавычек), иначе выведите «contest».

    Примечание

    В первом тесте из условия участники команды могли сначала слетать из SVO в CDG и вернуться, а затем слетать из SVO в LHR и вернуться. Таким образом, Джинотега сейчас находится дома. Во втором тесте Джинотега должна сейчас находиться в RAP, поскольку обратного полёта оттуда нет в списке.

    C. Игра в теннис 2

    математика *1200

    Миша и Ваня сыграли несколько партий в настольный теннис. Каждая партия состоит из нескольких розыгрышей, каждый розыгрыш приносит очко одному из игроков. Как только один из игроков набирает ровно k очков, партия заканчивается и счет игроков обнуляется.

    В сумме за все партии Миша набрал a очков, а Ваня — b очков. По этой информации определите максимальное количество партий, которое они могли сыграть, либо что такая ситуация невозможна. Обратите внимание, что игра закончилась в момент окончания последней партии.

    Входные данные

    В первой строке через пробел записано три целых числа k, a и b (1 ≤ k ≤ 109, 0 ≤ a, b ≤ 109, a + b > 0).

    Выходные данные

    Если ситуация невозможна, выведите -1, иначе выведите максимальное количество партий.

    Примечание

    Обратите внимание, что правила игры в данной задаче отличаются от реальных правил настольного тенниса, так, например, правило баланса (игрок, выигравший партий, должно иметь хотя бы два очка преимущества) не имеет силы в рамках данной задачи.

    D. Артем и Сандерс

    Конструктив математика снм *1700

    У Артема есть друг Сандерс из университета Чикаго. Сандерс предложил Артему следующую задачу.

    Обозначим за [n] множество {1, ..., n}. Также мы будем использовать обозначение f: [x] → [y], чтобы показать, что функция f имеет значения в точках 1, ..., x, и все эти значения — целые числа от 1 до y.

    Итак, вам дана функция f: [n] → [n]. Ваша задача в том, чтобы найти целое положительное число m и две функции g: [n] → [m], h: [m] → [n], такие что g(h(x)) = x для всех и h(g(x)) = f(x) для всех , либо определите, что найти их невозможно.

    Входные данные

    В первой строке входного файла содержится целое число n (1 ≤ n ≤ 105).

    Во второй строке содержатся n целых чисел, разделённых пробелами — значения f(1), ..., f(n) (1 ≤ f(i) ≤ n).

    Выходные данные

    Если найти требуемые функции невозможно, выведите -1.

    Иначе, на первой строке выведите число m (1 ≤ m ≤ 106). На второй строке выведите n чисел g(1), ..., g(n). На третьей строке выведите m чисел h(1), ..., h(m).

    Если существует несколько верных ответов, вы можете вывести любой из них. Гарантируется, что если ответ существует, то также существует ответ, подходящий под указанные ограничения.

    G. МАТЕМАТNКА

    meet-in-the-middle дп математика Перебор теория чисел *3200

    Если вы дошли до этой задачи, вы всё равно вряд ли станете читать легенду...

    Вам дана бинарная строка и целое число . Найдите количество целых k, 0 ≤ k < N, таких что для всех i = 0, 1, ..., m - 1

    Выведите ответ по модулю 109 + 7.

    Входные данные

    В первой строке входного файла содержится строка s, состоящая из символов 0 и 1 (1 ≤ |s| ≤ 40).

    В следующей строке содержится целое число n (1 ≤ n ≤ 5·105).

    В каждой из следующих n строк содержатся два разделённых пробелом целых числа pi, αi (1 ≤ pi, αi ≤ 109, pi простое). Все pi различны.

    Выходные данные

    Едиственное число — ответ на задачу.

    B. Махмуд и треугольник

    геометрия жадные алгоритмы Конструктив математика сортировки теория чисел *1000

    У Махмуда есть n отрезков, i-й из них имеет длину ai. Ехаб поспорил с ним, сможет ли он использовать ровно 3 отрезка для того, чтобы составить из них невырожеднный треугольник. Махмуд никогда не спорит, если не уверен, что может выиграть, поэтому он спросил вас, должен ли он принять этот вызов или нет. Вам даны длины отрезков, проверьте, можно ли выбрать ровно 3 из них, чтобы составить невырожденный треугольник.

    Махмуд должен использовать ровно 3 отрезка, он не может составить отрезок из двух или изменять какие-либо длины. Невырожденным считается треугольник с положительной площадью.

    Входные данные

    Первая строка содержит целое число n (3 ≤ n ≤ 105) — число отрезков.

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — длины отрезков.

    Выходные данные

    В единственной строке выведите «YES», если можно выбрать ровно три отрезка и составить из них невырожденный треугольник, и «NO» иначе.

    Примечание

    В первом примере Махмуд может выбрать отрезки с длинами 2, 4 и 5 и составить из них невырожденный треугольник.

    E. Махмуд и xor-поездка

    битмаски Деревья дп Конструктив математика поиск в глубину и подобное Структуры данных *2100

    Махмуд и Ехаб живут в стране, в которой n городов, пронумерованных от 1 до n, соединенных n - 1 двунаправленными дорогами. Гарантируется, что из любого города можно добраться в любой другой используя только эти дороги. Про каждый город известна некоторая величина ai.

    Определим расстояние от города x до города y как xor чисел, известных про города на пути от x до y (включая как x, так и y). Другими словами, если мы выпишем все величины городов на пути от x до y в массив p длины l, то расстояние между ними будет равно , где  — операция побитовый xor.

    Махмуд и Ехаб хотят выбрать два города и проехать от одного до другого. Номер города, в котором они стартуют, всегда не больше номера города, в котором они финишируют (они могут стартовать и закончить в одном и том же городе, тогда расстояние будет равно величине, известной про этот город). Они никак не могут выбрать эти два города, поэтому они попробуют каждый город как старт и каждый город с не меньшим индексом как финиш. Определите суммарное расстояние между всеми этими парами городов.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 105) — число городов в стране Махмуда и Ехаба.

    Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 106), которые описывают величины, известные про города. Величина ai известна про город i.

    Каждая из следующих n  -  1 строк содержит два числа u и v (1  ≤  u,  v  ≤  n, u  ≠  v), означающие, что между городами u и v существует двунаправленная дорога. Гарантируется, что можно доехать от любого города до любого другого по данным дорогам.

    Выходные данные

    Выведите одно число — суммарное расстояние между всеми возможными парами городов.

    Примечание

    Операция побитовый xor принимает два целых битовых числа одинаковой длины и выполняет логическую операцию xor на каждой паре соответсвующих бит. Результат в позиции равен 1, если и только если только первый бит 1 или только второй бит 1, и результат равен 0 если оба бита 0 или оба бита 1. Больше информации о побитовом xor можно найти здесь: https://ru.wikipedia.org/wiki/Битовые_операции#.D0.98.D1.81.D0.BA.D0.BB.D1.8E.D1.87.D0.B0.D1.8E.D1.89.D0.B5.D0.B5_.D0.98.D0.9B.D0.98_.28XOR.29.

    В первом тесте из примера возможные пути следующие:

    • из города 1 в него самого, расстояние 1,
    • из города 2 в него самого, расстояние 2,
    • из города 3 в него самого, расстояние 3,
    • из города 1 в город 2, расстояние ,
    • из города 1 в город 3, расстояние ,
    • из города 2 в город 3, расстояние .
    Суммарное расстояние равно 1 + 2 + 3 + 3 + 0 + 1 = 10.

    D. Джон и сферы

    дп математика Теория вероятностей *2200

    Джон Сноу находится в поиске некоторых сфер, необходимых для победы над белыми ходоками. Существует k различных типов сфер, и ему нужна хотя бы одна сфера каждого типа. Одна сфера каждый день появляется у основания Чардрева на севере стены. Появление сферы каждого типа равновероятно. Так как север стены полон опасностей, он хочет знать минимальное количество дней, которое он должен ждать, посылая рейнджера собирать сферы каждый день, так что вероятность получения хотя бы одной сферы каждого типа как минимум , где ε < 10 - 7.

    Для того, чтобы лучше подготовиться, он хочет знать ответ для q различных значений pi. Так как он занят планированием боевой стратегии с Сэмом, он просит вашей помощи.

    Входные данные

    На первой строке находятся два целых числа k, q (1 ≤ k, q ≤ 1000) — количество типов сфер и количество запросов соответственно.

    Каждая из следующих q строк содержит единственное целое число pi (1 ≤ pi ≤ 1000) — i-й запрос.

    Выходные данные

    Выведите q строк. На i-й из них выведите единственное целое число — ответ на i-й запрос.

    F. Бочки и коробки

    Комбинаторика математика Перебор Теория вероятностей теория чисел *2300

    Тарли имеет два различных типа предметов, коробки еды и бочки вина. Есть f коробок с едой и w бочек вина. Тарли хранит их в разных стеках, и каждый стек может содержать только либо коробки еды, либо бочки вина, но не оба типа предметов сразу. Стеки расположены в ряд так, что нет двух стеков еды рядом, и нет двух стеков вина рядом.

    Высота стека определена, как количество предметов в стеке. Два стека различны, если их высоты различны или один стек содержит еду, а другой вино.

    Джону Сноу не нравится когда, какой-нибудь стек с вином имеет высоту меньше либо равную h. Какова вероятность, что Джону Сноу понравится расстановка в стеки, если все расстановки равновероятны?

    Две расстановки стеков считаются разными, если существует такое i, что i-й стек одной расстановки не равен i-у стеку другой расстановки.

    Входные данные

    Первая строка входных данных содержит три целых числа f, w, h (0 ≤ f, w, h ≤ 105) — количество коробок с едой, количество бочек с вином и число h описанное выше. Гарантируется, что есть хотя бы одна коробка еды или хотя бы одна бочка вина.

    Выходные данные

    Выведите вероятность того, что Джон Сноу понравится расстановка. Вероятность этого имеет форму , вам необходимо вывести единственное целое число равное p·q - 1 mod (109 + 7).

    Примечание

    В первом тестовом примере f  =  1, w = 1 и h = 1, здесь две возможных расстановки, и ни одна из них не нравится Джону Сноу.

    Во втором тестовом примере f = 1, w = 2 и h = 1, здесь три возможных расстановки. Джону нравятся расстановки (1) и (3). Поэтому вероятность равна .

    B. Сброс наковальни

    математика Теория вероятностей *1800

    Во многих американских мультфильмах главным героям почему-то время от времени падают на головы наковальни. Иногда, конечно, падают сейфы, шкафы, крейсеры, самолёты... Но чаще всего всё-таки наковальни.

    Наковальни бывают очень разных размеров и габаритов. Частенько они втаптывают героя глубоко в землю. Но вы задумывались над тем, кто же сбрасывает с неба наковальни? С какой высоты? Уверен, что подобные вопросы никогда не приходили вам в голову!

    Оказывается, мастерски сбросить наковальню на цель совсем непросто. Опишем одну из популярных моделей наковальнемёта.

    Пусть рост p потенциальной жертвы варьируется в диапазоне [0;a], а направление ветра q — в диапазоне [ - b;b]. p и q могут быть любыми действительными (вещественными) числами. Тогда утверждается, что наковальня будет в точности совмещена с головой мультяшки только в том случае, когда следующее уравнение будет иметь хотя бы один действительный корень:

    Определите, с какой вероятностью удастся сбить цель наковальней.

    Можете считать, что коэффициенты p и q выбираются равновероятно и независимо в своих диапазонах.

    Входные данные

    В первой строке дано целое число t (1 ≤ t ≤ 10000) — количество тестов.

    В последующих t строках находятся по два целых числа a и b, разделённые пробелом (0 ≤ a, b ≤ 106).

    В претестах содержатся все тесты, в которых 0 < a < 10, 0 ≤ b < 10.

    Выходные данные

    Выведите t строк — вероятность успешного сброса наковальни для каждого теста. Абсолютная или относительная погрешность ответа не должна превосходить 10 - 6.

    B. Максимизируй сумму цифр

    *особая задача математика реализация *1300

    У Антона есть целое число x. Ему стало интересно, у какого целого положительного числа, не превосходящего x, сумма цифр максимальна.

    Перед вами стоит задача помочь Антону и найти число, которое его интересует. Если таких чисел несколько, определите наибольшее такое число.

    Входные данные

    В первой строке следует целое положительное число x (1 ≤ x ≤ 1018) — число, которое есть у Антона.

    Выходные данные

    Выведите целое положительное число, не превосходящее x, у которого сумма цифр максимальна. Если таких чисел несколько, выведите наибольшее такое число. Выведенное число не должно содержать лидирующих нулей.

    A. Вечная Копилка

    Бинарный поиск математика *1800

    У вас есть n гаджетов, которые вы хотите использовать одновременно.

    Гаджет номер i использует ai единиц энергии в секунду. Это использование энергии непрерывное, то есть, за λ секунд гаджет использует λ·ai единиц энергии. Гаджет номер i сейчас имеет bi единиц энергии. Все устройства могут хранить неограниченное количество единиц энергии.

    У вас есть единственное зарядное устройство, которое можно подключить к любому из гаджетов. Зарядное устройство заряжает подключенный гаджет на p единиц энергии в секунду. Зарядка происходит непрерывно, то есть, за λ секунд зарядки любой гаджет получит λ·p единиц энергии. Вы можете подключать зарядное устройство к любому гаджету в любой момент времени (в том числе, в нецелые моменты времени), можно считать, что переключение происходит мгновенно.

    Вы задались вопросом: как долго вы можете использовать все гаджеты, прежде чем в каком-то из них останется 0 единиц энергии?

    Если вы можете использовать гаджеты бесконечно долго, выведите -1. Иначе выведите максимально возможное время, в течение которого во всех гаджетах будет больше 0 единиц энергии.

    Входные данные

    Первая строка содержит два целых числа n и p (1 ≤ n ≤ 100 000, 1 ≤ p ≤ 109) — количество гаджетов и мощность зарядного устройства.

    После этого следуют n строк, каждая из которых содержит два целых числа. Строка номер i содержит числа ai и bi (1 ≤ ai, bi ≤ 100 000) — мощность устройства и запас энергии в устройстве в начальный момент времени.

    Выходные данные

    Если вы можете использовать гаджеты бесконечно долго, выведите -1. Иначе выведите максимально возможное время, в течение которого во всех гаджетах будет больше 0 единиц энергии.

    Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит 10 - 4.

    А именно, пусть ваш ответ равен a, а ответ жюри равен b. Ваш ответ будет засчитан, если .

    Примечание

    В первом примере можно заряжать первый гаджет все время, пока в нем кончится энергия. Во втором гаджете достаточно энергии, чтобы работать все это время без подзарядки.

    Во втором примере вы можете использовать гаджет бесконечно долго.

    В третьем примере можно заряжать третий гаджет в течение 2 / 5 секунды, а затем заряжать второй гаджет еще 1 / 10 секунды.

    C. Возмутительный Контраст

    графы дп Конструктив математика теория чисел *2300

    Вам дано целое число m, а также список из n различных целых чисел от 0 до m - 1.

    Вы хотите построить последовательность, удовлетворяющую следующим требованиям:

    • Каждый элемент последовательности — целое число от 0 до m - 1, включительно.
    • Все префиксные произведения (то есть, произведения положительного числа первых элементов последовательности) различны по модулю m.
    • Никакое префиксное произведение по модулю m не является элементом заданного списка.
    • Длина последовательности максимально возможна.

    Постройте любую последовательность, удовлетворяющую описанным свойствам.

    Входные данные

    Первая строка содержит два целых числа n и m (0 ≤ n < m ≤ 200 000) — число элементов в заданном списке и модуль, соответственно.

    Если n ненулевое, то следующая строка содержит n различных целых чисел от 0 до m - 1 — запрещенные префиксные произведения. Если n равно нулю, то второй строки нет.

    Выходные данные

    В первой строке выведите число k — длину построенной последовательности.

    Во второй строке выведите k целых чисел — вашу последовательность.

    Примечание

    В первом примере префиксные произведения построенной последовательности по модулю m равны [1, 2, 3, 4, 0].

    Во втором примере префиксные произведения построенной последовательности по модулю m равны [3, 7, 4, 6, 8, 0].

    A. Доля успешных попыток

    Бинарный поиск математика *1700

    Вы — опытный участник соревнований Codeforces. Недавно вы обнаружили, что за все время своего участия в раундах Codeforces успели сделать y попыток, из которых x были успешными. Таким образом, на данный момент ваша доля успешных попыток на Codeforces составляет x / y.

    Ваше любимое рациональное число в диапазоне [0;1] — это p / q. Теперь вам интересно: какое минимальное количество попыток вам придется сделать, если вы зададитесь целью сделать свою долю успешных попыток равной p / q?

    Входные данные

    Первая строка содержит одно целое число t (1 ≤ t ≤ 1000) — количество тестов.

    Каждая из следующих t строк содержит четыре целых числа x, y, p и q (0 ≤ x ≤ y ≤ 109; 0 ≤ p ≤ q ≤ 109; y > 0; q > 0).

    Гарантируется, что p / q — несократимая дробь.

    Взломы. Для взломов должно выполняться дополнительное ограничение t ≤ 5.

    Выходные данные

    Для каждого теста выведите одно целое число — минимальное количество попыток, которое вам придется сделать, чтобы ваша доля успешных попыток стала равна вашему любимому рациональному числу, либо -1, если добиться желаемого невозможно.

    Примечание

    В первом тесте необходимо сделать 4 успешные попытки. Тогда ваша доля успешных попыток составит 7 / 14, или 1 / 2.

    Во втором тесте нужно совершить 2 успешные и 8 безуспешных попыток. Тогда ваша доля успешных попыток составит 9 / 24, или 3 / 8.

    В третьем тесте нет надобности отсылать решения на проверку, ваша доля успешных попыток уже составляет 20 / 70, или 2 / 7.

    В четвертом тесте единственная неудачная попытка рушит все ваши надежды иметь долю успешных попыток, равную 1.

    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].

    F. Генерация тестов

    бпф дп Комбинаторика математика разделяй и властвуй теория чисел *3400

    Генерация тестов — непростое дело! Часто генерации случайных больших тестов недостаточно, чтобы обеспечить полноценную проверку решений на правильность.

    Например, рассмотрим задачу с одного из прошедших раундов Codeforces. Формат ее входных данных выглядит примерно так:

    В первой строке записано целое число n (1 ≤ n ≤ maxn) — количество элементов в множестве. Во второй строке в возрастающем порядке записано n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ maxa) — элементы множества.

    Если не обращать внимания на решение задачи, кажется, что сгенерировать хороший тест очень просто. Возьмем n = maxn, возьмем случайные различные ai от 1 до maxa, отсортируем... Далее вы поймете, что это не совсем так.

    Решение задачи выглядит следующим образом. Пусть g — наибольший общий делитель a1, a2, ..., an. Пусть x = an / g - n. Тогда правильное решение выводит «Alice», если x нечетно, и «Bob», если x четно.

    Рассмотрим два неверных решения задачи, отличающихся от правильного только формулой вычисления величины x.

    Первое вычисляет x по формуле x = an / g (без вычитания n).

    Второе вычисляет x по формуле x = an - n (без деления на g).

    Будем считать тест интересным, если на нем оба неверных решения выдают ответ, отличающийся от правильного.

    По данным значениям maxn, maxa и q найдите количество удовлетворяющих ограничениям интересных тестов к задаче и выведите его по модулю q.

    Входные данные

    Единственная строка содержит три целых числа maxn, maxa и q (1 ≤ maxn ≤ 30 000; maxn ≤ maxa ≤ 109; 104 ≤ q ≤ 105 + 129).

    Выходные данные

    Выведите единственное число — количество удовлетворяющих ограничениям тестов, на которых оба приведенных неверных решения выдают ответ, отличающийся от правильного, по модулю q.

    Примечание

    В первом примере интересные тесты выглядят следующим образом:


    1 1 1 3
    2 4 6 2 4 6

    E. Большое число и остаток

    *особая задача математика теория чисел *2300

    У Степана есть большое целое положительное число.

    Рассмотрим все циклические сдвиги числа, если рассматривать его как строку, которые также являются числами (то есть не начинаются с нуля). Будем называть такие циклические сдвиги хорошими. Например, для числа 10203 хорошими циклическими сдвигами являются само число 10203, а также числа 20310 и 31020.

    Степану стало интересно, какой наименьший остаток от деления на заданное число m можно получить, поделив на m все хорошие циклические сдвиги заданного числа.

    Входные данные

    В первой строке следует число, которое есть у Степана. Количество цифр в нём от 2 до 200 000. Гарантируется, что это число не начинается с нуля.

    Во второй строке следует целое число m (2 ≤ m ≤ 108) — число, на которое Степан будет делить хорошие циклические сдвиги.

    Выходные данные

    Выведите искомый наименьший остаток от деления на число m всех хороших циклических сдвигов заданного числа.

    Примечание

    В первом примере все хорошие циклические сдвиги числа 521 (они равны 521, 215, 152) дают одинаковый остаток 2 при делении на 3.

    Во втором примере для заданного числа есть только два хороших циклических сдвига: на ноль позиций и на одну позицию вправо. Сдвиг на ноль позиций равен 1001 и остаток от деления на 5 равен 1, а сдвиг на одну позицию вправо равен 1100 и остаток от деления на 5 равен 0, который является минимальным возможным остатком.

    C. Химикаты Молли

    Бинарный поиск математика Перебор реализация Структуры данных *1800

    У Молли Хупер есть n химикатов, расположенных в ряд. Каждый из химикатов имеет величину влиятельности, для химиката i эта величина равна ai.

    Молли хочет, чтобы Шерлок в нее влюбился. Она собирается смешать все химикаты из некоторого отрезка так, чтобы сделать любовное зелье с величиной влиятельности, равной некоторой целой неотрицательной степени числа k. Величина влиятельности зелья равна сумме величин влиятельности химикатов на отрезке, из которого зелье составлено.

    Помогите Молли найти количество отрезков, которые она может выбрать.

    Входные данные

    Первая строка содержит два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ |k| ≤ 10) — количество химикатов и число k, неотрицательной степенью которого должна быть величина влиятельности зелья.

    Вторая строка содержит n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — величины влиятельности химикатов.

    Выходные данные

    Выведите единственное целое число — число пригодных отрезков.

    Примечание

    Помните, что k0 = 1.

    В первом примере Молли может получить следующие величины влиятельности:

    • 2: отрезки [1, 1], [2, 2], [3, 3], [4, 4];

    • 4: отрезки [1, 2], [2, 3], [3, 4];

    • 6: отрезки [1, 3], [2, 4];

    • 8: отрезки [1, 4].

    Среди них величины 2, 4 и 8 являются степенями k = 2. Таким образом, ответ 8.

    Во втором примере Молли может выбрать отрезки [1, 2], [3, 3], [3, 4].

    E. Дети Холмс

    математика теория чисел *2100

    Дети Холмс сражаются за право считаться самым умным.

    Майкрофт попросил Шерлока и Эвр найти значение f(n), где f(1) = 1, а для n ≥ 2, f(n) равно количеству различных упорядоченных пар положительных целых чисел (x, y) таких, что x + y = n и gcd(x, y) = 1. Число gcd(a, b) равно наибольшему общему делителю a и b.

    Шерлок сказал, что это было слишком просто и попросил Майкрофта найти значение . Суммирование проводится по всем положительным целым числам d, делящим n.

    Эвр наблюдала это, не проронив ни слова, и в итоге задала Майкрофту и Шерлоку свою задачу.

    Она определила сложную функцию k-го порядка Fk(n) так:

    Она хочет, чтобы братья нашли значение Fk(n) по модулю 1000000007.

    Входные данные

    В единственной строке находятся два целых числа n (1 ≤ n ≤ 1012) и k (1 ≤ k ≤ 1012), показывающие, что Эвр попросила Шерлока и Майкрофта найти значение Fk(n) по модулю 1000000007.

    Выходные данные

    Выведите одно целое число — значение Fk(n) по модулю 1000000007.

    Примечание

    В первом примере есть 6 различных упорядоченных пар (1, 6), (2, 5), (3, 4), (4, 3), (5, 2) и (6, 1), удовлетворяющих x + y = 7 и gcd(x, y) = 1. Поэтому f(7) = 6. В итоге, F1(7) = f(g(7)) = f(f(7) + f(1)) = f(6 + 1) = f(7) = 6.

    A. Игра в напёрстки

    Конструктив математика реализация *1000

    В свободное время Бомбослав любит наблюдать из окна как ребята во дворе играют "на интерес" в известную игру в напёрстки. Для игры требуется два человека, ведущий и игрок. Ведущий берёт три одинаковых непрозрачных напёрстка и прячет под один из них шарик. Затем он несколько раз меняет некоторые пары напёрстков местами, после чего игрок должен угадать, под каким напёрстком сейчас находится шарик.

    Бомбослав заметил, что ребята во дворе не очень изобретательны в своих действиях, и ведущий всегда меняет местами левый напёрсток со средним на нечётных действиях (то есть на первом, третьем, пятом и так далее) и средний с правым на чётных действиях (то есть на втором, четвёртом и так далее).

    Пронумеруем напёрстки от 0 до 2 слева направо. То есть левый напёрстком имеет номер 0, средний номер 1, а правый номер 2. Бомбослав не успел увидеть начало игры, но посчитал, что ведущий совершил n действий и в итоге шарик оказался под напёрстком x. Под каким напёрстком находился шарик в самом начале?

    Входные данные

    В первой строке входных данных записано одно цело число n (1 ≤ n ≤ 2·109) — количество действий, совершённых ведущим.

    Во второй строке записано одно целое число x (0 ≤ x ≤ 2) — номер напёрстка, под которым оказался шарик через n действий.

    Выходные данные

    Выведите одно целое число от 0 до 2, означающее номер напёрстка, под которым находился шарик в самом начале.

    Примечание

    В первом примере шарик изначально лежал под средним напёрстком и ведущий совершил четыре действия.

    1. Первым действием ведущий поменял местами левый и средний напёрстки. В результате шарик оказался под левым напёрстком.
    2. Вторым действием ведущий поменял местами средний и правый напёрстки. Шарик остался под левым напёрстком.
    3. Третьим действием ведущий снова поменял местами левый и средний напёрстки. В результате шарик снова оказался посередине.
    4. Последним четвёртым действием ведущий опять поменял местами средний и правый напёрстки и шарик оказался под правым напёрстком.

    A. Перераспределение учеников

    Конструктив математика *1000

    В Берляндии каждый из учеников школы характеризуется своей успеваемостью — целым числом от 1 до 5 (наилучшая успеваемость — это «пятерка»).

    В школе номер 0xFF учится всего два класса: класс A и класс B. В каждом классе учится ровно n школьников. Про каждого школьника известна его успеваемость — целое число от 1 до 5.

    Только что подошел к концу учебный год и директор школы хочет перераспределить учеников между классами так, чтобы в каждом из двух классов было одинаковое количество учеников, чья успеваемость равна 1, одинаковое количество учеников, чья успеваемость равна 2 и так далее. Иными словами, цель директора — изменить составы классов так, чтобы для каждой успеваемости количества учеников в первом и втором классе были равны.

    Чтобы добиться этого, есть план произвести серию обменов учеников между классами. Во время обмена выбирается один ученик из класса A и один ученик класса B. После этого они одновременно меняют классы, где они учатся.

    Выведите наименьшее количество обменов, чтобы добиться желаемого равенства количеств учеников для каждой успеваемости.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤ 100) — количество учеников в каждом из классов.

    Вторая строка содержит последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 5), где ai — успеваемость i-го ученика класса A.

    Третья строка содержит последовательность целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 5), где bi — успеваемость i-го ученика класса B.

    Выходные данные

    Выведите искомое наименьшее количество обменов или -1, если желаемого распределения учеников по классам получить невозможно.

    D. Выстрел лучника

    Бинарный поиск геометрия математика *2300

    Стратегическая компьютерная игра нового поколения «Civilization XIII» поражает своей масштабностью и проработанностью деталей. Рассмотрим, например, одну из них.

    Игровое поле в игре разбито на правильные шестиугольники со стороной в 1 условную единицу. Пропорции юнитов в отношении карты близки к реальным, поэтому игровое поле можно считать бесконечной плоскостью. Каждый юнит занимает ровно одну шестиугольную ячейку игрового поля.

    Рассмотрим боевого юнита «Лучник». Каждый лучник имеет параметр «дальность выстрела». Это некоторое натуральное число условных единиц, которое задает радиус круга, в пределах которого лучник может поразить цель. Центр этого круга совпадает с центром ячейки, в которой сейчас находится лучник. Считается, что некоторая ячейка находится под обстрелом лучника, если и только если все ее точки (включая граничные), находится внутри или на границе круга.

    На картинке ниже показаны границы обстрела лучника для «дальностей выстрела» 3, 4 и 5. Сам лучник обозначен буквой A.

    Определите, какое количество клеток находится под обстрелом для лучника.

    Входные данные

    Входные данные представляют из себя одно натуральное число k — дальность выстрела лучника (1 ≤ k ≤ 106).

    Выходные данные

    Выведите единственное число — количество ячеек, которые находятся под обстрелом.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

    C. Антон и сказка

    Бинарный поиск математика *1600

    Антону нравится слушать сказки. Особенно, когда их рассказывает его лучший друг Даник. Прямо сейчас Даник рассказывает Антону такую сказку:

    «Жил-был один император. Он был очень богат, особенно много у него было зерна. Однажды он велел построить огромный амбар, чтобы поместить туда свое зерно. Лучшие строители строили амбар три дня и три ночи. Однако они недоглядели, и в амбаре осталась маленькая дырочка, через которую каждый день внутрь проникали воробьи. Вот прилетел один воробей, схватил зернышко и улетел...»

    Более формально, в сказке происходило следующее. В начале первого дня амбар вместимостью n зерен был наполнен доверху. Затем, каждый день (начиная с первого) происходило следующее:

    • В амбар привозили еще m зерен. Если m зерен в амбар не помещались, то он наполнялся доверху, а те зерна, которые не поместились, увозили обратно (в рамках данной задачи можно считать, что не поместившиеся в амбар зерна никак не учитывались).
    • Прилетали воробьи и клевали зерно. В i-й день прилетало i воробьев, то есть в первый день прилетал один воробей, во второй день — два и так далее. Каждый воробей съедает ровно по одному зернышку. Если амбар пуст, воробей ничего не съедает.

    Антон уже устал слушать, как Даник описывает каждого воробья, который клюет зерно из амбара. Конца сказке все еще не видно, поэтому он попросил Вас узнать, к концу какого дня амбар впервые станет пуст. Помогите Антону и напишите программу, которая определит номер этого дня!

    Входные данные

    В единственной строке входных данных записаны целые числа n и m (1 ≤ n, m ≤ 1018) — вместимость амбара и количество зерна, подвозимое ежедневно.

    Выходные данные

    Выведите одно целое число — номер дня, к концу которого амбар впервые станет пуст. Дни нумеруются, начиная с единицы.

    Примечание

    В первом примере в амбаре помещается пять зерен и еще два зерна привозят каждый день. Происходит следующее:

    • В начале первого дня в амбар привозят зерно. Он полон, поэтому ничего не происходит.
    • В конце первого дня прилетает один воробей и клюет зерно, поэтому остается 5 - 1 = 4 зернышка.
    • В начале второго дня привозят еще два зернышка. В итоге амбар снова наполняется, а одно зернышко остается лишним.
    • В конце второго дня прилетают два воробья. Остается 5 - 2 = 3 зернышка.
    • В начале третьего дня привозят еще два зернышка. Амбар наполнятся доверху снова.
    • В конце третьего дня прилетают три воробья и клюют зерно. Остается 5 - 3 = 2 зернышка.
    • В начале четвертого дня опять привозят зерно. Остается 2 + 2 = 4 зернышка.
    • В конце четвертого дня амбар прилетают четыре воробья и клюют зерно. Остается 4 - 4 = 0 зерен. Амбар пуст.

    Итого ответ равен 4, так как в конце четвертого дня амбар впервые стал пуст.

    D. Антон и школа - 2

    дп Комбинаторика математика теория чисел *2300

    Как вы уже, наверное, знаете, Антон учится в школе. Один из школьных предметов, который изучает Антон — скобкология. На уроках скобкологии школьники обычно изучают всякие последовательности, состоящие только из круглых скобок (символов «(» и «)» (без кавычек)).

    На прошлом уроке Антон изучал правильные простые скобочные последовательности (ППСП). Скобочная последовательность s длины n является ППСП, если соблюдаются следующие условия:

    • Она не является пустой (то есть n ≠ 0).
    • Длина последовательности четна.
    • Первые символов последовательности равны «(».
    • Последние символов последовательности равны «)».

    Например, последовательность «((()))» является ППСП, а вот последовательности «((())» и «(()())» — нет.

    На дом учитель Антона, Елена Ивановна, задала Антону такую задачу. Дана некоторая скобочная последовательность s. Необходимо найти количество ее различных подпоследовательностей таких, что они являются ППСП. Напомним, что подпоследовательностью строки s называется такая строка, которая была получена вычеркиванием из s некоторых символов. Две подпоследовательности считаются различными, если множества позиций вычеркнутых символов различаются.

    Так как ответ может быть очень большим, а учителю Антона не нравятся большие числа, то она просит Антона найти ответ по модулю 109 + 7.

    Антон долго думал над этой задачей, однако так и не придумал, как ее решить. Помогите Антону решить эту задачу и напишите программу, которая находит ответ на нее!

    Входные данные

    В единственной строке входных данных находится строка s — исходная скобочная последовательность. Эта строка состоит только из символов «(» и «)» (без кавычек). Гарантируется, что строка непуста и ее длина не превосходит 200 000.

    Выходные данные

    Выведите одно целое число — ответ на задачу по модулю 109 + 7.

    Примечание

    В первом примере возможны следующие подпоследовательности:

    • Если вычеркнуть символы на позициях 1 и 5 (нумерация начинается с единицы), то получим подпоследовательность «(())».
    • Если вычеркнуть символы на позициях 1, 2, 3 и 4, то получим подпоследовательность «()».
    • Если вычеркнуть символы на позициях 1, 2, 4 и 5, то получим подпоследовательность «()».
    • Если вычеркнуть символы на позициях 1, 2, 5 и 6, то получим подпоследовательность «()».
    • Если вычеркнуть символы на позициях 1, 3, 4 и 5, то получим подпоследовательность «()».
    • Если вычеркнуть символы на позициях 1, 3, 5 и 6, то получим подпоследовательность «()».

    Остальные подпоследовательности не являются ППСП. Итого получили 6 различных подпоследовательностей, которые являются ППСП, поэтому ответ — 6.

    A. Монстр

    математика Перебор теория чисел *1200

    Монстр гонится за Риком и Морти на другой планете. Они настолько напуганы, что иногда кричат. Точнее, Рик кричит в моменты времени b, b + a, b + 2a, b + 3a, ..., а Морти кричит в моменты времени d, d + c, d + 2c, d + 3c, ....

    Монстр поймает их, если в какой-то момент времени они закричат одновременно. Так что он хочет знать, когда он поймает их (первый момент времени, когда они закричат одновременно) или они никогда не закричат одновременно.

    Входные данные

    Первая строка входных данных содержит два целых числа a и b (1 ≤ a, b ≤ 100).

    Вторая строка входных данных содержит два целых числа c и d (1 ≤ c, d ≤ 100).

    Выходные данные

    Выведите первый момент времени, когда Рик и Морти закричат одновременно, или  - 1, если они никогда не закричат одновременно.

    Примечание

    В первом тестовом примере 5-й крик Рика и 8-й крик Морти произойдут в момент времени 82.

    Во втором тестовом примере все крики Рика будут в нечетные моменты времени и все крики Морти будут в четные моменты времени, поэтому они никогда не закричат одновременно.

    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. Анастасия и камушки

    математика реализация *1100

    Анастасия очень любит гулять в Центральном Ужляндском Парке. Но просто гулять ей стало неинтересно, поэтому она начала коллекционировать ужляндские камушки. Сначала она решила собрать все камушки, которые найдет в парке.

    У неё есть всего два кармана. В каждом кармане помещается до k камушков. В парке можно найти камушки n видов, причем камушков i-го типа в парке ровно wi штук. Анастасия очень ответственно относится к новому хобби, поэтому она никогда не смешает камушки двух разных видов в одном кармане. Но это не мешает ей класть камушки одного вида в разные карманы. К сожалению, она не может тратить всё своё время на сбор камушков, поэтому она может приносить камушки из парка только один раз за день.

    Помогите ей узнать минимальное количество дней, необходимое для того, чтобы собрать все камушки Ужляндского парка. Помните, что Анастасия не может переносить в одном кармане камушки разных видов одновременно.

    Входные данные

    В первой строке входных данных содержится два числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ 109) — количество видов камушков и количество камушков, которые помещаются в каждый карман.

    Во второй строке содержится n целых чисел w1, w2, ..., wn (1 ≤ wi ≤ 104) — количество камушков каждого из видов.

    Выходные данные

    Выведите одно целое число — минимальное количество дней, которое понадобится Анастасии, чтобы собрать все камушки Ужляндского парка.

    Примечание

    В первом примере в первый день Анастасия может собрать все камушки первого вида, во второй день — второго вида, в третий — третьего.

    Во втором примере одним из оптимальных ответов является такой:

    • В первый день Анастасия собирает 8 камушков третьего вида.
    • Во второй день она собирает 8 камушков четвертого вида.
    • В третий день она собирает 3 камушка первого вида и 1 камушек четвертого.
    • В четвертый день она собирает 7 камушков пятого вида.
    • В пятый день она собирает 1 камушек второго вида.

    B. Маша и геометрическая депрессия

    математика Перебор реализация *1700

    Маша очень любит алгебру. И вот на очередном уроке строгий учитель Двастан задал ей новое задание.

    Дана геометрическая прогрессия b, определяемая двумя целыми числами b1 и q. Напомним, что геометрическая прогрессия — это такая последовательность чисел b1, b2, b3, ..., что для любого i > 1 выполняется bi = bi - 1·q, где q — знаменатель прогрессии. Но в Ужляндии все прогрессии особенные: как b1, так и q могут быть равными 0. Также Двастан задал m «плохих» целых чисел a1, a2, ..., am, и целое число l.

    Маша по порядку выписывает все члены прогрессии (в том числе повторяющиеся) на доску, пока выполняется условие |bi| ≤ l (запись |x| означает модуль числа x). Есть одно исключение: если элемент прогрессии, который сейчас должен быть выписан, присутствует среди «плохих» чисел, то Маша его не выписывает, а пропускает, переходя к следующему элементу прогрессии.

    Поскольку скоро урок подойдет к концу, Маше нужно быстро посчитать, сколько же чисел она выпишет. Чтобы не впасть в депрессию, она просит помощи у вас: помогите Маше посчитать, сколько же чисел она выпишет, или выведите «inf», если она выпишет бесконечное количество чисел.

    Входные данные

    В первой строке входных данных содержится четыре целых числа b1, q, l, m (-109 ≤ b1, q ≤ 109, 1 ≤ l ≤ 109, 1 ≤ m ≤ 105) — первый элемент прогрессии, знаменатель прогрессии, модуль максимального значения, которое может быть выписано и количество «плохих» чисел соответственно.

    В второй строке задано m различных целых чисел a1, a2, ..., am (-109 ≤ ai ≤ 109) — числа, которые пропускают, если они будут в прогрессии.

    Выходные данные

    В единственной строке выведите количество чисел, которые выпишет Маша, или «inf» (без кавычек), если ей придется выписать бесконечное количество чисел.

    Примечание

    В первом примере Маша выпишет числа 3, 12, 24. Элемент прогрессии 6 она пропустит, так он есть среди «плохих» чисел. Элементы, большие 24, она выписывать не будет, так как они больше l по абсолютному значению.

    Во втором примере Маша не выпишет ни одного числа, так как все элементы прогрессии равны 123, а это число является «плохим».

    В третьем примере Маше придется выписать бесконечное количество чисел, равных 123.

    E. Система безопасности

    математика *2900

    Наконец лиса Кейл вернулась в свой замок. Однако, что-то не так с системой безопасности замка: сенсоры системы безопасности реагируют на хозяйку!

    В настоящий момент лиса находится в точке (1, 1) замка и хочет переместиться в точку (n, n), где находится ее спальня. За один ход Кейл может переместиться из точки (x, y) либо в точку (x + 1, y) (направо) либо в точку (x, y + 1) (вверх).

    Всего в ее замке установлено c2 сенсоров, которые расположены в точках (a + i, b + j) (для всех целых i и j таких что: 0 ≤ i < c, 0 ≤ j < c).

    Каждый сенсор хранит в себе счетчик и уменьшает его каждый раз при передвижении Кейл. В начале счетчик на каждом сенсоре равен t. Каждый раз, когда Кейл перемещается в точку (x, y), значение счетчика в сенсоре (u, v) уменьшается на (|u - x| + |v - y|). Когда хотя бы один счетчик достигает отрицательного значения, срабатывает система перехвата.

    Определите, может ли Кейл переместиться из (1, 1) в (n, n) так, что система перехвата не будет задействована. Если это возможно, выведите ее путь. Лиса может перемещаться в точку замка, даже если в этой точке установлен сенсор.

    Входные данные

    Первая строка содержит пять целых чисел n, t, a, b, c (2 ≤ n ≤ 2·105,  0 ≤ t ≤ 1014,  1 ≤ a ≤ n - c + 1,  1 ≤ b ≤ n - c + 1,  1 ≤ c ≤ n).

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

    Выходные данные

    Если цель Кейл выполнима, то выведите в первую строку 2n - 2 символа, которые кодируют ее возможный путь, i-ый символ в пути равен R если i-ый шаг она сделала, переместившись направо, если она переместилась вверх, то выведите символ U. Если возможных путей несколько, то выведите лексикографически минимальный. Учтите, что символ R лексикографически меньше символа U.

    Если пути не существует, то выведите Impossible.

    Примечание

    Пути для примеров 1 и 2 показаны на рисунках:

    Красный точки обозначают сенсоры.

    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 шаров.

    A. Олег и акции

    математика реализация *900

    Простой клиент банка Олег каждый день проверяет цены на акции, которыми сейчас владеет. Его интересуют цены на n акций. Открыв в очередной раз сайт с котировками, Олег заметил, что каждую секунду цена ровно одной акции Олега опускается на k рублей (заметьте, что в разные секунды может меняться цена разных акций, но в каждую секунду меняется цена только одной акции). Цена акций может стать отрицательной. Олега очень заинтересовал этот процесс, и он решил спросить у аналитика Игоря, через какое минимальное количество секунд цена всех его n акций может стать одинаковой, либо же удостовериться, что такого никогда не случится. Однако Игорь оказался слишком занят делами в своем офисе, и попросил вас помочь Олегу. Справитесь ли вы с этим поручением?

    Входные данные

    На первой строке через пробел даны числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ 109) — количество акций Олега и количество рублей, на которые каждую секунду опускается цена произвольной акции Олега.

    На следующей строке через пробел даны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — цены акций Олега на момент, когда он открыл сайт с котировками.

    Выходные данные

    На первой и единственной строке выведите одно целое число — через какое минимальное количество секунд цены всех акций могут стать одинаковыми, либо выведите «-1», если такого произойти не может.

    Примечание

    Рассмотрим первый пример.

    В первую секунду цена третьей акции становится 12 рублей, далее во вторую секунду цена первой акции становится 9 рублей, и в следующую секунду цена третьей акции опускается до 9 рублей. Таким образом, цены всех акций стали равны 9 рублям за 3 секунды.

    Возможны и другие варианты развития событий, однако вышеприведенный является минимальным по количеству секунд, которое потребовалось, чтобы сделать цены всех акций равными. Таким образом, ответ равен 3.

    Во втором примере можно заметить, что четность цен обоих акций никогда не будет меняться, и изначально они разной четности, а значит, цены никогда не смогут стать равными.

    В третьем примере минимальным по количеству секунд является такой вариант развития событий: сначала опускается цена второй акции, затем трететьей, затем четвертой, и так 999999999 раз. Так как за секунду опускается цена только одной акции, то на весь процесс потребуется 999999999 * 3 = 2999999997 секунд.

    C. Мышиная проблема

    геометрия математика реализация сортировки *2300

    Аналитик Игорь задремал на работе, и ему приснился сон. Во сне у Игоря на рабочем столе завелось много компьютерных мышей, поэтому он купил себе мышеловку.

    Рабочий стол можно представить как бесконечную плоскость, тогда мышеловка представляет из себя прямоугольник, стороны которого параллельными осям координат, противоположные углы которого находятся в точках с координатами (x1, y1) и (x2, y2).

    Игорь хочет поймать всех мышей. Анализируя их поведение, Игорь выяснил, что каждая мышь ползет прямолинейно с постоянной скоростью, скорость мыши номер i равна (vix, viy), что означает, что координата x позиции мыши увеличивается за секунду на vix, а координата y — на viy. Изначально мышеловка поднята, и мыши могут свободно передвигаться по столу. Игорь может в любой момент времени опустить мышеловку, при этом он поймает всех мышей, оказавшихся строго внутри мышеловки.

    Игорь очень трудолюбивый и даже во сне трудится на своей работе, поэтому он просит вас написать программу, которая по заданным координатам мышеловки, позициям мышей в начальный момент времени и их скоростям вычислит ближайший момент времени, в который ему удастся поймать всех мышей. Обратите внимание, что Игорь может опустить мышеловку только один раз.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 100 000) — количество компьютерных мышей у Игоря в офисе.

    Вторая строка содержит четыре целых числа x1, y1, x2 и y2 (0 ≤ x1 ≤ x2 ≤ 100 000), (0 ≤ y1 ≤ y2 ≤ 100 000) — координаты противоположных углов мышеловки.

    Следующие n строк содержат информацию о мышах.

    В i-й из этих строк содержится четыре целых числа rix, riy, vix и viy, (0 ≤ rix, riy ≤ 100 000,  - 100 000 ≤ vix, viy ≤ 100 000), где (rix, riy) — позиция мыши в начальный момент времени, а (vix, viy) — ее скорость.

    Выходные данные

    В единственной строке выведите минимальное неотрицательное t такое, что если Игорь опустит мышеловку в момент времени t секунд, то все компьютерные мыши окажутся строго внутри мышеловки. Если такого t не существует, выведите -1.

    Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

    А именно: пусть ваш ответ равен a, а ответ жюри b. Ваш ответ будет засчитан, если .

    Примечание

    Ниже приведена иллюстрация первого примера.

    Точки A, B, C, D - начальные положение мышей, отрезками показан их путь.

    Тогда в первый момент времени, в котором все точки будут находиться в прямоугольнике, прямоугольник будет выглядеть следующим образом:

    Иллюстрация второго примера выглядит так:

    Как видно на изображении, мыши A, D и B никогда не попадут в прямоугольник.

    B. Разрезание моркови

    геометрия математика *1200

    Аналитик Игорь усыновил n маленьких кроликов. Мы все знаем, что кролики обожают морковку. Поэтому Игорь купил морковку, которую он хочет разделить между своими кроликами. Игорь хочет относиться к каждому кролику одинаково, поэтому он хочет разделить морковку на n частей одинаковой площади.

    Формально, морковка выглядит как равнобедренный треугольник с длиной основания, равной 1, и высотой, равной h. Игорь хочет сделать n - 1 разрез параллельно основанию, чтобы разрезать морковку на n частей. Он хочет, чтобы все n частей имели одинаковую площадь. Помогите Игорю определить, где ему нужно проводить разрезы, чтобы каждый кусок имел одинаковую площадь.

    Иллюстрация к первому примеру.
    Входные данные

    В единственной строке находятся два целых числа n и h (2 ≤ n ≤ 1000, 1 ≤ h ≤ 105) — число частей, на которое нужно разрезать морковку, и высота морковки.

    Выходные данные

    Выведите n - 1 вещественное число x1, x2, ..., xn - 1. Число xi обозначает, что i-й разрез должен быть сделан на расстоянии xi единиц от вершины треугольника. Кроме того, должно выполняться 0 < x1 < x2 < ... < xn - 1 < h.

    Ваш ответ будет считаться правильным, если абсолютная или относительная ошибка каждого числа в вашем ответе не превосходит 10 - 6.

    Формально, пусть ваш ответ равен a, а ответ жюри равен b. Ваш ответ будет засчитан, если .

    Примечание

    Определение равнобедренного треугольника: https://ru.wikipedia.org/wiki/Равнобедренный_треугольник.

    E. Выбор морковки

    игры математика *2800

    Обычный клиент банка Олег и аналитик Игорь опять спорят. На этот раз они выбирают подарок их другу программисту ZS. После долгих раздумий они решили. что их друг очень любит морковки, поэтому они хотят выбрать лучшую морковку в качестве подарка.

    В ряд расположены n морковок. Морковка на позиции i слева имеет сочность ai. Олег думает, что ZS любит сочные морковки, а Игорь считает, что он ненавидит сочные морковки. Поэтому Олег хочет максимизировать сочность морковки, которую они выберут, а Игорь хочет минимизировать сочность морковки, которою они выберут.

    Чтобы не разругаться, они опять решили сыграть в игру. Олег и Игорь будут ходить по очереди, первым будет ходить Олег. На каждом ходу игрок может взять одну морковку с любого конца ряда и съесть ее. Игра закончится, как только останется одна морковка. Она и будет той морковкой, которую они дадут своему другу ZS.

    Олег — подловатый клиент. Пока Игорь отошел, Олег хочет выполнить k ходов до начала игры. Каждый из этих ходов будет таким же, как и в обычной игре (т.е. съесть одну морковку с любого из концов ряда). Когда Игорь вернется, они начнут игру как обычно, Олег все равно будет ходить первым.

    Олегу стало интересно: для всех k таких, что 0 ≤ k ≤ n - 1, какова сочность морковки, которую они подарят ZS, если он сделает k ходов заранее, и оба игрока действуют оптимально?

    Входные данные

    В первой строке содержится одно целое число n (1 ≤ n ≤ 3·105) — количество морковок в ряду.

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109). Число ai обозначает сочность i-й морковки слева.

    Выходные данные

    Выведите n целых чисел x0, x1, ..., xn - 1. Число xi должно быть сочностью морковки, которые друзья подарят ZS, если k = i.

    Примечание

    Рассмотрим первый пример.

    Если k = 0, то одна из оптимальных игр выглядит так:

    • Олег съедает морковку с сочностью 1.
    • Игорь съедает морковку с сочностью 5.
    • Олег съедает морковку с сочностью 2.
    • Остается морковка с сочностью 3.

    Если k = 1, то одна из оптимальных игр выглядит так:

    • Олег съедает морковку с сочностью 1 заранее.
    • Олег съедает морковку с сочностью 2.
    • Игорь съедает морковку с сочностью 5.
    • Остается морковка с сочностью 3.

    Если k = 2, то одна из оптимальных игр выглядит так:

    • Олег съедает морковку с сочностью 1 заранее.
    • Олег съедает морковку с сочностью 2 заранее.
    • Олег съедает морковку с сочностью 3.
    • Остается морковка с сочностью 5.

    Если k = 3, то одна из оптимальных игр выглядит так:

    • Олег съедает морковку с сочностью 1 заранее.
    • Олег съедает морковку с сочностью 2 заранее.
    • Олег съедает морковку с сочностью 3 заранее.
    • Остается морковка с сочностью 5.

    Таким образом, ответ равен 3, 3, 5, 5.

    Во втором примере Олег всегда может съесть морковку с сочностью 1, так как он ходит первым. Поэтому сочность оставшейся морковки всегда равна 1000000000.

    G. Заменить все

    дп Комбинаторика математика *3400

    Аналитик Игорь недавно узнал о интересной функции в его текстовом редакторе, которая называется «Заменить все». Игорь заскучал на работе и придумал следующую задачу:

    Для двух заданных строк x и y, состоящих только из латинских букв «A» и «B», пара строк (s, t) называется хорошей, если:

    • s и t состоят из только из символов «0» и «1».
    • 1 ≤ |s|, |t| ≤ n, где запись |z| обозначает длину строки z, а n — фиксированное натуральное число.
    • Если заменить все буквы «A» в строках x и y на строку s, а все буквы «B» в строках x и y — на строку t, то две получившиеся строки из x и y будут равны.

    Например, если x = AAB, y = BB, а n = 4, то (01, 0101) — одна из хороших пар строк, потому что обе получившиеся после замены строки будут равны «01010101».

    Назовем гибкостью пары строк x и y количество хороших пар строк (s, t). Пары считаются упорядоченными, то есть, например, пара (0, 1) и пара (1, 0) — различные.

    Вам даны две строки c и d. Они состоят только из латинских букв «A», «B» и символов «?». Найдите сумму гибкостей всех таких пар строк (c', d'), что c' и d' могут быть получены из c и d соответсвенно заменой знаков вопроса на буквы «A» и «B». Ответ нужно вывести по модулю 109 + 7.

    Входные данные

    Первая строка содержит строку c (1 ≤ |c| ≤ 3·105).

    Вторая строка содержит строку d (1 ≤ |d| ≤ 3·105).

    Последняя строка содержит целое число n (1 ≤ n ≤ 3·105).

    Выходные данные

    Выведите одно число: ответ на задачу по модулю 109 + 7.

    Примечание

    В первом примере возможно получить четыре различные пары (c', d').

    Если (c', d') = (AA, A), то гибкость равна 0.

    Если (c', d') = (AB, A), то гибкость равна 0.

    Если (c', d') = (AA, B), то гибкость равна 2, так как пары строк (1, 11), (0, 00) — единственные хорошие пары.

    Если (c', d') = (AB, B), то гибкость равна 0.

    Таким образом, сумма гибкостей равна 2.

    Во втором примере существует 21 + 22 + ... + 210 = 2046 различных бинарных строк длины не более 10, а множество пар хороших строк в точности совпадает со множеством пар строк (s, s), где s — бинарная строка, длина которой не превосходит 10.

    A. k-Факторизация

    математика реализация теория чисел *1100

    Дано натуральное число n. Необходимо разложить его ровно на k чисел, таких, что все числа строго больше 1, а их произведение равно n, либо сообщить о том, что это невозможно.

    Входные данные

    В единственной строке заданы два числа n и k (2 ≤ n ≤ 100000, 1 ≤ k ≤ 20).

    Выходные данные

    Если разложить n на k множителей невозможно, выведите -1.

    Иначе выведите k натуральных чисел, таких, что их произведение в точности равно n. Числа можно выводить в любом порядке. Если возможных ответов несколько, выведите любой из них.

    B. Depression

    геометрия математика *1200

    Do you remember a kind cartoon "Beauty and the Beast"? No, no, there was no firing from machine guns or radiation mutants time-travels!

    There was a beauty named Belle. Once she had violated the Beast's order and visited the West Wing. After that she was banished from the castle...

    Everybody was upset. The beautiful Belle was upset, so was the Beast, so was Lumiere the candlestick. But the worst thing was that Cogsworth was upset. Cogsworth is not a human, but is the mantel clock, which was often used as an alarm clock.

    Due to Cogsworth's frustration all the inhabitants of the castle were in trouble: now they could not determine when it was time to drink morning tea, and when it was time for an evening stroll.

    Fortunately, deep in the basement are lying digital clock showing the time in the format HH:MM. Now the residents of the castle face a difficult task. They should turn Cogsworth's hour and minute mustache hands in such a way, that Cogsworth began to show the correct time. Moreover they need to find turn angles in degrees for each mustache hands. The initial time showed by Cogsworth is 12:00.

    You can only rotate the hands forward, that is, as is shown in the picture:

    As since there are many ways too select such angles because of full rotations, choose the smallest angles in the right (non-negative) direction.

    Note that Cogsworth's hour and minute mustache hands move evenly and continuously. Hands are moving independently, so when turning one hand the other hand remains standing still.

    Input

    The only line of input contains current time according to the digital clock, formatted as HH:MM (00 ≤ HH ≤ 23, 00 ≤ MM ≤ 59). The mantel clock initially shows 12:00.

    Pretests contain times of the beginning of some morning TV programs of the Channel One Russia.

    Output

    Print two numbers x and y — the angles of turning the hour and minute hands, respectively (0 ≤ x, y < 360). The absolute or relative error in the answer should not exceed 10 - 9.

    Note

    A note to the second example: the hour hand will be positioned exactly in the middle, between 4 and 5.

    D. Сурки (простая)

    математика *2100

    Хайди усердно занимается статистикой и ей нравится изучать эволюцию популяций сурков в каждой из V (1 ≤ V ≤ 100) деревень! Получается, что каждую весну, когда Хайди видит первые подснежники, которые прорастают в лугах вокруг ее сарая, она сразу же обувает свои снегоступы и отправляется в Альпы, чтобы поприветствовать своих друзей сурков в новом сезоне захватывающих приключений.

    Приезжая в деревню, Хайди запрашивает информацию о количестве жителей этой деревни у каждого из сурков, с которыми она сталкивается. В этом году сурки решили подшутить над Хайди. Вместо постоянного предоставления точного числа жителей деревни P (10 ≤ P ≤ 1000), они каждый раз дают ответ в виде случайного неотрицательного числа k, взятого в одном из двух распределений вероятностей:

    • Распределение Пуассона: вероятность получить число k равна для k = 0, 1, 2, 3, ...,
    • Равномерное распределение: вероятность получить число k равна для k = 0, 1, 2, ..., 2P.

    Хайди получает ровно 250 ответов в каждой деревне. В каждой деревне следуют либо распределению Пуассона, либо равномерному распределению. Хайди не может отличить сурков друг от друга, поэтому она может несколько раз интересоваться одними и теми же сурками, и каждый раз получает новое число, полученное из распределения деревни.

    Помогите Хайди выяснить, следует деревня распределению Пуассона или равномерному распределению?

    Входные данные

    В первой строке содержится количество деревень V (1 ≤ V ≤ 100). В каждой из следующих V строк содержится описание одной деревни. Описание каждой деревни состоит из 250 чисел k, взятых в одном из описанных распределений.

    Выходные данные

    Выведите одну строку для каждой деревни в том же порядке, что и во входных данных. Выведите poisson, если в деревне следуют распределению Пуассона, или uniform, если это равномерное распределение.

    Примечание

    Полный пример входных данных и функция распределения вероятностей, из которой они были составлены, представлены ниже (отметки на оси y умножены на 250).

    E. Сурки (средняя)

    математика *2200

    Хорошая работа! Сейчас, когда Хайди может различать распределение Пуассона и равномерное распределение, она находится в хорошем расположении духа и готова реально оценить численность населения.

    Помогите Хайди оценить население каждой деревни.

    Входные данные

    Входные данные те же, что и в простой версии этой задачи.

    Выходные данные

    Выведите в отдельной строке вашу оценку населения (число) по каждой деревне в том же порядке, который дан во входных данных.

    Ответ считается верным, если он содержит целое число, которое находится в интервале , где P — население деревни, которое используется для создания распределения (либо распределения Пуассона, либо равномерного распределения), из которого сурки берут свои ответы.

    F. Сурки (сложная)

    математика Теория вероятностей *2800

    Ваша задача такая же как и в легкой версии. Но теперь сурки вычитают население деревни P из их случайного числа перед тем, как ответить на запрос Хайди.

    Кроме этого, в настоящее время могут быть деревни, в которых проживает всего лишь один житель, что означает, что .

    Помогите Хайди выяснить, следует деревня распределению Пуассона или равномерному распределению?

    Входные данные

    Входные данные те же, что и в простой и средней версии. Но помните, что 1 ≤ P ≤ 1000, и что сурки могут использовать положительные и отрицательные числа.

    Выходные данные

    Выведите в отдельной строке распределения для каждой из деревень в том порядке, в котором они заданы во входных данных. В строке указывается poisson, если в деревне следуют распределению Пуассона, и uniform, если ответы получены из равномерного распределения.

    L. Отправьте Дурака Дальше! (сложная)

    Деревья дп математика поиск в глубину и подобное *2400

    Хайди в ужасе от шутки, и она сочла нереальным, что ее друзья будут специально загонять её в долги. Она ожидает, что фактически, каждый человек просто выберет случайного друга, чтобы отправить Хайди. Из этого следует, что теперь Хайди может посещать одного и того же друга произвольное количество раз. Более того, если у человека есть ровно один общий друг с Хайди (то есть он является листом дерева), тогда этот человек не отправит Хайди обратно (то есть путешествие Хайди закончится в некоторой точке).

    Хайди также кажется нереальным то, что она сможет совершить свое путешествие за один день. Поэтому теперь она предполагает, что каждый раз, когда она путешествует по маршруту между двумя друзьями, ей нужно покупать новый билет. Она хочет знать математическое ожидание суммы денег, которые она потратит на путешествия.

    Полагайте, что у Дженни есть по крайней мере два друга.

    Входные данные

    В первой строке следует целое число n (3 ≤ n ≤ 105) — количество друзей.

    В следующих n - 1 строках следует по три целых числа u, v и c (0 ≤ u, v ≤ n - 1, 1 ≤ c ≤ 104), означающих что u и v являются друзьями и стоимость путешествий между ними равна c (для каждого нового путешествия между ними теперь нужно покупать новый билет).

    Гарантируется, что дружеские связи из входных данных формируют дерево.

    Выходные данные

    Предположим, что ожидаемая стоимость путешествий записывается как несократимая дробь a / b (то есть, a и b являются взаимно простыми). Хайди просит вас вывести величину . То есть, выводимое число должно быть в пределах от 0 до 109 + 6, включительно.

    Примечание

    В первом примере с вероятностью 1 / 2 Хайди пойдет в 1 из 0, и с вероятностью 1 / 2 она пойдет в 2. В первом случае стоимость будет 10, а во второй она будет 20. Достигнув 1 или 2 она остановится, так 1 и 2 являются листьями дерева. Следовательно, ожидаемые расходы Хайди на путешествия составляют 10·1 / 2 + 20·1 / 2 = 15.

    В третьем примере ожидаемая стоимость составляет 81 / 5. Поэтому нужно вывести число 400000019.

    В ходе своих путешествий Хайди узнала интригующий факт о структуре своих дружеских связей. Она сообщает вам следующее: Таинственный определитель, о котором вы могли бы подумать, таков, что он не вызывает странных ошибок в вашем разумном решении... Мы упоминали, что Хайди - странная корова?

    C. Максимальный НОД

    жадные алгоритмы Конструктив математика *1900

    Задано целое положительное число n. Ваша задача — составить такую строго возрастающую последовательность из k положительных чисел a1, a2, ..., ak, что их сумма равна n, а наибольший общий делитель максимален.

    Наибольшим общим делителем последовательности называется такое наибольшее число, что каждый элемент последовательности делится на него нацело.

    Если такую последовательность составить невозможно, то выведите -1.

    Входные данные

    В единственной строке записано два числа n и k (1 ≤ n, k ≤ 1010).

    Выходные данные

    Если ответ существует, то выведите k чисел — полученную последовательность. Иначе выведите -1. Если таких последовательностей несколько, выведите любую из них.

    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».

    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}.

    B. Средняя продолжительность сна

    математика реализация Структуры данных *1300

    Уже неделю Поликарп не может отдохнуть — его мучает бессонница. Как известно, неделя в Берляндии длится целых k дней!

    С этой проблемой Поликарп обратился ко врачу. Врач спросил, сколько часов Поликарп спит в среднем в неделю. К счастью, Поликарп в течение n последних дней записывал в дневник количество часов сна в каждый из дней. Таким образом, у него есть последовательность a1, a2, ..., an, где ai — количество часов сна в i-й день.

    Записей накопилось так много, что он не может сам подсчитать среднее значение. Поэтому Поликарп просит вас помочь ему с расчетами. При подсчете искомого среднего значения Поликарп планирует учесть в качестве недели каждые k подряд идущих дней. Таким образом, при в подсчетах будет учтена n - k + 1 неделя. Например, если k = 2, n = 3, а a = [3, 4, 7], то искомое значение будет равно .

    Напишите программу, которая найдет среднее арифметическое суммарных продолжительностей сна Поликарпа за все недели.

    Входные данные

    В первой строке задано два целых положительных числа n и k (1 ≤ k ≤ n ≤ 2·105).

    Во второй строке задано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105).

    Выходные данные

    Выведите единственное число — среднее арифметическое суммарной продолжительности сна Поликарпа за неделю.

    Ответ считается правильным, если абсолютная или относительная погрешность не превосходит 10 - 6. В частности, это означает, что достаточно вывести вещественное число с 6 или более знаками после десятичной точки.

    Примечание

    В третьем примере всего n - k + 1 = 7 недель, поэтому ответ — сумма по всем неделям, деленная на 7.

    A. Хочешь на свидание?

    математика реализация сортировки *1500

    Устав от жизни в Банкополисе, Леха решил переехать в тихий городок Вичкополис. По приезду он сразу же начал расширять сеть взломанных им компьютеров. За неделю Леха успел получить доступ к n компьютерам по всему городу. А так как в Вичкополисе только одна прямая улица, то и все компьютеры, взломанные Лехой, находятся на одной прямой.

    Введем систему координат на единственной улице Вичкополиса. Пронумеруем все компьютеры, взломанные хакером, целыми числами от 1 до n. Тогда i-й компьютер, взломанный Лехой, находится в точке с координатой xi. При этом местоположения всех компьютеров попарно различны.

    После трудной недели Лехе потребовался отдых. Поэтому он решил пригласить свою знакомую Нуру в ресторан. Однако девушка согласилась идти на свидание только с одним условием: Леха должен решить поставленную ей задачу.

    Нура хочет, чтобы Леха посчитал сумму F(a) для всех a, где a — непустое подмножество множества взломанных Лехой компьютеров. Более формально, обозначим множество целых чисел от 1 до n включительно как A. Нура просит хакера найти значение . При этом F(a) вычисляется как максимум среди расстояний между всеми парами компьютеров, вошедших во множество a. Более формально, . Так как ответ может получиться достаточно большим, Нура просит найти значение интересующей ее суммы по модулю 109 + 7.

    Однако Леха так устал, взламывая компьютеры, что уже не может решить эту задачку. Помогите хакеру попасть на свидание с Нурой.

    Входные данные

    В первой строке задано одно целое число n (1 ≤ n ≤ 3·105) — количество компьютеров, взломанных Лехой.

    Во сторой строке задано n целых чисел x1, x2, ..., xn (1 ≤ xi ≤ 109) — координаты взломанных хакером компьютеров. Гарантируется, что все числа xi попарно различны.

    Выходные данные

    Выведите одно число — значение суммы, которую просит найти Нура, по модулю 109 + 7.

    Примечание

    Рассмотрим первый тест. У нас есть всего три подмножества , и . В первых двух к итоговой сумме прибавится 0, а в третьем 7 - 4 = 3. Итого ответ 0 + 0 + 3 = 3.

    Во втором тесте у нас есть семь подмножеств, из них ответ увеличат следующие: , , , . Итого ответ (4 - 3) + (4 - 1) + (3 - 1) + (4 - 1) = 9.

    E. Удиви меня!

    Деревья математика разделяй и властвуй теория чисел *3100

    Устав от скучных свиданий, Леха и Нура решили сыграть в игру.

    Леха раздобыл дерево из n вершин, пронумерованных от 1 до n. Напомним, что дерево — это связный неориентированный граф без циклов. На каждой вершине v дерева записано некоторое число av. Совершенно случайно оказалось, что все значения, записанные на вершинах, различны и являются натуральными числами от 1 до n.

    Игра происходит следующим образом. Нура случайно и равновероятно выбирает некоторую вершину u дерева и передает ход Лехе. Леха, в свою очередь, случайно и равновероятно выбирает некоторую вершину v из оставшихся вершин дерева (v ≠ u). Как несложно догадаться, существует n(n - 1) вариантов выбора вершин игроками. Затем игроки вычисляют значение функции f(u, v) = φ(au·av) · d(u, v) от выбранных вершин, где φ(x) — функция Эйлера, а d(x, y) — кратчайшее расстояние между вершинами x и y в дереве.

    Совсем скоро игра наскучила Нуре, поэтому Леха, чтобы разрядить обстановку, решил посчитать математическое ожидание значения функции f по всем вариантам выбора вершин u и v в надежде хоть как-то удивить девушку.

    Леха просит вас помочь ему посчитать искомое математическое ожидание. Пусть данное значение представимо в виде несократимой дроби . Чтобы еще больше удивить Нуру, он хочет назвать ей значение .

    Помогите Лехе!

    Входные данные

    Первая строка содержит одно целое число n (2 ≤ n ≤ 2·105)  — количество вершин в дереве, раздобытом Лехой.

    Вторая строка содержит n разделенных пробелами целых различных чисел a1, a2, ..., an (1 ≤ ai ≤ n) — значения, записанные на вершинах дерева.

    Каждая из следующих n - 1 строк содержит по два целых числа x и y (1 ≤ x, y ≤ n), описывающих очередное ребро дерева. Гарантируется, что данный набор ребер описывает дерево.

    Выходные данные

    В единственной строке выведите число, равное P·Q - 1 по модулю 109 + 7.

    Примечание

    Функция Эйлера φ(n) — это количество таких i, что 1 ≤ i ≤ n, что gcd(i, n) = 1, где gcd(x, y) — наибольший общий делитель чисел x и y.

    В первом примере существует 6 вариантов выбора вершин Лехой и Нурой:

    • u = 1, v = 2, f(1, 2) = φ(a1·a2d(1, 2) = φ(1·2)·1 = φ(2) = 1
    • u = 2, v = 1, f(2, 1) = f(1, 2) = 1
    • u = 1, v = 3, f(1, 3) = φ(a1·a3d(1, 3) = φ(1·3)·2 = 2φ(3) = 4
    • u = 3, v = 1, f(3, 1) = f(1, 3) = 4
    • u = 2, v = 3, f(2, 3) = φ(a2·a3d(2, 3) = φ(2·3)·1 = φ(6) = 2
    • u = 3, v = 2, f(3, 2) = f(2, 3) = 2

    Искомое математическое ожидание равно . Значение, которым Леха хочет удивить Нуру, равно 7·3 - 1 = 7·333333336 = 333333338 .

    Во втором примере математическое ожидание равно , следовательно, Лехе придется удивлять Нуру числом 8·1 - 1 = 8 .

    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.

    A. На отлично!

    математика реализация *900

    Нура — ученица одной из небезызвестных школ. Для нее этот год последний в школе — в следующем году Нура уже будет учиться в университете. Однако, чтобы поступить в самый престижный университет, она должна закончить школу «на отлично».

    В школе, где учится Нура, учителя ставят ученикам в электронный журнал отметки, выражающиеся целыми числами от 1 до k. Наихудшая отметка — 1, наилучшая — k. Отметка, идущая в аттестат, вычисляется как среднее арифметическое всех оценок, округленное к ближайшему целому. В случае, если существует несколько вариантов, округление производится в большую сторону. Например, 7.3 округляется до 7, а 7.5 и 7.8784 — к 8.

    Для примера, если отметки Нуры [8, 9], то отметка в аттестат получается равной 9, поскольку их среднее арифметическое 8.5 округляется до 9, но по отметкам [8, 8, 9] отметка в аттестате будет равна 8.

    Чтобы закончить школу «на отлично», отметка, идущая в аттестат, должна быть равна k.

    За год Нура получила n отметок. Однако она не уверена, что этих отметок хватит, чтобы получить в аттестат отметку k. За помощью Нура решила обратиться к интернет-сообществу. Там на ее просьбу о помощи сразу же откликнулся хакер Алексей, или попросту Леха. Ради Нуры он готов взломать электронный журнал школы и поставить Нуре дополнительно любые отметки от 1 до k. В то же время Леха не хотел бы, чтобы его проникновение в электронный журнал заметили, поэтому он решил поставить как можно меньше дополнительных отметок. Помогите Лехе посчитать минимальное количество отметок, которые он должен поставить, чтобы итоговая отметка Нуры стала равна k.

    Входные данные

    В первой строке заданы два целых числа n и k (1 ≤ n ≤ 100, 1 ≤ k ≤ 100) — количество отметок, уже полученных Нурой, а также величина наилучшей отметки.

    Во второй строке заданы n целых чисел a1, a2, ..., an (1 ≤ ai ≤ k) — отметки, полученные Нурой до вмешательства Лехи.

    Выходные данные

    Выведите одно число — минимальное количество отметок, которые должен поставить Леха, чтобы итоговая отметка Нуры стала равна k.

    Примечание

    Рассмотрим первый пример.

    Максимальная отметка — 10, Нура получила две отметки — 8 и 9, поэтому отметкой в аттестат будет 9. Чтобы исправить это, Леха может добавить отметки [10, 10, 10, 10] (итого 4 отметки) в журнал, получив тем самым средний балл, равный . Следовательно, новая отметка в аттестате — 10. Меньшим количеством добавлений обойтись нельзя.

    Во втором примере Леха может дописать [5, 5, 5] в журнал, тем самым сделав средний балл равным 4.5, чего достаточно, чтобы получить 5 в аттестат.

    B. Золотой Век

    математика Перебор *1800

    В Берляндии год считается несчастливым, если его номер n можно записать как n = xa + yb, где a и b — целые неотрицательные числа.

    Например, если x = 2 и y = 3, тогда годы 4 и 17 будут несчастливыми (4 = 20 + 31, 17 = 23 + 32 = 24 + 30), а год 18 не будет, так как не существует представления числа 18 в таком виде.

    Отрезок лет называется Золотым Веком, если в нем нет ни одного несчастливого года.

    Напишите программу, которая найдет максимальную длину Золотого Века, который начинается не раньше года l и заканчивается не позднее года r. Если все годы в отрезке [l, r] несчастливые, то ответ — 0.

    Входные данные

    В первой строке записано четыре целых числа x, y, l и r (2 ≤ x, y ≤ 1018, 1 ≤ l ≤ r ≤ 1018).

    Выходные данные

    Выведите максимальную длину Золотого Века в промежутке [l, r].

    Если все годы в отрезке [l, r] несчастливые, то выведите 0.

    Примечание

    В первом примере несчастливые годы — 2, 3, 4, 5, 7, 9 и 10. Максимальная длина Золотого Века достигается на отрезках [1, 1], [6, 6] и [8, 8].

    Во втором примере длиннейший Золотой Век — отрезок [15, 22].

    B. Карен и тест

    Комбинаторика Конструктив математика Перебор *2200

    Карен только что пришла в школу, у нее сегодня тест по математике!

    Тест проверяет умения складывать и вычитать числа. К сожалению, учителя были заняты подготовкой задач к раунду Codeforces, поэтому у них не было времени сделать тест. Поэтому они дали лишь одну задачу, которая стоит все баллы.

    В ряд записаны n целых чисел. Карен должна по очереди складывать и вычитать каждую пару соседних чисел, и записывать получающиеся суммы или разности в следующий ряд. Затем она должна повторить процесс со следующим рядом, и так далее, пока не останется ровно одно число. Первой операцией должно быть сложение.

    Заметьте, что, если она закончила предыдущий ряд, вычислив сумму чисел, то она должна начать новый ряд вычитанием, и наоборот.

    Учителя просто посмотрят на последнее число: если оно окажется верным, то Карен получит полный балл, иначе — ноль.

    Карен хорошо подготовилась к тесту, но боится сделать ошибку где-нибудь, что приведет ее к неправильному финальному ответу. Можете вычислить, какое число она должна получить в конце?

    Так как это число может быть большим, выведите неотрицательный остаток от его деления на 109 + 7.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 200000) — количество чисел, записанных в первом ряду.

    Вторая строка содержит n целых чисел. А именно, i-е из этих чисел равно ai (1 ≤ ai ≤ 109) — i-му числу в первом ряду.

    Выходные данные

    Выведите одно целое число: число в последнем ряду после выполнения всех операций.

    Так как оно может быть большим, выведите его неотрицательный остаток от деления на 109 + 7.

    Примечание

    В первом примере числа в первом ряду равны 3, 6, 9, 12 и 15.

    Карен выполняет операции как показано на рисунке:

    Неотрицательный остаток от деления итогового числа на 109 + 7 равен 36.

    Во втором примере числа в первом ряду равны 3, 7, 5 и 2.

    Карен выполняет следующие операции:

    Неотрицательных остаток от деления итогового числа на 109 + 7 равен 109 + 6.

    A. Поиск сокровищ

    математика реализация теория чисел *1200

    Капитан Билл Колибри и его команда получили интересное предложение об испытании. Незнакомец вручил им карту, зелье перемещения и сообщил, что, только используя данный зелье, они смогут добраться до сокровища.

    На бутылке с зельем написаны два значения x и y. Они определяют четыре шага, которые можно совершить с данным зельем:

    Карта указывает, что позиция Капитана Билла Колибри — (x1, y1), а позиция сокровища — (x2, y2).

    Помогите Капитану Биллу Колибри с выбором, принимать предложение или нет. Если Капитан может добраться до сокровища с этим зельем, то выведите "YES", иначе — "NO" (без кавычек).

    Зелье можно использовать бесконечное количество раз.

    Входные данные

    В первой строке записаны четыре целых числа x1, y1, x2, y2 ( - 105 ≤ x1, y1, x2, y2 ≤ 105) — позиции Капитана Билла Колибри и сокровища соответственно.

    Во второй строке записаны два целых числа x, y (1 ≤ x, y ≤ 105) — значения на бутылке с зельем.

    Выходные данные

    Выведите "YES", если Капитан может добраться до сокровища, используя только данное зелье. Иначе выведите "NO" (без кавычек).

    Примечание

    В первом примере можно применить такие шаги:

    1. — первый тип шага
    2. — третий тип шага

    B. Макес и произведение

    Комбинаторика математика реализация сортировки *1500

    После возвращения из армии Макес получил в подарок массив a, состоящий из n целых положительных чисел. Так как он очень давно не решал задачи, его заинтересовал следующий вопрос: сколько существует таких упорядоченных троек (i,  j,  k), что i < j < k, а ai·aj·ak — минимально. Помогите ему в этом!

    Входные данные

    В первой строке входных данных задано целое положительное число n (3 ≤ n ≤ 105) — количество элементов в массиве a. Во второй строке задано n положительных целых чисел ai (1 ≤ ai ≤ 109) — элементы массива.

    Выходные данные

    Выведите единственное число — количество упорядоченных троек (i,  j,  k), что i,  j и k — попарно различны, а ai·aj·ak — минимально.

    Примечание

    В первом тесте из условия Макес всегда выберет три единицы из четырёх, а количество способов их выбрать — 4.

    Во втором тесте выбирается тройка чисел (1, 2, 3). Так как 3 встречается в массиве дважды, а единица и двойка — единожды, то количество способов будет равно 2.

    В третьем тесте выбирается тройка (1, 1, 2), её можно выбрать единственным способом.

    C. Действительно большие числа

    Бинарный поиск дп математика Перебор *1600

    Ивану нравится узнавать различные факты о числах, но особенно его интересуют действительно большие числа. Иван считает натуральное число x действительно большим, если разность x и суммы его цифр (в десятичной записи) не меньше s. Чтобы доказать, что эти числа обладают особыми свойствами, он хочет узнать, насколько они редкие — если быть точным, ему нужно посчитать количество действительно больших чисел, которые не превышают n.

    Иван попытался посчитать всё самостоятельно, но скоро понял, что для него это слишком трудно. Поэтому он попросил вас о помощи.

    Входные данные

    В первой (и единственной) строке записаны два числа n и s (1 ≤ n, s ≤ 1018).

    Выходные данные

    Выведите одно число — количество действительно больших чисел, не превышающих n.

    Примечание

    В первом примере числа 10, 11 и 12действительно большие.

    Во втором примере не существует действительно больших чисел, не превышающих 25 (первое действительно большое число равно 30: 30 - 3 ≥ 20).

    В третьем примере 10 — единственное действительно большое число (10 - 1 ≥ 9).

    A. Дипломы и грамоты

    математика реализация *800

    В олимпиаде участвовали n школьников, и теперь некоторым из них нужно раздать дипломы, некоторым грамоты, а оставшиеся школьники не получат ничего.

    Школьник, получивший диплом или грамоту, является призером. Жюри утвердило, что грамот нужно раздать ровно в k раз больше, чем дипломов. Более того, количество призеров должно быть не больше половины количества школьников (то есть не больше половины n). При этом жюри допускает, что в олимпиаде может не быть призеров вообще.

    Требуется определить, какое максимальное количество призеров может быть в олимпиаде с учетом описанных требований, и вывести, соответственно, количество школьников, получивших дипломы, количество школьников, получивших грамоты и количество школьников, которые ничего не получили.

    Входные данные

    В единственной строке даны два натуральных числа n и k (1 ≤ n, k ≤ 1012), где n — количество школьников, участвовавших в олимпиаде, а k — число, определяющее, во сколько раз количество грамот должно быть больше количества дипломов.

    Выходные данные

    В единственной строке через пробел выведите три числа: количество школьников, получивших дипломы, количество школьников, получивших грамоты и количество школьников, которые ничего не получили, с учетом того, что количество призеров максимально.

    Жюри допускает, что в олимпиаде может не быть призеров вообще.

    F. Создание уровней

    Бинарный поиск математика Тернарный поиск *2100

    Иван разрабатывает свою собственную компьютерную игру. Сейчас Иван хочет создать все уровни игры. Но перед этим он хочет нарисовать каждый уровень на бумаге в виде графа.

    Иван решил, что в графе i-го уровня должно быть ровно ni вершин, а сам граф должен быть неориентированный. Главная, по мнению Ивана, характеристика графа — количество специальных рёбер, называемых мостами. Ребро, соединяющее вершины u и v, называется мостом, если оно лежит на каждом пути из u в v (и эти вершины окажутся в разных компонентах связности, если ребро стереть). Иван хочет, чтобы в построенном для каждого уровня графе как минимум 50% всех рёбер были бы мостами. Также Иван хочет максимизировать количество рёбер в каждом графе.

    Итак, задание, которое вам дал Иван, состоит в следующем: по заданным q числам n1, n2, ..., nq для каждого i определить максимальное количество рёбер в графе из ni вершин, если хотя бы 50% рёбер должны быть мостами. Обратите внимание, в графах не может быть петель или кратных рёбер.

    Входные данные

    В первой строке записано число q (1 ≤ q ≤ 100 000) — число графов, которые нужно построить Ивану.

    Затем следуют q строк, в i-й из них записано число ni (1 ≤ ni ≤ 2·109) — количество вершин в i-м графе.

    Обратите внимание, что во взломах вы можете использовать только q = 1.

    Выходные данные

    Выведите q чисел, i-е из которых равно максимальному количеству рёбер в i-м графе.

    Примечание

    В примере из условия можно построить следующие графы:

    1. 1 - 2, 1 - 3;
    2. 1 - 2, 1 - 3, 2 - 4;
    3. 1 - 2, 1 - 3, 2 - 3, 1 - 4, 2 - 5, 3 - 6.

    B. Мистер Б и PR сдвиги

    математика реализация Структуры данных *1900

    Недавно Мистер Б получил странный сигнал из космоса, который он непременно решил исследовать.

    После некоторых преобразований сигнал оказался перестановкой p из n элементов, либо некоторым ее циклическим сдвигом. Для дальнейшего анализа Мистеру Б понадобилась некоторая определенность, а потому он захотел выбрать из всех циклических сдвигов данной перестановки некоторую с наименьшим отклонением.

    Отклонением перестановки p назовем величину .

    Найдите циклический сдвиг перестановки p с наименьшим отклонением. Если таких несколько, выведите номер любого из них.

    Номером k (0 ≤ k < n) циклического сдвига перестановки p определим как число сдвигов вправо, необходимых для получения этого сдвига, то есть:

    • k = 0: сдвиг p1, p2, ... pn,
    • k = 1: сдвиг pn, p1, ... pn - 1,
    • ...,
    • k = n - 1: сдвиг p2, p3, ... pn, p1.
    Входные данные

    В первой строке задано одно натуральное число n (2 ≤ n ≤ 106) — размер перестановки.

    В следующей строке задано n натуральных чисел p1, p2, ..., pn (1 ≤ pi ≤ n) через пробел — элементы перестановки. Гарантируется, что все элементы различны.

    Выходные данные

    Выведите два целых числа через пробел: минимальное возможное отклонение циклического сдвига перестановки p и номер такого сдвига. Если таких сдвигов несколько, выведите номер любого из них.

    Примечание

    В первом примере заданная перестановка p является тождественной, поэтому ее отклонение равно 0, а соответствующий номер сдвига равен 0.

    Во втором примере отклонение перестановки p равно 4, отклонение 1-го циклического сдвига (1, 2, 3) равно 0, отклонение 2-го циклического сдвига (3, 1, 2) равно 4, оптимальным является 1-й циклический сдвиг.

    В третьем примере отклонение перестановки p равно 4, отклонение 1-го циклического сдвига (1, 3, 2) равно 2, отклонение 2-го циклического сдвига (2, 1, 3) также равно 2, оптимальными являются 1-й и 2-й циклические сдвиги.

    A. Double Cola

    математика реализация *1100

    Шелдон, Леонард, Пенни, Раджеш и Говард стоят в очереди к автомату по продаже баночек с напитком «Double Cola», других людей в очереди нет. Первый в очереди (Шелдон) покупает баночку, выпивает ее содержимое и раздваивается! Получившиеся два Шелдона встают в конец очереди. Затем следующий в очереди (Леонард) покупает баночку, выпивает и встает в конец очереди в двойном экземпляре, и так далее. Этот процесс продолжается до бесконечности.

    Например, третью баночку колы выпьет Пенни, и очередь будет выглядеть так: Раджеш, Говард, Шелдон, Шелдон, Леонард, Леонард, Пенни, Пенни.

    Напишите программу, которая выведет имя человека, выпившего n-ую баночку.

    Обратите внимание, что в самом начале очередь выглядит так: Шелдон, Леонард, Пенни, Раджеш, Говард. Первым человеком является Шелдон.

    Входные данные

    Входные данные состоят из единственного целого числа n (1 ≤ n ≤ 109).

    Гарантируется, что в претестах проверяется правильность написания всех пяти имен, то есть в них встречаются все пять возможных ответов.

    Выходные данные

    Выведите единственную строку — имя человека, который выпьет n-ую баночку колы. Баночки нумеруются от 1. Обратите внимание, что следует выводить имена в следующем написании: "Sheldon", "Leonard", "Penny", "Rajesh", "Howard" (без кавычек). Именно в этом порядке друзья стоят в очереди изначально.

    B. Мистер Б и угол в многоугольнике

    геометрия Конструктив математика *1300

    Однажды, разбираясь в своих каждодневных заботах, Мистеру Б понадобилось получить угол a и начертить его на своем поле. Так случилось, что инопланетяне оставили уже множество различных фигур на его поле, среди которых был правильный n-угольник (правильный многоугольник с n сторонами).

    Именно этой фигурой Мистер Б и решил воспользоваться. Теперь Мистеру Б необходимо найти три попарно различные вершины многоугольника v1, v2, v3 такие, что угол (т.е. угол, в котором v2 — вершина, а v1 и v3 лежат на сторонах) будет как можно ближе к a. Иными словами, необходимо, чтобы величина — была минимально возможной.

    При этом Мистера Б устроит любое из возможных решений.

    Входные данные

    В первой и единственной строке через пробел заданы два целых числа: n и a (3 ≤ n ≤ 105, 1 ≤ a ≤ 180) — количество вершин в многоугольнике и необходимый угол в градусах.

    Выходные данные

    Выведите через пробел три различные вершины многоугольника v1, v2, v3, образующие угол . Если существует несколько решений, выведите любое. Вершины многоугольника нумеруются от 1 до n в порядке обхода по часовой стрелке.

    Примечание

    В первом примере вершины равностороннего треугольника могут давать только угол в 60 градусов, поэтому ответом является любой возможный угол.

    В квадрате же можно получить только углы в 45 и 90 градусов. Поэтому во втором примере выбирается угол в 45 градусов, так как |45 - 67| < |90 - 67|. Корректными также являются ответы: "3 1 2", "3 2 4", "4 2 3", "4 3 1", "1 3 4", "1 4 2", "2 4 1", "4 1 3", "3 1 4", "3 4 2", "2 4 3", "2 3 1", "1 3 2", "1 2 4", "4 2 1".

    В третьем примере, напротив, выбирается угол в 90 градусов, так как |90 - 68| < |45 - 68|. Корректными также являются ответы: "2 1 4", "3 2 1", "1 2 3", "4 3 2", "2 3 4", "1 4 3", "3 4 1".

    B. Окабэ и банановые деревья

    математика Перебор *1300

    Окабэ зачем-то нужны бананы для одного из экспериментов. Поэтому он решил сходить в лес и срубить банановых деревьев.

    Рассмотрим точку (x, y) на плоскости такую, что x и y — целые числа, и 0 ≤ x, y. В такой точке растет дерево с x + y бананами на нем. В других точках нет деревьев. Окабэ нарисовал прямую, имеющую уравнение . Окабэ может выбрать один прямоугольник со сторонами, параллельными осям координат, такой, что все его точки лежат под или на прямой, и срубить все деревья внутри и на границе прямоугольника, собрав все бананы с них.

    Помогите Окабэ найти максимальное число бананов, которое он может получить, если мудро выберет прямоугольник.

    Окабе уверен, что ответ не превосходит 1018. Вы можете доверять ему.

    Входные данные

    Первая строка содержит два целых числа m и b (1 ≤ m ≤ 1000, 1 ≤ b ≤ 10000).

    Выходные данные

    Выведите максимальное число бананов, которое может получить Окабэ с деревьев, которые он срубит.

    Примечание

    Рисунок выше соответствует первому примеру. Оптимальный прямоугольник показан красным, в нем находится 30 бананов.

    A. Мне скучно жить

    математика реализация теория чисел *800

    Закончилось время каникул. Благодаря помощи хакера Лехи, Нура все же смогла поступить в университет своей мечты, который находится в Павлополисе. Как известно, на очной форме обучения университеты предоставляют студентам общежития, поэтому Нуре пришлось переехать в Павлополис. Теперь Леха остался совсем один в тихом городке Вичкополисе. От скуки он даже едва не впал в депрессию!

    Чтобы хоть немного развеяться Леха придумал для себя задачу. Он выбирает два целых числа A и B, а затем считает наибольший общий делитель чисел «A факториал» и «B факториал». Более формально, хакер хочет посчитать НОД(A!, B!). Как известно, факториал числа x равен произведению всех положительных целых чисел, не превосходящих x. Таким образом, x! = 1·2·3·...·(x - 1)·x. Например, 4! = 1·2·3·4 = 24. Напомним, что НОД(x, y) определяется, как такое наибольшее целое число q, что делит x нацело и делит y нацело.

    Леха научился решать такую задачку очень быстро. А сможете ли вы?

    Входные данные

    В первой и единственной строке входного файла дано два целых числа A и B (1 ≤ A, B ≤ 109, min(A, B) ≤ 12).

    Выходные данные

    Выведите одно число — наибольший общий делитель чисел A! и B!.

    Примечание

    Рассмотрим пример.

    4! = 1·2·3·4 = 24. 3! = 1·2·3 = 6. Наибольший общий делитель чисел 24 и 6 равен 6.

    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. Можно также в первом этапе оставить всех девушек в одной группе. Тогда произойдет сравнений. Очевидно, что лучше разбивать девушек на группы первым способом.

    Тогда значение выражения это .

    A. Магический массив

    математика *1300

    Валерий очень интересуется магией. Магия настолько его привлекает, что он видит её повсюду. Любые странные и непонятные явления он объясняет вмешательством потусторонних сил. Но кто бы мог подумать, что даже в обыкновенном массиве чисел Валера умудрится заметить что-то прекрасное и магическое.

    Совершенно случайным образом к Валере попал кусок старинного пергамента, на котором был записан массив чисел. Он сразу же подумал, что числа в этом массиве вовсе не случайные. В результате продолжительных исследований Валера вывел чудесное свойство, которым должен обладать магический массив: массив называется магическим, если в нем минимум и максимум совпадают.

    Этим своим знаменательным открытием он решил поделиться с вами, но взамен попросил о помощи. Несмотря на потрясающий ум и смекалку, Валера очень плохо считает и поэтому вам придется довести его работу до конца. Все, что от вас требуется, это посчитать количество магических подмассивов исходного массива чисел, записанных на пергаменте. Подмассивом будем называть непустую последовательность подряд идущих элементов.

    Входные данные

    В первой строке входных данных задано целое число n (1 ≤ n ≤ 105). Во второй строке записан массив исходных целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109).

    Выходные данные

    В единственной строке выведите ответ на задачу: количество подмассивов, являющихся магическими.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

    Примечание

    Комментарии к примерам из условия:

    Подходящие подмассивы обозначим в виде пары индексов [a;b] начала и конца.

    В первом примере такими являются [1;1], [2;2], [3;3], [4;4], [2;3].

    Во втором — [1;1], [2;2], [3;3], [4;4], [5;5], [1;2], [2;3], [1;3].

    B. Доктор

    Бинарный поиск математика сортировки *1800

    В очереди к доктору Айболиту стоят n животных. Когда животное заходит в кабинет, доктор его осматривает, выписывает рецепты, назначает анализы, и, возможно, назначает дополнительный прием. Доктор отлично знаком со всеми животными в лесу, и поэтому точно знает, что животное номер i в очереди должно будет посетить его кабинет ровно ai раз. Мы будем считать, что осмотр занимает гораздо больше времени, чем сдача анализов и других дополнительных процедур, и поэтому будем считать, что как только животное покидает кабинет, оно сразу же встает в конец очереди к доктору. Разумеется, если животное уже побывало у доктора необходимое количество раз, то вставать еще раз в очередь ненужно, и оно сразу же уходит домой.

    Доктор планирует уйти домой после того, как завершит прием k животных, и поэтому ему важно, как будет выглядеть очередь в этот момент. Так как у доктора очень длинный рабочий день, да и вообще, отвлекаться ему некогда, то он попросил вас выяснить это.

    Входные данные

    В первой строке входных данных записаны через пробел два целых числа n и k (1 ≤ n ≤ 105, 0 ≤ k ≤ 1014). Во второй строке заданы через пробел целые числа a1, a2, ..., an (1 ≤ ai ≤ 109).

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

    Выходные данные

    Если доктор осуществит в сумме меньше чем k приемов, то выведите единственное число «-1» (без кавычек). Иначе выведите последовательность чисел — номера животных в порядке, в котором они стоят в очереди.

    Обратите внимание, что эта последовательность может быть пустой. Этот случай присутствует в претестах. Вы можете ничего не выводить или выводить один символ конца строки. Оба варианта будут засчитаны за правильный ответ.

    Примечание

    Объяснение первого примера:

    • До приема: {1, 2, 3}
    • После первого приема: {2, 3}
    • После второго приема: {3, 2}
    • После третьего приема: {2}

    Объяснение второго примера:

    • До приема: {1, 2, 3, 4, 5, 6, 7}
    • После первого приема: {2, 3, 4, 5, 6, 7}
    • После второго приема: {3, 4, 5, 6, 7, 2}
    • После третьего приема: {4, 5, 6, 7, 2, 3}
    • После четвертого приема: {5, 6, 7, 2, 3}
    • После пятого приема: {6, 7, 2, 3, 5}
    • После шестого приема: {7, 2, 3, 5, 6}
    • После седьмого приема: {2, 3, 5, 6}
    • После восьмого приема: {3, 5, 6, 2}
    • После девятого приема: {5, 6, 2, 3}
    • После десятого приема: {6, 2, 3}

    D. Числа

    дп математика теория чисел *2400

    В один из самых обыкновенных будних дней Валера пошел в школу (а куда же еще ему идти), где на уроке математики его любимая учительница Валерия Валерьевна рассказывала ученикам про делители. Несмотря на то, что Валера любил математику, эта тема его не слишком заинтересовала. Даже более того, она показалась ему настолько скучной, что он уснул прямо посреди урока. И только громкий звук звонка смог прервать его сладкий сон.

    Разумеется, ценный материал и объяснения учительницы были упущены. Однако домашнее задание Валере, так или иначе, сделать придется. Поскольку он абсолютно не знает нового материала, сделать задание сам он не в состоянии. Поэтому он и обратился к Вам за помощью. Вы ведь все-таки его лучший друг и просто не можете отказать в помощи.

    В домашнем задании Валеры всего лишь одна задача, которая хоть и формулируется очень просто, но имеет совсем не тривиальное решение. Её условие выглядит следующим образом: если рассмотреть все натуральные числа в отрезке [a;b], то требуется посчитать количество таких чисел из этого отрезка, что их наименьшим делителем будет являться некоторое число k (делитель равный единице учитывать не надо). Другими словами, необходимо посчитать количество таких чисел из отрезка [a;b], что они не делятся ни на одно число от 2 до k - 1, однако делятся на k.

    Входные данные

    В первой и единственной строке заданы три натуральных числа a, b, k (1 ≤ a ≤ b ≤ 2·109, 2 ≤ k ≤ 2·109).

    Выходные данные

    В единственной строке выведете ответ на поставленную задачу.

    Примечание

    Комментарии к примерам из условия:

    В первом примере ответом являются числа 2, 4, 6, 8, 10.

    Во втором - 15, 21.

    В третьем такие числа отсутствуют.

    A. Саша и палочки

    игры математика *800

    Сегодня очередной учебный день. Саша, как и многие из школьников, очень не любит уроки и ему постоянно скучно на них. Саша — человек занятой и не любит тратить свое время, сидя за партой и слушая скучные лекции, поэтому он кое-что придумал. Каждый день он изобретает интересные игры и играет в них один или с друзьями.

    Как-то раз на очередном уроке Саше стало скучно и он решил сыграть со своей соседкой по парте, Леной, в одну игру, правила которой очень просты. Саша рисует на бумаге n палочек. После этого каждый из ребят по очереди зачёркивает k идущих подряд палочек, имея возможность сделать это как справа, так и слева. Саша, как создатель игры, всегда делает ход первым. Если перед ходом кого-то из игроков палочек на бумаге останется строго меньше, чем k, игра прекращается. Саша считает, что он победил, если он сделал строго больше ходов, чем его соседка. Саша очень не любит ждать, поэтому просит вас определить, выиграет он, или нет.

    Входные данные

    В первой строке входных данных через пробел записаны два целых числа n и k (1 ≤ n, k ≤ 1018, k ≤ n) — количество палочек, которые нарисовал Саша и число k — количество подряд идущих палочек, которые ребята могут зачеркивать.

    Выходные данные

    Если Саша выиграет, выведите «YES» (без кавычек), иначе «NO» (без кавычек).

    Вы можете выводить каждую из букв в любом регистре.

    Примечание

    Пояснение в первому примеру: Саша вычеркивает 1 палочку, после чего палочек не остается и его соседка не может сделать ход, то есть проигрывает.

    Пояснение ко второму примеру: Саша вычеркивает 4 палочки, после чего его соседка вычеркивает 4 палочки и на бумаге остается 2 палочки, то есть Саша не может сделать ход. Так как вычеркиваний ребята сделали одинаковое количество раз, Саша не выиграл.

    C. Странное излучение

    Бинарный поиск математика реализация *2500

    n человек стоят на координатной прямой в точках с положительными целочисленными координатами, строго меньшими 106. Для каждого человека известно, в какую сторону он смотрит (влево или вправо), и его максимальная скорость.

    У вас есть возможность разместить одну бомбу в точку с целочисленной неотрицательной координатой, и взорвать ее. В этот момент все люди побегут со своей максимальной скоростью в те стороны, в которые они смотрят, а от бомбы начнут распространяться два странных луча со скоростью s: влево и вправо. Конечно, скорость лучей s строго больше скорости любого человека.

    Странность лучей в том, что в момент, когда положение некоторого луча и его направление совпадает с положением и направлением бега некоторого человека, скорость этого человека увеличивается на скорость луча.

    Требуется положить бомбу в такое место, чтобы минимальный момент времени, в который и мимо точки 0, и мимо точки 106 пробежал хотя бы один человек, был как можно меньше. Иными словами, найдите минимальный момент времени t такой, что существует точка, в которую можно положить бомбу так, чтобы в момент времени t и мимо точки 0, и мимо точки 106 кто-то пробежал.

    Входные данные

    В первой строке находятся два целых числа n и s (2 ≤ n ≤ 105, 2 ≤ s ≤ 106) — количество человек на прямой и скорость лучей.

    В следующих n строках находятся описания людей. В i-й из этих строк находятся три целых числа xi, vi и ti (0 < xi < 106, 1 ≤ vi < s, 1 ≤ ti ≤ 2) — координата i-го человека на прямой, его максимальная скорость и направление, в котором он побежит (1 — влево, т.е. в сторону уменьшения координаты, и 2 — вправо, т.е. в сторону увеличения координаты), соответственно.

    Гарантируется, что точки 0 и 106 будут когда-либо достигнуты людьми независимо от положения бомбы.

    Выходные данные

    Выведите минимальное время, за которое могут быть достигнуты обе точки 0 и 106.

    Ваш ответ будет считаться правильным, если его абсолютная или относительная точность не превосходит 10 - 6. А именно, если ваш ответ равен a, а ответ жюри равен b, то ваш ответ будет зачтен, если .

    Примечание

    В первом примере оптимально поставить бомбу в точке с координатой 400000. Тогда в момент времени 0 скорость первого станет 1000 и он достигнет точки 106 в момент времени 600. На второго человека бомба не повлияет и он достигнет точки 0 в момент времени 500000.

    Во втором примере оптимально поставить бомбу в точке с координатой 500000. Лучи догонят обоих людей в момент времени 200. В этот момент первый находится в точке с координатой 300000, а второй 700000. Их скорость станет равна 1500 и в момент времени 400 они одновременно пересекут точки 0 и 106.

    A. Игра, не имеющая смысла

    математика теория чисел *1700

    Сластена и ее верный пес Пушок играют в крайне интересную, но совершенно не имеющую смысла игру.

    Игра состоит из множества партий. Правила ее очень просты: в каждом раунде выбирается некоторое натуральное число k, и тот кто его быстрее выкрикнет (или пролает, в зависимости от участника), выиграет этот раунд. После этого количество очков победителя увеличивается в k2 раз, а число очков его оппонента — в k раз. В начале любой игры Сластена и Пушок обладают одинаковым числом очков, равным единице.

    К сожалению, Сластена потеряла свой блокнот, где содержалась информация обо всех партиях всех n прошедших игр, а смутно запомнить она сумела лишь окончательные результаты. Помогите Сластене для каждой игры проверить правдивость ее воспоминаний, а именно, скажите, могла ли состояться игра, в которой оба участника набрали заданное число очков.

    Входные данные

    В первой строке задано число n — количество тестовых случаев (1 ≤ n ≤ 350000).

    Каждая игра описывается двумя числами a, b (1 ≤ a, b ≤ 109) — количеством очков Сластены и Пушка соответственно.

    Выходные данные

    На каждый вопрос выведите одно слово «Yes», если игра с таким результатом возможна, и «No» в противном случае.

    Вы можете выводить каждую из букв в любом регистре (строчную или заглавную).

    Примечание

    Первая игра могла состоять из одного раунда, в котором было выбрано число 2, пролаянное Пушком.

    Во второй же игре необходимо ровно два раунда, в первом из которых Сластена могла назвать число 5, а во втором — Пушок пролаять число 3.

    C. Прожорливая Кракозябра

    жадные алгоритмы Комбинаторика математика Перебор *2700

    Недавно в Мармеладном замке поселилась самая настоящая Кракозябра. И она постоянно не прочь чем-нибудь поживиться.

    Любимым блюдом Кракозябры являются натуральные числа в медовом соусе, а точнее, нули в их десятичной записи. Другие цифры ей не по вкусу; мало того, от них у нее частенько случается несварение желудка. Поэтому прежде, чем приступить к трапезе, Кракозябра аккуратно раскладывает цифры числа в возрастающем порядке и съедает лишь нули (если они есть), а из оставшихся цифр формирует новое число, которое она презрительно отбрасывает как несъедобный хвост.

    Так, например, если Кракозябра предпочтет полакомиться числом 57040, то несъедобный хвост будет равняться 457.

    Сластене немного не по душе такое соседство, но ее природная гостеприимность не позволяет ей оставить Кракозябру без еды. У Сластены есть некоторый диапазон чисел от L до R, которыми она планирует накормить гостью. Помогите ей узнать, сколько различных несъедобных хвостов останется после ужина.

    Входные данные

    В первой строчке заданы два числа L и R — границы диапазона (1 ≤ L ≤ R ≤ 1018).

    Выходные данные

    Выведите одно число — ответ на задачу.

    Примечание

    В первом примере несъедобные хвосты — все числа от 1 до 9. Заметьте, что 10 и 1 дают одинаковые хвосты, равные 1.

    Во втором примере Кракозябра сформирует уникальные несъедобные хвосты из всех чисел диапазона, кроме пары 45, 54. Таким образом, ответ равен (57 - 40 + 1) - 1 = 17.

    A. Кнопочные гонки

    математика *800

    Двое решили посоревноваться в набирании текстов на сайте «Кнопочные гонки». Во время соревнования необходимо ввести текст из s символов. Первый участник набирает один символ за v1 миллисекунд и имеет пинг t1 миллисекунд. Второй участник набирает один символ за v2 миллисекунд и имеет пинг t2 миллисекунд.

    При соединении с пингом (задержкой) в t миллисекунд соревнование проходит для участника следующим образом:

    1. Ровно через t миллисекунд после начала соревнования участник получает текст, который необходимо ввести.
    2. Сразу после этого он начинает вводить этот текст.
    3. Ровно через t миллисекунд после того, как он перепечатал весь текст, сайт получает информацию об этом.

    Победителем в соревновании является тот участник, информация об успехе которого пришла раньше. Если информация пришла от обоих участников одновременно, считается, что произошла ничья.

    По данной длине текста и информации об участниках, определите исход игры.

    Входные данные

    Первая строка содержит пять целых чисел s, v1, v2, t1, t2 (1 ≤ s, v1, v2, t1, t2 ≤ 1000) — количество символов в тексте, скорость набора текста первым участником, скорость набора текста вторым участником, пинг первого участника и пинг второго участника.

    Выходные данные

    Если выиграет первый участник, выведите «First». Если выиграет второй участник, выведите «Second». В случае ничьей выведите «Friendship».

    Примечание

    В первом примере информация об успехе первого участника придёт в момент времени 7, об успехе второго — в момент времени 14. Таким образом, выиграет первый участник.

    Во втором примере информация об успехе первого участника придёт в момент времени 11, об успехе второго — в момент времени 5. Таким образом, выиграет второй участник.

    В третьем примере информация об успехе первого участника придёт в момент времени 22, об успехе второго — в момент времени 22. Таким образом, будет ничья.

    D. Круглое подмножество

    дп математика *2100

    Назовем круглостью числа количество нулей, которым оно оканчивается.

    Задан массив из n чисел. Выберите такое подмножество из ровно k чисел, чтобы круглость произведения выбранных чисел была максимальна. Выведите полученное значение круглости.

    Входные данные

    В первой строке записаны два целых числа n и k (1 ≤ n ≤ 200, 1 ≤ k ≤ n).

    Во второй строке записаны n чисел, разделенные пробелами, a1, a2, ..., an (1 ≤ ai ≤ 1018).

    Выходные данные

    Выведите максимальную круглость произведения подмножества из k чисел.

    Примечание

    В первом примере есть три подмножества из 2 чисел. У подмножества [50, 4] произведение 200, круглость2, [4, 20] — произведение 80, круглость 1, [50, 20] — произведение 1000, круглость 3.

    Во втором примере у подмножества [15, 16, 25] произведение — 6000, круглость3.

    В третьем примере произведения всех подмножеств имеют круглость 0.

    E. Васина функция

    Бинарный поиск математика реализация *2100

    Вася изучает теорию чисел. Он определил функцию f(a, b) следующим образом:

    • f(a, 0) = 0;
    • f(a, b) = 1 + f(a, b - gcd(a, b)), где gcd(a, b) это наибольший общий делитель a и b.

    У Васи есть два числа x и y, и он хочет вычислить f(x, y). Он хотел сделать это сам, но его способ может занять слишком много времени. Так что он просит вас написать программу, с помощью которой можно посчитать эту функцию быстро.

    Входные данные

    Первая и единственная строка содержит два целых числа x и y (1 ≤ x, y ≤ 1012).

    Выходные данные

    Выведите f(x, y).

    F. Префикс суммы

    Бинарный поиск Комбинаторика математика матрицы Перебор *2400

    Дана функция p(x), где x — это массив из m целых чисел, которая возвращает массив y, состоящий из m + 1 целых чисел таких, что yi равно сумме первых i элементов массива x (0 ≤ i ≤ m).

    Дана бесконечная последовательность массивов A0, A1, A2..., где массив A0 дан во входных данных, и для всех i ≥ 1 Ai = p(Ai - 1). Кроме этого дано целое положительное число k. Найдите минимальное возможное i такое, что Ai содержит число не меньшее чем k.

    Входные данные

    Первая строка содержит два целых числа n и k (2 ≤ n ≤ 200000, 1 ≤ k ≤ 1018), где n — размер массива A0.

    Вторая строка содержит n целых чисел A00, A01... A0n - 1 — элементы массива A0 (0 ≤ A0i ≤ 109). Массив A0 содержит по крайней мере два положительных элемента.

    Выходные данные

    Выведите минимальное i такое, что массив Ai содержит число не меньшее чем k.

    D. Рассадка в самолете

    математика теория чисел *2700

    В самолете есть n рядов от кабины до хвоста, в каждом ряду — одно место. На самолет сядут m человек.

    В самолете есть вход в начала перед всеми рядами, а также есть вход в конце после всех рядов.

    У каждого человека есть место. Возможно, что у нескольких людей места совпадают. Люди будут садиться на борт по одному, начиная с человека 1. Каждый человек независимо войдет либо через передний вход, либо через задний.

    Когда человек входит в самолет, он пройдет сразу к своему месту. Затем, пока место, около которого он стоит, занято, он будет проходить на одно место в том же направлении. Пассажир разозлится, если он дойдет до конца ряда (т.е. до противоположного входа), так и не найдя свободного места.

    Найдите число способов назначить каждому пассажиру место и выполнить посадку так, чтобы никто не разозлился. Два способа считаются различными, если есть пассажир, у которого в двух способах разные места, либо есть пассажир, который входит через разные входы в двух способах. Выведите это число по модулю 109 + 7.

    Входные данные

    Первая строка содержит два целых числа n, m (1 ≤ m ≤ n ≤ 1 000 000) — число мест и число пассажиров, соответственно.

    Выходные данные

    Выведите единственное число — искомое число способов по модулю 109 + 7.

    Примечание

    Здесь будем обозначать пассажиров номером места и входом (либо «F», либо «B» для переднего и заднего входа, соответственно).

    Например, один из корректных способов посадки это 3B, 3B, 3B (т.е. у всех пассажиры место 3, и они зашли через задний вход). Другой способ это, например, 2F, 1B, 3F.

    Некорректный способ, это, например, 2B, 2B, 2B, потому что третий пассажир доберется до переднего входа, не найдя свободного места.

    D. Зима пришла

    дп Комбинаторика математика теория чисел *2200

    Зима пришла на Севере и белые ходоки близко. Армия Джона Сноу состоит из n солдат. Пока остальная часть мира сражается за Железный трон, он собирается подготовиться к атаке белых ходоков.

    Он придумал метод оценки силы своей армии. Пусть сила i-го солдата ai. Для некоторого k он называет i1, i2, ..., ik кланом, если i1 < i2 < i3 < ... < ik и gcd(ai1, ai2, ..., aik) > 1. Он считает силой этого клана k·gcd(ai1, ai2, ..., aik). Тогда сила армии равна сумме сил всех кланов в армии.

    Ваша задача - найти силу его армии. Так как это число может быть очень большим, выведите его по модулю 1000000007 (109 + 7).

    Наибольшим общим делителем (greatest common divisor, gcd) последовательности целых чисел называется наибольшее целое число такое, что каждый элемент последовательности делится на это число.

    Входные данные

    Первая строка содержит целое число n (1 ≤ n ≤ 200000) — размер армии.

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1000000) — силы солдат в армии.

    Выходные данные

    Выведите одно число — силу армии Джона Сноу по модулю 1000000007 (109 + 7).

    Примечание

    В первом примере кланы — {1}, {2}, {1, 2}, так что ответ 1·3 + 1·3 + 2·3 = 12

    E. Мать драконов

    meet-in-the-middle графы математика Перебор *2700

    В Королевстве Ланнистеров n замков и несколько стен, соединяющих два замка, никакие два замка не соединены более, чем одной стеной, ни одна стена не соединяет замок с собой.

    Сир Джейме Ланнистер узнал, что Дейенерис Таргариен собирается атаковать его королевство. Он хочет защитить свои владения. У него есть k литров странной жидости. Он хочет распределить эту жидкость между замками так, чтобы каждый замок содержал некоторое количество жидкости (возможно, нулевое или нецелое количество литров). После этого стабильность стены, соединяющей замки a и b, содержащие x и y литров жидкости, соответственно, равна x·y.

    Ваша задача — найти максимальную возможную сумму стабильностей стен, которую Сир Джейме Ланнистер сможет достичь

    Входные данные

    Первая строка содержит два целых числа n и k (1 ≤ n ≤ 40, 1 ≤ k ≤ 1000).

    Далее следует n строк. В i-й из них содержится n целых чисел ai, 1, ai, 2, ..., ai, n (). Если замки i и j соединены стеной, ai, j = 1. В противном случае оно равно 0.

    Гарантируется, что ai, j = aj, i и ai, i = 0 для всех 1 ≤ i, j ≤ n.

    Выходные данные

    Выведите одно число — максимальную возможную сумму стабильностей стен, которую Сир Джейме Ланнистер сможет достичь.

    Ваш ответ будет считаться правильным, если его абсолютная или относительная точность не превосходит 10 - 6.

    А именно, если ваш ответ равен a, а ответ жюри равен b, то ваш ответ будет зачтен, если .

    Примечание

    В первом примере, если замки 1, 2, 3 содержат 0.5, 0.5, 0 литров жидкости, соответственно, ответ равен 0.25.

    Во втором примере, если замки 1, 2, 3, 4 содержат 1.0, 1.0, 1.0, 1.0 литров жидкости, ответ равен 4.0.

    A. Игрушечные армии

    математика теория чисел *900

    Герой нашего повествования Валерий и его лучший друг Аркадий еще только учатся в школе, и поэтому все свободное время они проводят играя в пошаговую стратегию «GAGA: Go And Go Again». Процесс игры выглядит следующим образом.

    На игровом поле располагаются две армии, каждая из которых состоит из n солдат (n всегда четное). Текущий игрок указывает для каждого своего солдата, в какого солдата противника тот будет стрелять, а после этого все солдаты игрока стреляют одновременно. Это игровой мир, и поэтому каждый солдат стреляет идеально, то есть абсолютно всегда попадает в указанную цель. Если в солдата противника стреляли, он обязательно погибает. Может случиться, что нескольким солдатам была указана одна и та же цель. Убитые солдаты больше не принимают участия в игре.

    Игра «GAGA» состоит из трех шагов: сначала делает ход Валерий, потом Аркадий, после чего опять Валерий, — и игра заканчивается.

    Вас попросили подсчитать, какое максимальное суммарное количество солдат может быть убито в процессе игры?

    Входные данные

    Входные данные состоят из единственного целого числа n (2 ≤ n ≤ 108, n — четное). Обратите внимание, что до начала игры на поле располагаются 2n солдат.

    Выходные данные

    Выведите единственное число — какое максимальное суммарное количество солдат могло быть убито в процессе игры за три хода.

    Примечание

    Первый пример из условия:

    1) Солдаты Валерия с номерами 1 и 2 стреляют в солдата Аркадия с номером 1.

    2) Солдат Аркадия с номером 2 стреляет в солдата Валерия с номером 1.

    3) Солдат Валерия с номером 1 стреляет в солдата Аркадия с номером 2.

    Всего убито 3 солдата: солдат Валерия с номером 1 и солдаты Аркадия с номерами 1 и 2.

    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.

    B. Находка

    игры математика *1100

    Леха как-то нашёл массив состоящий из n целых чисел. Посмотрев на него он придумал эту задачу. Два игрока играют в игру на массиве. Игроки ходят по очереди. Первый игрок может за свой ход выбрать подотрезок ненулевой длины с нечётной суммой чисел и удалить его из массива, после этого оставшиеся части склеиваются в один массив и игра продолжается. Второй игрок может выбрать подотрезок ненулевой длины с чётной суммой и удалить его. Проигрывает тот кто не может сделать ход. Кто победит, если оба играют оптимально?

    Входные данные

    В первой строке входных данных содержится единственной число n (1 ≤ n ≤ 106) — длина массива.

    Следующая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109) — найденный массив.

    Выходные данные

    Ответ в единственной строке. «First», если победит первый игрок, и «Second» иначе (без кавычек).

    Примечание

    В первом примере первый игрок сразу забирает весь массив и побеждает.

    Во втором примере первый игрок изначально не может сделать ход и проигрывает.

    C. Илья и дерево

    графы Деревья математика поиск в глубину и подобное теория чисел *2000

    Илья очень любит графы, особенно деревья. Во время последнего похода в лес Илья нашел очень интересное дерево с корнем в вершине 1, в каждой вершине i которого записано одно целое число ai.

    Красотой вершины x Илья называет наибольший общий делитель всех чисел в вершинах на пути от корня до x включительно. При этом Илья может изменить число в одной произвольной вершине на 0, либо оставить все вершины неизменными. Теперь Илью интересует, какая максимальная красота может быть у каждой вершины.

    Для каждой вершины ответ нужно считать независимо.

    Красота корня равна числу, записанному на нем.

    Входные данные

    Первая строка содержит целое число n — количество вершин в дереве (1 ≤ n ≤ 2·105).

    Следующая строка содержит n целых чисел ai (1 ≤ i ≤ n, 1 ≤ ai ≤ 2·105).

    Каждая из следующий n - 1 строк содержит два целых числа x и y (1 ≤ x, y ≤ n, x ≠ y), означающие, что в дереве есть ребро (x, y).

    Выходные данные

    В единственной строке через пробел выведите n чисел, где i-е по порядку числу  — максимальная красота вершины i.

    A. Сортировка подпоследовательностями

    математика поиск в глубину и подобное реализация снм сортировки *1400

    Дана последовательность a1, a2, ..., an, состоящая из различных целых чисел. Требуется разбить эту последовательность на максимальное число подпоследовательностей так, чтобы после сортировки по возрастанию чисел внутри каждой из них итоговая последовательность также оказалась отсортированной по возрастанию.

    Под сортировкой по возрастанию чисел внутри подпоследовательности понимается процесс, в котором числа, входящие в подпоследовательность, упорядочиваются по возрастанию, а числа, не входящие в подпоследовательность, не меняют свои позиции.

    При разбиении последовательности на подпоследовательности каждый элемент должен войти ровно в одну подпоследовательность.

    Входные данные

    Первая строка входных данных содержит целое число n (1 ≤ n ≤ 105) — длину последовательности.

    Вторая строка входных данных содержит n различных целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — элементы последовательности. Гарантируется, что все элементы последовательности различны.

    Выходные данные

    В первой строке выведите максимальное число подпоследовательностей k, на которое можно разбить исходную последовательность, выполнив условие задачи.

    В следующих k строках выведите описание подпоследовательностей в следующем формате: количество элементов в подпоследовательности ci (0 < ci ≤ n), а затем ci целых чисел l1, l2, ..., lci (1 ≤ lj ≤ n) — индексы этих элементов в исходной последовательности.

    Индексы можно выводить в любом порядке. Каждый индекс от 1 до n должен присутствовать в выводе ровно один раз.

    Если возможных ответов несколько, выведите любой из них.

    Примечание

    Пояснение к ответу на первый сэмпл:

    После сортировки первой подпоследовательности мы получим последовательность 1 2 3 6 5 4.

    После сортировки второй подпоследовательности ничего не изменится.

    После сортировки третьей подпоследовательности мы получим последовательность 1 2 3 4 5 6.

    После сортировки последней подпоследовательности ничего не изменится.

    C. Переподвешивание дерева

    графы Деревья Конструктив математика поиск в глубину и подобное *2600

    Вам дано дерево размера n и разрешается выполнить не более 2n операций над ним. Операция заключается в выборе трех вершин x, y, y', удалении ребра (x, y) и добавлении ребра (x, y'). Операцию x, y, y' можно выполнить в случае, если выполнены все условия:

    1. Ребро (x, y) присутствует в дереве.
    2. После операции граф останется деревом.
    3. При удалении ребра (x, y) дерево распадается на две компоненты связности. Обозначим множество вершин в одной компоненте с вершиной x множеством Vx, а в одной компоненте с вершиной y — множеством Vy. Тогда должно выполняться условие |Vx| > |Vy|, т.е. размер компоненты с x должен быть строго больше размера компоненты с y.

    Вам требуется минимизировать сумму квадратов расстояний между всеми парами вершин в итоговом дереве, полученном после не более чем 2n операций, а также предоставить последовательность операций, с помощью которых можно получить итоговое дерево из исходного.

    Обратите внимание, что минимизировать количество операций не нужно. Нужно минимизировать исключительно сумму квадратов расстояний.

    Входные данные

    Первая строка входных данных содержит целое число n (1 ≤ n ≤ 2·105) — количество вершин в дереве.

    Следующие n - 1 строки входных данных содержат пары целых чисел a и b (1 ≤ a, b ≤ n, a ≠ b) — описания рёбер. Гарантируется, что данные ребра образуют дерево.

    Выходные данные

    В первой строке выведите число k (0 ≤ k ≤ 2n) — количество операций, которые нужно провести, чтобы минимизировать сумму квадратов расстояний между различными парами вершин.

    В следующих k строках выведите по три целых числа x, y, y' — номера вершин, участвующих в очередной операции.

    Операции, в которых y = y', разрешены (хоть ничего и не меняют), если выполнены условия операции.

    Если возможных ответов несколько, выведите любой из них.

    Примечание

    Иллюстрация изменений графа во втором примере из условия. Темным обозначены ребра после операции, пунктиром — до.

    B. Прямоугольники

    Комбинаторика математика *1300

    Дана таблица размера n × m. Каждая клетка таблицы покрашена либо в белый, либо в черный цвет. Найдите количество непустых множеств клеток таких, что:

    1. Все клетки в множестве имеют один и тот же цвет.
    2. Любые две клетки лежат в одной строке или в одном столбце.
    Входные данные

    Первая строка входных данных содержит целые числа n и m (1 ≤ n, m ≤ 50) — число строк и число столбцов в таблице, соответственно.

    Следующие n строк входных данных содержат описания строк таблицы, в каждой строке находятся m целых чисел, разделенных пробелами. Число равно 0, если соответствующая клетка покрашена в белый цвет, и равно 1, если в черный.

    Выходные данные

    Выведите одно целое число — искомое количество множеств.

    Примечание

    Во втором примере, кроме шести множеств, состоящих из одной клетки, существуют также два других подходящих множества: первое образовано крайними клетками первой строки, второе образовано крайними клетками второй строки. Суммарное количество множеств равно 8.

    G. Кратчайший путь?

    графы математика поиск в глубину и подобное *2300

    Дан неориентированный граф со взвешенными рёбрами. Длина некоторого пути между двумя вершинами равна побитовому исключающему или весов всех рёбер, по которым проходит путь (если некоторое ребро используется в пути несколько раз, то столько же раз оно учитывается в длине пути). Вам необходимо найти минимально возможную длину пути между вершиной 1 и вершиной n.

    Обратите внимание, что граф может содержать кратные рёбра и/или петли. Гарантируется, что граф связный.

    Входные данные

    В первой строке заданы два целых числа n и m (1 ≤ n ≤ 100000, n - 1 ≤ m ≤ 100000) — количество вершин и рёбер в графе.

    Затем следуют m строк. В каждой строке заданы три целых числа x, y и w (1 ≤ x, y ≤ n, 0 ≤ w ≤ 108). Эти числа задают ребро между вершинами x и y с весом w.

    Выходные данные

    Выведите одно число — минимально возможную длину пути между вершинами 1 и n.

    F. Случайный запрос

    математика Структуры данных Теория вероятностей *1800

    Дан массив a размера n, состоящий из натуральных чисел. Случайно, равновероятно и независимо выбираются два целых числа l и r из отрезка с 1 по n. Если l > r, то значения l и r меняются местами. Найдите матожидание количества различных чисел на подотрезке массива с индекса l по индекс r включительно (в 1-индексации).

    Входные данные

    В первой строке задаётся целое число n (1 ≤ n ≤ 106). Во второй строке заданы n чисел a1, a2, ... an (1 ≤ ai ≤ 106) — элементы массива.

    Выходные данные

    Выведите одно число — матожидание количества различных чисел.

    Ваш ответ будет засчитан, если его абсолютная или относительная ошибка не будет превосходить 10 - 4 — т. е., формально, если , где x — ответ жюри, а y — ответ, который выдаёт ваша программа.

    I. Уровень шума

    математика поиск в глубину и подобное реализация *1900

    Столица Берляндии имеет вид прямоугольника размером n × m кварталов. Все кварталы делятся на три типа:

    • обычные (обозначаются символом '.') — такие кварталы сами не производят шума, но не являются препятствиями для распространения шума;
    • источники шума (обозначаются заглавными латинскими буквами от 'A' до 'Z') — такие кварталы являются источниками шума и не являются препятствиями для распространения шума;
    • сильно застроенные (обозначаются символом '*') — такие кварталы являются шумоизолированными, в них не проникает шум, и они сами являются препятствиями для распространения шума.

    Квартал, который обозначается буквой 'A', производит q единиц шума. Квартал, который обозначается буквой 'B', производит q единиц шума. И так далее, вплоть до квартала, обозначаемого буквой 'Z', который производит 26·q единиц шума. В городе может располагаться произвольное количество кварталов, обозначаемых одинаковыми буквами.

    При распространении от источника при переходе к соседнему по стороне кварталу шум затихает в два раза (при делении следует округлять вниз). Шум распространяется по цепочке. Например, если квартал расположен на расстоянии 2 от источника шума, то величина шума, который дойдёт до квартала, делится на 4. Таким образом, уровень шума, дошедший от источника к кварталу определяется исключительно длиной кратчайшего пути между ними. Сильно застроенные кварталы являются препятствиями, шум в них не проникает.

    Значения в ячейках таблицы справа показывают суммарный уровень шума в соответствующих кварталах для q = 100, первое слагаемое — шум от квартала 'A', второе слагаемое — шум от квартала 'B'.

    Уровень шума в квартале определяется как сумма шумов от всех источников. Для оценки качества жизни населения столицы Берляндии требуется найти количество кварталов, уровень шума в которых превышает допустимую норму p.

    Входные данные

    В первой строке содержатся четыре целых числа n, m, q и p (1 ≤ n, m ≤ 250, 1 ≤ q, p ≤ 106) — размеры столицы Берляндии, количество единиц шума, которое производит квартал 'A', и допустимая норма шума.

    В следующих n строках содержится по m символов — описание кварталов столицы в соответствии с условием. Возможно, что в столице Берляндии отсутствуют кварталы любого из трёх типов.

    Выходные данные

    Выведите количество кварталов, уровень шума в которых превышает допустимую норму p.

    Примечание

    Иллюстрация к первому примеру находится в основной части условия задачи.

    M. Погода на завтра

    математика реализация *1000

    Вася придумал свою систему прогнозирования погоды. Он знает информацию о средней температуре воздуха в каждый из последних n дней. Считайте, что средняя температура в каждый из дней — целое число.

    Вася считает, что если средние температуры за последние n дней составляют арифметическую прогрессию, в которой первый член равен средней температуре в первый день, второй член равен средней температуре во второй день и так далее, то температура в следующий, (n + 1)-й день будет равна следующему члену арифметической прогрессии. В противном случае, как считает Вася, температура в (n + 1)-й день будет равна температуре в n-й день.

    Перед вами стоит задача помочь Васе предсказать среднюю температуру на завтра, то есть в (n + 1)-й день.

    Входные данные

    В первой строке содержится целое число n (2 ≤ n ≤ 100) — количество дней, для которых известна информация о средней температуре.

    Во второй строке содержится последовательность целых чисел t1, t2, ..., tn ( - 1000 ≤ ti ≤ 1000), где ti — средняя температура воздуха в день i.

    Выходные данные

    Выведите среднюю температуру воздуха в день (n + 1), которую предскажет Вася согласно своему алгоритму. Обратите внимание, что абсолютная величина предсказанной температуры может превышать 1000.

    Примечание

    В первом примере последовательность средних температур представляет собой арифметическую прогрессию, в которой первый член равен 10, а каждый следующий уменьшается на 5. Поэтому предсказанная температура в шестой день  - 10 - 5 =  - 15.

    Во втором примере последовательность средних температур представляет собой арифметическую прогрессию, в которой первый член равен 1, а каждый следующий равен предыдущему. Поэтому предсказанная температура в пятый день также будет равна 1.

    В третьем примере средние температуры не составляют арифметическую прогрессию, поэтому температура в четвёртый день равна температуре в третий день, то есть  - 5.

    В четвёртом примере последовательность средних температур представляет собой арифметическую прогрессию, в которой первый член равен 900, а следующий увеличен на 100. Поэтому предсказанная температура в третий день 1000 + 100 = 1100.

    E. Days of Floral Colours

    бпф дп Комбинаторика математика разделяй и властвуй *3400

    Цветочные Часы находятся рядом с Зеркальным Озером много лет. Неспособные показывать время, они напоминают людям о его течении и о старых добрых днях.

    На окружности Цветочных Часов находятся 2n цветков, пронумерованных от 1 до 2n по часовой стрелке, каждый цветок имеет один из возможных n цветов. Есть ровно два цветка каждого цвета, расстояние между которыми либо не больше, чем 2, либо равняется n. Кроме того, если цветки u и v имеют одинаковый цвет, то цветок, расположенный напротив u, и цветок, расположенный напротив v, тоже имеют одинаковый цвет: симметрия — это прекрасно!

    Формально, расстояние между двумя цветками равно 1 плюс количество цветков на меньшей дуге между ними. Ниже показано возможная раскраска цветов при n = 6, которое описывает все возможные случаи.

    Красотой раскраски называется произведение длин отрезков цветков, разделенных всеми цветами такими, что противоположный цветок имеет тот же цвет. Другими словами, чтобы вычислить красоту, нужно удалить из круга все цветки, которые имеют тот же цвет, что и цветок напротив них. Тогда красота равна произведению длин всех оставшихся отрезков. Обратите внимание, отрезки длины 0 тоже считаются. Если цветков, которые имеют тот же цвет, что и цветок напротив них, нет, то красота равна 0. Например, красота раскраски выше равна 1 × 3 × 1 × 3 = 9: отрезками являются {2}, {4, 5, 6}, {8} и {10, 11, 12}.

    Возможно большое число различных раскрасок, удовлетворяющих всем ограничениям. Найдите сумму всех красот по всем возможным раскраскам по модулю 998 244 353. Две раскраски различны, если существует пара (u, v) (1 ≤ u, v ≤ 2n) такая, что цветы u и v имеют один цвет в одной из них, но не имеют один цвет в другой.

    Входные данные

    Единственная строка содержит одно целое число n (3 ≤ n ≤ 50 000) — количество цветов на Цветочных Часах.

    Выходные данные

    Выведите одно целое число — сумму красот по всем возможным раскраскам цветом по модулю 998 244 353.

    Примечание

    При n = 3, следующие шесть раскрасок каждая имеет красоту, равную 2 × 2 = 4.

    Много других раскрасок, имею красоту, равную 0, например, изображенная на рисунке слева. Раскраска на рисунке справа некорректна, так как не выполняется условие симметричности.

    A. Точки в пятимерном пространстве

    геометрия математика Перебор *1700

    Дано множество, состоящее из n точек в пятимерном пространстве. Точки пронумерованы от 1 до n. Никакие две точки не совпадают.

    Назовем точку a плохой, если существуют две разные точки b и c из данного множества, не совпадающие с a, такие что угол между векторами и острый (строго меньше ). Иначе, назовем точку хорошей.

    Угол между векторами и в пятимерном пространстве определен как , где  — скалярное произведение и  — длина вектора .

    Выведите индексы всех хороших точек в порядке возрастания.

    Входные данные

    Первая строка входных данных содержит одно целое число n (1 ≤ n ≤ 103) — количество точек.

    Следующие n строк содержат по пять целых чисел ai, bi, ci, di, ei (|ai|, |bi|, |ci|, |di|, |ei| ≤ 103) — координаты i-й точки. Все точки различны.

    Выходные данные

    Выведите число k — количество хороших точек.

    В следующих k строках выведите индексы хороших точек в возрастающем порядке.

    Примечание

    В первом примере, первая точка образует угол ровно со всеми другими парами точек, поэтому она является хорошей.

    Во втором примере точки лежат в плоскости cd и выглядят так:

    Видно, что все углы острые, поэтому ни одна точка не является хорошей.

    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 иначе. Главная диагональ должна содержать только нули.

    E. Выборы

    битмаски бпф математика Перебор разделяй и властвуй *2800

    В Берляндии приближаются президентские выборы! Каждый с нетерпением ожидает этого события!

    В Берляндии есть n жителей и три кандидата — Алексей, Борис и Владимир. Так как выборы определят будущее страны на много лет, каждый из n жителей выберет один из шести возможных порядков на кандидатах случайно, равновероятно и независимо от остальных жителей.

    Для увеличения прозрачности процесса выборов правительство разработало функцию (т.е. функция принимает n булевых аргументов и возвращает булевый результат). Функция удовлетворяет следующему условию: f(1 - x1, 1 - x2, ..., 1 - xn) = 1 - f(x1, x2, ..., xn).

    Будет проведено три раунда выборов между каждой парой кандидатов: Алексеем и Борисом, Борисом и Владимиром, Владимиром и Алексеем. В каждом раунде xi будет равно 1, если i-й житель предпочитает первого кандидата второму (т.е. в его списке предпочтений первый кандидат находится раньше второго), и 0 иначе. После этого определяется величина y = f(x1, x2, ..., xn). Если y = 1, то первый кандидат считается победителем этого раунда, иначе, если y = 0, второй считается победителем раунда.

    Определим вероятность того, что есть кандидат, победивший в двух раундах, p. p·6n всегда целое число. Выведите это число по модулю 109 + 7 = 1 000 000 007.

    Входные данные

    Первая строка содержит число n (1 ≤ n ≤ 20).

    Следующая строка содержит строку длины 2n из нулей и единиц, представляющую функцию f. Определим bk(x) как k-й бит x. Тогда i-й символ строки есть f(b1(i), b2(i), ..., bn(i)) (символы строки нумеруются с нуля).

    Гарантируется, что f(1 - x1, 1 - x2, ..., 1 - xn) = 1 - f(x1, x2, ..., xn) для всех значений x1, x2, ldots, xn.

    Выходные данные

    Одно число — ответ на задачу.

    Примечание

    В первом примере f(x1, x2, x3) = x1, т.е. результат полностью определятся первым жителем. Тогда первый кандидат в порядке предпочтений первого жителя победит в двух турах. Следовательно, p = 1 и ответ на задачу 1·63 = 216.

    F. Радужные шары

    математика *2800

    Есть мешок с шарами n различных цветов. В мешке ai шаров цвета i.

    Пока в мешке есть хотя бы два шара различных цветов, вы выполняете следующие шаги:

    • Возьмите два случайных шара из мешка. Может получиться, что цвета совпали.
    • Покрасьте второй шар в цвет первого. Менять порядок шаров не разрешается.
    • Положите оба шара обратно в коробку.
    • Все эти действия занимают у вас ровно одну секунду.

    Пусть M = 109 + 7. Можно доказать, что математическое ожидание времени всего процесса может быть представлено в виде рационального числа , где P и Q — взаимно простые целые числа, и Q не делится на M. Выведите величину .

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 2 500) — количество цветов.

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105) — количество шаров каждого цвета.

    Выходные данные

    Выведите одно число — ответ на задачу.

    Примечание

    В первом примере независимо от происходящего шары будут одного цвета после одного шага.

    Во втором примере есть 6 шаров. Обозначим шары числами от 1 до 6, без ограничения общности, пусть шары 1, 2, 3 изначально имеют цвет 1, шары 4, 5 имеют цвет 2, а шар 6 имеет цвет 3.

    Пример того, какой может быть процесс:

    • Достали шар 5 и шар 6. Шар 6 становится цвета 2.
    • Достали шар 4 и шар 5. Шар 5 остается того же цвета (цвета 2).
    • Достали шар 1 и шар 5. Шар 5 становится цвета 1.
    • Достали шар 6 и шар 5. Шар 5 становится цвета 2.
    • Достали шар 3 и шар 4. Шар 4 становится цвета 1.
    • Достали шар 4 и шар 6. Шар 6 становится цвета 1.
    • Достали шар 2 и шар 5. Шар 5 становится цвета 1.
    В этот момент процесс заканчивается, так как все шары одного цвета. Эти шаши заняли 7 секунд.

    Можно показать, что ответ в этом случае равен .

    A. Арпа и исследования мексиканской волны

    математика реализация *800

    Арпа исследует мексиканскую волну.

    На стадионе n зрителей, пронумерованных от 1 до n. они начинают мексиканскую волну в момент времени 0.

    • В момент времени 1 встает первый зритель.
    • В момент времени 2, встает второй зритель.
    • ...
    • В момент времени k, встает k-й зритель встает.
    • В момент времени k + 1 встает (k + 1)-й зритель, а первый — садится.
    • В момент времени k + 2 встает (k + 2)-й зритель, а второй — садится.
    • ...
    • В момент времени n встает n-й зритель, а (n - k)-й зритель садится.
    • В момент времени n + 1 садится (n + 1 - k)-й зритель.
    • ...
    • В момент времени n + k садится n-й зритель.

    Арпа хочет узнать, сколько людей стоит в момент времени t.

    Входные данные

    В первой строке находятся три целых числа n, k, t (1 ≤ n ≤ 109, 1 ≤ k ≤ n, 1 ≤ t < n + k).

    Выходные данные

    Выведите одно целое число: число стоящих зрителей в момент времени t.

    Примечание

    Далее сидящий зритель обозначен как -, а стоящий — как ^.

    • При t = 0  ---------- число стоящих зрителей равно 0.
    • При t = 1  ^--------- число стоящих зрителей равно 1.
    • При t = 2  ^^-------- число стоящих зрителей равно 2.
    • При t = 3  ^^^------- число стоящих зрителей равно 3.
    • При t = 4  ^^^^------ число стоящих зрителей равно 4.
    • При t = 5  ^^^^^----- число стоящих зрителей равно 5.
    • При t = 6  -^^^^^---- число стоящих зрителей равно 5.
    • При t = 7  --^^^^^--- число стоящих зрителей равно 5.
    • При t = 8  ---^^^^^-- число стоящих зрителей равно 5.
    • При t = 9  ----^^^^^- число стоящих зрителей равно 5.
    • При t = 10 -----^^^^^ число стоящих зрителей равно 5.
    • При t = 11 ------^^^^ число стоящих зрителей равно 4.
    • При t = 12 -------^^^ число стоящих зрителей равно 3.
    • При t = 13 --------^^ число стоящих зрителей равно 2.
    • При t = 14 ---------^ число стоящих зрителей равно 1.
    • При t = 15 ---------- число стоящих зрителей равно 0.

    B. Арпа и экзамен по геометрии

    геометрия математика *1400

    Арпа на экзамене по геометрии. Вот последняя задача экзамена.

    Вам даны три точки a, b, c.

    Найдите на плоскости точку и угол такие, что если мы повернем плоскость вокруг точки на заданный угол, то новая позиция точки a совпадет со старой позицией точки b, а новая позиция точки b совпадет со старой позицией точки c.

    Арпа сомневается, имеет ли задача решение или нет (т.е. есть ли подходящие точка и угол). Помогите Арпе определить, существует ли решение, или нет.

    Входные данные

    Единственная строка содержит шесть целых чисел ax, ay, bx, by, cx, cy (|ax|, |ay|, |bx|, |by|, |cx|, |cy| ≤ 109). Гарантируется, что все точки попарно различны.

    Выходные данные

    Выведите «Yes», если решение существует, и «No» иначе.

    Вы можете вывести каждую из букв в любом регистре (строчную или заглавную).

    Примечание

    В первом примере можно повернуть плоскость относительно точки (0.5, 0.5) на .

    Во втором примере решения не существует.

    A. Цифры

    математика Перебор реализация *2500

    Джон задал Джеку очень сложную задачу. Он написал огромное положительное число A0 на кусочек бумаги. Это число не превосходит 10200000. На каждом шагу Джек может написать знаки ' + ' между некоторыми цифрами текущего числа (возможно, ни одного) и вычислить сумму выражения. Затем он может выполнить такую же операцию над получившейся суммой, и так далее. Получившиеся суммы обозначаются A1, A2 и так далее. Его задача состоит в том, чтобы в итоге получить число из одной цифры.

    Проблема в том, что на кусочке бумаги не так уж и много места. Там осталось место только для трех строчек, поэтому Джек не может сделать больше трех операций. Он хочет использовать всю бумагу, поэтому он должен выполнить ровно три операции.

    Джек не может добавлять лидирующие нули к промежуточным результатам, но он может писать знак ' + ' перед цифрами 0. Например, если текущее число равно 1000100, то 10 + 001 + 00 является корректным шагом, результат которого равняется 11.

    Входные данные

    Первая строка содержит одно целое число N (1 ≤ N ≤ 200000) — число цифр в A0.

    Вторая строка содержит целое число A0 из N цифр без лидирующих нулей.

    Выходные данные

    Выведите ровно три строки. Каждая строка будет шагом, выполненным Джеком. Результатом третьего шага должно быть однозначное число.

    Каждый шаг должен состоять из цифр и знаков ' + '. Шаги не должны содержать несколько знаков ' + ' подряд, пробелов, а также знаков ' + ' перед первой и после последней цифры. Кроме того, они должны быть арифметически согласованными.

    Возможно, что решение не единственно. В таком случае, выведите любое из них.

    Примечание

    В первом примере Джек не может нигде поставить знак ' + ', поэтому он просто пишет 1 в каждой из строк и решает задачу. В этом случае решение единственно.

    Во втором примере Джек сначала пишет знаки ' + ' между каждой парой последовательных цифр, получая результат 5 + 8 + 0 + 6 = 19. Он делает то же на втором шаге, получая 1 + 9 = 10. Затем он пишет 1 + 0 = 1, поэтому после трех шагов результат равен 1 и его решение корректно.

    F. Преобразование произведения

    Комбинаторика математика теория чисел *2200

    Рассмотрим массив A с N элементами, все из которых равны a.

    Определим преобразование произведение как одновременное обновление элементов массива Ai = Ai·Ai + 1, которое умножает каждый элементы на элемент справа от него для , а последний элемент AN остаётся неизменным. Например, если мы начнём с массива A с a = 2 и N = 4, после первого преобразования произведения A = [4,  4,  4,  2], а после двух A = [16,  16,  8,  2].

    Ваша простая задача — найти массив A после M преобразований произведения. Так как числа могут стать очень большими, выведите ответ по модулю Q.

    Входные данные

    Единственная строка содержит четыре целых числа N, M, a, Q (7 ≤ Q ≤ 109 + 123, 2 ≤ a ≤ 106 + 123, , простое), где  — мультипликативный порядок числа a по модулю Q, см. пояснения.

    Выходные данные

    Выведите массив A слева направо, разделённый пробелами.

    Примечание

    Мультипликативный порядок числа a по модулю Q  — это наименьшее положительное целое число x такое, что ax mod Q = 1. Например, .

    A. Дробь

    Конструктив математика Перебор *800

    Петя увлекается математикой, и больше всего в математике ему нравятся дроби. Недавно он узнал, что дробь называется правильной, если её числитель меньше знаменателя (a < b), и, что дробь называется несократимой, если её числитель и знаменатель взаимно просты (у них нет положительных общих делителей кроме 1).

    На досуге Петя придумывает правильные несократимые дроби и переводит их в десятичные с помощью калькулятора. Один раз Петя перепутал знак деления (÷) и знак сложения ( + ) и вместо желаемой десятичной записи дроби получил сумму числителя и знаменателя, которая оказалась равна n.

    Петя захотел восстановить исходную дробь, но понял, что это не всегда возможно сделать однозначно. Поэтому он решил найти наибольшую правильную несократимую дробь , сумма числителя и знаменателя которой равна n. Помогите Пете справиться с этой задачей.

    Входные данные

    В единственной строке ввода находится целое число n (3 ≤ n ≤ 1000) — сумма числителя и знаменателя искомой дроби.

    Выходные данные

    Выведите через пробел два целых положительных числа a и b — числитель и знаменатель максимальной подходящей правильной несократимой дроби.

    B. Максим покупает квартиру

    Конструктив математика *1200

    Максим хочет купить квартиру в модном многоквартирном доме на Линейном проспекте города Мегаполиса. В этом доме n квартир, пронумерованных от 1 до n и расположенных в один ряд. Две квартиры являются соседними, если их номера различаются ровно на 1. Некоторые квартиры могут быть уже заселёнными, остальные свободны и их можно купить.

    Максим часто ходит в гости к соседям, поэтому квартира является для него подходящей, если она свободна и есть хотя бы одна заселённая квартира, соседняя с ней. Максим знает, что в доме заселено k квартир, но какие именно, он пока не знает.

    Определите, каким может быть минимальное и максимальное число квартир, подходящих для Максима.

    Входные данные

    В единственной строке входных данных содержатся два целых числа n и k (1 ≤ n ≤ 109, 0 ≤ k ≤ n).

    Выходные данные

    Выведите минимально возможное и максимально возможное количество подходящих для Максима квартир.

    Примечание

    В примере из условия минимальное количество подходящих для Максима квартир достигается, если, например, заселены квартиры с номерами 1, 2 и 3, тогда подходит только квартира номер 4. Максимальное же количество достигается если, например, заселены квартиры с номерами 1, 3, 5, тогда подходят квартиры с номерами 2, 4 и 6.

    C. Одиннадцатилетие

    дп Комбинаторика математика *2400

    На одиннадцатый день рождения Боре подарили n карточек с числами. На i-й карточке написано число ai. Боря хочет выложить карточки в один ряд так, чтобы получилось одно большое число. Например, если у Бори есть карточки с числами 1, 31 и 12, и он выложит их в этом порядке, он получит число 13112.

    В свои 11 он уже знает, что всего существует n! способов вызложить карточки, но сегодня его интересуют только те способы, в результате которых, он получит число, которое делится на одиннадцать. Так, приведенный выше способ подходит, поскольку 13112 = 1192 × 11, а вот если он выложит карточки в последовательности 31, 1, 12, то он получит число 31112, которое не делится на 11, этот способ Боре не подходит. Помогите Боре посчитать количество таких способов.

    Даже если на двух карточках написаны одинаковые числа, Боря считает способы, которые отличаются обменом этих двух карточек, различными, например, если у Бори есть две карточки с числом 1, то он может выложить их на стол двумя способами.

    Помогите Боре, найдите число подходящих способов выложить карточки. Поскольку это количество может быть слишком большим, требуется вывести остаток от его деления на 998244353.

    Входные данные

    Входные данные содержат несколько тестов. Первая строка входных данных содержит число t — количество тестов (1 ≤ t ≤ 100). Далее следуют описания тестов.

    Каждый тест описывается двумя строками.

    Первая из них содержит целое число n (1 ≤ n ≤ 2000) — количество карточек, которое подарили Боре.

    Вторая строка содержит n чисел ai (1 ≤ ai ≤ 109) — числа, которые записаны на карточках.

    Гарантируется, что суммарное количество карточек во всех тестах одних входных данных не превышает 2000.

    Выходные данные

    Для каждого теста в отдельной строке выведите остаток от деления на 998244353 количества способов выложить карточки таким образом, чтобы получившееся число делилось на 11.

    A. k-Округление

    математика Перебор теория чисел *1100

    Для заданного натурального числа n его k-округлением назовём такое минимальное целое положительное число x, что x заканчивается на k или более нулей в системе счисления по основанию 10 и одновременно делится на n.

    Например, 4-округлением числа 375 будет число 375·80 = 30000. Число 30000 — минимальное такое число, которое заканчивается на 4 или более нуля и делится на 375.

    Напишите программу, которая осуществляет k-округление числа n.

    Входные данные

    В единственной строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 109, 0 ≤ k ≤ 8).

    Выходные данные

    Выведите k-округление числа n.

    B. Ленивый охранник

    геометрия математика Перебор *1000

    Ваш друг недавно устроился работать в охранную компанию. Каждый охранник в компании отвечает за область города из ровно N кварталов, причем область он может выбирать сам. Это значит, что вашему другу предстоит патрулировать вдоль периметра какой-нибудь области площадью ровно N кварталов. Он хочет облегчить себе жизнь, и просит вас помочь ему найти кратчайший маршрут для патрулирования. Город можно считать бесконечной квадратной сеткой.

    Входные данные

    Входной файл содержит единственное число N (1 ≤ N ≤ 106) — число кварталов, которое должен окружать маршрут.

    Выходные данные

    Минимальный периметр, которого можно достичь.

    Примечание

    Вот некоторые из возможных маршрутов для примеров:

    G. Круг чисел

    математика *3000

    n расположенных на равном расстоянии точек отмечены на окружности. Около каждой точки написано число. Вы можете выбрать любое вещественное число k. Затем вы можете несколько раз выбирать множество из 2 или более точек, расположенных на равных расстояниях по окружности, и либо увеличивать все числа, написанные около точек множества, на k, либо уменьшать на k. Вы хотите сделать так, чтобы все числа были равны 0. Возможно ли это?

    2 точки расположены на окружности на равных расстояниях, если они диаметрально противоположны. 3 и более точки расположены на окружности на равных расстояниях, если они образуют правильный многоугольник.

    Входные данные

    Первая строка содержит целое число n (3 ≤ n ≤ 100000) — количество точек на окружности.

    Следующая строка содержит строку s из ровно n цифр, каждая цифра равна числу, написанному около очередной точки, по часовой стрелке.

    Выходные данные

    Выведите «YES» (без кавычек), если существует последовательность операций, обращающая все числа в 0, и «NO» (без кавычек) иначе.

    Вы можете выводить каждую букву в любом регистре (заглавную или строчную).

    Примечание

    Если мы пронумеруем точки от 1 до n, то в первом примере мы можем выбрать k = 1. Затем увеличим числа в точках 7 и 22 на 1, затем уменьшим числа в точках 7, 17, и 27 на 1, затем уменьшим числа в точках 4, 10, 16, 22, и 28 на 1.

    A. Отражение

    математика *1600

    Для натурального числа n рассмотрим его отражение — число ψ(n), которое получается из n заменой каждой цифры a в десятичной записи n на цифру (9 - a). Например, отражение числа 192 равняется 807. Отметим, что лидирующие нули (если они возникнут) должны быть отброшены. Так, отражение 9 равно 0, отражение 91 равно 8.

    Определим вес числа как произведение числа и его отражения. Так, вес числа 10 равен 10·89 = 890.

    Ваша задача — найти максимальный вес среди чисел заданного интервала [l, r] (границы включаются).

    Входные данные

    В единственной строке через пробел записано два целых числа l и r (1 ≤ l ≤ r ≤ 109) — границы интервала.

    Выходные данные

    Выведите единственное целое число: максимум произведения n·ψ(n), где l ≤ n ≤ r.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

    Примечание

    В третьем примере вес числа 8 равен 8·1 = 8, вес числа 9 равен 9·0 = 0, вес числа 10 равен 890.

    Таким образом, максимальный вес равняется 890.

    B. И снова тетрис

    жадные алгоритмы Конструктив математика Паросочетания *2200

    В редких перерывах между поисками теории всего физик Воль играет в расслабляющую игру — модифицированный им тетрис.

    Компьютер выдает Волю прямоугольное игровое поле n × m, на котором некоторые клетки пустые, остальные же заполнены. Игровая панель рядом с полем содержит изображения всевозможных связных фигурок, содержащих от двух до пяти клеток. Здесь мы рассматриваем только связные по стороне фигурки. Фигурки можно копировать с игровой панели на поле, заполняя ими пустые клетки. Разумеется, каждую фигурку можно использовать сколько угодно раз.

    Задача Воля — заполнить все поле так, чтобы на нем не осталось пустых клеток.

    Каждая изначально свободная клетка должна оказаться покрыта ровно одной клеткой некоторой фигурки. Каждая фигурка должна полностью находиться на игровом поле.

    На рисунке черные клетки — изначально заполненные клетки поля, а одноцветные связные области — фигурки.

    Входные данные

    Первая строка содержит целые числа n и m (1 ≤ n, m ≤ 1000), n и m — высота и ширина поля соответственно. Следующие n строк содержат по m символов каждая. Они естественным образом описывают поле: j-ый символ i-ой строки равен «#», если соответствующая клетка поля занята, и «.», если соответствующая клетка поля свободна и должна быть покрыта некоторой фигуркой.

    Выходные данные

    Если поле заполнить невозможно, выведите единственной число «-1» (без кавычек). Иначе выведите любое заполнение поля фигурками в формате, совпадающем с входным, где все «.» (пустые клетки) заменены описанием фигурок следующим образом (см. примеры): каждая фигурка должна быть выведена конкретной цифрой, при этом касающимся по стороне фигуркам должны соответствовать разные цифры.

    Примечание

    В третьем примере невозможно заполнить пустую клетку, у которой нет пустых соседей.

    В четвертом примере ничего заполнять не нужно, поэтому надо вывести исходное поле.

    D. Мощный массив

    математика реализация Структуры данных *2200

    Имеется массив натуральных чисел a1, a2, ..., an. Рассмотрим некоторый его подмассив al, al + 1, ..., ar, где 1 ≤ l ≤ r ≤ n, и для каждого натурального числа s обозначим через Ks число вхождений числа s в этот подмассив. Назовем мощностью подмассива сумму произведений Ks·Ks·s по всем различным натуральным s. Так как количество различных чисел в массиве конечно, сумма содержит лишь конечное число ненулевых слагаемых.

    Необходимо вычислить мощности каждого из t заданных подмассивов.

    Входные данные

    Первая строка содержит два целых числа n и t (1 ≤ n, t ≤ 200000) — длина массива и количество запросов соответственно.

    Вторая строка содержит n натуральных чисел ai (1 ≤ ai ≤ 106) — элементы массива.

    Следующие t строк содержат по два натуральных числа l и r (1 ≤ l ≤ r ≤ n) — индексы левого и правого концов соответствующего подмассива.

    Выходные данные

    Выведите t строк, где i-ая строка содержит единственное натуральное число — мощность подмассива i-го запроса.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

    Примечание

    Рассмотрим следующий массив (см. пример 2) и его подмассив [2, 7] (цветом выделены элементы подмассива):

    Тогда K1 = 3, K2 = 2, K3 = 1, и мощность равна 32·1 + 22·2 + 12·3 = 20.

    E. Длинная последовательность

    математика матрицы Перебор *2700

    Будем называть рекуррентной двоичной последовательностью бесконечную последовательность (a0, a1, ...) из нулей и единиц, задающуюся соотношением:

    an = c1·an - 1 + c2·an - 2 + ... + ck·an - k (mod 2), 
    где — заранее фиксированные коэффициенты и n ≥ k. Будем считать, что не все ci нули.

    Заметим, что такая последовательность однозначно восстанавливается из любого своего k-кортежа {as, as + 1, ..., as + k - 1}, поэтому в частности она является периодической. Более того, если в кортеже содержатся только нули, тогда и сама последовательность состоит лишь из нулей, что не очень-то интересно. В противном случае, период последовательности не превосходит 2k - 1, так как любой k-кортеж однозначно определяет следующий элемент, и существует всего 2k - 1 ненулевых k-кортежей. Будем называть последовательность длинной, если ее минимальный период в точности равен 2k - 1. Вам требуется по данному k предъявить длинную последовательность или определить, что ее не существует.

    Входные данные

    В единственной строке содержится одно целое число k (2 ≤ k ≤ 50).

    Выходные данные

    Если для данного k не существует длинной последовательности, выведите одно число «-1» (без кавычек). Иначе первая строка вывода должна содержать коэффициенты: c1, c2, ..., ck. Вторая строка должна содержать первые k элементов последовательности: a0, a1, ..., ak - 1. Все числа (элементы и коэффициенты) должны быть 0 или 1, причем хотя бы один коэффициент должен быть 1.

    Если решений несколько, выведите любое.

    Примечание

    1. В первом случае: c1 = 1, c2 = 1, поэтому an = an - 1 + an - 2 (mod 2). Получается последовательность:

    с периодом 3 = 22 - 1.

    2. В втором случае: c1 = 0, c2 = 1, c3 = 1, поэтому an = an - 2 + an - 3 (mod 2). Последовательность имеет вид:

    ее период равен 7 = 23 - 1.

    Периоды окрашены в разные цвета.

    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], изменив два числа — эта перестановка лексикографически минимальная из всех подходящих перестановок.

    Во втором примере ничего изменять не нужно, так как данный массив является перестановкой.

    F. Яичная рулетка

    meet-in-the-middle битмаски математика Перебор разделяй и властвуй *3300

    В Яичную рулетку играют два игрока. Изначально 2R сырых яйца и 2C вареных яйца кладутся в коробку в случайном порядке. Яйца все еще в скорлупе, поэтому невозможно отличить сырое яйцо от вареного. По одному игроки выбирают одно яйцо и разбивают его о свой лоб. Если яйцо было вареное, ничего особенного не произойдет, но если оно было сырое, то оно все испачкает. Такое продолжается до тех пор, пока один из игроков не разобьет R сырых яиц. В этот момент игра заканчивается, этот игрок объявляется проигравшим, а его соперник — победителем.

    Порядок, в котором ходят игроки, может быть представлен как строка из букв «A» и «B», где i-й символ обозначает игрока, который будет выбирать i-е яйцо. Традиционно игроки ходят по очереди, то есть, они следуют порядку «ABABAB...». Это не очень честно, так как второй игрок будет выигрывать чаще, чем первый. Мы хотим, чтобы вы нашли более честный порядок ходов. Определим нечестность порядка как модуль разности между вероятностью победы первого игрока и вероятностью победы второго игрока. Нам интересны порядки, в которых нечестность является минимально возможной. Мы считаем порядок корректным, если в нем одинаковое количество букв «A» и «B».

    Вам будет дана строка S длины 2(R + C), содержащая только символы «A», «B» и «?». Порядок подходит под S, если он отличается от S только в позициях, где S содержит «?». Среди корректных порядков, минимизирующих нечестность, сколько подходят под S?

    Входные данные

    Первая строка содержит целые числа R и C (1 ≤ R, C ≤ 20, R + C ≤ 30).

    Вторая строка содержит строку S, имеющею длину 2(R + C) и состоящую только из символов «A», «B», «?».

    Выходные данные

    Выведите количество корректных порядков, которые минимизируют нечестность и подходят под S.

    Примечание

    В первом тесте из примере минимальная нечестность равна 0, а порядки, минимизирующие ее, это «ABBA» и «BAAB», но ни один из них не подходит под S. Заметьте, что порядок «ABBB» также имеет нечестность 0, но он не является корректным, так как не содержит одинаковое число «A» и «B».

    Во втором примере единственно подходящим порядком является «BBAAABABABBA».

    G. Цветы и шоколад

    Комбинаторика математика матрицы *3300

    Скоро день рождения Piegirl, поэтому Pieguy решил купить ей букет цветов и корзинку шоколадок.

    В цветочном магазине есть F различных видов цветов. Цветы i-го типа всегда имеют pi лепестков. Pieguy решил купить букет из ровно N цветов. Он может покупать цветы одного и того же типа несколько раз. Все N цветов составят букет. Важным обстоятельством является позиция цветка в букете. Вы можете считать, что букет — это упорядоченный список типов цветов.

    Шоколадный магазин продает шоколад в коробках. Всего есть B различных видов коробок. В коробке i-го типа находятся ci кусочков шоколада. Pieguy может купить сколько угодно коробок, в том числе несколько одного типа. Затем он положит все коробки в корзинку, при этом важен порядок. Вы можете считать, что корзинка описывается упорядоченным списком типов коробок.

    Pieguy знает, что Piegirl любит отрывать лепесток с цветка перед тем, как съесть кусочек шоколадки. Он хочет быть уверен, что она съест последний кусочек шоколадки из последней коробки сразу после того, как оторвет последний лепесток с последнего цветка. Другими словами, общее число лепестков в букете должно равняться общему числу кусочков шоколада в корзинке.

    Сколько различных комбинация букета и корзинки может купить Pieguy? Отрет может быть большим, поэтому выведите его по модулю 1000000007 = 109 + 7.

    Входные данные

    Первая строка содержит целые числа F, B и N (1 ≤ F ≤ 10, 1 ≤ B ≤ 100, 1 ≤ N ≤ 1018) — количество типов цветов, количество типов коробок и количество цветов в букете, соответственно.

    Вторая строка содержит F целых чисел p1, p2, ..., pF (1 ≤ pi ≤ 109) — количество лепестков на каждом из типов цветов.

    Третья строка содержит B целых чисел c1, c2, ..., cB (1 ≤ ci ≤ 250) — количество кусочков шоколада в каждой из коробок.

    Выходные данные

    Выведите число комбинаций букета и корзинки, которые может купить Pieguy по модулю 1000000007 = 109 + 7.

    Примечание

    В первом примере есть 1 способ сделать букет с 9 лепестками (3 + 3 + 3), и 1 способ сделать корзинку с 9 кусочками шоколада (3 + 3 + 3), итого 1 комбинация. Есть 3 способа сделать букет с 13 лепестками (3 + 5 + 5, 5 + 3 + 5, 5 + 5 + 3), и 5 способов сделать корзинку с 13 кусочками шоколада (3 + 10, 10 + 3, 3 + 3 + 7, 3 + 7 + 3, 7 + 3 + 3), что дает еще 15 комбинаций. Кроме того, если 1 способ сделать букет с 15 лепестками (5 + 5 + 5) и 1 способ сделать корзинку с 15 кусочками шоколада (3 + 3 + 3 + 3 + 3), что дает еще 1 комбинацию.

    Обратите внимание, что возможно существование нескольких типов цветов с одинаковым количеством лепестков. Такие типы все равно считаются различными. Аналогично, разные типы коробок тоже могут содержать равное число кусочков шоколада, но они считаются различными.

    G. Пещеры Эль-Толль

    математика *3300

    Досторические пещеры Эль Толль расположены в Мойя (Барселона). Вы узнали, что в одном из n тайников в пещерах спрятано сокровище. Можно считать, что вероятность найти сокровище в каждом из тайников равна 1 / n.

    Вы не можете попасть в пещеру сами, но вы построили робота, который может искать сокровище в пещерах. Каждый день вы можете послать робота обыскать ровно k различных тайников. Если ни в одном из них нет сокровища, то, очевидно, робот вернется ни с чем. В пещерах очень темно, поэтому робот может не найти сокровище, даже если будет обыскивать правильный тайник. Формально, если один из обыскиваемых тайников содержит сокровище, робот найдет его с вероятностью 1 / 2, иначе он вернется ни с чем. Каждый раз, когда робот обыскивает тайник с сокровищем, вероятность его успеха не зависит от всех предыдущих попыток (то есть, вероятность не найти сокровище за x попыток обыскать правильный тайник равна 1 / 2x).

    Каково среднее количество дней, которое понадобится для того, чтобы найти сокровище при оптимальном выборе порядка обыска тайников? Выведите ответ в виде рационального числа по модулю 109 + 7. Формально, пусть ответ имеет вид несократимой дроби P / Q, тогда вам требуется вывести число . Гарантируется, что Q не делится на 109 + 7.

    Входные данные

    В первой строке записано число тестов T (1 ≤ T ≤ 1000).

    Каждая из следующих T строк содержит два целых числа n и k (1 ≤ k ≤ n ≤ 5·108) для очередного теста.

    Выходные данные

    Для каждого теста выведите ответ на отдельной строке.

    Примечание

    В первом примере робот будет последовательно обыскивать единственный тайник. Среднее число попыток в этом случае равно 2. Обратите внимание, что несмотря на то, что мы точно знаем, где находится сокровище, роботу все равно придется возвращаться в тайник, пока он успешно не найдет там сокровище.

    Во втором примере ответ равен 7 / 2, если робот будет обыскивать тайники по очереди. В третьем тесте ответ равен 25 / 9.

    B. Вечное бессмертие

    математика *1100

    Даже если мир полон противоречий, я все равно буду считать его прекрасным.

    У феникса довольно долгая жизнь, и он возрождается каждые a! лет. Здесь a! означает факториал числа a, то есть a! = 1 × 2 × ... × a. В частности, 0! = 1.

    Коёми это не очень интересует, но перед тем, как он погрузится в дневные заботы, ему хотелось бы знать, сколько раз феникс возродится за b! лет, то есть величина . Обратите внимание, при b ≥ a эта величина всегда целая.

    Так как ответ может быть довольно большим, Коёми интересует лишь последняя цифра этого числа. Помогите Коёми.

    Входные данные

    В первой строке содержатся два целых числа a и b (0 ≤ a ≤ b ≤ 1018).

    Выходные данные

    Выведите единственное число — последнюю цифру величины, интересующей Коёми.

    Примечание

    В первом тестовом примере последняя цифра равна 2.

    Во втором тестовом примере последняя цифра равна 0.

    В третьем тестовом примере последняя цифра равна 2.

    C. Интригующая одержимость

    дп Комбинаторика математика *1800

    — Это не игра, а долг союзников справедливости, Нии-тян!

    — Не союзников, а самого правосудия, Онии-тян!

    Возьмитесь за руки и идите куда угодно, быстрее скорости мысли! На этот раз Сёстры Огня Карен и Цукихи направляются туда, где они ещё не были, — на окружённые водой острова!

    Есть три группы островов, покрашенные в красный, голубой и фиолетовый цвета. Группы состоят из a, b и c островов, соответственно.

    Мосты были построены между некоторыми парами островов. Возможно, что все пары островов соединены мостами или же нет ни одного моста. Мост соединяет два различных острова и имеет длину 1. По мосту можно перемещаться в обе стороны. Для каждой пары различных островов одного цвета должно быть выполнено, что расстояние между ними по мостам не менее 3 или же невозможно добраться с одного острова до другого по мостам.

    Сёстры Огня готовы к любым неожиданностям, но они также хотят проверить ваше мужество. От вас требуется узнать количество различных способов построить мосты между островами, чтобы они удовлетворяли данным ограничениям по модулю 998 244 353. Два способа считаются различными, если существует пара островов, такая, что между этими островами есть мост в одном способе и нет в другом.

    Входные данные

    В первой строке входного файла содержатся три целых числа a, b и c (1 ≤ a, b, c ≤ 5 000) — число островов в красной, голубой и фиолетовых группах, соответственно.

    Выходные данные

    Выведите одно число — количество способов построить мосты по модулю 998 244 353.

    Примечание

    В первом примере могут быть построены 3 моста и любое их подмножество будет корректным способом. Поэтому ответ равен 23 = 8.

    Во втором примере два корректных способа постройки мостов изображены на картинке сверху, а два некорректных способа — на картинке снизу.

    A. Поезда

    математика реализация *1500

    Вася живет посередине Программистской ветки метро. У него есть две девушки: Даша и Маша, живущие на разных концах ветки, каждая не ведающая о существовании другой.

    Когда у Васи появляется свободное время, он едет к одной из своих девушек. Он спускается в метро в некоторый момент времени, ждет первый поезд и едет на нем до конца ветки к соответствующей девушке. Однако поезда ходят с разной частотой: в Дашином направлении станцию проезжает один поезд в a минут, а в Машином — один поезд в b минут. В случае, если поезда подошли одновременно, Вася едет в направлении с меньшей частотой хождения поездов, то есть к той девушке, в чью сторону поезда ходят реже (см. пояснение к третьему примеру).

    Известно, что поезда начинают свое хождение одновременно до появления Васи. То есть расписание поездов таково, что существует момент времени, когда два поезда приезжают одновременно.

    Помогите Васе посчитать, к какой девушке он будет попадать чаще.

    Входные данные

    В первой строке записано два целых числа a и b (a ≠ b, 1 ≤ a, b ≤ 106).

    Выходные данные

    Выведите «Dasha», если Вася будет чаще попадать к Даше, «Masha», если к Маше, и «Equal», если одинаково часто к обеим девушкам.

    Примечание

    Разберем третий пример.

    Пусть поезда начали свое хождение в нулевой момент времени. Понятно, что моменты прибытия поездов будут периодичны с периодом 6. Поэтому достаточно показать, что спускаясь в метро в момент времени внутри полуинтервала (0, 6], он будет попадать к обеим девушкам одинаково часто.

    Если он спустился в момент от 0 до 2, он уезжает к Даше на поезде, прибывающем ко второй минуте.

    Если он спустился в момент от 2 до 3, он уезжает к Маше на поезде, прибывающем к третьей минуте.

    Если он спустился в момент от 3 до 4, он уезжает к Даше на поезде, прибываюшем к четвертой минуте.

    Если он спустился в момент от 4 до 6, то он дожидается прибытия обоих поездов к шестой минуте и уезжает к Маше, потому что в ее направлении поезда ходят реже.

    Суммарно на Дашу и Машу приходится поровну — по три минуты, значит к обеим девушкам он будет попадать одинаково часто.

    C. Интересная игра

    дп игры математика *2000

    Два лучших друга Сережа и Гена играют в игру.

    Изначально на столе находится одна кучка из n камней. За один ход нужно взять одну кучку и разбить ее на произвольное число кучек размерами a1 > a2 > ... > ak > 0 камней так, что a1 - a2 = a2 - a3 = ... = ak - 1 - ak = 1. Естественно, количество кучек k должно быть не меньше двух.

    Друзья делают ходы по очереди. Проигрывает тот, кто не может сделать ход. Начинает Сережа. Кто выиграет при оптимальной игре обоих?

    Входные данные

    В единственной строке записано одно целое число n (1 ≤ n ≤ 105).

    Выходные данные

    Если выигрывает Сережа, выведите k — минимальное число кучек, на которое он может разбить исходную первым ходом при выигрышной стратегии.

    Если выигрывает Гена, выведите «-1» (без кавычек).

    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 меньше любого составного числа, поэтому для них не существует корректных разбиений.

    A. Дежурство по классу

    математика Перебор *1200

    Восьмиклассник Вова сегодня дежурит по классу. После уроков он зашёл в кабинет, чтобы вымыть доску, и обнаружил на ней число n. На вопрос о происхождении этого числа учительница математики Инна Петровна ответила Вове, что n является ответом на задание по арифметике для первоклассников. В учебнике было дано некоторое целое положительное число x. Задача состояла в том, чтобы сложить x с суммой цифр числа x, записанного в десятичной системе счисления.

    Поскольку число n на доске было небольшим, Вова быстро догадался, какое число x могло быть в учебнике. Теперь ему хочется получить программу, которая будет для произвольных значений числа n искать все подходящие значения x или определять, что таких x не существует. Напишите для Вовы такую программу.

    Входные данные

    В первой строке находится целое число n (1 ≤ n ≤ 109).

    Выходные данные

    В первой строке выведите одно целое число k — количество различных значений x, удовлетворяющих условию. В следующих k строках выведите сами значения по одному в строке в порядке возрастания.

    Примечание

    В первом примере значение x = 15 является единственным возможным вариантом: 15 + 1 + 5 = 21.

    Во втором примере удовлетворяющих условию значений x не существует.

    A. Поход за едой

    математика *900

    Винни-Пух очень любит мёд! Именно поэтому он решил сходить в гости к своим друзьям. У Винни три лучших друга: Кролик, Сова и ослик Иа-Иа, каждый из которых живёт в своём домике.

    Между каждой парой домиков есть извилистые тропинки. Длина тропинки между домами Кролика и Совы составляет a метров, между домами Кролика и ослика Иа-Иа b метров, между домами Совы и ослика Иа-Иа c метров.

    Чтобы быть довольным жизнью и петь весёлые песенки, Винни-Пуху достаточно подкрепиться n раз в течение дня. Сейчас он находится в домике Кролика и подкрепляется первый раз. Каждый раз, когда в доме друга, у которого Винни находится в текущий момент, подходят к концу запасы мёда, а Винни ещё не поел нужное число раз, он выходит из дома и направляется к кому-то из других двух своих друзей. Для этого он выбирает одну из двух выходящих тропинок, проходит по ней до домика на другом конце и заходит в гости к живущему там другу. Можно считать, что пока Винни ест у одного из своих друзей, опустошённые запасы мёда других друзей восстанавливаются (скорее всего, они ходят в магазин).

    Винни-Пух не любит физические нагрузки. Он хочет подкрепиться n раз, пройдя при этом минимальное суммарное расстояние. Помогите ему найти это расстояние.

    Входные данные

    Первая строка содержит число n (1 ≤ n ≤ 100) — количество визитов в гости.

    Вторая строка содержит число a (1 ≤ a ≤ 100) — расстояние между домами Кролика и Совы.

    Третья строка содержит число b (1 ≤ b ≤ 100) — расстояние между домами Кролика и ослика Иа-Иа.

    Четвертая строка содержит число c (1 ≤ c ≤ 100) — расстояние между домами Совы и ослика Иа-Иа.

    Все числа во входных данных целые.

    Выходные данные

    Выведите одно число — минимальное расстояние в метрах, которое Винни Пух должен пройти, чтобы покушать n раз.

    Примечание

    В первом тесте из условия оптимальный маршрут для Винни-Пуха — сначала подкрепиться в доме у Кролика, затем в доме у Совы, и наконец в доме у Иа-Иа. Таким образом он пройдёт расстояние 2 + 1 = 3.

    Во втором тесте из условия Винни-Пух подкрепляется в доме у Кролика, и этого достаточно, чтобы наесться. Таким образом ему вообще не надо никуда перемещаться.

    B. Кратность разностей

    математика реализация теория чисел *1300

    Дан набор из n целых чисел. Требуется выбрать из них ровно k чисел таким образом, что разность любых двух выбранных чисел будет делиться на m, либо определить, что это сделать невозможно.

    Числа могут повторяться как в исходном наборе, так и среди выбранных чисел, но количество вхождений любого числа среди выбранных не должно превосходить количества его вхождений в исходный набор.

    Входные данные

    В первой строке входных данных находятся три целых числа n, k и m (2 ≤ k ≤ n ≤ 100 000, 1 ≤ m ≤ 100 000) — количество чисел в наборе, количество чисел, которые нужно выбрать, и требуемый делитель разности любых двух выбранных чисел.

    Во второй строке входных данных находятся n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109) — числа в наборе.

    Выходные данные

    Если выбрать k чисел требуемым образом невозможно, то в единственной строке выведите «No» (без кавычек).

    Иначе, в первой строке выходных данных выведите «Yes» (без кавычек). Во второй строке выведите k целых чисел b1, b2, ..., bk — выбранные числа. Если существует несколько подходящих решений, выведите любое из них.

    D. Packmen Strike Back

    Бинарный поиск дп математика *2500

    Game field is represented by a line of n square cells. In some cells there are packmen, in some cells there are asterisks and the rest of the cells are empty. Packmen eat asterisks.

    Before the game starts you can choose a movement direction, left or right, for each packman. Once the game begins all the packmen simultaneously start moving according their directions. A packman can't change the given direction.

    Once a packman enters a cell containing an asterisk, packman immediately eats the asterisk. Once the packman leaves the cell it becomes empty. Each packman moves at speed 1 cell per second. If a packman enters a border cell, the packman stops. Packmen do not interfere with the movement of other packmen; in one cell there can be any number of packmen moving in any directions.

    Your task is to assign a direction to each packman so that they eat the maximal number of asterisks. If there are multiple ways to assign directions to eat the maximal number of asterisks, you should choose the way which minimizes the time to do that.

    Input

    The first line contains integer number n (2 ≤ n ≤ 1 000 000) — the number of cells in the game field.

    The second line contains n characters. If the i-th character is '.', the i-th cell is empty. If the i-th character is '*', the i-th cell contains an asterisk. If the i-th character is 'P', the i-th cell contains a packman.

    The field contains at least one asterisk and at least one packman.

    Output

    Print two integer numbers — the maximal number of asterisks packmen can eat and the minimal time to do it.

    Note

    In the first example the leftmost packman should move to the right, the rightmost packman should move to the left. All the asterisks will be eaten, the last asterisk will be eaten after 4 seconds.

    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.

    E. Максимум в массиве

    дп Комбинаторика математика *2400

    Как-то раз Петя решал очень интересную задачу. Однако, какие бы оптимизации Петя ни применял, его решение всё равно получало вердикт Time limit exceeded. После тщательного анализа кода он обнаружил, что проблема заключается в его функции поиска максимума в массиве из n положительных чисел, которая работала слишком долго. В отчаянии Петя решил добавить весьма неожиданное отсечение с параметром k, после чего функция приняла следующий вид:


    int fast_max(int n, int a[]) {
    int ans = 0;
    int offset = 0;
    for (int i = 0; i < n; ++i)
    if (ans < a[i]) {
    ans = a[i];
    offset = 0;
    } else {
    offset = offset + 1;
    if (offset == k)
    return ans;
    }
    return ans;
    }

    Таким образом, функция последовательно перебирает элементы массива, поддерживая текущий максимум, при этом если после k последовательных итераций этот максимум не изменился, то текущий максимум возвращается как ответ.

    Теперь Пете стало интересно, как часто его функция даёт неверный ответ. Он просит вас посчитать количество перестановок чисел от 1 до n таких, что результат работы его функции на этих перестановках не равен n. Так как ответ может быть большим, выведите его по модулю 109 + 7.

    Входные данные

    В единственной строке находятся два целых числа n и k (1 ≤ n, k ≤ 106), разделённые пробелом — размер перестановок и параметр k соответственно.

    Выходные данные

    Выведите количество перестановок, на которых функция Пети выдаёт неправильный ответ, взятое по модулю 109 + 7.

    Примечание

    Искомые перестановки из второго примера:

    [4, 1, 2, 3, 5], [4, 1, 3, 2, 5], [4, 2, 1, 3, 5], [4, 2, 3, 1, 5], [4, 3, 1, 2, 5], [4, 3, 2, 1, 5].

    D. Почти тождественные перестановки

    дп Комбинаторика математика *1600

    Перестановка p размера n — такой массив, что каждое целое число от 1 до n встречается ровно один раз в этом массиве.

    Будем называть почти тождественными такие перестановки, что для каждой из них существует как минимум n - k индексов i (1 ≤ i ≤ n), таких, что pi = i.

    Вам необходимо подсчитать количество почти тождественных перестановок для заданных n и k.

    Входные данные

    В первой строке записаны два числа — n и k (4 ≤ n ≤ 1000, 1 ≤ k ≤ 4).

    Выходные данные

    Выведите число почти тождественных перестановок для заданных n и k.

    E. Модуль, модуль и еще раз модуль

    Бинарный поиск дп математика *3000

    Вам дана последовательность целых чисел a1, a2, ..., an. Пусть , а для всех 1 ≤ i < n. В данных определениях операция означает взятие остатка от деления. Найдите максимальное значение f(x, 1) среди всех неотрицательных целых x.

    Входные данные

    Первая строка содержит целое число n (1 ≤ n ≤ 200000) — длину последовательности.

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1013) — элементы последовательности.

    Выходные данные

    Выведите одно целое число — максимальное значение f(x, 1) среди всех неотрицательных целых значений x.

    Примечание

    В первом примере можно выбрать, например, x = 19.

    Во втором примере можно выбрать, например, x = 3 или x = 2.

    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 операций.

    E. Похоть

    Комбинаторика математика матрицы *3000

    Вам дана последовательность из n целых чисел. Также у вас есть переменная res, которая изначально равна 0. Следующая операция выполняется k раз.

    Выбирается индекс от 1 до n равновероятно случайным образом, назовем его x. К переменной res прибавляется произведение всех ai таких, что 1 ≤ i ≤ n, но i ≠ x. Затем из ax вычитается 1.

    Найдите математическое ожидание величины res в конце процесса. Можно показать, что ожидаемое значение величины res может быть представлено как несократимая дробь . Вам необходимо найти значение .

    Входные данные

    Первая строка содержит два целых числа n и k (1 ≤ n ≤ 5000, 1 ≤ k ≤ 109) — количество элементов и параметр k, описанный в условии.

    Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109).

    Выходные данные

    Выведите одно целое число — значение .

    E. Подсчет массивов

    дп Комбинаторика математика теория чисел *2000

    Вам заданы два целых положительных числа x и y. Массив F называется y-факторизацией числа x тогда и только тогда, когда выполняется следующие условия:

    • В массиве F ровно y элементов, все они являются целыми числами;
    • .

    Посчитайте количество попарно различных массивов, являющихся y-факторизациями числа x. Два массива A и B считаются различными, если существует хотя бы одна позиция i (1 ≤ i ≤ y) такая, что Ai ≠ Bi. Так как ответ может быть очень большим, выведите его по модулю 109 + 7.

    Входные данные

    В первой строке записано одно целое число q (1 ≤ q ≤ 105) — количество запросов.

    Затем идут q строк, в каждой записаны по два целых числа xi и yi (1 ≤ xi, yi ≤ 106). Каждая из этих строк представляет собой один запрос.

    Выходные данные

    Выведите q целых чисел. i-е число должно быть ровно количеству yi-факторизаций числа xi по модулю 109 + 7.

    Примечание

    Во втором запросе из примере есть 6 y-факторизаций:

    • { - 4,  - 1};
    • { - 2,  - 2};
    • { - 1,  - 4};
    • {1, 4};
    • {2, 2};
    • {4, 1}.

    B. Ральф и его магическое поле

    Комбинаторика Конструктив математика теория чисел *1800

    У Ральфа есть магическое поле, которое разделено на n × m блоков. А именно, на поле есть n строк и m столбцов. Ральф хочет в каждый блок поставить целое число. Однако, магическое поле не всегда работает правильно. Оно работает, только если произведение чисел в каждой строке и в каждом столбце равно k, где k может быть равно 1 или -1.

    Ральф хочет узнать количество способов поставить некоторые целые числа во все блоки так, чтобы магическое поле работало правильно. Два способа считаются различными, если и только если существует хотя бы один блок такой, что числа в нем в первом и втором способе различны. Вам необходимо вывести остаток от деления ответа на 1000000007 = 109 + 7.

    Обратите внимание, нет ограничения на целые числа, которые можно ставить в блоки, однако, можно показать, что ответ конечный.

    Входные данные

    Единственная строка содержит три целых числа n, m и k (1 ≤ n, m ≤ 1018, k равно 1 или -1).

    Выходные данные

    Выведите единственное число — остаток от деления ответа на 1000000007.

    Примечание

    В первом примере единственный способ — поставить -1 в единственный блок.

    Во втором примере единственный способ — поставить 1 в каждый блок.

    C. Марко и НОД-последовательность

    Конструктив математика *1900

    Во сне Марко встретил пожилого мужчину в темных очках. Мужчина сообщил ему ключ к бессмертию и затем исчез.

    Когда он проснулся, Марко помнил только то, что ключ был последовательностью целых чисел некоторой длиной n, но забыл саму последовательность. Пусть элементы последовательности были a1, a2, ..., an. Марко помнит, что он сосчитал gcd(ai, ai + 1, ..., aj) для всех 1 ≤ i ≤ j ≤ n и сложил эти числа в множество S. Здесь gcd обозначает наибольший общий делитель.

    Обратите внимание, если число добавляется во множество S больше одного раза, оно все равно будет там встречаться только один раз.

    Марко дал вам множество S и попросил найти исходную последовательность. Если есть несколько подходящих последовательностей, выведите любую. Возможно, что последовательностей, которые дают такое же множество S, не существует, в таком случае выведите -1.

    Входные данные

    Первая строка содержит одно целое число m (1 ≤ m ≤ 1000) — размер множества S.

    Вторая строка содержит m различных целых чисел s1, s2, ..., sm (1 ≤ si ≤ 106) — элементы множества S. Гарантируется, что элементы множества даны в строго возрастающем порядке, то есть s1 < s2 < ... < sm.

    Выходные данные

    Если решения не существует, выведите -1.

    Иначе в первой строке выведите одно число n — длину последовательности, n не должно превышать 4000.

    Во второй строке выведите n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106) — саму последовательность.

    Можно показать, что если решение существует, то также существует решение с n, не превосходящим 4000, и ai, не превосходящими 106.

    Если решений несколько, выведите любое.

    Примечание

    В первом примере 2 = gcd(4, 6), а остальные элементы из множества встречаются в последовательности. Кроме того, можно показать, что нет чисел, отличных от 2, 4, 6 и 12 среди всех gcd(ai, ai + 1, ..., aj) для всех 1 ≤ i ≤ j ≤ n.

    B. XK Отрезки

    Бинарный поиск математика сортировки *1700

    Пока Вася доедал свой кусок пиццы, пара уже началась. За опоздание на пару преподаватель предложил Васе поразмыслить над одной интересной задачей. Васе даны массив a и целое число x. Ему необходимо вычислить количество различных пар индексов (i, j) для которых ai ≤ aj и существует ровно k целых чисел y таких, что ai ≤ y ≤ aj и при этом y делится на x без остатка.

    В данной задаче считается, что пара (i, j) не равна паре (j, i), если j не равно i, то есть (1, 2) и (2, 1) это две разные пары.

    Входные данные

    Первая строка содержит 3 целых числа n, x, k (1 ≤ n ≤ 105, 1 ≤ x ≤ 109, 0 ≤ k ≤ 109), где n — это количество элементов в массиве a, а x и k — это числа из условия задачи.

    Вторая строка содержит n целых чисел ai (1 ≤ ai ≤ 109) — элементы массива a.

    Выходные данные

    Выведите одно целое число — ответ на задачу.

    Примечание

    В первом тесте подходят только следующие пары индексов: (1, 2), (2, 3), (3, 4).

    Во втором тесте подходят пары индексов (1, 1), (2, 2), (3, 3), (4, 4).

    В третьем тесте подходит любая пара индексов (i, j). Поэтому ответ равен 5 * 5 = 25.

    C. Квадратные подмножества

    битмаски дп Комбинаторика математика *2000

    Как и Вася, Петя опоздал на пару. Преподаватель также дал ему дополнительное задание. Для некоторого массива a необходимо вычислить количество различных способов выбрать некоторое непустое подмножество его элементов так, чтобы их произведение было равно квадрату некоторого натурального числа.

    Два способа считаются различными если различаются множества индексов элементов, выбранных в первом и во втором способах.

    Так как ответ может быть очень большим, необходимо вычислить лишь остаток от деления ответа на 109 + 7.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — размер массива.

    Вторая строка содержит n целых чисел ai (1 ≤ ai ≤ 70) — элементы массива.

    Выходные данные

    Выведите одно целое число — остаток от деления искомого количества способов на 109 + 7.

    Примечание

    В первом тесте произведение чисел выбираемых любым возможным способом равно 1. Так как 1 = 12, ответ равен 24 - 1 = 15.

    Во втором тесте можно получить произведение равное 16 одним способом и произведение равное 4 шестью способами. Поэтому ответ равен 6 + 1 = 7.

    D. Оценочная строка

    Комбинаторика математика Строки *2100

    В университете, где учится Вася, оценки представляют собой строки одинаковой длины, причем оценка x считается лучше чем y, если строка y лексикографически меньше строки x.

    Недавно в этом университете прошла важная контрольная, по которой Вася получил оценку a. Из-за большого количества студентов, преподаватель не может запомнить оценку каждого, но он точно помнит оценку b такую, что все студенты получили оценку строго меньше чем b.

    Вася недоволен своей оценкой и хочет её исправить. Для этого он может как угодно поменять местами символы в строке соответствующей его оценке. Сейчас Васю интересует количество различных способов улучшить свою оценку так, чтобы преподаватель не заподозрил неладного.

    Более формально: даны две строки одинаковой длины a и b, требуется вычислить количество различных строк c таких, что:

    1) c может быть получена из a путем перестановки некоторых символов, то есть c является перестановкой a

    2) a лексикографически меньше c

    3) c лексикографически меньше b

    Если длина строки x равна длине строки y, то x лексикографически меньше y, если существует такое i, что x1 = y1, x2 = y2, ..., xi - 1 = yi - 1, xi < yi.

    Так как ответ может быть очень большим, вычислите только остаток от деления ответа на 109 + 7.

    Входные данные

    В первой строке входных данных записана строка a, во второй строка b. Строки a, b состоят из маленьких букв латинского алфавита, их длины равны и не превосходят 106.

    Гарантируется, что строка a лексикографически меньше b.

    Выходные данные

    Требуется вывести одно целое число  — остаток от деления количества различных строк удовлетворяющих условию задачи на 109 + 7.

    Примечание

    В первом тесте из строки abc можно получить строки acb, bac, bca, cab, cba, все они больше строки abc, но меньше строки ddd. Поэтому ответ равен 5.

    Во втором тесте любая строка, которую можно получить из abcdef, будет больше строки abcdeg. Поэтому ответ равен 0.

    D. Нефрен и кинотеатр

    китайская теорема об остатках Комбинаторика математика теория чисел *2900

    Лахеш любит снимать фильмы, поэтому Нефлен помогает ей организовать кинотеатр, который называется кинотеатр 68.

    Однажды в кинотеатре 68 кончились деньги (у них нет купюр достоинством в 50 юаней в данный момент), но Нефлен всё равно хочет открыть его.

    В кассу кинотеатра приходят три типа покупателей: одни приносят ровно одну купюру достоинством в 50 юаней, вторые приносят ровно одну купюру достоинством в 100 юаней, поэтому Нефлен должна дать им сдачу одной купюрой в 50 юаней, а третьи приходят с VIP картой, поэтому не должны платить за билет.

    Сейчас n посетителей стоят снаружи кинотеатра в очереди. Нефлен хочет узнать, сколько возможных очередей могут быть таких, чтобы все люди смогли купить билет (то есть каждый покупатель мог получить сдачу, если она требуется), и чтобы после продажи билетов всем покупателям в кассе осталось не менее l и не более r купюр достоинством 50 юаней. Две очереди называются различными, если существует позиция, на которой в этих очередях стоят покупатели разного типа. Так как ответ может быть большим, выведите его по модулю p.

    Входные данные

    В первой строке содержатся четыре целых числа n (1 ≤ n ≤ 105), p (1 ≤ p ≤ 2·109), l and r (0 ≤ l ≤ r ≤ n).

    Выходные данные

    Выведите единственное число — ответ на задачу по модулю p.

    Примечание

    Обозначим буквами A, B и C покупателей с купюрой в 50 юаней, покупателей с купюрой в 100 юаней и покупателей с VIP картой, соответственно.

    В первом тестовом примере все возможные очереди, после которых в кассе останутся 2 купюры в 50 юаней выглядят так: AAAB, AABA, ABAA, AACC, ACAC, ACCA, CAAC, CACA и CCAA. Очереди, после которых в кассе останутся 3 купюры в 50 юаней выглядят так: AAAC, AACA, ACAA и CAAA. Таким образом, ответ в первом тестовом примере равен 13.

    Во втором тестовом примере существует 35 различных очередей.

    A. Округление

    математика реализация *800

    У Васи есть целое неотрицательное число n. Он хочет округлить его до ближайшего целого числа, которое оканчивается на 0. Если число n уже заканчивается на 0, то Вася считает его уже округлённым.

    Например, если n = 4722, то ответ равен 4720. Если n = 5, то Вася может округлить число как до 0, так и до 10, оба варианта являются правильными ответами.

    Определите результат округления Васей числа n.

    Входные данные

    В первой строке записано целое число n (0 ≤ n ≤ 109) — число Васи.

    Выходные данные

    Выведите результат округления Васей числа n. Обратите внимание, что в некоторых случаях ответ неоднозначен. В таком случае выведите любой из верных ответов.

    Примечание

    В первом примере n = 5. Ближайшими целыми числами, которые оканчиваются на ноль, являются числа 0 и 10. Любой из этих двух ответов будет считаться верным, поэтому вы можете вывести любое из двух чисел — 0 или 10.

    F. Восстановление выражения

    математика Перебор хэши *2300

    Было записано корректное выражение вида a+b=c, где a, b и c — целые неотрицательные числа, не содержащие лишних лидирующих нулей.

    В этом выражении были утеряны знаки плюс и равно. Перед вами стоит задача восстановить выражение.

    Иными словами, в заданную последовательность цифр надо вставить один знак '+' и один знак '=' так, чтобы:

    • знак '+' находился левее знака '=',
    • знаки '+' и '=' разбивали последовательность на три непустые состоящие из цифр части (пусть левая часть — это a, средняя часть — это b, а правая часть — это c),
    • все три части a, b и c не содержали лишних лидирующих нулей,
    • было верно равенство a+b=c.

    Гарантируется, что во всех предложенных тестах, ответ всегда существует.

    Входные данные

    В первой строке следует непустая строка, состоящая из цифр. Длина строки не превышает 106.

    Выходные данные

    Выведите восстановленное выражение. Если существует несколько решений, разрешается вывести любое из них.

    Обратите внимание, что в ответе сначала должны содержаться два слагаемых (разделённые символом '+'), а затем результат их сложения, перед которым должен стоять символ '='.

    Не нужно разделять числа и знаки операций пробелами. Строго следуйте формату выходных данных из примеров.

    Если удалить из ответной строки символ '+' и символ '=', то должна получиться строка, равная строке из входных данных.

    A. Разбиение на команды

    жадные алгоритмы Конструктив математика *800

    На тренировку по программированию пришли n групп студентов. В каждой группе либо один человек, которому не важно, с кем писать контест, либо два человека, которые обязательно хотят писать контест в одной команде.

    Тренер решил, что для тренировки соберёт команды ровно из трёх человек. Определите максимальное количество команд из трёх человек, которые смогут написать тренировку. Возможна ситуация, когда не все группы получится распределить в команды. Группы нужно брать целиком, т. е. в группе из двух человек либо оба пишут тренировку, либо оба не пишут. Если тренер берёт на тренировку группу из двух человек, то он обязательно должен определить их в одну команду.

    Входные данные

    В первой строке следует целое положительно число n (2 ≤ n ≤ 2·105) — количество групп студентов.

    Во второй строке следует последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 2), где ai равно количеству человек в i-й группе.

    Выходные данные

    Выведите максимальное количество команд из трёх человек, которые смогут написать контест.

    Примечание

    В первом примере тренер сможет набрать одну команду. Для этого он может, например, взять три группы из одного человека: группы с номерами один, два и четыре.

    Во втором примере тренеру не удастся набрать ни одной команды.

    В третьем примере тренер сможет собрать три команды. Например, он может сделать это так:

    • группа номер один (из двух человек) и группа номер семь (из одного человека)
    • группа номер два (из двух человек) и группа номер шесть (из одного человека)
    • группа номер три (из двух человек) и группа номер четыре (из одного человека)

    C. Разбиение чисел

    графы Конструктив математика *1300

    У Пети есть n целых чисел: 1, 2, 3, ..., n. Он хочет разбить все свои числа на две непустые группы таким образом, чтобы модуль разности сумм чисел в каждой группе был минимально возможным.

    Помогите Пети осуществить разбиение чисел. Каждое из n чисел должно быть ровно в одной группе.

    Входные данные

    В первой строке следует целое число n (2 ≤ n ≤ 60 000) — количество чисел Пети.

    Выходные данные

    Выведите в первую строку минимальный модуль разности сумм чисел в каждой группе после разбиения.

    Во вторую строку выведите размер первой части разбиения, а затем числа, которые должны быть в первой группе. Числа можно выводить в произвольном порядке. Если ответов несколько разрешается вывести любой из них.

    Примечание

    В первом примере нужно взять в первую группу числа 1 и 4, а во вторую 2 и 3. Тогда сумма в каждой группе будет равна 5, а абсолютная разность равна 0.

    Во втором примере всего два числа, а так как обе группы должны быть непустыми, то одно из чисел нужно взять в первую группу, а другое — во вторую. Тогда модуль разности между суммами чисел в каждой группе будет равен 1.

    D. Продажа лопат

    Конструктив математика *1800

    В магазине Поликарпа есть n лопат. Причём i-я лопата стоит i бурлей, то есть первая лопата стоит 1 бурль, вторая лопата стоит 2 бурля, третья лопата стоит 3 бурля, и так далее. Поликарп решил продавать лопаты парами.

    Покупатели охотнее покупают пару лопат, если их суммарная цена заканчивается на несколько цифр 9. По этой причине Поликарп решил выбрать пару лопат так, чтобы их суммарная цена оканчивалась на наибольшее возможное количество девяток. Например, если он выберет лопаты с ценами 12345 и 37454, то их суммарная цена будет равна 49799. Это число заканчивается на две девятки.

    Определите количество пар лопат, суммарная стоимость которых оканчивается на максимальное количество девяток. Две пары лопат считаются различными, если в одной паре есть лопата, которой нет в другой паре.

    Входные данные

    В первой строке следует целое число n (2 ≤ n ≤ 109) — количество лопат в магазине Поликарпа.

    Выходные данные

    Выведите количество пар лопат, суммарная стоимость которых оканчивается на максимальное количество девяток.

    Обратите внимание, что возможно, что наибольшее число девяток на конце равно 0, тогда все равно нужно посчитать все такие варианты.

    Гарантируется, что для любого n ≤ 109 ответ не превосходит 2·109.

    Примечание

    В первом примере максимальное количество девяток в конце суммы двух лопат равно единице. Для этого нужно продавать следующие пары лопат:

    • 2 и 7;
    • 3 и 6;
    • 4 и 5.

    Во втором примере максимальное количество девяток в конце суммы двух лопат равно единице. Для этого нужно продавать следующие пары лопат:

    • 1 и 8;
    • 2 и 7;
    • 3 и 6;
    • 4 и 5;
    • 5 и 14;
    • 6 и 13;
    • 7 и 12;
    • 8 и 11;
    • 9 и 10.

    В третьем примере нужно обязательно продавать лопаты 49 и 50, так как их сумма равна 99, то есть количество девяток равно двум, что является максимальным числом для n = 50.

    A. Бросок кубика

    математика Теория вероятностей *800

    Якко, Вакко и Дот, известные на весь мир анимашки, захотели отдохнуть от съёмок в мультфильмах и решили взять отпуск, чтобы немного попутешествовать. Якко мечтал поехать в Пенсильванию, свою родину и родину своих предков. Вакко склонялся к Тасмании, ее пляжам, солнцу и морю. Дот выбрала Трансильванию как самое таинственное и непредсказуемое место.

    Но, к их большому сожалению, отпуск оказался таким коротким, что его хватит для посещения только одного места из трёх вышеперечисленных. Поэтому Якко, как самый умный, предложил поистине гениальную идею: пусть каждый бросит обычный шестигранный кубик, а у кого выпадет больше очков — тот и повезёт всех в место своей мечты.

    Якко выбросил Y очков, Вакко — W очков. Осталась Дот. Но она не спешила. Дот хотела знать точно, с какой вероятностью ей удастся посетить Трансильванию.

    Известно, что Якко и Вакко — настоящие джентльмены, поэтому, в случае равенства количества их очков и очков Дот, предпочтение отдаётся Дот.

    Входные данные

    В единственной строке входного файла даны два натуральных числа Y и W — результаты бросков Якко и Вакко.

    Выходные данные

    Вывести искомую вероятность в виде несократимой дроби в формате «A/B», где A — числитель, а B — знаменатель. Если искомая вероятность равна нулю, выведите «0/1». Если искомая вероятность равна единице, выведите «1/1».

    Примечание

    Дот поедет в Трансильванию, если сможет выкинуть 4, 5 или 6 очков.

    C. Числа Хексадесимал

    математика Перебор реализация *1200

    Одним прекрасным июльским утром в Мэйнфрейме случилось очень страшное событие: злобный вирус Мегабайт каким-то образом открыл доступ к блоку памяти своей не менее злобной сестры Хексадесимал. Он загрузил в неё огромный поток из n различных натуральных чисел от 1 до n, чтобы получить полный контроль над её энергией.

    Но его план провалился по той простой причине, что Хексадесимал не воспринимала никакой информации, кроме чисел, записанных в двоичной системе счисления. Это значит, что если десятичная запись исходного числа содержала какие-то символы, отличные от 0 или 1, то оно не сохранялось в памяти. Теперь Мегабайт хочет узнать, сколько чисел было успешно загружено.

    Входные данные

    Входные данные содержат единственное число n (1 ≤ n ≤ 109).

    Выходные данные

    Выведите единственное число — ответ на задачу.

    Примечание

    Для n = 10 в ответ входят числа 1 и 10.

    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 минутам.

    B. Позиция в дроби

    математика теория чисел *1300

    У вас есть дробь . Найдите первое вхождение цифры c в десятичную запись этой дроби после десятичного разделителя (запятой).

    Входные данные

    В первой строке следуют три целых числа a, b, c (1 ≤ a < b ≤ 105, 0 ≤ c ≤ 9).

    Выходные данные

    Выведите первую позицию цифры c в дроби. Позиции нумеруются с 1 после десятичного разделителя. Если такой позиции не существует, выведите -1.

    Примечание

    Дробь в первом примере имеет вид: . Поэтому первый ноль после десятичного разделителя на второй позиции.

    Во втором примере дробь имеет вид: . В десятичном представлении этой дроби нет цифры 7.

    C. Уберите лишнего

    математика Перебор Структуры данных *1700

    Дана перестановка p длины n. Удалите один элемент из перестановки так, чтобы количество рекордов стало максимально возможным.

    Напоминаю, что в последовательности чисел a1, a2, ..., ak число ai называется рекордом, если для всех целых j (1 ≤ j < i) выполняется aj < ai.

    Входные данные

    Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 105) — длина перестановки.

    Следующая строка входных данных содержит n целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — перестановка. Все числа различные.

    Выходные данные

    Выведите единственное целое число — элемент перестановки, который требуется удалить, чтобы количество рекордов стало максимально возможным. Если таких элементов несколько, выведите минимальный из них.

    Примечание

    В первом примере можно удалить только один элемент.

    D. Необычные последовательности

    битмаски дп Комбинаторика математика теория чисел *2000

    Найдите количество различных последовательностей из строго положительных целых чисел a1, a2, ..., an (1 ≤ ai) таких, что gcd(a1, a2, ..., an) = x и . Так как ответ может быть большим, выведите остаток от его деления на 109 + 7.

    gcd здесь обозначает наибольший общий делитель.

    Входные данные

    В первой строке следуют два целых положительных числа x и y (1 ≤ x, y ≤ 109).

    Выходные данные

    Выведите количество искомых последовательностей по модулю 109 + 7.

    Примечание

    В первом примере подходят последовательности: (3, 3, 3), (3, 6), (6, 3).

    Во втором примере не подходит ни одна последовательность.

    B. НОД многочленов

    Конструктив математика *2200

    Допустим, у вас есть два многочлена и . Тогда многочлен можно единственным образом представить в виде

    Это может быть сделано делением в столбик. В этой записи обозначает степень многочлена P(x). при этом будем называть остатком от деления многочлена на многочлен и обозначать .

    Раз есть способ разделить один многочлен на другой с остатком, то можно определить и алгоритм Евклида для нахождения наибольшего общего делителя двух многочленов. Алгоритм определён таким образом, что он принимает пару многочленов , а затем если многочлен нулевой, то алгоритм возвращает многочлен , а иначе возвращает результат выполнения алгоритма для пары . На каждом шаге степень второго аргумента уменьшается, поэтому алгоритм отработает за конечное число шагов. Но насколько большим оно может быть? Это вам и предстоит выяснить.

    Вам дано число n. Вам нужно вывести два многочлена степени не выше n таких, что их коэффициенты — целые числа, не превышающие 1 по абсолютной величине, при этом старший коэффициент (при максимальной степени x) должен быть равен единице, и вычисление их наибольшего общего делителя потребует ровно n шагов алгоритма Евклида. Кроме того, степень первого многочлена должна быть больше степени второго. Шагом алгоритма Евклида мы называем переход от к .

    Входные данные

    На вход дано единственное целое число n (1 ≤ n ≤ 150)  — число шагов алгоритма Евклида, которого требуется достичь.

    Выходные данные

    Выведите два многочлена в следующем формате.

    В первой строке выведите число m (0 ≤ m ≤ n) — степень многочлена.

    Во второй строке выведите m + 1 целых чисел от  - 1 до 1  — коэффициенты многочлена, от младшего к старшему.

    Степень первого многочлена должна быть больше степени второго, а старшие коэффициенты обоих многочленов должны быть равны 1. Алгоритм Евклида, вызванный от этих многочленов должен занимать ровно n шагов.

    Если для данного числа n ответа не существует, выведите -1.

    Если есть несколько возможных вариантов ответа, выведите любой из них.

    Примечание

    Во втором тестовом примере можно вывести многочлены x2 - 1 и x. Тогда цепочка вызовов будет

    (x2 - 1, x) → (x,  - 1) → ( - 1, 0).

    Она состоит из ровно двух шагов.

    E. Циклический шифр

    бпф математика *3300

    Сеньор Стрижай Пинозаддо разработал инновационный метод шифрования последовательностей чисел длины n. Чтобы применить его, нужно выбрать секретную последовательность , которая будет выступать шифратором.

    Стрижай проводит строгий отбор шифраторов, поэтому шифратором может стать только такая последовательность bi, что её циклические сдвиги линейно независимы, то есть, не существует ненулевого набора коэффициентов x0, x1, ..., xn - 1 такого, что для всех k одновременно.

    После этого для последовательности чисел , вы сопоставляете следующий шифр:

    Иначе говоря, считаете квадратичное отклонение каждого циклического сдвига последовательности bi от последовательности ai, это и есть шифр сеньора Пинозаддо. Шифр ещё только в разработке и Стрижаю нужен способ дешифровать последовательность после того, как он был применён к ней. Эта задача ложится на ваши плечи. Вам известны последовательности ci и bi. Вам необходимо найти все возможные последовательности ai.

    Входные данные

    Первая строка содержит единственное целое число n ().

    Вторая строка содержит n целых чисел — последовательность b0, b1, ..., bn - 1 ().

    Третья строка содержит n целых чисел — последовательность c0, c1, ..., cn - 1 ().

    Гарантируется, что циклические сдвиги bi линейно независимы.

    Выходные данные

    Выведите число k  — количество целочисленных последовательностей ai таких, что при применении шифратора bi вы получите последовательность ci.

    Далее в каждой из k последующих строк выведите n целых чисел a0, a1, ..., an - 1. Последовательности нужно выводить в лексикографическом порядке.

    Обратите внимание, что k может быть равно 0.

    D. Почти разница

    математика Структуры данных *2200

    Определим функцию

    Задан массив a, состоящий из n целых чисел. Посчитайте сумму d(ai, aj) по всем парам (i, j) таким, что 1 ≤ i ≤ j ≤ n.

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 200000) — количество элементов в a.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива.

    Выходные данные

    Выведите одно целое число — сумму d(ai, aj) по всем парам (i, j) таким, что 1 ≤ i ≤ j ≤ n.

    Примечание

    В первом примере:

    1. d(a1, a2) = 0;
    2. d(a1, a3) = 2;
    3. d(a1, a4) = 0;
    4. d(a1, a5) = 2;
    5. d(a2, a3) = 0;
    6. d(a2, a4) = 0;
    7. d(a2, a5) = 0;
    8. d(a3, a4) =  - 2;
    9. d(a3, a5) = 0;
    10. d(a4, a5) = 2.

    C. Новый год и керлинг

    геометрия математика Перебор реализация *1500

    Кэрол играет в керлинг.

    У нее есть n дисков радиуса r на плоскости.

    Изначально все диски находятся выше линии y = 10100.

    Кэрол пускает диски по направлению к прямой y = 0 по одному в порядке от 1 до n.

    Когда она пускает i-й диск, она ставит его центр в точку (xi, 10100), а затем толкает его так, что его y координата начинает уменьшаться, а координата x остается постоянной. Диск останавливается, когда он касается прямой y = 0 или любого предыдущего диска. Обратите внимание, как только диск остановился, он больше не двигается, даже от удара следующих дисков.

    Вычислите координату y центров всех дисков после того, как они остановятся.

    Входные данные

    Первая строка содержит два целых числа n и r (1 ≤ n, r ≤ 1 000) — количество дисков и радиус каждого диска, соответственно.

    Следующая строка содержит n целых чисел x1, x2, ..., xn (1 ≤ xi ≤ 1 000) — x-координаты дисков.

    Выходные данные

    Выведите единственную строку с n числами. i-е из этих чисел должно быть равно итоговой y-координате центра i-го диска. Ваш ответ будет зачтен, если его абсолютная или относительная ошибка не превосходит 10 - 6.

    А именно, пусть ваш ответ для определенного диска равен a, а ответ жюри — b. Ваш ответ будет зачтен, если для всех дисков.

    Примечание

    В первом примере конечные позиции дисков показаны на рисунке:

    В частности, обратите внимание на положение последнего диска.

    D. Новый год и произвольный порядок

    дп математика Теория вероятностей *2200

    Вам даны три целых числа k, pa и pb.

    Вы будете строить последовательность в соответствии со следующим алгоритмом. Изначально у вас есть пустая последовательность. Раз в секунду вы делаете следующее. С вероятностью pa / (pa + pb) вы добавляете «a» в конец последовательности. Иначе (с вероятностью pb / (pa + pb)) вы добавляете «b» в конец последовательности.

    Вы останавливаетесь, как только в вашей последовательности есть хотя бы k подпоследовательностей «ab». Определите математическое ожидание числа подпоследовательностей «ab» в итоговой строке. Можно показать, что это число может быть выражено как P / Q, где P и Q — взаимно простые целые числа, а . Выведите значение .

    Входные данные

    Первая строка содержит три целых числа k, pa, pb (1 ≤ k ≤ 1 000, 1 ≤ pa, pb ≤ 1 000 000).

    Выходные данные

    Выведите одно целое число — ответ на задачу.

    Примечание

    В первом примере мы будем добавлять к последовательности букву, пока не получим хотя бы одну подпоследовательность «ab». Среди прочего, мы можем получить последовательность «ab» с вероятностью 1/4, «bbab» с вероятностью 1/16, и «aab» с вероятностью 1/8. Обратите внимание, невозможно получить строку «aabab», так как мы бы остановились, как только получили префикс «aab».

    Математическое ожидание числа подпоследовательностей «ab» равно 2.

    Во втором примере ответ равен .

    E. Новый год и перечисление подходящих

    битмаски дп Комбинаторика математика *2500

    Вам дано целое число m.

    Пусть M = 2m - 1.

    Вам дано множество из n целых чисел, обозначим его за T. Эти целые числа будут даны в двоичной системе счисления как n бинарных строк длины m.

    Множество целых чисел S называется «хорошим», если следующие условия выполняются.

    1. Если , то .
    2. Если , то
    3. Все элементы S меньше либо равны M.

    Здесь и обозначают побитовые операции исключающее ИЛИ и И, соответственно.

    Вычислите количество хороших множеств S по модулю 109 + 7.

    Входные данные

    Первая строка содержит два целых числа m и n (1 ≤ m ≤ 1 000, 1 ≤ n ≤ min(2m, 50)).

    Следующие n строк содержат элементы T. Каждая строка содержит ровно одну строку длины m из нулей и единиц. Все элементы T различны.

    Выходные данные

    Выведите одно число: количество хороших множеств по модулю 109 + 7.

    Примечание

    Пример хорошего множества S: {00000, 00101, 00010, 00111, 11000, 11010, 11101, 11111}.

    G. Новый год и правильный порядок

    дп математика *2800

    Обозначим за S(n) число, которое получается, если переставить цифры числа n в порядке возрастания. Например, S(1) = 1, S(5) = 5, S(50394) = 3459, S(353535) = 333555.

    Вам дано число X, вычислите по модулю 109 + 7.

    Входные данные

    Первая строка содержит одно целое число X (1 ≤ X ≤ 10700).

    Выходные данные

    Выведите одно целое число: ответ на задачу.

    Примечание

    Первые несколько значений S равны 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 12. Сумма этих величин равна 195.

    B. Отрезки

    Конструктив математика *1300

    Дано целое положительное число N. Рассмотрим все возможные отрезки на координатной прямой с концами в точках с целочисленными координатами от 0 до N, включительно. Таких отрезков будет штук.

    Вы хотите нарисовать эти отрезки в несколько слоев так, чтобы отрезки в каждом слое не пересекались (два отрезка могут иметь концы в одной точке). Сдвигать отрезки вдоль координатной прямой нельзя.

    Найдите минимальное количество слоев, которые необходимо использовать, чтобы нарисовать отрезки для заданного N.

    Входные данные

    Входные данные состоят из одной строки, содержащей целое число N (1 ≤ N ≤ 100).

    Выходные данные

    Выведите одно число - минимальное количество слоев, которые необходимо использовать, чтобы нарисовать отрезки для заданного N.

    Примечание

    Отрезки и их оптимальное расположение для N = 4 выглядят следующим образом:

    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].

    D. Подсчет инверсий

    математика Перебор *1800

    Перестановкой размера n называют такой массив из n чисел, что все числа от 1 до n встречаются в нем ровно один раз. Инверсией в перестановке p называют такую пару позиций (i, j), что i > j и ai < aj. Например, перестановка [4, 1, 3, 2] содержит 4 инверсии: (2, 1), (3, 1), (4, 1), (4, 3).

    Задана перестановка a размера n и m запросов к ней. Каждый запрос представляется двумя позициями l и r — отрезок [l, r] в перестановке надо перевернуть. Например, если a = [1, 2, 3, 4] и применен запрос l = 2, r = 4, то полученная перестановка — [1, 4, 3, 2].

    После каждого запроса выведите, четное количество инверсий в перестановке или нечетное.

    Входные данные

    В первой строке записано одно целое число n (1 ≤ n ≤ 1500) — размер перестановки.

    Во второй строке записаны n чисел a1, a2, ..., an (1 ≤ ai ≤ n) — элементы перестановки. Все числа попарно различны.

    В третьей строке записано одно целое число m (1 ≤ m ≤ 2·105) — количество запросов, которые надо обработать.

    Затем следуют m строк, в i-й строке записаны два целых числа li, ri (1 ≤ li ≤ ri ≤ n), означающие, что i-й запрос — это перевернуть отрезок [li, ri] в перестановке. Все запросы производятся последовательно.

    Выходные данные

    Выведите m строк. В i-й из них должно быть записано odd, если количество инверсий в перестановке после i-го запроса нечетно и even в противном случае.

    Примечание

    В первом примере:

    1. после первого запроса a = [2, 1, 3], инверсия: (2, 1);
    2. после второго запроса a = [2, 3, 1], инверсии: (3, 1), (3, 2).

    Во втором примере:

    1. a = [1, 2, 4, 3], инверсия: (4, 3);
    2. a = [3, 4, 2, 1], инверсии: (3, 1), (4, 1), (3, 2), (4, 2), (4, 3);
    3. a = [1, 2, 4, 3], инверсия: (4, 3);
    4. a = [1, 4, 2, 3], инверсии: (3, 2), (4, 2).

    E. Простой подарок

    meet-in-the-middle Бинарный поиск математика поиск в глубину и подобное теория чисел *2400

    — Мужик, у тебя простые числа есть?

    — Нету.

    — На, мужик, простые числа.

    Пингвин

    В отличие от Гриши, который вел себя хорошо, Олег за весь год так и не научился решать задачи на теорию чисел. Поэтому вместо Деда Мороза к нему пришел его сокомандник Андрей и торжественно вручил ему множество из n различных простых чисел вместе с простой задачей: Олегу необходимо найти k-е в порядке возрастания положительное целое число, среди простых делителей которого встречаются числа только из этого множества.

    Входные данные

    В первой строке задано целое число n (1 ≤ n ≤ 16) — количество чисел во множестве.

    Во второй строке n различных простых чисел p1, p2, ..., pn (2 ≤ pi ≤ 100) — числа во множестве. Гарантируется, что числа идут в порядке возрастания.

    В третьей строке задано число k (1 ≤ k). Гарантируется, что k-е в порядке возрастания положительное целое число, среди простых делителей которого встречаются числа только из данного множества не превосходит 1018.

    Выходные данные

    Выведите k-е в порядке возрастания число, удовлетворяющее условию. Гарантируется, что оно не превосходит 1018.

    Примечание

    Для первого примера последовательность с простыми делителями из набора {2, 3, 5} выглядит так:

    (1, 2, 3, 4, 5, 6, 8, ...)

    Седьмым по счету числом (в 1-индексации) как раз и будет восьмерка.

    A. Возведение в степень по модулю

    математика реализация *900

    Хорошо известна следующая задача: по заданным целым числам n и m вычислить значение следующего выражения:

    ,

    где 2n = 2·2·...·2 (n множителей), а  — операция взятия остатка от деления x на y.

    Вам предлагается решить «обратную» задачу. По заданным целым числам n и m вычислите значение следующего выражения:

    .
    Входные данные

    Первая строка содержит целое число n (1 ≤ n ≤ 108).

    Вторая строка содержит целое число m (1 ≤ m ≤ 108).

    Выходные данные

    Выведите единственное число — значение выражения .

    Примечание

    В первом примере остаток от деления 42 на 24 = 16 равен 10.

    Во втором примере 58 делится на 21 = 2 без остатка, поэтому ответ 0.

    F. Сильносвязный турнир

    графы дп математика Теория вероятностей *2800

    В городе Нормгород проходит шахматный турнир. n игроков были приглашены для участия в нём. Турнир проходит по следующим правилам:

    1. Каждый игрок играет с каждым другим одну партию, ничьих не бывает;
    2. После этого организаторы строят полный ориентированный граф, вершинами которого являются игроки. Для каждой пары игроков в графе есть одно ребро, начало которое идет от победителя игры между ними к проигравшему;
    3. После этого граф конденсируется. Так как исходный граф полный, то его конденсация — ацикличный полный ориентированный граф, в котором есть единственный гамильтонов путь из компонент сильной связности исходного графа A1 → A2 → ... → Ak;
    4. Игроки из первой компоненты сильной связности A1 занимают первые мест, игроки из компоненты A2 занимают следующие мест, и так далее;
    5. Для того, чтобы определить, кто какое место занял внутри каждой компоненты сильной связности, все шаги с 1 по 5 повторяются рекурсивно для каждой компоненты, то есть, для всех i = 1, 2, ..., k все игроки из компоненты Ai снова играют друг с другом партию, и так далее.
    6. Если компонента сильной связности состоит из одного человека, то ему больше не с кем играть, его место уже однозначно определено, и процесс останавливается.

    Игроки пронумерованы числами от 1 до n. Нумерация была выполнена по результатам прошлого турнира. Известно, что игрок с номером i побеждает игрока с номером j с вероятностью p при i < j.

    Вам поручено помочь с организацией турнира. Найдите математическое ожидание суммарного количества партий, сыгранных всеми игроками.

    Можно показать, что ответ может быть выражен как , где P и Q — взаимно простые целые числа, а . Выведите значение P·Q - 1 по модулю 998244353.

    Если вы не знакомы с понятиями теории графов, используемыми выше, вы можете ознакомиться с ними по ссылке.

    Входные данные

    В первой строке содержится целое число n (2 ≤ n ≤ 2000) — количество игроков.

    Во второй строке даны два целых числа a и b (1 ≤ a < b ≤ 100) — числитель и знаменатель дроби .

    Выходные данные

    В единственной строке выведите математическое ожидание суммарного количества партий в игре в формате, приведенном выше.

    Примечание

    В первом примере математическое ожидание равно 4.

    Во втором примере математическое ожидание равно .

    В третьем примере математическое ожидание равно .

    G. Степенная подстрока

    математика теория чисел *3200

    Вам даны n целых положительных чисел a1, a2, ..., an.

    Для каждого ai требуется найти целое положительное число ki такое, что десятичная запись числа 2ki содержит десятичную запись числа ai среди своих последних min(100, length(2ki)) цифр как подстроку, где length(m) означает длину десятичной записи числа m.

    Обратите внимание, что минимизировать ki не обязательно. В рассматриваемых десятичных записях не могут содержаться ведущие нули.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 2 000) — количество чисел ai.

    В каждой из следующих n строк содержится одно целое число ai (1 ≤ ai < 1011).

    Выходные данные

    Выведите n строк: в i-й из них целое число ki такое, что последние min(100, length(2ki)) цифр числа 2ki содержат десятичную запись числа ai как подстроку. Числа ki должны удовлетворять неравенствам 1 ≤ ki ≤ 1050.

    Можно показать, что при данных ограничениях ответ всегда существует. Если есть несколько ответов, выведите любой.

    H. Не превышай

    математика Теория вероятностей *3400

    Вы генерируете вещественные числа s1, s2, ..., sn следующим образом:

    • s0 = 0;
    • si = si - 1 + ti, где ti — вещественное число, выбранное независимо случайно из равномерного распределения от 0 до 1, включительно.

    Даны вещественные числа x1, x2, ..., xn. Вас интересует вероятность того, что si ≤ xi верно для всех i одновременно.

    Можно показать, что это число может быть выражено как , где P и Q — взаимно простые целые числа, а . Выведите значение P·Q - 1 по модулю 998244353.

    Входные данные

    Первая строка содержит целое число n (1 ≤ n ≤ 30).

    Следующие n строк содержат вещественные числа x1, x2, ..., xn, заданные не более чем с шестью знаками после точки (0 < xi ≤ n).

    Выходные данные

    Выведите одно целое число — ответ на задачу.

    Примечание

    В первом примере искомая вероятность равна 1, так как сумма i вещественных чисел, не превышающих 1, не превышает i.

    Во втором примере вероятность равна x1.

    В третьем примере искомая вероятность равна 3 / 8.

    A. Точные квадраты

    математика Перебор реализация *900

    Дан массив a1, a2, ..., an, состоящий из n целых чисел, найдите наибольшее число в нём, которое не является точным квадратом.

    Число x называется точным квадратом, если существует целое число y такое, что x = y2.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 1000) — количество элементов в массиве.

    Во второй строке содержатся n целых чисел a1, a2, ..., an ( - 106 ≤ ai ≤ 106) — элементы массива.

    Гарантируется, что хотя бы один элемент массива не является точным квадратом.

    Выходные данные

    Выведите максимальное число, содержащееся в массиве, такое, что оно не является точным квадратом. Гарантируется, что ответ существует.

    Примечание

    В первом тестовом примере 4 является точным квадратом, поэтому наибольшее число, которое не является точным квадратом — это 2.

    G. Сумма Фибоначчи

    битмаски бпф дп математика разделяй и властвуй *2600

    Дан массив s, состоящий из n неотрицательных целых чисел.

    Набор из 5 чисел (a, b, c, d, e) назовём корректным если:

    • 1 ≤ a, b, c, d, e ≤ n
    • (sa | sb) & sc & (sd ^ se) = 2i для некоторого целого i.
    • sa & sb = 0

    Здесь '|' обозначает побитовое ИЛИ, '&' обозначает побитовое И, '^' обозначает побитовое исключающее ИЛИ.

    Найдите сумму f(sa|sb) * f(sc) * f(sd^se) по всем корректным наборам (a, b, c, d, e), где f(i) обозначает i-е число Фибоначчи (f(0) = 0, f(1) = 1, f(i) = f(i - 1) + f(i - 2)).

    Так как ответ может быть очень большим выведите его остаток от деления на 109 + 7.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 106).

    Во второй строке содержатся n целых чисел si (0 ≤ si < 217).

    Выходные данные

    Выведите требуемую сумму по модулю 109 + 7.

    G. Простые массивы

    математика теория чисел *2300

    Назовем массив a размера n простым, если gcd(a1, a2, ..., an) = 1, где gcd — наибольший общий делитель всех аргументов.

    Заданы два числа n и k. Для каждого i (1 ≤ i ≤ k) вам необходимо посчитать количество простых массивов a размера n таких, что для каждого j (1 ≤ j ≤ n) 1 ≤ aj ≤ i. Так как ответы могут быть очень большими, возьмите каждый из них по модулю 109 + 7.

    Входные данные

    В первой строке записаны два целых числа n и k (1 ≤ n, k ≤ 2·106) — требуемый размер массивов и верхняя граница значений элементов, соответственно.

    Выходные данные

    Вывод 2·106 чисел может занять довольно долгое время, поэтому выведите ответ следующим образом:

    Пусть bi — количество простых массивов с элементами в отрезке [1, i], взятое по модулю 109 + 7. Выведите значение , взятое по модулю 109 + 7. Здесь означает побитовое исключающее ИЛИ (^ в C++ или Java, xor в Pascal).

    Примечание

    Пояснение к примеру:

    Так как количество простых массивов велико, мы покажем массивы, которые не являются простыми, но содержат только элементы из отрезка [1, i]:

    Для i = 1 единственный массив простой. b1 = 1.

    Для i = 2 массив [2, 2, 2] не простой. b2 = 7.

    Для i = 3 массивы [2, 2, 2] и [3, 3, 3] не простые. b3 = 25.

    Для i = 4 массивы [2, 2, 2], [3, 3, 3], [2, 2, 4], [2, 4, 2], [2, 4, 4], [4, 2, 2], [4, 2, 4], [4, 4, 2] и [4, 4, 4] не простые. b4 = 55.

    A. Джейми и откладывание будильника

    математика Перебор реализация *900

    Джейми очень любит спать. Однажды он решил, что хочет проснуться ровно в hh: mm. Однако он ненавидит просыпаться, поэтому он решил сделать своё пробуждение менее неприятным, установив будильник в счастливое время. Затем он будет нажимать на кнопку будильника каждые x минут, пока не настанет hh: mm и только затем встанет с кровати. Джейми интересно, какое минимальное количество раз ему придётся нажимать на кнопку будильника.

    Время называется счастливым, если оно содержит цифру '7'. Например, времена 13: 07 и 17: 27 являются счастливыми, а 00: 48 и 21: 34 не являются.

    Учтите, что момент звонка будильника и момент, когда Джейми встанет с кровати, могут быть в разные дни. Гарантируется, что существует счастливое время, на которое Джейми может поставить будильник, чтобы проснуться в hh: mm.

    Формально, Вам требуется найти такое минимальное неотрицательное целое число y, что в записи момента времени на x·y минут более раннего, чем hh: mm, присутствует цифра '7'.

    Джейми использует 24-часовой формат времени времени, поэтому после 23: 59 наступает 00: 00.

    Входные данные

    В первой строке содержится целое число x (1 ≤ x ≤ 60).

    Во второй строке содержатся два целых числа hh и mm (00 ≤ hh ≤ 23, 00 ≤ mm ≤ 59). В записи каждого из этих чисел содержатся ровно две цифры.

    Выходные данные

    Выведите минимальное возможное количество нажатий на кнопку.

    Примечание

    В первом тестовом примере Джейми хочет проснуться в 11:23. Поэтому он может поставить свой будильник на 11:17. Затем ему придётся нажать кнопку в 11:17 и в 11:20.

    Во втором тестовом примере Джейми может поставить будильник ровно на 01:07, так как это счастливое время.

    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. «??()??», которая может быть преобразована в «()()()».

    D. Очень странные деревья

    Деревья дп математика матрицы *2600

    Сознание Уилла связано с сознанием монстра с Обратной стороны, поэтому Уиллу известно все, о чем думает монстр. Неожиданно Уилл начал рисовать без остановок, страницу за страницей. Его мама Джойс и шериф Хоппер сложили все рисунки вместе и поняли, что это помеченное дерево!

    Деревом называется связный ациклический граф. В дереве Уилла n вершин. Джойс и Хоппер не знают, что означает это дерево, поэтому они решили его исследовать, а также исследовать похожие деревья. Для каждого k такого, что 0 ≤ k ≤ n - 1, они собираются исследовать все такие помеченные деревья из n вершин, у которых ровно k ребер совпадают с ребрами дерева Уилла. Два помеченных дерева различны, если и только если существует пара вершин (v, u) такая, что в одном дереве существует ребро между вершинами v и u, а в другом — нет.

    Хоппер и Джойс хотят узнать, сколько работы им предстоит, поэтому они просят вас посчитать для каждого k число помеченных деревьев из n вершин, у которых ровно k ребер совпадают с ребрами в дереве Уилла. Так как ответ может быть большим, выведите ответы по модулю 1000000007 = 109 + 7.

    Входные данные

    Первая строка содержит одно целое число n (2 ≤ n ≤ 100) — размер дерева.

    Следующие n - 1 строк содержат ребра в дереве Уилла. Каждая строка содержит два целых числа v и u (1 ≤ v, u ≤ n, v ≠ u) — концы очередного ребра. Гарантируется, что заданный граф является деревом.

    Выходные данные

    Выведите n целых чисел на одной строке. i-е из этих чисел должно быть равно числу помеченных деревьев из n вершин таких, что ровно i - 1 ребро совпадает с ребрами в дереве Уилла, по модулю 1000 000 007 = 109 + 7.

    E. Уравнение конгруэнтности

    китайская теорема об остатках математика теория чисел *2100

    Дано число \(x\). Ваша задача — найти количество положительных чисел \(n\) (\(1 \leq n \leq x\)), удовлетворяющих \(\)n \cdot a^n \equiv b \quad (\textrm{mod}\;p),\(\) где \(a, b, p\) — заданные константы.

    Входные данные

    Единственная строка содержит четыре целых числа \(a,b,p,x\) (\(2 \leq p \leq 10^6+3\), \(1 \leq a,b < p\), \(1 \leq x \leq 10^{12}\)). Гарантируется, что \(p\) — простое.

    Выходные данные

    Выведите одно число: количество решений \(n\).

    Примечание

    В первом примере \(n=2\) и \(n=8\) являются решениями.

    A. Фишки

    математика реализация *800

    В кругу сидят n моржей. Все моржи пронумерованы по часовой стрелке: слева от моржа с номером 1 сидит морж с номером 2, слева от моржа с номера 2 сидит морж с номером 3, ..., слева от моржа с номером n сидит морж с номером 1.

    У ведущего есть m фишек. Ведущий встает в центр круга и начинает раздавать фишки моржам начиная с моржа с номером 1, двигаясь по часовой стрелке. Морж с номером i получает i фишек. Если ведущий не может выдать текущему моржу положенное количество фишек, то оставшиеся фишки ведущий забирает себе, и процесс заканчивается. По заданным n и m определите, сколько фишек достанется ведущему.

    Входные данные

    В первой строке содержатся два целых числа n и m (1 ≤ n ≤ 50, 1 ≤ m ≤ 104) — количество моржей и количество фишек соответственно.

    Выходные данные

    Выведите количество фишек, которые забрал себе ведущий.

    Примечание

    В первом примере: ведущий выдает моржу с номером 1 одну фишку, моржу с номером 2 — две фишки, моржу с номером 3 — три фишки, моржу с номером 4 — четыре фишки, затем снова моржу с номером 1 выдает одну фишку. После этого у ведущего кончаются фишки, он не может ничего дать моржу с номером 2, и процесс заканчивается.

    В третьем примере: ведущий выдает моржу с номером 1 одну фишку, моржу с номером 2 — две фишки, моржу с номером 3 — три фишки, затем снова моржу с номером 1 выдает одну фишку. У ведущего остается одна фишка и он не может выдать моржу с номером 2 две фишки, поэтому он забирает одну фишку себе.

    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.

    G. Список чисел

    Бинарный поиск битмаски Комбинаторика математика Перебор теория чисел *2200

    Обозначим за L(x, p) бесконечную последовательность таких целых чисел y, что gcd(p, y) = 1 и y > x (где gcd — наибольший общий делитель двух чисел), расположенных в порядке возрастания. Элементы L(x, p) пронумерованы, начиная с 1; например, 9, 13 и 15 — соответственно первый, второй и третий элементы L(7, 22).

    Напишите программу, обрабатывающую t запросов. Каждый запрос задаётся тремя целыми числами x, p и k, а ответ на запрос — k-й элемент последовательности L(x, p).

    Входные данные

    В первой строке записано одно целое число t (1 ≤ t ≤ 30000) — количество запросов.

    Далее следуют t строк. В i-й строке записаны три числа x, p и k для i-го запроса (1 ≤ x, p, k ≤ 106).

    Выходные данные

    Выведите t чисел, где i-е число — ответ на i-й запрос.

    A. Простой спорт

    математика теория чисел *1700

    Алиса и Боб начинают свой день с простой игры. Они выбирают начальное целое число X0 ≥ 3 и пробуют достичь одного миллиона, играя по правилам, описанным ниже.

    Первой ходит Алиса, затем игроки ходят по очереди. На i-м ходу игрок выбирает простое число, меньшее, чем текущее число, и увеличивает текущее число до наименьшего числа, кратного выбранному.

    Формально, игрок выбирает простое число p < Xi - 1 и находит минимальное целое число Xi ≥ Xi - 1 такое, что p делит Xi нацело. Обратите внимание, если выбранное простое число p делит нацело число Xi - 1, то текущее число не меняется.

    Ева увидела состояние игры после двух ходов. По данному X2 определите минимально возможное начальное число X0. Обратите внимание, игроки не обязательно играют оптимально. Вам нужно рассмотреть все возможные варианты хода игры.

    Входные данные

    Единственная строка содержит одно целое число X2 (4 ≤ X2 ≤ 106). Гарантируется, что число X2 составное, то есть не простое.

    Выходные данные

    Выведите одно целое число — минимально возможное начальное число X0.

    Примечание

    В первом примере минимальное начальное число равно X0 = 6. Например, возможна следующая игра:

    • Алиса выбирает простое число 5 и получает X1 = 10,
    • Боб выбирает простое число 7 и получает X2 = 14.

    Во втором примере минимально возможное X0 = 15.

    • Алиса выбирает простое число 2 и получает X1 = 16,
    • Боб выбирает простое число 5 и получает X2 = 20.

    E. Постоянное вычитание

    бпф математика матрицы *3100

    Изначально на доске написано целое число x. Вы повторяете следующую операцию некоторое число раз:

    1. взять число x, которое сейчас написано на доске и стереть его,
    2. выбрать целое число равновероятно случайным образом из отрезка [0, x] включительно, и написать его на доску.

    По данному распределению вероятностей начального числа и количеству операций определите распределение вероятностей для конечного числа.

    Входные данные

    Первая строка содержит два целых числа N (1 ≤ N ≤ 105) — максимально возможное число, написанное на доске — и M (0 ≤ M ≤ 1018) — количество операций.

    Вторая строка содержит N + 1 целое число P0, P1, ..., PN (0 ≤ Pi < 998244353), где Pi описывает вероятность того, что начальное число равно i. Если представить эту вероятность как несократимую дробь P / Q, то . Гарантируется, что сумма всех Pi равняется 1 (по модулю 998244353).

    Выходные данные

    Выведите одну строку с N + 1 целыми числами, где Ri описывает вероятность того, что число после M шагов равно i. Можно доказать, что искомая вероятность всегда можно представить в виде несократимой дроби P / Q. Вам нужно вывести .

    Примечание

    В первом примере мы начинаем с числа 2. После одного шага число на доске будет 0, 1 или 2 с вероятностью 1/3 каждая.

    Во втором примере число останется 2 с вероятностью 1/9. С вероятностью 1/9 оно остается равным 2 в первом раунде, и изменяется на 1 во втором, и с вероятностью 1/6 изменяется на 1 в первом раунде и остается таким же во втором. Во всех остальных случаях конечное число равно 0.

    C. Большой секрет

    Конструктив математика *2200

    Витя выяснил, что ответ на Главный вопрос жизни, Вселенной и всего такого заключается не в числе 54 42, а в возрастающей последовательности положительных целых чисел \(a_1, \ldots, a_n\). Чтобы не раскрывать сенсацию раньше времени, Витя зашифровал ответ, получив последовательность \(b_1, \ldots, b_n\) по следующему правилу:

    Легко видеть, что исходную последовательность можно вычислить по правилу \(a_i = b_1 \oplus \ldots \oplus b_i\).

    Однако, когда Витя решил представить миру свою сенсацию, он обнаружил, что числа \(b_i\) в его шифре перемешались, и после расшифровки по правилу, описанному выше, может получиться последовательность, не являющаяся возрастающей. Чтобы не ударить лицом в грязь перед научным сообществом, Витя решил найти какую-нибудь перестановку чисел \(b_i\), чтобы последовательность \(a_i = b_1 \oplus \ldots \oplus b_i\) была строго возрастающей. Помогите ему найти любую такую перестановку, либо определите, что это невозможно (и значит, в шифр вкралась какая-то дополнительная ошибка).

    Входные данные

    В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

    Во второй строке через пробел записано \(n\) целых чисел \(b_1, \ldots, b_n\) (\(1 \leq b_i < 2^{60}\)).

    Выходные данные

    Если искомой перестановки чисел не существует, выведите слово «No» в единственной строке.

    В противном случае, в первой строке выведите слово «Yes», после чего во второй строке выведите числа \(b'_1, \ldots, b'_n\) — подходящую перестановку чисел \(b_i\). Неупорядоченные наборы \(\{b_1, \ldots, b_n\}\) и \(\{b'_1, \ldots, b'_n\}\) должны совпадать, то есть для каждого числа \(x\) количество вхождений \(x\) в первый набор должно быть равно количеству вхождений \(x\) во второй набор. Кроме этого, последовательность \(a_i = b'_1 \oplus \ldots \oplus b'_i\) должна быть строго возрастающей.

    Примечание

    В первом примере ни одна из перестановок чисел не подходит.

    Во втором примере данный ответ приводит к последовательности \(a_1 = 4\), \(a_2 = 8\), \(a_3 = 15\), \(a_4 = 16\), \(a_5 = 23\), \(a_6 = 42\).

    A. 2-3-числа

    математика реализация *1300

    Целое положительное число называется 2-3-числом, если имеет вид 2x·3y для некоторых неотрицательных целых x и y. Иными словами, это такие числа, среди простых делителей которых встречаются только числа 2 и 3. Например, числа 1, 6, 9, 16 и 108 — 2-3 числа, а 5, 10, 21 и 120 — нет.

    Выведите количество 2-3-чисел на заданном отрезке [l, r], то есть количество таких 2-3-чисел t, что l ≤ t ≤ r.

    Входные данные

    В первой строке записаны два целых положительных числа l и r (1 ≤ l ≤ r ≤ 2·109).

    Выходные данные

    Выведите одно целое число — количество 2-3-чисел на отрезке [l, r].

    Примечание

    В первом примере 2-3-числами являются числа 1, 2, 3, 4, 6, 8 и 9.

    Во втором примере 2-3-числами являются числа 108, 128, 144, 162 и 192.

    B. Добавление точек

    математика теория чисел *1800

    На прямой находится n точек, причем i-я точка имеет координату xi. Координаты всех точек различны.

    Определите число m — минимальное количество точек, которые нужно добавить на прямую так, чтобы расстояния между каждой парой соседних точек на прямой были одинаковыми.

    Входные данные

    В первой строке следует целое число n (3 ≤ n ≤ 100 000) — количество точек.

    Во второй строке следует последовательность целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109) — координаты точек. Координаты всех точек различны. Точки могут следовать в любом порядке.

    Выходные данные

    Выведите число m — минимальное количество точек, которые нужно добавить на прямую так, чтобы расстояния между каждой парой соседних точек на прямой были одинаковыми.

    Примечание

    В первом примере достаточно добавить одну точку с координатой 0.

    Во втором примере расстояния между всеми парами начальных точек равны между собой, поэтому ничего добавлять не нужно.

    C. Красивая команда

    *особая задача Комбинаторика математика *1700

    Завтра у хоккейной команды, которой руководит Евгений, важный матч. Евгению нужно выбрать шесть игроков, которые выйдут на лед в стартовом составе: один вратарь, два защитника и три нападающих.

    Так как это стартовый состав, Евгения больше волнует, насколько красива будет команда на льду, чем способности игроков. А именно, Евгений хочет выбрать такой стартовый состав, чтобы номера любых двух игроков из стартового состава отличались не более, чем в два раза. Например, игроки с номерами 13, 14, 10, 18, 15 и 20 устроят Евгения, а если, например, на лед выйдут игроки с номерами 8 и 17, то это не устроит Евгения.

    Про каждого из игроков вам известно, на какой позиции он играет (вратарь, защитник или нападающий), а также его номер. В хоккее номера игроков не обязательно идут подряд. Посчитайте число различных стартовых составов из одного вратаря, двух защитников и трех нападающих, которые может выбрать Евгений, чтобы выполнялось его условие красоты.

    Входные данные

    Первая строка содержит три целых числа g, d и f (1 ≤ g ≤ 1 000, 1 ≤ d ≤ 1 000, 1 ≤ f ≤ 1 000) — число вратарей, защитников и нападающих в команде Евгения.

    Вторая строка содержит g целых чисел, каждое в пределах от 1 до 100 000 — номера вратарей.

    Третья строка содержит d целых чисел, каждое в пределах от 1 до 100 000 — номера защитников.

    Четвертая строка содержит f целых чисел, каждое в пределах от 1 до 100 000 — номера нападающих.

    Гарантируется, что общее количество игроков не превосходит 1 000, т. е. g + d + f ≤ 1 000. Все g + d + f номеров игроков различны.

    Выходные данные

    Выведите одно целое число — количество возможных стартовых составов.

    Примечание

    В первом примере всего один вариант для выбора состава, который удовлетворяет описанным условиям, поэтому ответ 1.

    Во втором примере подходят следующие игровые сочетания (в порядке вратарь-защитник-защитник-нападающий-нападающий-нападающий):

    • 16 20 12 13 21 11
    • 16 20 12 13 11 10
    • 16 20 19 13 21 11
    • 16 20 19 13 11 10
    • 16 12 19 13 21 11
    • 16 12 19 13 11 10

    Таким образом, ответ на этот пример — 6.

    D. Флаги

    дп математика матрицы *2500

    Будучи первокурсником, Игорь К., как и все остальные, по строгому указанию преподавателя решал олимпиадные задачи по программированию. Однажды его внимание привлекла задача "Флаги" на сайте Timmy's Online Judge. В ней требовалось найти количество трехцветных флагов, удовлетворяющих условию... впрочем, это неважно. Игорь К. быстро подобрал формулу и получил заветный Accepted.

    Однако преподавателя это не сильно впечатлило. Он решил, что задача, представленная на Timmy's Online Judge, очень скучная и простая: всего три возможных цвета полос, всего два ограничения. Он поставил перед Игорем К. усложненную задачу, и тот не смог ее решить. Мы, конечно, умолчим о том, что преподаватель сам не смог ее решить.

    А вы сможете?

    Флаги состоят из одной или нескольких параллельных полос одинаковой ширины. Полосы могут быть одного из следующих четырех цветов: белого, черного, красного или желтого. Требуется найти количество различных флагов с числом полос от L до R, если:

    • в флаге не может быть полос одного цвета, расположенных рядом;
    • в флаге не может быть полос белого и желтого цветов, расположенных рядом;
    • в флаге не может быть полос красного и черного цветов, расположенных рядом;
    • в флаге не может быть сочетания полос черного, белого и красного цветов, расположенных подряд в этом или обратном порядке;
    • симметричные флаги (как, например, WB и BW, где буквами W и B обозначены белый и черный цвета) считаются одинаковыми.
    Входные данные

    В единственной строке записаны два целых числа L и R (1 ≤ L ≤ R ≤ 109) — нижняя и верхняя границы количества полос на флаге.

    Выходные данные

    Выведите единственное число — количество различных флагов, удовлетворяющих условию задачи и имеющих от L до R полос, по модулю 1000000007.

    Примечание

    В первом тесте существуют такие флаги (они перечислены в лексикографическом порядке, буквами B, R, W, Y обозначены соответственно черный, красный, белый и желтый цвета):

    3 полосы: BWB, BYB, BYR, RWR, RYR, WBW, WBY, WRW, WRY, YBY, YRY (всего 11 флагов).

    4 полосы: BWBW, BWBY, BYBW, BYBY, BYRW, BYRY, RWRW, RWRY, RYBW, RYBY, RYRW, RYRY (12 флагов).

    Поэтому ответ на тест 1 равен 11 + 12 = 23.

    E. Лостборн

    дп математика теория чисел *2600

    Игорь К. очень любит многопользовательскую ролевую игру WineAge II. Кто знает, возможно, именно в ней причина его не слишком успешной учебы в университете. Как и любой играющий в нее человек, он заинтересован в том, чтобы экипировка и оружие его персонажа были как можно лучше.

    Однажды, в очередной раз читая форум этой игры, он наткнулся на очень интересный факт. Оказывается, каждое оружие в игре характеризуется k различными числами: a1, ..., ak. Они называются показателями удара и по задумке разработчиков игры являются попарно взаимно простыми.

    Урон, наносящийся при ударе, зависит не только от характеристик оружия, но и от показателя силы персонажа. Так, если сила персонажа равна n, то наносимый урон будет вычисляться как количество чисел на отрезке , которые не делятся ни на один из показателей удара ai.

    Недавно, выполнив очередной квест, Игорь К. нашел новый меч Лостборн. Он хочет знать, сколько урона он будет наносить своим противникам, используя его.

    Входные данные

    В первой строке записаны два целых числа: n и k (1 ≤ n ≤ 1013, 1 ≤ k ≤ 100) — показатель силы персонажа Игоря К. и количество показателей удара.

    В следующей строке через пробел перечислены k целых чисел ai (1 ≤ ai ≤ 1000) — показатели удара меча Лостборн. k заданных чисел являются попарно взаимно простыми.

    Выходные данные

    Выведите единственное число — урон, который будет наносить персонаж Игоря К. при применении своего нового оружия.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

    E. Выставка монет

    дп математика Структуры данных *2900

    Аркадий и Кирилл пришли на выставку редких монет. Все монеты расположены в один ряд и пронумерованы слева направо от 1 до k, причем некоторые монеты лежат вверх аверсом (главной стороной), а некоторые — вверх реверсом (другой стороной).

    Аркадий и Кирилл сделали несколько фотографий монет каждый, причем на каждой фотографии изображены верхние стороны нескольких подряд идущих монет. Аркадий интересуется аверсами, поэтому на каждом снимке, который сделал он, есть хотя бы одна монета, лежащая аверсом вверх. Кирилл, наоборот, интересуется реверсами, поэтому на каждом его снимке есть хотя бы одна монета, лежащая вверх реверсом.

    Теперь снимки утеряны, и ребята лишь помнят границы отрезков монет, попавших на каждый из снимков. По данной информации о снимках вычислите остаток от деления на 109 + 7 количества способов выбрать для каждой монеты сторону, которой она будет лежать вверх, так, чтобы на каждом снимке Аркадия была бы хотя бы одна монета вверх аверсом, а на каждом снимке Кирилла была хотя бы одна монета вверх реверсом.

    Входные данные

    Первая строка содержит три целых числа k, n и m (1 ≤ k ≤ 109, 0 ≤ n, m ≤ 105) — общее число монет, количество снимков Аркадия и Кирилла, соответственно.

    Следующие n строк содержат описания снимков Аркадия, по одному в строке. Каждая из этих строк содержит два целых числа l и r (1 ≤ l ≤ r ≤ k), означающие, что среди монет с l-й по r-ю должна быть хотя бы одна вверх аверсом.

    Следующие m строк содержат описания снимков Кирилла, по одному в строке. Каждая из этих строк содержит два целых числа l и r (1 ≤ l ≤ r ≤ k), означающие, что среди монет с l-й по r-ю должна быть хотя бы одна вверх реверсом.

    Выходные данные

    Выведите одно целое число — количество способов выбрать для каждой монеты, какой стороной она будет лежать вверх, по модулю 109 + 7 = 1000000007.

    Примечание

    В первом примере возможны следующие расположения монет («А» — аверс, «Р» — реверс):

    • АРААР,
    • АРАРА,
    • АРАРР,
    • РРААР,
    • РРАРА,
    • РРАРР,
    • АРРАР,
    • АРРРА.

    Во втором примере данная информация противоречива: согласно снимкам, вторая монета должна лежать одновременно аверсом и реверсом вверх, что невозможно. Значит, ответ равен 0.

    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.

    C. Лабораторная работа

    математика реализация *1700

    Аня и Кирилл делают лабораторную работу по физике. В одном из заданий необходимо n раз измерить некоторую величину, чтобы уменьшить ошибку, и вычислить среднее значение.

    Кирилл выполнил необходимые измерения, получив целочисленные значения x1, x2, ..., xn. Важно отметить, что разброс измеренных значений не очень большой, а именно, максимальное измеренное значение не более чем на 2 превосходит минимально измеренное значение.

    Ане лень делать измерения, но просто так списать все измерения у Кирилла она не может, ведь величина ошибки — случайная величина, и если все измерения совпадут, преподаватель заподозрит неладное. Аня хочет написать в своей работе такие целочисленные величины измерений y1, y2, ..., yn, что выполняются следующие условия:

    • среднее значение среди величин x1, x2, ..., xn точно равно среднему значению y1, y2, ..., yn;
    • все измерения в работе Ани лежат в тех же пределах, что и измерения Кирилла, то есть максимальное значение среди измерений Ани не превосходит максимальное значение среди измерений Кирилла, а минимальное значение среди измерений в работе Ани не меньше, чем минимальное значение среди измерений Кирилла;
    • количество совпадающих измерений у Ани и Кирилла — минимально возможное при выполнении предыдущих условий. Формально, учитель смотрит на все измерения Ани по очереди, если такое же измерение есть у Кирилла и оно еще не зачеркнуто, он вычеркивает одно это измерение у Ани и одно из таких измерений у Кирилла. Количеством совпадающих измерений называется количество зачеркнутых измерений у Ани.

    Помогите Ане написать такой набор измерений, чтобы выполнялись условия, перечисленные выше.

    Входные данные

    В первой строке следует целое число n (1 ≤ n ≤ 100 000) — количество измерений, которые сделал Кирилл.

    Во второй строке следует последовательность x1, x2, ..., xn ( - 100 000 ≤ xi ≤ 100 000) — результаты измерений Кирилла. Гарантируется, что разность между максимальным и минимальным значением среди чисел x1, x2, ..., xn не превосходит 2.

    Выходные данные

    В первую строку выведите минимальное количество совпадающих измерений.

    Во вторую строку выведите n целых чисел y1, y2, ..., yn — результаты измерений Ани. Числа могут быть выведены в любом порядке. Помните, что минимальное из измерений Ани должно быть не меньше, чем минимум из измерений Кирилла, а максимальное из измерений Ани должно быть не больше, чем максимум из измерений Кирилла.

    Если существует несколько решений, выведите любое.

    Примечание

    В первом примере Аня может записать нули в качестве каждого из результатов измерений. Тогда средняя величина её измерений будет равна средней величине измерений Кирилла, а совпадающих измерений будет всего два.

    Во втором примере Аня должна записать два результата измерений, равные 100, и одно 101 (сами измерения она может записать в любом порядке), потому что только в этом случае средняя величина её измерений будет равна средней величине измерений Кирилла. Таким образом, все три измерения будут совпадать.

    В третьем примере количество совпадающих измерений равно 5.

    E. Командная работа

    дп Комбинаторика математика *2400

    У вас в подчинении находится команда из N людей. Для определённой задачи вы можете выбрать непустое множество людей. Стоимость множества из x людей равна xk.

    Найдите сумму стоимостей по всем непустым подмножествам людей.

    Входные данные

    В единственной строке содержатся два целых числа N (1 ≤ N ≤ 109), обозначающее количество людей в подчинении и число k (1 ≤ k ≤ 5000).

    Выходные данные

    Выведите сумму стоимостей по всем непустым подмножествам по модулю 109 + 7.

    Примечание

    В перовом тестовом примере есть одно непустое подмножество {1} со стоимостью 11 = 1.

    Во втором тестовом примере есть семь непустых подмножеств:

    - {1} со стоимостью 12 = 1

    - {2} со стоимостью 12 = 1

    - {1, 2} со стоимостью 22 = 4

    - {3} со стоимостью 12 = 1

    - {1, 3} со стоимостью 22 = 4

    - {2, 3} со стоимостью 22 = 4

    - {1, 2, 3} со стоимостью 32 = 9

    Их суммарная стоимость равна 1 + 1 + 4 + 1 + 4 + 4 + 9 = 24.

    B. Генеральная уборка

    математика *2000

    Чтобы выкинуть старые вещи и встретить чистый новый год, в доме обязательно нужно сделать генеральную уборку.

    Маленький Томми нашел старый многочлен и почистил его, заменив его остатком от деления на другой многочлен. Теперь он уже пожалел об этом...

    По двум данным целым числам p и k найдите многочлен f(x) с неотрицательными целочисленными коэффициентами, строго меньшими k, такой, что его остаток от деления на (x + k) равен p. Иными словами, f(x) = q(x)·(x + k) + p, где q(x) — многочлен (не обязательно с целочисленными коэффициентами).

    Входные данные

    Единственная строка содержит два целых числа p и k (1 ≤ p ≤ 1018, 2 ≤ k ≤ 2 000).

    Выходные данные

    Если подходящего многочлена не существует, выведите -1. Иначе выведите две строки.

    В первую строку выведите целое число d — количество коэффициентов в многочлене.

    Во вторую строку выведите d целых чисел a0, a1, ..., ad - 1, которые описывают многочлен , удовлетворяющий всем условиям. Должно выполняться 0 ≤ ai < k для всех 0 ≤ i ≤ d - 1, а также ad - 1 ≠ 0.

    Если существует несколько ответов, выведите любой.

    Примечание

    В первом примере f(x) = x6 + x5 + x4 + x = (x5 - x4 + 3x3 - 6x2 + 12x - 23)·(x + 2) + 46.

    Во втором примере f(x) = x2 + 205x + 92 = (x - 9)·(x + 214) + 2018.

    D. Оригинальное вырезание

    Комбинаторика математика Перебор *2900

    Все красное отпугивает монстра Ниана. Например, красная бумага и... вы, красные на Codeforces в будущем или уже сейчас.

    Большой Банбан приобрел кусочек бумаги с бесконечной целочисленной решеткой, точки решетки образуют квадраты равной площади. Его любимая замкнутая линия — окружность, т. к. окружность одновременно проста и красива. Он приготовился вырезать что-нибудь красивое, предварительно нарисовав несколько цветных окружностей.

    Он нарисовал n концентрических окружностей и пронумеровал их от 1 до n таким образом, что центры всех окружностей совпадают с одной и той же точкой целочисленной решетки, а радиус k-й окружности равен длинам кратчайшего периода решетки.

    Определим красоту точки целочисленной решетки как сумму номеров окружностей, внутри или на границе которых лежит эта точка. Банбан хотел попросить вас определить суммарную красоту всех точек целочисленной решетки, но передумал.

    Определим суммарную красоту всех точек целочисленной решетки на ткани с n окружностями ка f(n). Вычислите .

    Входные данные

    Первая строка содержит одно целое число m (1 ≤ m ≤ 1012).

    Выходные данные

    В единственной строка выведите одно целое число — .

    Примечание

    Решетка с 5 окружностями изображена на рисунке ниже.

    Всего есть 5 типов точек целочисленной решетки, красота каждой красной точки равна 1 + 2 + 3 + 4 + 5 = 15, красота каждой оранжевой точки равна 2 + 3 + 4 + 5 = 14, красота каждой зеленой точки равна 4 + 5 = 9, красота каждой синей точки равна 5, а красота каждой серой точки равна 0. Итого, f(5) = 5·15 + 4·14 + 4·9 + 8·5 = 207.

    Аналогично, f(1) = 5, f(2) = 23, f(3) = 50, f(4) = 102, и поэтому .

    D. Фафа и древний алфавит

    математика Теория вероятностей *1900

    Известно, что древние египтяне использовали большой набор символов для письма на стенах храмов. Фафа и Фифа подошли к одному из таких храмов и нашли два непустых слова S1 и S2 равной длины, написанные одно под другим. Поскольку храм очень древний, некоторые символы стерлись со временем. На позиции каждого из стертых символов изначально мог стоять любой символ из множества с равной вероятностью.

    Фифа задал Фафе задачу посчитать вероятность того, что слово S1 лексикографически больше слова S2. Можете помочь Фафе решить ее?

    Вы знаете, что , т. е. всего египтяне использовали m различных символов, которые в этой задаче обозначены целыми числами от 1 до m в порядке следования в алфавите. Слово x лексикографически больше слова y той же длины, если до некоторой позиции эти слова совпадают, а затем в слове x идет буква с большим номером в алфавите, чем в слове y.

    Можно показать, что искомая вероятность равна , где P и Q — взаимно простые числа, и . Выведите в качестве ответа величину , т. e. такое целое неотрицательное число, меньшее 109 + 7, что , где запись означает, что a и b дают одинаковые остатки от деления на m.

    Входные данные

    Первая строка содержит два целых числа n и m (1 ≤ n,  m ≤ 105) — длина обоих слов и размер алфавита , соответственно.

    Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ m) — символы в слове S1. Если ai = 0, то символ на позиции i стерт.

    Третья строка содержит n целых чисел, описывающих S2 в том же формате, что и S1.

    Выходные данные

    Выведите величину , где P и Q — взаимно простые, и равняется искомой вероятности.

    Примечание

    В первом примере первое слово могло изначально быть (1) или (2). Второй способ — единственный, при котором первое слово лексикографически больше второго. Поэтому ответ равен , что есть 500000004, потому что .

    Во втором примере ни один способ заменить ноль на символ во втором слове не сделает первое слово лексикографически больше второго. Поэтому ответ на задачу равен , то есть 0.

    B. Вредные кузнечики

    математика Перебор теория чисел *1400

    Стоит отличная погода, а значит, самое время забраться на верхушку близлежащей сосны и вдоволь насладиться пейзажем.

    От ствола сосны отходят несколько веток, расположенных друг над другом и пронумерованных числами от 2 до y. На ветках со 2 по p включительно живут маленькие злобные кузнечики, отношения с которыми у вас не ладятся. Они также отличаются повышенной прыгучестью: кузнечик, живущий на ветке x, способен допрыгнуть до веток с номерами .

    Помня о ваших прошлых неудачах в общении с кузнечиками, вы решили устроиться так, чтобы ни один кузнечик не сумел вас побеспокоить; в то же время вам хочется вскарабкаться как можно выше, ибо вид сверху открывается просто потрясающий!

    Иными словами, найдите самую высокую ветку, до которой не допрыгнет ни один кузнечик, или сообщите, что это невозможно.

    Входные данные

    В единственной строке заданы числа p и y (2 ≤ p ≤ y ≤ 109).

    Выходные данные

    Выведите одно число — номер самой высокой ветки, до которой не достанут кузнечики. Если такой не существует, выведите -1.

    Примечание

    В первом примере до веток 2, 4, 6 допрыгивает кузнечик, живущий на ветке 2, а на ветке 3 изначально живет еще один. Поэтому единственным возможным вариантом является ветка 5.

    Во втором примере подходящих веток не существует — это напрямую следует из пояснения к первому примеру.

    C. Экономим энергию!

    математика *1700

    Студентка Юля собирается приготовить курицу на кухне своего общежития. Для экономии энергии плита на кухне автоматически выключается через k минут после включения.

    Во время готовки Юля ходит на кухню каждые d минут и включает плиту, если она выключена. Всё время, пока плита выключена, она остается нагретой. Включения и выключения плиты происходят мгновенно.

    Известно, что курица приготовится за t минут на включенной плите, а на выключенной — за 2t. Сколько минут придётся Юле готовить курицу в таких студенческих условиях, если считать, что курица готовится равномерно, с постоянной скоростью при включённой плите и с постоянной скоростью при выключенной?

    Входные данные

    В первой строке заданы три целых числа k, d и t (1 ≤ k, d, t ≤ 1018).

    Выходные данные

    Выведите одно число — суммарное время готовки в минутах. Относительная или абсолютная ошибка должна быть не больше 10 - 9.

    А именно, пусть ваш ответ равен x, а ответ жюри — y. Ваш ответ будет зачтен, если .

    Примечание

    В первом примере курица будет готовиться на включённой плите первые 3 минуты, при этом она приготовится на , затем одну минуту курица будет готовиться на нагретой плите, при этом она приготовится на . Таким образом, после четырёх минут курица будет готова на . Перед пятой минутой Юля включит плиту и через 2.5 минуты курица будет готова .

    Во втором примере при выключении плиты Юля будет сразу её включать, таким образом, плита всегда будет включена, и курица приготовится за 20 минут.

    E. История максимумов

    Комбинаторика математика *2300

    Задан массив a, состоящий из n элементов. Определим fa следующим образом:

    • Изначально fa = 0, M = 1;
    • для каждого 2 ≤ i ≤ n если aM < ai, то установим fa = fa + aM и M = i.

    Посчитайте сумму fa по всем n! перестановкам массива a по модулю 109 + 7.

    Обратите внимание, что два элемента считаются различными, если различаются их позиции, поэтому у любого массива a есть ровно n! перестановок.

    Входные данные

    В первой строке записано целое число n (1 ≤ n ≤  1 000 000) — размер массива a.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤  ai ≤  109).

    Выходные данные

    Выведите одно целое число, сумму fa по всем n! перестановкам массива a по модулю 109 + 7.

    Примечание

    Перестановки во втором примере:

    • p = [1, 2, 3] : fa равно 1;
    • p = [1, 3, 2] : fa равно 1;
    • p = [2, 1, 3] : fa равно 1;
    • p = [2, 3, 1] : fa равно 1;
    • p = [3, 1, 2] : fa равно 0;
    • p = [3, 2, 1] : fa равно 0.

    Где p — массив позиций оригинального массива a. Сумма fa равна 4.

    B. Друзья

    графы математика реализация *1300

    Однажды Игорь К. бросил программирование и стал заниматься математикой. Как-то раз поздним осенним вечером он сидел за своим столом, читал книгу и о чем-то думал.

    Его внимание привлекло следующее утверждение: "Среди любых шести человек найдутся либо трое попарно знакомых, либо трое попарно незнакомых".

    Игорь К. никак не мог понять, почему же необходимый минимум — 6 человек. "Ну ведь для пятерых то же самое!" — вертелось в его голове. — "Возьмем, например, Макса, Илью, Вову — ну вот же, они все друг друга знают! А теперь к Вове добавим Диму и Олега — и ни один из них не знаком друг с другом! Бред, да и только эта ваша математика!"

    Игорь К. взял пятерых своих знакомых и записал, кто из них с кем дружит. Теперь он хочет проверить, верно ли для этих пятерых человек, что среди них есть или трое попарно знакомых, или трое попарно незнакомых.

    Входные данные

    В первой строке записано целое число m (0 ≤ m ≤ 10) — количество отношений знакомств между пятью друзьями Игоря К.

    В каждой из следующих m строк записано два различных целых числа ai и bi (1 ≤ ai, bi ≤ 5) — номера пары людей, которые знакомы друг с другом. Гарантируется, что каждая пара знакомых людей записана ровно один раз. Отношение знакомства симметрично, то есть если x знаком с y, то и y знаком с x.

    Выходные данные

    Выведите "FAIL", если среди этих пяти человек нет ни троих попарно знакомых, ни троих попарно незнакомых. Иначе выведите "WIN".

    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 соответственно.

    B. Необычное вычитание

    математика теория чисел *1100

    Даны две переменные a и b. Рассмотрим следующую последовательность действий над этими переменными:

    1. Если a = 0 или b = 0, закончить процесс. Иначе перейти к шагу 2;
    2. Если a ≥ 2·b, то присвоить a значение a - 2·b и повторить шаг 1. Иначе перейти к шагу 3;
    3. Если b ≥ 2·a, то присвоить b значение b - 2·a и повторить шаг 1. Иначе закончить процесс.

    Изначально значения a и b — положительные целые числа, поэтому алгоритм отработает за конечное время.

    Определите значения a и b после завершения работы алгоритма.

    Входные данные

    В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 1018). n — начальное значение переменной a, m — начальное значение переменной b.

    Выходные данные

    Выведите два числа — значения a и b после завершения работы алгоритма.

    Примечание

    Пояснения к примерам:

    1. a = 12, b = 5 a = 2, b = 5 a = 2, b = 1 a = 0, b = 1;
    2. a = 31, b = 12 a = 7, b = 12.

    B. Чехарда в массиве

    Конструктив математика *1700

    Дима — начинающий программист. В ходе работы ему регулярно приходится проделывать одну и ту же операцию: удалить из массива каждый второй элемент. В один прекрасный день ему надоели простые решения этой задачи, и он придумал следующий экстравагантный алгоритм.

    Будем считать, что изначально в массиве находятся n чисел от 1 до n, причём число i располагается в ячейке c индексом 2i - 1 (нумерация элементов в массиве начинается с единицы), а остальные ячейки массива пустые. Далее, на каждом шаге Дима выбирает непустую ячейку массива с максимальным индексом, и перемещает записанное в ней число в ближайшую пустую ячейку слева от выбранной. Процесс продолжается до тех пор, пока все n чисел не окажутся в первых n ячейках массива. Например, если n = 4, содержимое массива изменяется следующим образом:

    Вам предстоит написать программу, которая позволит определять, какое число окажется в ячейке под номером x (1 ≤ x ≤ n) после окончания работы алгоритма Димы.

    Входные данные

    В первой строке вводятся целые числа n и q (1 ≤ n ≤ 1018, 1 ≤ q ≤ 200 000) — число элементов в массиве и количество запросов, на которые необходимо дать ответ. В каждой из последующих q строк вводится целое число xi (1 ≤ xi ≤ n) — номер ячейки, для которой необходимо определить содержимое после окончания работы алгоритма.

    Выходные данные

    Для каждого из q запросов выведите одно целое число — значение, которое будет содержать указанная ячейка массива после окончания работы алгоритма Димы.

    Примечание

    Первый пример показан на рисунке.

    Во втором примере окончательный массив выглядит так: [1, 12, 2, 8, 3, 11, 4, 9, 5, 13, 6, 10, 7].

    D. Конные скачки

    дп математика *2500

    Петя очень любит конные скачки. В скачках принимают участие лошади с номерами от l до r включительно. Петя хочет оценить вероятность выигрыша, для этого ему зачем-то нужно найти количество почти счастливых номеров лошадей. Номер называется почти счастливым, если в нем есть хотя бы две счастливые цифры, расстояние между которыми не превосходит k. От львовских ребят Петя узнал, что счастливые цифры — это цифры 4 и 7. Расстояние между цифрами — это модуль разности между их позициями в числе. Например, при k = 2 номера 412395497, 404, 4070400000070004007 являются почти счастливыми, а номера 4, 4123954997, 4007000040070004007 — не являются.

    Петя подготовил t отрезков [li, ri] и придумал общее для всех отрезков число k. Ваша задача — найти для каждого отрезка количество почти счастливых чисел в нем по модулю 1000000007 (109 + 7).

    Входные данные

    В первой строке задано два целых числа t и k (1 ≤ t, k ≤ 1000) — количество тестов и расстояние между цифрами соответственно. В следующих t строках заданы пары целых чисел li и ri (1 ≤ l ≤ r ≤ 101000). Все числа заданы без лидирующих нулей. Числа в строках разделены ровно одним пробелом.

    Выходные данные

    Выведите t строк. В каждой из их выведите одно число — ответ для соответствующего теста по модулю 1000000007 (109 + 7).

    Примечание

    В первом примере имеется четыре почти счастливых числа: 44, 47, 74, 77.

    Во втором примере только 74 и 77 попадают в данный отрезок.

    A. Левши, правши и амбидекстры

    математика реализация *800

    На тренировки по водному боулингу ходят l игроков, которые играют левой рукой, r игроков, которые играют правой рукой и a амбидекстров, которые умеют играть и левой и правой рукой.

    Тренер решил составить команду, состоящую из четного числа игроков, при этом ровно половина игроков из команды должны играть левой рукой, а ровно половина — правой. Каждый игрок будет играть лишь одной рукой.

    Амбидекстр — это человек, который одинаково хорошо владеет и левой и правой рукой. В команде амбидекстр может играть как левой так и правой рукой.

    Найдите наибольший возможный размер команды, в которой одинаковое количество игроков играют левой и правой рукой.

    Входные данные

    В первой строке следует три целых числа l, r и a (0 ≤ l, r, a ≤ 100) — количество левшей, правшей и амбидекстров, которые ходят на тренировки.

    Выходные данные

    Выведите единственное четное число — максимальное количество игроков, из которых можно составить команду. Допустимо, что команда может состоять из нуля игроков.

    Примечание

    В первом примере можно составить команду из 6 человек. Для этого нужно взять единственного игрока, который играет только левой рукой, двух амбидекстров, которые должны будут играть левой рукой, а также трёх игроков, которые играют только правой рукой. Таким образом, останется всего один игрок, который играет только правой рукой, которого взять в команду не получится.

    Во втором примере можно составить команду из 14 человек. Для этого нужно взять всех пятерых игроков, которые играют только левой рукой, всех пятерых игроков, которые играют только правой рукой, ещё двух амбидекстров, которые должны будут играть левой рукой, а также двух амбидекстров, которые будут играть правой рукой.

    A. Quirky Quantifiers

    математика *800

    Входные данные

    Входные данные содержат одно целое число a (10 ≤ a ≤ 999).

    Выходные данные

    Выведите 0 или 1.

    I. И снова равные строки

    бпф математика *2200

    Пусть вам даны две строки s и t, состоящие из латинских букв от a до f. Длины этих строк равны. Разрешено проводить над ними произвольное количество раз операцию вида: выбрать два различных символа c1 и c2 и заменить все вхождения символа c1 в обеих строках на c2. Определим расстояние между строками s и t, как минимальное количество раз, которое нужно применить операцию, чтобы строки стали равными. Например, если s равна abcd и t равна ddcb, расстояние между ними равно 2 — можно заменить все вхождения символа a на b, превратив s в bbcd и заменить все b на d, строки станут равны ddcd.

    Вам даны две строки S и T. Для каждой подстроки S, состоящей из |T| символов, определите расстояние между этой подстрокой и T.

    Входные данные

    Первая строка содержит S, вторая — T (1 ≤ |T| ≤ |S| ≤ 125000). Обе строки состоят из строчных латинских букв от a до f.

    Выходные данные

    Выведите |S| - |T| + 1 целых чисел. Число на позиции i должно равняться расстоянию между подстрокой S, начинающейся в позиции i, длины |T| и строкой T.

    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 рублей суммарно.

    C. Грустные степени

    Бинарный поиск математика теория чисел *2100

    Дано Q запросов формата (L, R).

    Для каждого запроса необходимо посчитать количество таких x, что L ≤ x ≤ R и существуют натуральные числа a > 0, p > 1, для которых выполняется x = ap.

    Входные данные

    В первой строке задано число запросов Q (1 ≤ Q ≤ 105).

    Следующие Q строк содержат по два числа L, R (1 ≤ L ≤ R ≤ 1018).

    Выходные данные

    Выведите Q чисел — ответы на запросы.

    Примечание

    В первом запросе подходят числа 1 и 4.

    D1. Hyperspace Jump (easy)

    математика Разбор выражений *1400

    The Rebel fleet is on the run. It consists of m ships currently gathered around a single planet. Just a few seconds ago, the vastly more powerful Empire fleet has appeared in the same solar system, and the Rebels will need to escape into hyperspace. In order to spread the fleet, the captain of each ship has independently come up with the coordinate to which that ship will jump. In the obsolete navigation system used by the Rebels, this coordinate is given as the value of an arithmetic expression of the form .

    To plan the future of the resistance movement, Princess Heidi needs to know, for each ship, how many ships are going to end up at the same coordinate after the jump. You are her only hope!

    Input

    The first line of the input contains a single integer m (1 ≤ m ≤ 200 000) – the number of ships. The next m lines describe one jump coordinate each, given as an arithmetic expression. An expression has the form (a+b)/c. Namely, it consists of: an opening parenthesis (, a positive integer a of up to two decimal digits, a plus sign +, a positive integer b of up to two decimal digits, a closing parenthesis ), a slash /, and a positive integer c of up to two decimal digits.

    Output

    Print a single line consisting of m space-separated integers. The i-th integer should be equal to the number of ships whose coordinate is equal to that of the i-th ship (including the i-th ship itself).

    Note

    In the sample testcase, the second and the third ship will both end up at the coordinate 3.

    Note that this problem has only two versions – easy and hard.

    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.

    A. Махмуд, Эхаб и игра в четное-нечетное

    игры математика *800

    Махмуд и Эхаб играют в игру, которую они называют игрой в четное-нечетное. Эхаб выбирает его любимое положительное целое число n, после чего они ходят по очереди. Первый ход делает Махмуд. Каждый игрок в свой ход должен уменьшить n на целое число a, выбранное этим игроком, такое, что:

    • 1 ≤ a ≤ n.
    • Если ходит Махмуд, a должно быть чётным, а если ходит Эхаб, a должно быть нечётным.

    Если игрок в свой ход не может выбрать число, удовлетворяющее данным условиям, он проигрывает игру. Определите, кто выиграет при оптимальной игре обоих игроков.

    Входные данные

    В единственной строке находится целое число n (1 ≤ n ≤ 109) — число, выбранное Эхабом в начале игры.

    Выходные данные

    Выведите «Mahmoud» (без кавычек), если победит Махмуд и «Ehab» (без кавычек) в противном случае.

    Примечание

    В первом примере Махмуд изначально не может выбрать ни одного целого числа a, поскольку нету положительных целых чётных чисел, меньше или равных 1, поэтому победит Эхаб.

    Во втором примере, Махмуд обязан выбрать a = 2 и вычесть его из n. Теперь ход Эхаба и n = 0. Не существует положительных целых нечётных чисел, меньших или равных 0, поэтому Махмуд победит.

    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.

    Примечание

    Заметьте, что во втором примере все числа в массиве уже попарно взаимнопросты, поэтому мы и выводим его.

    E. Махмуд, Эхаб, исключащее ИЛИ и минимальное остовное дерево

    битмаски графы дп математика реализация *1900

    Эхаб интересуется побитовым исключающим ИЛИ и особыми графами, поэтому Махмуд предложил ему задачу про оба его интереса сразу. У Махмуда есть полный граф, состоящий из n вершин, пронумерованных с 0 до n - 1. Для любых 0 ≤ u < v < n, вес ненаправленного ребра между вершинами u и v равен (где  — операция побитового исключающего ИЛИ). Можете ли вы найти вес минимального остовного дерева данного графа?

    Прочитать про полные графы можно в https://ru.wikipedia.org/wiki/Полный_граф.

    Прочитать про минимальное остовное дерево можно в https://ru.wikipedia.org/wiki/Минимальное_остовное_дерево.

    Вес минимального остовного дерева равен весу всех рёбер, включённых в него.

    Входные данные

    В единственной строке содержится одно целое число n (2 ≤ n ≤ 1012) — число вершин в графе.

    Выходные данные

    В единственной строке содержится одно целое число x — вес минимального остовного дерева данного графа.

    Примечание

    В первом примере: Вес минимального остовного дерева равен 1+2+1=4.

    F. Махмуд, Эхаб и ещё одна задача про исключающее ИЛИ

    битмаски дп математика матрицы *2400

    У Эхаба есть массив a из n целых чисел. Он любит операцию побитового исключающего ИЛИ, а ещё он любит надоедать Махмуду, поэтому он придумал для него задачу. Он дал Махмуду q запросов. В каждом из них он дал Махмуду два целых числа l и x и попросил его найти число подпоследовательностей первых l элементов массива таких, что побитовое исключающее ИЛИ всех этих чисел будет равно x. Можете ли вы помочь Махмуду ответить на запросы?

    Подпоследовательность может содержать не соседние элементы.

    Входные данные

    Первая строка содержит целые числа n и q (1 ≤ n, q ≤ 105) — число элементов в массиве и число запросов.

    В следующей строке содержится n целых чисел a1, a2, ..., an (0 ≤ ai < 220) — элементы массива.

    В каждой из следующих q строк содержатся целые числа l и x (1 ≤ l ≤ n, 0 ≤ x < 220) — запросы Эхаба.

    Выходные данные

    Для каждого запроса, выведите ответ по модулю 109 + 7 в новой строке.

    Примечание

    Побитовое исключающее ИЛИ всех чисел пустого множества равно 0, а побитовое исключающее ИЛИ всех чисел множества из одного элемента равно этому элементу.

    G. Бандитский блюз

    бпф дп Комбинаторика математика *2900

    Джапате, путешествуя через леса Мала, увидел N мешков с золотом, лежащих в ряд. У каждого мешка есть своя масса, отличная от масс других мешков, от 1 до N. Джапате может унести с собой только один мешок с золотом, поэтому он использует стратегию для выбора мешка: изначально он стартует с пустым мешком (массы 0), после чего начинает идти вдоль ряда мешков, и если он видит, что текущий мешок тяжелее мешка в его руках, он подбирает текущий мешок.

    Джапате понял, что если он пойдёт слева направо, то он подберёт A мешков, а если он пойдёт справа налево, он подберёт B мешков.

    Теперь ему интересно, сколько существует таких перестановок мешков, в которых он подбирает A мешков, идя слева направо и B мешков, идя справа налево, используя вышеупомянутую стратегию.

    Так как ответ может быть крайне велик, выведите его по модулю 998244353.

    Входные данные

    В единственной строке ввода содержится три целых числа, разделённых пробелами — N (1 ≤ N ≤ 105), A и B (0 ≤ A, B ≤ N)

    Выходные данные

    Выведите одно целое число — число подходящих перестановок по модулю 998244353.

    Примечание

    В примере 1 единственная возможная перестановка — [1]

    В примерах 2 и 3 возможны всего две перестановки размера 2:{[1, 2], [2, 1]}. Величины a и b для первой перестановки равны 2 и 1 соответственно, а для второй перестановки эти величины равны 1 и 2 соответственно.

    В примере 4 из 120 возможных перестановок [1, 2, 3, 4, 5] всего 22 удовлетворяют заданным в примере a и b.

    G. Разбиения

    Комбинаторика математика теория чисел *2700

    Дано множество из n элементов, пронумерованных от 1 до n. Вес i-го объекта равен wi. Вес некоторого подмножества этого множества рассчитывается по формуле . Вес разбиения R данного множества на k подмножеств равен (напоминаем, разбиением называется множество таких подмножеств данного множества, что каждый элемент данного множества принадлежит ровно одному множеству из разбиения).

    Посчитайте суммарный вес всех различных разбиений данного множества на k непустых подмножеств по модулю 109 + 7. Два разбиения считаются различными, если существуют два объекта x и y, такие, что в одном разбиении они принадлежат разным множествам, а в другом — одному и тому же.

    Входные данные

    В первой строке заданы целые числа n и k (1 ≤ k ≤ n ≤ 2·105) — количество элементов в множестве и количество подмножеств в разбиении.

    Во второй строке задано через пробел n целых чисел wi (1 ≤ wi ≤ 109)— соответствующие веса элементов.

    Выходные данные

    Выведите единственное число — суммарный вес всех различных разбиений на k непустых подмножеств по модулю 109 + 7.

    Примечание

    Возможные разбиения в первом тесте из условия:

    1. {{1, 2, 3}, {4}}, W(R) = 3·(w1 + w2 + w3) + 1·w4 = 24;
    2. {{1, 2, 4}, {3}}, W(R) = 26;
    3. {{1, 3, 4}, {2}}, W(R) = 24;
    4. {{1, 2}, {3, 4}}, W(R) = 2·(w1 + w2) + 2·(w3 + w4) = 20;
    5. {{1, 3}, {2, 4}}, W(R) = 20;
    6. {{1, 4}, {2, 3}}, W(R) = 20;
    7. {{1}, {2, 3, 4}}, W(R) = 26;

    Возможные разбиения в втором тесте из условия:

    1. {{1, 2, 3, 4}, {5}}, W(R) = 45;
    2. {{1, 2, 3, 5}, {4}}, W(R) = 48;
    3. {{1, 2, 4, 5}, {3}}, W(R) = 51;
    4. {{1, 3, 4, 5}, {2}}, W(R) = 54;
    5. {{2, 3, 4, 5}, {1}}, W(R) = 57;
    6. {{1, 2, 3}, {4, 5}}, W(R) = 36;
    7. {{1, 2, 4}, {3, 5}}, W(R) = 37;
    8. {{1, 2, 5}, {3, 4}}, W(R) = 38;
    9. {{1, 3, 4}, {2, 5}}, W(R) = 38;
    10. {{1, 3, 5}, {2, 4}}, W(R) = 39;
    11. {{1, 4, 5}, {2, 3}}, W(R) = 40;
    12. {{2, 3, 4}, {1, 5}}, W(R) = 39;
    13. {{2, 3, 5}, {1, 4}}, W(R) = 40;
    14. {{2, 4, 5}, {1, 3}}, W(R) = 41;
    15. {{3, 4, 5}, {1, 2}}, W(R) = 42.

    C. Сделай квадрат

    математика Перебор реализация *1400

    Задано целое положительное число \(n\), запись которого не содержит лидирующих нулей (например, запись 04 недопустима).

    За один ход вы можете удалить любую его цифру так, чтобы результат остался положительным числом без лидирующих нулей.

    Определите минимальное количество операций, которые можно последовательно применить, чтобы сделать заданное число \(n\) квадратом некоторого целого положительного числа, либо сообщите, что это невозможно.

    Целое число \(x\) является квадратом некоторого целого положительного числа, если \(x=y^2\) для некоторого целого положительного \(y\).

    Входные данные

    В первой строке следует целое положительное число \(n\) (\(1 \le n \le 2 \cdot 10^{9}\)). Число задано без лидирующих нулей.

    Выходные данные

    Если невозможно сделать из числа \(n\) с помощью описанных операций квадрат некоторого целого положительного числа, выведите -1. В противном случае, выведите минимальное количество операций, которые необходимы для этого.

    Примечание

    В первом примере из числа \(8314\) нужно удалить цифру \(3\) и цифру \(4\). После этого \(8314\) станет равно числу \(81\), которое является квадратом числа \(9\).

    Во втором примере число \(625\) изначально является квадратом числа \(25\), поэтому ничего удалять не нужно.

    В третьем примере невозможно получить из числа \(333\) квадрат целого числа, поэтому ответ на этот примере -1.

    A. Знакопеременная сумма

    математика теория чисел *1800

    Заданы два целых числа \(a\) и \(b\). Кроме того, задана последовательность \(s_0, s_1, \dots, s_{n}\). Все значения последовательности \(s\) — это целые значения \(1\) или \(-1\). Известно, что последовательность \(k\)-периодична и \(k\) делит \(n+1\). Иными словами, для любого \(k \leq i \leq n\) выполняется \(s_{i} = s_{i - k}\).

    Вычислите неотрицательный остаток от деления выражения \(\sum \limits_{i=0}^{n} s_{i} a^{n - i} b^{i}\) при делении на \(10^{9} + 9\).

    Обратите внимание, в задаче нестандартный модуль!

    Входные данные

    В первой строке заданы четыре целых числа \(n, a, b\) и \(k\) \((1 \leq n \leq 10^{9}, 1 \leq a, b \leq 10^{9}, 1 \leq k \leq 10^{5})\).

    Во второй строке находится последовательность длины \(k\) из знаков '+' и '-'. Если символ c номером \(i\) (нумерация с 0) — это +, то \(s_{i} = 1\), иначе \(s_{i} = -1\).

    Обратите внимание, заданы только первые \(k\) членов последовательности, остальные можно получить, используя свойство периодичности.

    Выходные данные

    Выведите одно целое число — значение данного выражения по модулю \(10^{9} + 9\).

    Примечание

    В первом тестовом примере:

    \((\sum \limits_{i=0}^{n} s_{i} a^{n - i} b^{i})\) = \(2^{2} 3^{0} - 2^{1} 3^{1} + 2^{0} 3^{2}\) = 7

    Во втором тестовом примере:

    \((\sum \limits_{i=0}^{n} s_{i} a^{n - i} b^{i}) = -1^{4} 5^{0} - 1^{3} 5^{1} - 1^{2} 5^{2} - 1^{1} 5^{3} - 1^{0} 5^{4} = -781 \equiv 999999228 \pmod{10^{9} + 9}\).

    C. Разрезы прямоугольника

    математика Перебор теория чисел *2600

    Прямоугольник со сторонами \(A\) и \(B\) разрезали на прямоугольники разрезами, параллельными его сторонам. Например, если было сделано \(p\) горизонтальных и \(q\) вертикальных разрезов, то было получено \((p + 1) \cdot (q + 1)\) прямоугольников. В результате было получено \(n\) различных видов прямоугольников. Два прямоугольника различны, если хотя бы одна сторона у них имеет разную длину. Обратите внимание, что прямоугольники не поворачивали, то есть прямоугольники \(a \times b\) и \(b \times a\) считаются различными при \(a \neq b\).

    Для каждого вида прямоуольников даны размеры прямоугольников этого вида, а также количество прямоугольников этого вида, которое было получено в результате разреза исходного прямоугольника.

    Посчитайте количество пар \((A; B)\) таких, что в результате разрезания прямоугольника со сторонами \(A\) и \(B\) могли быть получены данные прямоугольники. Обратите внимание, что \((A; B)\) и \((B; A)\) считаются различными парами при \(A \neq B\).

    Входные данные

    В первой строке находится целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^{5}\)) — количество видов прямоугольников, полученных в результате разрезания исходного прямоугольника.

    В следующих \(n\) строках содержатся три целых числа \(w_{i}, h_{i}, c_{i}\) \((1 \leq w_{i}, h_{i}, c_{i} \leq 10^{12})\) — размеры прямоугольника некоторого вида и количество прямоугольников такого вида.

    Гарантируется, что прямоугольники разных видов различны.

    Выходные данные

    Выведите одно целое число — ответ на задачу.

    Примечание

    В первом примере подходящими парами являются \((1; 9)\), \((3; 3)\) и \((9; 1)\).

    Во втором примере есть 6 подходящих пар: \((2; 220)\), \((4; 110)\), \((8; 55)\), \((10; 44)\), \((20; 22)\) и \((40; 11)\).

    Ниже пример разрезания для получения \((20; 22)\).

    В третьем примере не существует ни одной подходящей пары.

    E. Круги ожидания

    математика *3100

    Фишку поставили на поле с системой координат в точку (0, 0).

    Каждую секунду фишка перемещается случайным образом. Пусть в некоторый момент времени фишка находится на позиции (x, y). Тогда через секунду она с вероятностью p1 окажется на позиции (x - 1, y), с вероятностью p2 окажется на позиции (x, y - 1), с вероятностью p3 окажется на позиции (x + 1, y), а с вероятностью p4 — на позиции (x, y + 1). Гарантируется, что p1 + p2 + p3 + p4 = 1.

    Требуется посчитать математическое ожидание времени, через которое фишка впервые отдалится от начала координат на расстояние, большее R (то есть будет выполнено ).

    Входные данные

    В первой строке вводятся пять целых чисел R, a1, a2, a3 и a4 (0 ≤ R ≤ 50, 1 ≤ a1, a2, a3, a4 ≤ 1000).

    Вероятности pi вычисляются по формуле .

    Выходные данные

    Можно показать, что ответом на задачу всегда является рациональное число вида , где .

    В качестве ответа выведите P·Q - 1 по модулю 109 + 7.

    Примечание

    В первом тестовом примере фишка изначально находится на расстоянии 0 от начала координат. Через секунду фишка сдвинется на 1 в какую-то сторону, поэтому расстояние от нее до начала координат станет равным 1.

    Ответы на второй и третий тесты: и .

    A. Разбиения

    математика *800

    Назовем разбиением числа \(n\) невозрастающую последовательность из натуральных чисел, которые в сумме дают \(n\).

    Следующие последовательности являются разбиениеми числа \(8\): \([4, 4]\), \([3, 3, 2]\), \([2, 2, 1, 1, 1, 1]\), \([5, 2, 1]\).

    Данные последовательности не являются разбиениеми числа \(8\): \([1, 7]\), \([5, 4]\), \([11, -3]\), \([1, 1, 4, 1, 1]\).

    Весом разбиения является число элементов равных первому. Например вес разбиения \([1, 1, 1, 1, 1]\) равен \(5\), вес разбиения \([5, 5, 3, 3, 3]\) равен \(2\), а вес разбиения \([9]\) равен \(1\).

    Для заданного числа \(n\) определите количество различных весов его разбиений.

    Входные данные

    В первой строке задано целое число \(n\) (\(1 \leq n \leq 10^9\)).

    Выходные данные

    Выведите одно целое число — ответ на задачу.

    Примечание

    В первом тестовом примере возможны следующие веса разбиения числа \(7\):

    Вес 1: [\(\textbf 7\)]

    Вес 2: [\(\textbf 3\), \(\textbf 3\), 1]

    Вес 3: [\(\textbf 2\), \(\textbf 2\), \(\textbf 2\), 1]

    Вес 7: [\(\textbf 1\), \(\textbf 1\), \(\textbf 1\), \(\textbf 1\), \(\textbf 1\), \(\textbf 1\), \(\textbf 1\)]

    B. Сообщения

    математика *1300

    Васе на телефон в ближайшее время придет n сообщений. Сообщение с номером i придёт через ti минут. У каждого сообщения есть цена, которая изначально равна A. После того, как сообщение пришло Васе, его цена уменьшается на B каждую минуту, и в том числе может стать отрицательной. В любой момент времени Вася может прочитать любые сообщения. Когда Вася читает сообщение, к его счету добавляется текущая цена этого сообщения. Изначально счёт Васи равен 0.

    Кроме того, каждую минуту к счёту Васи прибавляется C·k, где k — количество уже полученных, но ещё не прочитанных сообщений.

    Поскольку сообщения очень важны для Васи, он хочет, чтобы через T минут все сообщения были прочитаны.

    Определите, какой максимальный счёт может быть у Васи через T минут.

    Входные данные

    В первой строке находятся пять целых чисел n, A, B, C и T (1 ≤ n, A, B, C, T ≤ 1000).

    Во второй строке находятся n целых чисел ti (1 ≤ ti ≤ T).

    Выходные данные

    Выведите одно целое число — ответ на задачу.

    Примечание

    В первом примере сообщения нужно прочитать сразу, Вася получит A очков за каждое сообщение, то есть всего n·A = 20 очков.

    Во второй примере сообщения можно прочитать в любой целочисленный момент.

    В третьем примере сообщения нужно прочитать в момент времени T. Тогда у Васи будет 1, 2, 3, 4 и 0 непрочитанных сообщений в соответствующие минуты, он получит 40 очков за них. Когда он прочитает сообщения, он получит (5 - 4·3) + (5 - 3·3) + (5 - 2·3) + (5 - 1·3) + 5 =  - 5 очков, что даст итоговый счет 35.

    A. Бумажные самолётики

    математика *800

    Чтобы сделать бумажный самолётик, нужен прямоугольный лист бумаги. Из листа стандартного размера можно сделать \(s\) самолётиков.

    Группа из \(k\) людей решила сделать \(n\) самолётиков каждый. Они купят несколько пачек бумаги, в каждой из которых содержится \(p\) листов, после чего распределят листы между собой. У каждого человека после этого должно быть достаточно листов бумаги, чтобы он смог сделать \(n\) самолётиков. Сколько пачек они должны купить?

    Входные данные

    В единственной строке содержатся четыре целых числа \(k\), \(n\), \(s\), \(p\) (\(1 \le k, n, s, p \le 10^4\)) — число людей в группе, число самолётиков, которое хочет сделать каждый из группы, число самолётиков, которое можно сделать из одного листа бумаги и количество листов бумаги в одной пачке соответственно.

    Выходные данные

    Выведите одно целое число — минимальное число пачек бумаги, которое должна купить группа.

    Примечание

    В первом примере необходимо купить \(4\) пачки бумаги: в сумме будет \(12\) листов бумаги, и \(2\) листа бумаги на человека хватит для нужд каждого.

    Во втором примере необходимо купить пачку для каждого, поскольку несколько людей не могут делать самолётики из одного и того же листа.

    C. Жадный Аркадий

    математика *2000

    \(k\) людей хотят разделить \(n\) конфет между собой. Каждая конфета должна достаться ровно одному из этих людей либо быть выброшена.

    Люди пронумерованы от \(1\) до \(k\), и Аркадий — первый из них. Чтобы разделить конфеты, Аркадий выберет целое положительное число \(x\), после чего заберет первые \(x\) конфет себе, следующие \(x\) конфет отдаст второму человеку, следующие \(x\) конфет — третьему человеку и так далее по кругу. Остаток (от деления числа конфет на \(x\)) будет выброшен.

    Аркадий не может выбрать \(x\) больший, чем \(M\), так как это будет расценено как слишком жадное поведение. Также он не может выбрать настолько малый \(x\), что кто-то получит конфеты больше \(D\) раз, так как такое разделение посчитают слишком медленным.

    Пожалуйста, найдите максимальное количество конфет, которое может получить Аркадий при раздаче с корректным \(x\).

    Входные данные

    В единственной строке содержится четыре целых числа \(n\), \(k\), \(M\) и \(D\) (\(2 \le n \le 10^{18}\), \(2 \le k \le n\), \(1 \le M \le n\), \(1 \le D \le \min{(n, 1000)}\), \(M \cdot D \cdot k \ge n\)) — число конфет, число людей, максимальное число конфет, отпускаемое за раз в одни руки и максимальное количество раз, которое один человек может получать конфеты.

    Выходные данные

    Выведите одно целое число — максимальное количество конфет, которое Аркадий может отдать самому себе.

    Обратите внимание, выбрать хотя бы один корректный \(x\) всегда возможно.

    Примечание

    В первом примере Аркадий должен выбрать \(x = 4\). Он отдаст \(4\) конфеты себе, \(4\) конфеты второму, \(4\) конфеты третьему, после чего \(4\) четвёртому и опять \(4\) конфеты себе. Никто не получал конфет больше \(2\) раз и Аркадий получит в общей сложности \(8\) конфет.

    Заметьте, что если Аркадий выберет \(x = 5\), он получит только \(5\) конфет, и если он выберет \(x = 3\), он получит только \(3 + 3 = 6\) конфет, как и второй, третий и четверный получат по \(3\) конфеты, а \(2\) конфеты будут выброшены. Он не может выбрать \(x = 1\), как и \(x = 2\), потому что в этом случае он получит конфеты больше \(2\) раз.

    Во втором примере Аркадий обязан выбрать \(x = 4\), так как любое значение меньше приведёт к тому, что он получит конфеты больше \(1\) раза.

    B. Поливальная система

    математика сортировки *1000

    Аркадий собирается полить свой единственный цветок. К сожалению, у него в наличии лишь очень неудобная система полива, разработанная для \(n\) цветов, и потому имеющая вид трубы с \(n\) отверстиями. Аркадий может использовать только воду, вытекающую из первого отверстия.

    Аркадий может заткнуть некоторые отверстия, а затем он нальет \(A\) литров воды в систему полива. После этого вода вытечет через все незаткнутые отверстия пропорционально их размерам \(s_1, s_2, \ldots, s_n\). Другими словами, если сумма размеров незаткнутых отверстий равна \(S\), и \(i\)-е отверстие не заткнуто, то из него вытечет \(\frac{s_i \cdot A}{S}\) литров воды.

    Какое минимальное число отверстий Аркадию необходимо заткнуть, чтобы из первого отверстия вытекло хотя бы \(B\) литров воды?

    Входные данные

    Первая строка содержит три целых числа \(n\), \(A\), \(B\) (\(1 \le n \le 100\,000\), \(1 \le B \le A \le 10^4\)) — количество отверстий, объем воды, которые Аркадий зальет в систему, и объем, который должен вытечь из первого отверстия.

    Вторая строка содержит \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) (\(1 \le s_i \le 10^4\)) — размеры отверстий.

    Выходные данные

    Выведите одно целое число — количество отверстий, которые должен заткнуть Аркадий.

    Примечание

    В первом примере Аркадий должен заткнуть одно отверстие. После этого \(\frac{10 \cdot 2}{6} \approx 3.333\) литров воды вытечет из первого отверстия, что достаточно Аркадию.

    Во втором примере, даже если не затыкать отверстия, из первого отверстия вытечет \(\frac{80 \cdot 3}{10} = 24\) литров воды, что не меньше необходимых \(20\).

    В третьем примере Аркадию нужно заткнуть все отверстия, кроме первого, чтобы вся вода вытекла из первого отверстия.

    C. Выигрышная cтратегия

    Бинарный поиск графы кратчайшие пути математика *2400

    В одном университете совсем недавно узнали о существовании соревнования по спортивному программированию под названием ACM ICPC v2.0. Данное соревнование мало чем отличается от всем известного ACM ICPC, например, в финале соревнования участникам запрещается участвовать более двух раз. Однако, есть одно существенное отличие: команды в этом состязании должны состоять ровно из n участников.

    Поучаствовав в нескольких финалах ACM ICPC v2.0 и не добившись ни одной медали, студенты и руководство университета поняли, что настало время изменить что-то в процессе подготовки. В частности, в качестве первой инновации было решено изменить процесс формирования команд. Потратив немалое количество времени на изучение статистики выступлений других университетов, удалось получить некоторую интересную информацию: вероятность получения медали в зависимости от количества членов команды, побывавших на финале ранее. Более формально, известно n + 1 действительных чисел p0 ≤ p1 ≤ ... ≤ pn, где pi — вероятность получения медали на финале, если в команде присутствуют i участников прошлых финалов, а остальные n - i участников приехали на финал впервые.

    Несмотря на такие полезные данные, руководство университета не в состоянии определить такую тактику формирования команд, которая обеспечит максимальную вероятность получения медали на финале ACM ICPC v2.0 в среднем (подразумевается, что мы хотим обеспечить такой результат на далекое будущее и обладаем бесконечным ресурсом студентов). А сможете ли вы предложить такую оптимальную тактику? На первом этапе руководству университета достаточно знать лишь значение максимальной средней вероятности.

    Более формально: пусть в k-ый год участия университет послал на финал команду, в которой было ak участников финалов прошлых лет (0 ≤ ak ≤ n). Так как один человек может участвовать в финале не более двух раз, должно выполняться условие: . Ваша задача — выбрать последовательность таким образом, что предел Ψ существует и его значение максимально:

    Так как — бесконечная последовательность, вывести требуется только максимальное значение предела Ψ.

    Входные данные

    В первой строке задано целое число n (3 ≤ n ≤ 100), n — количество участников команды. Во второй строке заданы n + 1 действительных чисел, с не более чем 6-ю знаками после десятичной точки, pi (0 ≤ i ≤ n, 0 ≤ pi ≤ 1) — вероятность того, что команда сможет выиграть медаль, если в ее состав входят i участников, побывавших на финале ранее. Также выполняется условие, что pi ≤ pi + 1 для всех 0 ≤ i ≤ n - 1.

    Выходные данные

    Выведите одно единственное действительное число — ожидаемое среднее количество выигранных медалей в год, при использовании оптимальной стратегии. Для ответа допустима абсолютная или относительная погрешность 10 - 6.

    Примечание

    Во втором тесте, из каких бы участников не состояла команда, она обречена на успех.

    D. Призраки

    геометрия математика *2000

    Призраки «живут» в мире и гармонии, путешествуя сквозь пространство с одной лишь целью — пугать тех, кто находится у них на пути.

    Во вселенной \(n\) призраков. Они двигаются в плоскости \(OXY\) с постоянной скоростью каждый: \(\overrightarrow{V} = V_{x}\overrightarrow{i} + V_{y}\overrightarrow{j}\), где \(V_{x}\) — скорость призрака в проекции на ось \(x\), а \(V_{y}\) — в проекции на ось \(y\).

    Призрак \(i\) обладает опытом \(EX_i\), равным числу раз, которое он был испуган другими призраками в прошлом. Два призрака пугают друг друга, если они находятся в одной точке на плоскости в один момент времени.

    Из-за того, что скорости призраков постоянны, после какого-то момента времени призраки больше не будут пугать друг друга (какое облегчение!). Тогда суммарный опыт призраков \(GX = \sum_{i=1}^{n} EX_i\) перестанет увеличиваться.

    Красный гигант Тамим сфотографировал декартову плоскость в момент времени \(T\), и волшебным образом все призраки на фотографии находились на прямой \(y = a \cdot x + b\). Вам необходимо выяснить, чему будет равен суммарный опыт призраков \(GX\) после того, как он перестанет увеличиваться.

    Обратите внимание, в момент времени, когда Тамим сделал фотографию, опыт \(GX\) может уже быть больше \(0\), так как призраки могли пугать друг друга в моменты времени в интервале \([-\infty, T]\).

    Входные данные

    В первой строке содержится три целых числа \(n\), \(a\) и \(b\) (\(1 \leq n \leq 200000\), \(1 \leq |a| \leq 10^9\), \(0 \le |b| \le 10^9\)) — число призраков во вселенной и параметры прямой.

    В каждой из следующих \(n\) строк содержится по три целых числа \(x_i\), \(V_{xi}\), \(V_{yi}\) ( \(-10^9 \leq x_i \leq 10^9\), \(-10^9 \leq V_{x i}, V_{y i} \leq 10^9\)), где \(x_i\) — текущая \(x\)-координата \(i\)-го призрака (при этом \(y_i = a \cdot x_i + b\)).

    Гарантируется, что никакие два призрака не находятся в одной точке (другими словами, гарантируется, что для всех \((i,j)\) \(x_i \neq x_j\) при \(i \ne j\).

    Выходные данные

    Выведите одно число полный опыт всех призраков \(GX\) в бесконечном будущем.

    Примечание

    В первом примере есть четыре встречи \((1,2,T-0.5)\), \((1,3,T-1)\), \((2,4,T+1)\), \((3,4,T+0.5)\), где \((u,v,t)\) означает встречу между призраками \(u\) и \(v\) в момент времени \(t\). В момент каждой встречи оба встречающихся призрака получают по единице опыта, поэтому \(GX = 4 \cdot 2 = 8\).

    В втором примере, все призраки встретятся в момент времени \(t = T + 1\).

    Красная стрелка обозначает скорость первого призрака, оранжевая — второго, а синяя — третьего.

    B. Лара Крофт и новая игра

    математика реализация *1300

    Возможно, вы слышали про следующую игру в серии Лара Крофт, которая выходит в этом году. Возможно, вы даже смотрели ее трейлер. Однако вы совершенно точно упустили главную ветку ее сюжета, так что давайте я вам приоткрою завесу тайны.

    Лара собирается исследовать еще одно страшно опасное подземелье. Разработчики решили в этот раз сделать 2D графику. Подземелье можно представить, как прямоугольную матрицу из n строк и m столбцов. Ячейка (x, y) — это ячейка в x-й строке и y-м столбце. Лара может передвигаться между соседними по стороне ячейками во всех четырех направлениях.

    Более того, она уже даже выбрала себе путь, чтобы обойти все ловушки. Она заходит в подземелье в ячейке (1, 1) — это левый верхний угол матрицы. Далее она спускается до конца вниз до ячейки (n, 1) — левый нижний угол. Потом она двигается змейкой — до конца вправо, на один вверх, влево до 2-го столбца, на один вверх, и так далее. Лара продолжает идти, пока не закончатся непосещенные клетки. n и m заданы такими, что она всегда закончит в клетке (1, 2).

    Лара уже k раз перешла в соседнюю клетку. Можете ли вы определить ее текущую позицию?

    Входные данные

    В единственной строке записаны три целых числа n, m и k (2 ≤ n, m ≤ 109, n всегда четно, 0 ≤ k < n·m). Обратите внимание, что k не помещается в 32-битный тип данных.

    Выходные данные

    Выведите ячейку (номер строки и столбца, в которых находится эта ячейка), в которой Лара окажется после того, как k раз перейдёт в соседнюю клетку.

    Примечание

    Такой ее путь будет на матрице 4 на 3:

    D. Почти арифметическая прогрессия

    математика Перебор реализация *1500

    Поликарп обожает арифметические прогрессии. Последовательность \([a_1, a_2, \dots, a_n]\) называется арифметической прогрессией, если для любого \(i\) (\(1 \le i < n\)) значение выражения \(a_{i+1} - a_i\) одинаково. Например, последовательности \([42]\), \([5, 5, 5]\), \([2, 11, 20, 29]\) и \([3, 2, 1, 0]\) — арифметические прогрессии, а \([1, 0, 1]\), \([1, 3, 9]\) и \([2, 3, 1]\) — нет.

    Из определения следует, что любая последовательность из одного элемента или двух элементов — арифметическая прогрессия.

    Поликарп нашел на улице некоторую последовательность положительных целых чисел \([b_1, b_2, \dots, b_n]\). Он согласен изменить каждый из элементов не более чем на единицу. Иными словами, каждый элемент последовательности может быть уменьшен на \(1\), оставлен без изменений или увеличен на \(1\).

    Определите минимальное количество элементов последовательности \(b\), которые нужно изменить Поликарпу на единицу таким образом, чтобы последовательность \(b\) стала арифметической прогрессией, либо сообщите, что это невозможно.

    Допустимо, что после изменений последовательность содержит \(0\).

    Входные данные

    В первой строке следует целое число \(n\) \((1 \le n \le 100\,000)\) — количество элементов в последовательности \(b\).

    Во второй строке следует последовательность \(b_1, b_2, \dots, b_n\) \((1 \le b_i \le 10^{9})\).

    Выходные данные

    Если невозможно получить арифметическую прогрессию с помощью описанных операций, выведите -1. В противном случае, выведите неотрицательное целое число — минимальное количество элементов последовательности, которые нужно изменить на единицу таким образом, чтобы последовательность стала арифметической прогрессией.

    Примечание

    В первом примере нужно увеличить первое число на \(1\), уменьшить второе число на \(1\), увеличить третье число на \(1\), а четвертое число оставить без изменений. Таким образом, после изменения на единицу трех элементов, получим последовательность \([25, 20, 15, 10]\), которая является арифметической прогрессией.

    Во втором примере не нужно изменять ни одного элемента, так как данная последовательность является арифметической прогрессией.

    В третьем примере невозможно получить арифметическую прогрессию.

    В четвертом примере нужно изменить только первый элемент, уменьшив его на единицу. После этого получим последовательность \([0, 3, 6, 9, 12]\), которая является арифметической прогрессией.

    A. Пицца, пицца, пицца!!!

    математика *1000

    Кэти, Куро и Широ — лучшие друзья. Они знают друг друга ещё с детского сада, поэтому очень часто делятся всем между собой и решают сложные задачи вместе.

    Сегодня день рождения Широ. Она очень любит пиццу, поэтому она хочет пригласить своих друзей, включая Куро и Кэти, в пиццерию рядом с её домом. Для того, чтобы накормить всех своих друзей, Широ заказала очень большую круглую пиццу. На день рождения придёт ровно \(n\) друзей Широ, поэтому ей надо разделить пиццу на \(n + 1\) кусок (Широ тоже надо есть!) Она хочет, чтобы все куски пиццы были одной и той же формы и одного и того же размера, иначе её друзья будут в бешенстве и испортят всё веселье.

    Широ уже голодна, поэтому она хочет разрезать пиццу минимальным числом прямых разрезов, но при этом она слишком ленива, чтобы достать калькулятор. Разрез — это прямой отрезок, он может начинаться и заканчиваться как внутри, так и снаружи пиццы.

    Обычно Широ попросила бы помощи у Кэти и Куро, но они ещё не пришли. Можете ли вы помочь Широ решить эту задачу?

    Входные данные

    В единственной строке содержится одно неотрицательное целое число \(n\) (\(0 \le n \leq 10^{18}\)) — число друзей Широ. Пиццу в форме круга надо разрезать на \(n + 1\) часть.

    Выходные данные

    Одно целое число — количество прямых разрезов, которые необходимо провести Широ.

    Примечание

    Чтобы разрезать пиццу на четвертинки, достаточно провести два разреза через центр под углом \(90^{\circ}\).

    Разрезать пиццу на пять одинаковых кусочков можно лишь за пять разрезов.

    D. Куро, НОД, побитовое исключающее ИЛИ, сумма и все-все-все

    Бинарный поиск битмаски Деревья дп жадные алгоритмы математика Перебор снм Строки Структуры данных теория чисел *2200

    Куро играет в обучающую игру про числа. Основные математические операции в этой игре — наибольший общий делитель, побитовое исключающее ИЛИ и сумма двух чисел. Куро так любит эту игру, что проходит уровень за уровнем изо дня в день.

    К сожалению, Куро уезжает в отпуск и будет неспособна продолжить череду решений. Поскольку Кэти — надёжный человек, Куро попросил её прийти к нему домой в этот день и поиграть за него.

    Изначально дан пустой массив \(a\). Игр состоит из \(q\) запросов двух разных типов. Запросы первого типа просят Кэти добавить число \(u_i\) в массив \(a\). Запросы второго типа просят Кэти найти такое число \(v\), принадлежащее массиву \(a\), что \(k_i \mid GCD(x_i, v)\), \(x_i + v \leq s_i\), и \(x_i \oplus v\) максимально, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ, \(GCD(c, d)\) обозначает наибольший общий делитель целых чисел \(c\) и \(d\), а \(y \mid x\) означает, что \(x\) делится на \(y\), или же вывести -1, если таких чисел в массиве нет.

    Поскольку вы программист, Кэти просит вас написать программу, которая будет автоматически и точно выполнять внутриигровые запросы, чтобы выполнить поручения Куро. Давайте поможем ей!

    Входные данные

    В первой строке содержится одно целое число \(q\) (\(2 \leq q \leq 10^{5}\)) — число внутриигровых запросов.

    Далее следует \(q\) строк, каждая из которых начинается с целого числа \(t_i\) — типа запроса:

    • Если \(t_i = 1\), далее следует целое число \(u_i\) (\(1 \leq u_i \leq 10^{5}\)) — вам необходимо лобавить \(u_i\) в массив \(a\).
    • Если \(t_i = 2\), далее следует три целых числа \(x_i\), \(k_i\) и \(s_i\) (\(1 \leq x_i, k_i, s_i \leq 10^{5}\)). Это означает, что вам необходимо найти такое число \(v\), принадлежащее массиву \(a\), что \(k_i \mid GCD(x_i, v)\), \(x_i + v \leq s_i\), а \(x_i \oplus v\) максимально, где \(\oplus\) обозначает побитовое исключающее ИЛИ, или вывести -1, если таких чисел в массиве нет.

    Гарантируется, что первый запрос имеет тип \(1\) и что существует хотя бы один запрос типа \(2\).

    Выходные данные

    Для каждого запроса типа \(2\) выведите запрашиваемое число \(v\) или -1, если таких чисел не найдено, в отдельной строке.

    Примечание

    В первом примере необходимо выполнить пять запросов:

    • Первый запрос просит вас добавить \(1\) в \(a\). Теперь \(a\) — \(\left\{1\right\}\).
    • Второй запрос просит вас добавить \(2\) в \(a\). Теперь \(a\) — \(\left\{1, 2\right\}\).
    • Третий запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 3\). И \(1\), и \(2\) удовлетворяют условиям на \(v\), так как \(1 \mid GCD(1, v)\) и \(1 + v \leq 3\). Поскольку \(2 \oplus 1 = 3 > 1 \oplus 1 = 0\), ответом на этот запрос будет \(2\).
    • Четвёртый запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 2\). Только \(v = 1\) удовлетворяет условия \(1 \mid GCD(1, v)\) и \(1 + v \leq 2\), поэтому ответом на этот запрос будет \(1\).
    • Пятый запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 1\). В \(a\) нет удовлетворяющих условиям элементов, поэтому мы выводим -1 как ответ на этот запрос.

    E. Помогите Крокодилу Гене

    дп игры математика Теория вероятностей *2700

    Крокодил Гена и Чебурашка (как вы, наверное, догадались, тоже обитатели Тридевятого царства, Тридесятого государства) решили сыграть в карточную игру под названием ЕОИгра. Правила очень просты: изначально у Крокодила Гены в руках m карт, у Чебурашки — n карт (игроки не видят карты друг друга), и еще одна карта лежит на столе рубашкой вверх, так что оба игрока тоже не видят ее. Таким образом, всего в начале игры m + n + 1 карта, и игроки знают состав колоды и свои карты (но не знают, какая карта лежит на столе, а какие –– в руках у другого игрока). Игроки ходят по очереди, начинает Крокодил Гена. Своим ходом игрок может:

    • Попытаться угадать карту, которая лежит на столе. В случае если он угадывает — игра заканчивается, и он считается победителем. Если он не угадывает — игра также заканчивается, но победителем считается его соперник.
    • Назвать любую карту из колоды. В случае если у соперника есть такая карта — он обязан показать ее и вывести из игры. Если же у него нет такой карты — он сообщает об этом.
    Недавно Чебурашка стал принимать какие-то желтые таблеточки, и постоянно выигрывать у Крокодила Гены. Теперь Крокодил Гена хочет определить свои шансы на победу в случае, если и он тоже начнет принимать эти таблеточки.

    Помогите Крокодилу Гене в предположении, что таблеточки качественные, и после них оба игрока начинают играть оптимальным образом.

    Входные данные

    В первой строке через пробел записаны целые числа m и n (0 ≤ m, n ≤ 1000).

    Выходные данные

    Выведите через пробел вероятности победы Крокодила Гены и Чебурашки соответственно, с абсолютной погрешностью не более 10 - 9.

    A. Нити и бусинки

    математика реализация *900

    Ожерелье можно описать как строку, состоящую из нитей («-») и бусинок («o»), причём последняя нить или бусинка в этой строке связана с первой.

    Вы можете убрать нить или бусинку из ожерелья и вставить её между двумя другими элементами ожерелья (между двумя нитями, между двумя бусинками или между нитью и бусинкой). Этот процесс можно повторить какое угодно количество раз, но при этом из ожерелья нельзя выбрасывать никаких элементов.

    Можно ли подобными операциями сделать так, что число нитей между любыми двумя соседними бусинками в ожерелье станет равным? Две бусинки являются соседними, если между ними в ожерелье нет другой бусинки.

    Учтите, что после всех операций ожерелье не должно распасться на несколько частей и должно сохранить изначальную длину.

    Входные данные

    В единственной строке ввода содержится одна строка \(s\) (\(3 \leq |s| \leq 100\)) — описание ожерелья, в котором знак «-» обозначает нить и маленькая (строчная) английская буква «o» обозначает бусинку.

    Выходные данные

    Выведите «YES», если ожерелье можно разрешённым операциями перевести в такое, в котором число нитей между любыми двумя соседними бусинками равно, и «NO» в противном случае.

    Вы можете выводить каждую из букв в любом регистре (большой или маленькой).

    D. Идеальные группы

    дп математика теория чисел *2100

    SaMer написал лучший тест всех времён и народов для одной из его задач. В этой задаче требуется для данного массива целых чисел найти минимальное число групп, на которое можно разбить данный массив так, что произведение любых двух чисел в одной группе — точный квадрат.

    Каждое целое число должно находиться ровно в одной группе, однако числа в группе не обязательно должны быть последовательными в массиве.

    SaMer хочет создать больше тестов из того теста, который у него уже есть. Его тест является массивом \(A\) из \(n\) целых чисел и ему необходимо найти число подмассивов \(A\), состоящих из чисел, идущих в изначальном массиве последовательно, таких, что ответ на задачу для подмассива будет равен \(k\), для всех \(k\) от \(1\) до \(n\) включительно.

    Входные данные

    В первой строке содержится одно целое число \(n\) (\(1 \leq n \leq 5000\)) — размер массива.

    Во второй строке содержится \(n\) целых чисел \(a_1\),\(a_2\),\(\dots\),\(a_n\) (\(-10^8 \leq a_i \leq 10^8\)) — значения чисел в массиве.

    Выходные данные

    Выведите \(n\) целых чисел, разделённых пробелами, \(k\)-е из которых должно быть равно числу подмассивов \(A\), состоящих из чисел, идущих в изначальном массиве последовательно, ответ для которых на задачу равен \(k\).

    H. K путей

    бпф дп Комбинаторика математика Структуры данных *3100

    Дано дерево из \(n\) вершин. Требуется выбрать \(k\) (не обязательно различных) простых путей так, чтобы все ребра дерева можно было разбить на три множества: ребра, которые не принадлежит ни одному из путей, ребра, которые принадлежат ровно одному из этих пути, и ребра, которые принадлежат всем путям, причем последнее множество должно содержать хотя бы одно ребро.

    Посчитайте количество способов так выбрать \(k\) путей по модулю \(998244353\).

    Пути пронумерованы, иными словами, два способа считаются различными, если существует такое \(i\) (\(1 \leq i \leq k\)) и ребро, которое присутствует в \(i\)-м пути в одном способе и отсутствует в другом.

    Входные данные

    В первой строке даны два целых числа \(n\) и \(k\) (\(1 \leq n, k \leq 10^{5}\)) — число вершин в дереве и необходимое число путей.

    В следующих \(n - 1\) строках содержится описание ребер дерева. В каждой строке находятся два целых числа \(a\) и \(b\) (\(1 \le a, b \le n\), \(a \ne b\)) — концы очередного ребра. Гарантируется, что заданные ребра образуют дерево.

    Выходные данные

    Выведите количество способов выбрать \(k\) пронумерованных не обязательно различных простых путей так, чтобы по каждому ребру дерева проходило либо ни одного пути, либо проходил один путь, либо \(k\), и пересечение всех путей было непустым.

    Так как ответ может быть большим, выведите его по модулю \(998244353\).

    Примечание

    В первом примере подходят следующие последовательности путей:

    • \(((1,2), (1,2))\),
    • \(((1,2), (1,3))\),
    • \(((1,3), (1,2))\),
    • \(((1,3), (1,3))\),
    • \(((1,3), (2,3))\),
    • \(((2,3), (1,3))\),
    • \(((2,3), (2,3))\).

    Во втором примере \(k=1\), поэтому подходят все \(n \cdot (n - 1) / 2 = 5 \cdot 4 / 2 = 10\) путей.

    В третьем примере ответ \(\geq 998244353\), поэтому он был взят по модулю \(998244353\), не забудьте про это!

    A. Конечна или нет?

    математика реализация *1700

    Вам дано несколько запросов. Каждый запрос описывается тремя числами \(p\), \(q\) и \(b\). Необходимо ответить, является ли результат выражения \(p/q\) в системе счисления по основанию \(b\) конечной дробью.

    Дробь в системе счисления по основанию \(b\) является конечной, если содержит конечное число цифр после запятой, в том числе дробь может и не содержать цифр после запятой.

    Входные данные

    В первой строке дано целое число \(n\) (\(1 \le n \le 10^5\)) — количество запросов.

    Далее следуют \(n\) строк, описывающих запросы, по одному в строке. Каждый запрос — три целых числа \(p\), \(q\) и \(b\) (\(0 \le p \le 10^{18}\), \(1 \le q \le 10^{18}\), \(2 \le b \le 10^{18}\)). Все числа даны в системе счисления по основанию \(10\).

    Выходные данные

    Для каждого запроса выведите в отдельной строке Finite, если дробь конечна, и Infinite — в противном случае.

    Примечание

    \(\frac{6}{12} = \frac{1}{2} = 0,5_{10}\)

    \(\frac{4}{3} = 1,(3)_{10}\)

    \(\frac{9}{36} = \frac{1}{4} = 0,01_2\)

    \(\frac{4}{12} = \frac{1}{3} = 0,1_3\)

    D. Замок из песка

    Бинарный поиск Конструктив математика *2100

    Вы направляетесь на пляж с идеей построить самый величественный песчаный замок! Пляж не выглядит настолько трехмерным, насколько вы могли себе представить. Он может быть описан, как ряд мест, на которых можно возводить песчаные колонны. Места пронумерованы от 1 до бесконечности слева направо.

    Очевидно, на пляже недостаточно песка для такой затеи, поэтому вы принесли с собой n упаковок с песком. Назовем высотой hi некоторой песчаной колонны на месте i количество упаковок песка, которые вы туда высыпали. Нельзя разделить упаковку песка на несколько мест, весь песок из нее должен уйти ровно на одно место. Слева от первого места есть забор с высотой, равной высоте колонны из H упаковок песка, и вы должны не допустить попадание песка за него.

    В итоге вы пришли к следующим условиям для постройки замка:

    • h1 ≤ H: песок с самой левой колонны не должен просыпаться за забор;
    • Для любого |hi - hi + 1| ≤ 1: большая разница в высоте двух соседних колонн приведет к тому, что песок просыпется с более высокой на менее высокую, и вам действительно не хочется этого допустить;
    • : вы хотите потратить весь песок, который принесли с собой.

    Так как у вас есть бесконечность мест для постройки замка, всегда возможно придумать корректную структуру. Однако вы хотите сделать замок как можно более компактным.

    Требуется найти минимальное количество мест, которое потребуется занять для того, чтобы построить замок по всем правилам.

    Входные данные

    В единственной строке записаны два целых числа n и H (1 ≤ n, H ≤ 1018) — количество ваших упаковок песка и высота забора, соответственно.

    Выходные данные

    Выведите минимальное количество мест, которое потребуется занять для того, чтобы построить замок по всем правилам.

    Примечание

    Вот некоторые примеры корректных замков:

    • n = 5, H = 2, [2, 2, 1, 0, ...], [2, 1, 1, 1, 0, ...], [1, 0, 1, 2, 1, 0, ...]
    • n = 6, H = 8, [3, 2, 1, 0, ...], [2, 2, 1, 1, 0, ...], [0, 1, 0, 1, 2, 1, 1, 0...] (в этом случае заняты 5 мест)

    Первый список обоих случаев является лучшим ответом, по 3 места заняты в каждом.

    И некоторые примере некорректных:

    • n = 5, H = 2, [3, 2, 0, ...], [2, 3, 0, ...], [1, 0, 2, 2, ...]
    • n = 6, H = 8, [2, 2, 2, 0, ...], [6, 0, ...], [1, 4, 1, 0...], [2, 2, 1, 0, ...]

    B. Петя и перестановки

    Комбинаторика математика *1800

    Петя любит придумывать задачи со случайными данными. На этот раз ему понадобилась случайная перестановка. Он решил сгенерировать её следующим образом: он берет тождественную перестановку чисел от \(1\) до \(n\), а потом \(3n\) раз берёт случайную пару различных элементов и меняет их местами. Лёша очень завидует Пете, и пытается ему во всем подражать. Лёша тоже придумал задачу со случайной перестановкой, и генерирует её как Петя, но меняет местами случайную пару элементов не \(3n\) раз, а \(7n+1\). Потому что это более случайно, понятно?!

    Вам попал в руки тест, и вы хотите узнать, от какой он задачи.

    Входные данные

    В первой строке вводится одно целое число \(n\) (\(10^{3} \le n \le 10^{6}\)).

    Во второй строке вводится \(n\) различных целых чисел от \(1\) до \(n\) — перестановка размера \(n\) из теста.

    Гарантируется, что все тесты, кроме примера из условия, сгенерированы следующим образом: Сначала выбирается \(n\) — размер перестановки. Затем случайно равновероятно выбирается способ генерации — Петин или Лёшин. Затем выбранным способом генерируется сама перестановка.

    Выходные данные

    Если тест сгенерирован способом Пети, выведите «Petr» (без кавычек). Если тест сгенерирован способом Лёши, выведите «Um_nik» (без кавычек).

    Примечание

    Обратите внимание, что пример из условия не удовлетворяет ограничениям на \(n\) и приведён только для демонстрации формата ввода и вывода. Тем не менее, ваше решение должно проходить этот тест.

    Из-за случайности тестов в этой задаче запрещены взломы.

    D. Идеальное кодирование

    бпф математика *3100

    Вы работаете аналитиком в компании, которая разрабатывает новую систему хранения больших данных. В системе нужно будет хранить \(n\) различных объектов. Разумеется, каждому объекту нужно присвоить уникальный ID.

    Перед разработкой системы выбираются её параметры — целые числа \(m \ge 1\) и \(b_{1}, b_{2}, \ldots, b_{m}\). Затем всем объектам системы будет выбираться ID — массив целых чисел \([a_{1}, a_{2}, \ldots, a_{m}]\), причём должно быть выполнено \(1 \le a_{i} \le b_{i}\) для всех \(1 \le i \le m\).

    Разработчики говорят, что затраты на разработку будут пропорциональны \(\sum_{i=1}^{m} b_{i}\). Вас попросили подобрать параметры \(m\) и \(b_{i}\) так, чтобы система могла присвоить \(n\) объектам различные ID, а затраты на разработку были минимальны. Обратите внимание, что необязательно использовать все доступные ID.

    Входные данные

    В единственной строке записано одно целое положительное число \(n\). Длина десятичной записи \(n\) не превосходит \(1.5 \cdot 10^{6}\). Число записано без ведущих нулей.

    Выходные данные

    Выведите одно целое число — минимальное значение \(\sum_{i=1}^{m} b_{i}\).

    E. Задача Принца

    Деревья математика Перебор Структуры данных теория чисел *2800

    Действующими лицами этой задачи будут герои какого-нибудь недавно вышедшего в прокат фильма. Кажется, в последнее время много мемов по «Мстители: Война бесконечности». Я не смотрел ни одной части, поэтому лишь смутно знаю героев. Впрочем, это не помешает мне использовать их в задаче. Пусть героями нашей задачи будут Танос и Доктор Стрендж. Итак, Танос и Доктор Стрендж занимаются своими супергеройскими и суперзлодейскими делами, как вдруг они наталкиваются на обычную задачу по спортивному программированию.

    Есть дерево размера \(n\).

    В каждой вершине \(v\) записано целое положительное число \(a_{v}\).

    Нужно ответить на \(q\) запросов.

    Запрос задаётся в виде \(u\) \(v\) \(x\).

    Нужно посчитать \(\prod_{w \in P} gcd(x, a_{w}) \mod (10^{9} + 7)\), где \(P\) — множество вершин, лежащих на пути из \(u\) в \(v\). Иными словами, вычислите произведение \(gcd(x, a_{w})\) для всех вершин \(w\) на пути от \(u\) до \(v\). Так как произведение может быть большим, выведите его по модулю \(10^9+7\). Здесь \(gcd(s, t)\) обозначает наибольший общий делитель \(s\) и \(t\).

    Обратите внимание, что сами числа в вершинах не изменяются.

    Думаю, вам интереснее было бы смотреть на супергеройские похождения Доктора Стренджа и Таноса, чем на то, как они решают задачку. Поэтому вам предлагается решить задачу вместо них.

    Входные данные

    В первой строке записано одно целое число \(n\) — размер дерева (\(1 \le n \le 10^{5}\)).

    В следующих \(n-1\) строках описываются рёбра дерева по одному в строке. \(i\)-е ребро описывается двумя целыми числами \(u_{i}\) и \(v_{i}\) (\(1 \le u_{i}, v_{i} \le n\)), которые означают, что ребро соединяет вершины \(u_{i}\) и \(v_{i}\). Гарантируется, что данные ребра задают дерево.

    В следующей строке записаны \(n\) целых положительных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_{v} \le 10^{7}\)).

    В следующей строке записано одно целое положительное число \(q\) (\(1 \le q \le 10^{5}\)) — количество запросов.

    Наконец, в \(q\) строках описываются запросы, каждое описывается тремя целыми числами \(u_{i}\), \(v_{i}\) и \(x_{i}\) (\(1 \le u_{i}, v_{i} \le n\), \(1 \le x_{i} \le 10^{7}\)).

    Выходные данные

    Выведите \(q\) чисел в отдельных строках — ответы на запросы в том порядке, в котором они заданы во входных данных. Выведите каждый ответ по модулю \(10^9+7 = 1000000007\).

    F. Oppa Funcan Style Remastered

    графы кратчайшие пути математика теория чисел *3300

    Наверняка вы видели безумные клипы южнокорейского рэпера PSY, такие как «Gangnam Style», «Gentleman» и «Daddy». Вы также могли слышать, что PSY пару лет назад записывал клип «Oppa Funcan Style» (к сожалению, мы не смогли найти этот клип на просторах сети; мы не исключаем, что виноват Ромкоснадзор). Мы напомним вам, как выглядел этот хит (оригинальное описание можно прочитать здесь).

    На площадке есть \(n\) платформ, пронумерованных целыми числами от \(1\) до \(n\), на \(i\)-й платформе стоит танцор с номером \(i\). Далее, каждую секунду все танцоры, стоявшие на платформе с номером \(i\), перепрыгивают на платформу с номером \(f(i)\). Правило перемещения \(f\) выбирается заранее и не меняется на протяжении клипа.

    Продолжительность клипа составляла \(k\) секунд, и правило \(f\) было выбрано таким образом, чтобы в конце клипа (через \(k\) секунд) все танцоры оказались на своих изначальных местах (то есть танцор номер \(i\) должен оказаться на платформе с номером \(i\)). Это позволило зациклить клип и собрать ещё больше лайков.

    PSY знает, что сейчас всё большую популярность набирают улучшенные версии старых произведений искусства, поэтому он решил выпустить remastered-версию своего клипа двухлетней давности.

    В данном случае «улучшенная версия» подразумевает ещё больше безумия, и количество платформ может достигать \(10^{18}\)! Однако режиссёр клипа говорит, что если какой-то танцор будет оставаться на одной и той же платформе, то зритель заскучает и сразу выключит клип. Поэтому для всех \(x\) от \(1\) до \(n\) должно быть выполнено \(f(x) \neq x\).

    Немалая часть успеха классического клипа была в том, что его удалось зациклить, поэтому для remastered-версии это также должно быть выполнено.

    PSY ещё не определился с точным количеством платформ и продолжительностью клипа, поэтому он просит вас для разных вариантов определить, существует ли подходящее правило \(f\).

    Входные данные

    В первой строке записано одно число \(t\) — количество вариантов \(n\) и \(k\), которые необходимо проверить (\(1 \le t \le 10^{4}\)).

    В следующих \(t\) строках записаны сами варианты: два числа \(n\) и \(k\) (\(1 \le n \le 10^{18}\), \(1 \le k \le 10^{15}\)) — количество платформ и длительность ролика в секундах.

    Гарантируется, что количество различных \(k\) в одном тесте не превосходит \(50\).

    Выходные данные

    Выведите \(t\) строк — если \(i\)-й вариант клипа осуществим, выведите в \(i\)-й строке «YES» (без кавычек), иначе выведите «NO» (без кавычек).

    B. High School: Become Human

    математика *1100

    На дворе 2118 год. Давно в массовом производстве андроиды, которые делают за людей всю работу. Однако чтобы андроиды могли решать нестандартные задачи, им нужно учиться в школе. Как людям раньше.

    Все школьные проблемы никуда не исчезли, в школах все также задирают учеников, которые не похожи на других. Вася-8800 — бюджетный андроид, производит его малоизвестная компания, и дизайн его не выверен до мелочей. Технические характеристики Васи тоже не совершенны. Другие андроиды выбрали его целью своих не всегда добрых шуток.

    Любимая шутка недругов Васи — заставить его сравнивать \(x^y\) и \(y^x\). Другие андроиды справляются с этой задачей за миллисекунды, а Васе не хватает памяти, чтобы сохранить такие большие числа.

    Помогите Васе! Напишите для Васи быструю программу, которая сравнивает \(x^y\) и \(y^x\), и тогда, возможно, другие андроиды станут его уважать.

    Входные данные

    В единственной строке записаны два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^{9}\)).

    Выходные данные

    Если \(x^y < y^x\), выведите «<» (без кавычек). Если \(x^y > y^x\), выведите «>» (без кавычек). Если же \(x^y = y^x\), выведите «=» (без кавычек).

    Примечание

    В первом примере \(5^8 = 5 \cdot 5 \cdot 5 \cdot 5 \cdot 5 \cdot 5 \cdot 5 \cdot 5 = 390625\), а \(8^5 = 8 \cdot 8 \cdot 8 \cdot 8 \cdot 8 = 32768\). Поэтому нужно вывести «>».

    Во втором примере \(10^3 = 1000 < 3^{10} = 59049\).

    В третьем примере \(6^6 = 46656 = 6^6\).

    D. Точки и степени двойки

    математика Перебор *1800

    На координатной прямой заданы \(n\) точек с различными целочисленными координатами, координата \(i\)-й точки равна \(x_i\). Выберите такое наибольшее по количеству точек подмножество заданного множества точек, что расстояния между любой парой точек в этом подмножестве — степень двойки. Следует рассматривать все возможные пары точек из подмножества, а не только соседние. Заметим, что любое подмножество из одного элемента удовлетворяет описанному выше требованию.

    Иными словами, нужно выбрать такое наибольшее подмножество точек \(x_{i_1}, x_{i_2}, \dots, x_{i_m}\), что для любой пары \(x_{i_j}\), \(x_{i_k}\) должно выполняться, что \(|x_{i_j} - x_{i_k}| = 2^d\), где \(d\) — целое неотрицательное число. Это число может быть различным для разных пар точек.

    Входные данные

    В первой строке входных данных задано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество точек.

    В следующей строке задано \(n\) различных целых чисел \(x_1, x_2, \dots, x_n\) (\(-10^9 \le x_i \le 10^9\)) — координаты точек.

    Выходные данные

    В первой строке выведите \(m\) — количество точек в наибольшем по размеру подмножестве, которое удовлетворяет описанному в условии ограничению.

    В следующей строке выведите \(m\) целых чисел — координаты точек из этого подмножества.

    Если решений несколько, выведите любое из них.

    Примечание

    В первом примере ответ равен \([7, 3, 5]\). Заметим, что \(|7-3|=4=2^2\), \(|7-5|=2=2^1\) и \(|3-5|=2=2^1\). Не существует подмножества с большим количеством точек, удовлетворяющего условию задачи.

    D. Лунная тень

    Бинарный поиск геометрия математика сортировки *2500

    Сумерки охватывают леса и весь мир. Реку и лодку освещает луна.

    — Сложно возможно затмить свет луны. Тени лишь раскрывают ее красоту и мягкость, — пропел Мино.

    — Видишь? Облака, — сказал Канно, вглядываясь вдаль.

    — Не может быть ничего лучше, — обернулся Мино к Канно.

    Представим небо как координатную ось. Луна находится в начале координат, то есть в точке с координатой \(0\).

    В небе есть \(n\) облаков. Все облака имеют одинаковую длину \(l\). \(i\)-е облако изначально покрывает отрезок \((x_i, x_i + l)\) (не включая границы). Изначально облако двигается со скоростью \(v_i\), которая равна либо \(1\), либо \(-1\).

    Изначально никакие два облака не пересекаются, то есть для всех \(1 \leq i \lt j \leq n\) выполняется \(\lvert x_i - x_j \rvert \geq l\).

    Если скорость ветра равна \(w\), то скорость \(i\)-го облака станет равна \(v_i + w\), то есть его координаты будут увеличиваться на \(v_i + w\) за единицу времени. Обратите внимание, ветер может быть достаточно сильным и направления движения облаков могут изменяться.

    Помогите Мино, подсчитайте число пар \((i, j)\) (\(i < j\)) таких, что существует такая скорость ветра \(w\), не превышающая \(w_\mathrm{max}\) по модулю (возможно, отрицательная и/или вещественная) такая, что \(i\)-е и \(j\)-е облака в какой-то момент будут оба закрывать луну. Скорость ветра \(w\) может быть различной для различных пар.

    Входные данные

    Первая строка содержит три целых числа \(n\), \(l\) и \(w_\mathrm{max}\) (\(1 \leq n \leq 10^5\), \(1 \leq l, w_\mathrm{max} \leq 10^8\)) — количество облаков, длина каждого облака и максимально возможная скорость ветра, соответственно.

    \(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(v_i\) (\(-10^8 \leq x_i \leq 10^8\), \(v_i \in \{-1, 1\}\)) — начальная позиция и скорость \(i\)-го облака, соответственно.

    Гарантируется, что для всех \(1 \leq i \lt j \leq n\) выполняется \(\lvert x_i - x_j \rvert \geq l\).

    Выходные данные

    Выведите одно целое число — количество неупорядоченных пар облаков таких, что они могут закрыть луну в один и тот же момент при некотором выборе скорости ветра \(w\).

    Примечание

    В первом примере начальные позиции и скорости облаков проиллюстрированы на рисунке ниже.

    Пары облаков, которые могут одновременно закрыть луну:

    • \((1, 3)\) закроют луну в момент времени \(2.5\) при \(w = -0.4\);
    • \((1, 4)\) закроют луну в момент времени \(3.5\) при \(w = -0.6\);
    • \((1, 5)\) закроют луну в момент времени \(4.5\) при \(w = -0.7\);
    • \((2, 5)\) закроют луну в момент времени \(2.5\) при \(w = -2\).

    На рисунке ниже приведены положения облаков в момент времени \(2.5\) при скорости ветра \(w = -0.4\). В этот момент \(1\)-е и \(3\)-е облака оба закрывают луну.

    Во втором примере только пара \((1, 4)\) закроют луну в момент времени \(15\) при скорости ветра \(w = 0\).

    Обратите внимание, что все времена и скорости ветра в примечании даны для примера, на самом деле существует бесконечное число способов выбрать их.

    A. Комментаторские кабинки

    математика реализация *1000

    Чемпионат по футболу в Берляндии начнется уже скоро! На него съедутся комментаторы со всего мира.

    Организаторы уже построили \(n\) комментаторских кабинок. Всего на Чемпионат приедут \(m\) различных делегаций. С одной стороны, каждая делегация должна получить одинаковое количество кабинок. С другой стороны, если останется хотя бы одна незанятая кабинка, все делегации сильно расстроятся. Поэтому, каждая кабинка должна быть занята ровно одной делегацией.

    Если \(n\) не делится на \(m\), то в данный момент невозможно распределить комментаторские кабинки по делегациям.

    У организаторов все еще есть время, поэтому они могут строить кабинки, затрачивая \(a\) бурлей за каждую, и (или) сносить кабинки, затрачивая на это \(b\) бурлей за каждую. Они могут как строить, так и сносить произвольное количество кабинок (затрачивая на каждую соответствующее количество бурлей). Они могут позволить себе даже снести все существующие кабинки.

    Какое минимальное количество бурлей организаторы должны потратить, чтобы выполнить требования делегаций (другими словами, сделать количество кабинок кратным \(m\))?

    Входные данные

    В единственной строке заданы четыре целых числа через пробел \(n\), \(m\), \(a\) и \(b\) (\(1 \le n, m \le 10^{12}\), \(1 \le a, b \le 100\)), где \(n\) — начальное количество кабинок, \(m\) — количество приезжающих делегаций, \(a\) — стоимость постройки новой кабинки и \(b\) — стоимость сноса некоторой кабинки.

    Выходные данные

    Выведите минимальное количество бурлей, необходимых для выполнения требований делегаций (другими словами, чтобы сделать количество кабинок кратным \(m\)). Итоговое количество кабинок может равняться \(0\).

    Примечание

    В первом примере организаторы могут построить \(5\) кабинок, заплатив по \(3\) бурля за каждую. Всего кабинок станет \(14\).

    Во втором примере организаторы могут снести все \(2\) кабинки, заплатив по \(7\) бурлей за каждую. Всего кабинок станет \(0\).

    В третьем примере организаторы уже могут распределить кабинки по делегациям, каждая делегация получит в пользование по \(5\) кабинок.

    E. Номер автобуса

    Комбинаторика математика Перебор *1800

    Вечер выдался не из легких... Вася играл безупречно, но, как это часто бывает, его подводила команда. Поражения следовали одно за другим, а Васе очень нужна была победа! Неудивительно, что в итоге Вася лёг спать чуть позже запланированного времени и совершенно не выспался.

    Утром Вася пришел на остановку стал ждать автобус до университета. Мысли путались в светлой голове Васи, поэтому он не смог вспомнить номер нужного ему автобуса и сел в первый попавшийся — им оказался автобус с номером \(n\).

    Сев в автобус, Вася подумал, что из-за своего состояния он мог перепутать порядок цифр в номере автобуса. Более того, некоторые цифры он мог «увидеть» несколько раз, но те цифры, которые он увидел, точно были в настоящем номере автобуса. Например, если Вася увидел номер 2028, то в оригинале номер автобуса мог быть 2028, 8022, 2820 или даже просто 820. При этом, например, номера 80, 22208, 52 точно не могли быть номером автобуса. Кроме того, разумеется, номер автобуса не начинался на цифру 0, поэтому, номер 082 тоже не мог быть настоящим номером автобуса.

    По заданному числу \(n\) необходимо определить, сколько существует вариантов исходного номера автобуса.

    Входные данные

    В первой строке задано натуральное число \(n\) — номер автобуса, который увидел Вася (\(1 \leq n \leq 10^{18}\)). Гарантируется, что номер не начинается с цифры \(0\).

    Выходные данные

    Вывести единственное число — количество возможных вариантов настоящего номера автобуса.

    Примечание

    В первом примере возможны лишь варианты \(97\) и \(79\).

    Во втором примере возможные номера автобуса (в порядке возрастания): \(208\), \(280\), \(802\), \(820\), \(2028\), \(2082\), \(2208\), \(2280\), \(2802\), \(2820\), \(8022\), \(8202\), \(8220\).

    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\).

    B. Настя учит информатику

    математика теория чисел *1600

    Сегодня на уроке информатики в школе Насти рассказывали про НОД (GCD) и НОК (LCM) (см. ссылки ниже). Так как Настя очень умная, то она быстро сделала все задания, и теперь предлагает вам тоже решить одно из них.

    Назовем пару целых чисел (a, b) хорошей, если GCD(a, b) = x и LCM(a, b) = y, где GCD(a, b) обозначает наибольший общий делитель чисел a и b, а LCM(a, b) обозначает наименьшее общее кратное чисел a и b.

    Вам даются целые числа x и y. Требуется узнать количество хороших пар целых чисел (a, b) таких, что l ≤ a, b ≤ r. Заметьте, что пары (a, b) и (b, a) считаются различными, если a ≠ b.

    Входные данные

    В первой строке входных данных записано четыре целых числа l, r, x, y (1 ≤ l ≤ r ≤ 109, 1 ≤ x ≤ y ≤ 109).

    Выходные данные

    В первой строке выведите единственное число — ответ на задачу.

    Примечание

    В первом тесте есть две подходящих хороших пары чисел (a, b)(1, 2) и (2, 1).

    Во втором тесте есть четыре подходящих хороших пары чисел (a, b)(1, 12), (12, 1), (3, 4), (4, 3).

    В третьем тесте есть хорошие пары чисел, к примеру, (3, 30), но ни одна из них не удовлетворяет ограничению l ≤ a, b ≤ r.

    C. Настя и платяной шкаф

    математика *1600

    На Новый Год Насте подарили волшебный платяной шкаф. Он волшебный, так как в конце каждого месяца количество платьев в нем удваивается (то есть платьев становится в два раза больше, чем в начале месяца).

    К несчастью, сразу после удвоения, в каждый месяц года кроме последнего (на Новый Год шкаф, как и все люди в Байтландии, отдыхает), шкаф с вероятностью 50% съедает одно платье (конечно, если оно в нём есть).

    Сейчас у Насти есть x платьев, и ей стало интересно, каково математическое ожидание количества платьев в шкафу через год. Настя живет в Байтландии, а в Байтландии год длится k + 1 месяц.

    К сожалению, Настя сейчас очень занята, поэтому, так как вы программист, она попросила вас решить эту задачу. Ответ вы должны вывести по модулю 109 + 7, так как можно показать, что ответ всегда является целым числом.

    Входные данные

    В единственной строке вводятся два целых числа x и k (0 ≤ x, k ≤ 1018), где x — начальное количество платьев, а k + 1 — количество месяцев в году Байтландии.

    Выходные данные

    В единственной строке выведите одно число — математическое ожидание количества платьев у Насти через год по модулю 109 + 7.

    Примечание

    В первом тесте год в Байтландии длится один месяц, таким образом, шкаф никогда не ест платья.

    Во втором тесте после первого месяца с вероятностью 50% в шкафу 3 платья, и с вероятностью 50% 4 платья. Тогда в конце года в шкафу с вероятностью 50% 6 платьев, и с вероятностью 50% 8 платьев. Таким образом, ответ на данный тест равен (6 + 8) / 2 = 7.

    D. Настя и игра

    математика Перебор реализация *2100

    На день рождения Насте подарили еще один массив, на котором можно играть в широко известную в Байтландии национальную игру. Однако, для этой игры нужно сначала выбрать такой подотрезок массива, что , где p — произведение всех чисел на этом отрезке, s — их сумма, а k — константа, одинаковая для всего массива.

    Насте стало интересно, а сколько подотрезков массива удовлетворяют вышеописанным условиям? Подотрезком называется несколько подряд идущих элементов массива.

    Входные данные

    В первой строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 2·105, 1 ≤ k ≤ 105), где n — длина массива, а k — константа, описанная выше.

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 108) — элементы массива.

    Выходные данные

    В единственной строке требуется вывести количество подотрезков массива, на которых отношение произведения к сумме элементов равно k.

    Примечание

    В первом примере единственный подотрезок в массиве — [1]. В нем сумма равна 1, произведение равно 1, значит, он подходит под условие, так как .

    Во втором примере есть два подходящих подотрезка — [6, 3] и [3, 8, 1]. Подотрезок [6, 3] имеет сумму 9, а произведение 18, следовательно, подходит, так как . Подотрезок [3, 8, 1] имеет сумму 12, а произведение 24, следовательно, подходит, так как . Все остальные подотрезки массива не подходят.

    E. Никита и порядковая статистика

    бпф китайская теорема об остатках математика *2300

    Никита очень любит задачи на порядковую статистику. В частности, он легко сможет найти \(k\)-е в порядке возрастания число на отрезке массива. Однако сейчас он задумался: а сколько существует отрезков данного массива таких, что данное число \(x\)\(k\)-е по возрастанию на данном отрезке? Иными словами, вам нужно посчитать количество подотрезков данного массива, содержащих ровно \(k\) чисел, меньших чем \(x\).

    Никиту интересует ответ на данный вопрос для всех \(k\) от \(0\) до \(n\), где \(n\) — длина массива.

    Входные данные

    В первой строке даны два целых числа \(n\) и \(x\) \((1 \le n \le 2 \cdot 10^5, -10^9 \le x \le 10^9)\).

    В следующей строке записано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((-10^9 \le a_i \le 10^9)\) — данный массив.

    Выходные данные

    Выведите \(n+1\) число, где \(i\)-е число — ответ на вопрос Никиты для \(k=i-1\).

    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\).

    Можно показать, что решение всегда существует при данных ограничениях.

    D. Игра

    математика *2500

    Аллен и Бесси играют в простую игру с числами. Они оба знают функцию \(f: \{0, 1\}^n \to \mathbb{R}\), т.е. функцию, которая принимает \(n\) бинарных аргументов и возвращает вещественное значение. В начале игры все переменные \(x_1, x_2, \dots, x_n\) равны \(-1\). В каждом раунде независимо с равной вероятностью ходит Аллен или Бесси. Ход состоит из выбора такого \(i\), что \(x_i = -1\) и либо установке \(x_i \to 0\) либо \(x_i \to 1\).

    После \(n\) раундов все переменные установлены, и результатом игры становится величина \(f(x_1, x_2, \dots, x_n)\). Аллен хочет максимизировать результат, а Бесси — минимизировать его.

    Ваша задача — помочь Аллену и Бесси определить математическое ожидание результата игры! Они сыграют \(r+1\) раз, и между играми будет меняться ровно одно значение \(f\). Другими словами, между играми \(i\) и \(i+1\) для \(1 \le i \le r\), будет изменено значение \(f(z_1, \dots, z_n) \to g_i\) для некоторого набора \((z_1, \dots, z_n) \in \{0, 1\}^n\). Найдите математическое ожидание результата в начале, а также после каждого изменения.

    Входные данные

    Первая строка содержит два целых числа \(n\) и \(r\) (\(1 \le n \le 18\), \(0 \le r \le 2^{18}\)).

    Следующая строка содержит \(2^n\) целых чисел \(c_0, c_1, \dots, c_{2^n-1}\) (\(0 \le c_i \le 10^9\)), обозначающих начальные значения функции \(f\). Формально \(f(x_0, x_1, \dots, x_{n-1}) = c_x\), если \(x = \overline{x_{n-1} \ldots x_0}\) в двоичной записи.

    Каждая из следующих \(r\) строк содержит два целых числа \(z\) и \(g\) (\(0 \le z \le 2^n - 1\), \(0 \le g \le 10^9\)). Если \(z = \overline{z_{n-1} \dots z_0}\) в двоичной записи, то это означает изменение значения \(f(z_0, \dots, z_{n-1}) \to g\).

    Выходные данные

    Выведите \(r+1\) строку, в \(i\)-й строку должно находиться математическое ожидание результата \(f\) в \(i\)-й игре. Ваш ответ должен иметь абсолютную или относительную ошибку не более \(10^{-6}\).

    Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

    Примечание

    Рассмотрим второй пример. Если первым сходит Аллен, то он положит \(x_1 \to 1\), поэтому результат будет \(3\). Если сходит Бесси, то она положит \(x_1 \to 0\), и результат будет равен \(2\). Поэтому ответ равен \(2.5\).

    В третьем примере результатом игры всегда будет \(1\) независимо от игры Аллен и Бесси.

    F. Зарплаты в комуупании

    Деревья дп Комбинаторика математика *2700

    Аллен выпустился из Муусского техмулогоческого института (MIT) и основал стартап! Аллен — президент стартапа. Он нанял \(n-1\) работника, у каждого из которых есть один непосредственный начальник. Если \(u\) является начальником \(v\), а \(v\) является начальником \(w\), то \(u\) является начальником \(w\). Кроме того, нет таких \(u\) и \(v\), что \(u\) является начальником \(v\) и \(v\) является начальником \(u\). У Аллена нет начальников. Аллен — сотрудник номер \(1\), все остальные пронумерованы от \(2\) до \(n\).

    Наконец, Аллен должен назначить каждому в компании, включая себя, зарплату. Из-за бюджетных ограничений зарплата каждого из сотрудников должна быть между \(1\) и \(D\) включительно. Кроме того, никто не может получать больше, чем его начальник.

    Помогите Аллену найти количество способов назначить сотрудникам зарплаты. Эта величина может быть достаточно большой, поэтому выведите ее по модулю \(10^9 + 7\).

    Входные данные

    Первая строка содержит два целых числа \(n\) и \(D\) (\(1 \le n \le 3000\), \(1 \le D \le 10^9\)).

    Каждая из следующих \(n-1\) строк содержит одно целое число, где \(i\)-я строка содержит целое число \(p_i\) (\(1 \le p_i \le i\)). \(p_i\) обозначает номер непосредственного начальника сотрудника номер \(i+1\).

    Выходные данные

    Выведите одно целое число: количество способов назначить зарплаты по модулю \(10^9 + 7\).

    Примечание

    В первом примере сотрудники с номерами 2 и 3 подчиняются непосредственно Аллену. Три зарплаты по порядку могут быть \((1,1,1)\), \((2,1,1)\), \((2,1,2)\), \((2,2,1)\) или \((2,2,2)\).

    Во втором примере сотрудник 2 подчиняется Аллену, а сотрудник 3 подчиняется сотруднику 2. Возможные зарплаты равны \((1,1,1)\), \((2,1,1)\), \((2,2,1)\), \((2,2,2)\), \((3,1,1)\), \((3,2,1)\), \((3,2,2)\), \((3,3,1)\), \((3,3,2)\), \((3,3,3)\).

    B. Чемпионат мира

    Бинарный поиск математика *1300

    Аллен хочет попасть в фан-зону, которая расположена на круглой площади и имеет \(n\) входов.

    Перед \(i\)-м входом уже скопилась очередь из \(a_i\) человек. Каждую минуту каждый вход пропускает ровно один человека в фан-зону.

    Аллен использует следующую стратегию для попадания в фан-зону:

    • Изначально он стоит в конце очереди к первому входу.
    • Каждую минуту, если его не пропустили в фан-зону в течение этой минуты (то есть он был не первым в очереди), он покидает текущую очередь и встает в конец очереди у следующего входа (или первого, если он покинул очередь перед последним входом).

    Определите вход, через который Аллен в итоге попадет в фан-зону.

    Входные данные

    Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество входов.

    Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — количество людей в очередях. В эти числа Аллен не включен.

    Выходные данные

    Выведите одно целое число — номер входа, которым в итоге воспользуется Аллен.

    Примечание

    В первом примере число людей (не включая Аллена) меняется так: \([\textbf{2}, 3, 2, 0] \to [1, \textbf{2}, 1, 0] \to [0, 1, \textbf{0}, 0]\). Жирным выделена очередь, в которой находится Аллен. Видно, что он войдет в фан-зону через третий вход.

    Во втором примере число людей (не включая Аллена) меняется так: \([\textbf{10}, 10] \to [9, \textbf{9}] \to [\textbf{8}, 8] \to [7, \textbf{7}] \to [\textbf{6}, 6] \to \\ [5, \textbf{5}] \to [\textbf{4}, 4] \to [3, \textbf{3}] \to [\textbf{2}, 2] \to [1, \textbf{1}] \to [\textbf{0}, 0]\).

    Во втором примере число людей (не включая Аллена) меняется так: \([\textbf{5}, 2, 6, 5, 7, 4] \to [4, \textbf{1}, 5, 4, 6, 3] \to [3, 0, \textbf{4}, 3, 5, 2] \to \\ [2, 0, 3, \textbf{2}, 4, 1] \to [1, 0, 2, 1, \textbf{3}, 0] \to [0, 0, 1, 0, 2, \textbf{0}]\).

    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).

    C. Небо в огне

    Комбинаторика математика *2500

    На одной из планет Солнечной системы, в Атмосферном Университете, любят играть в бинго.

    Известно, что этой планете месяц состоит ровно из \(n^2\) дней, поэтому повсеместно используются календари, представляющие собой квадратную таблицу \(n\) на \(n\).

    Погодные условия на планете не менее необычны. Вследствие уникального состава атмосферы, при взаимодействии со солнечным светом небо каждый день принимает один из трёх цветов: синий, зелёный или красный.

    Для игры в бинго нужно в течении месяца наблюдать за погодными условиями — после каждого дня, его клетка в календаре расскрашивается в цвет неба в тот день, то есть в синий, зелёный или красный.

    В конце месяца студенты разглядывают календарь. Если хотя бы один столбец или строка состоит из клеток только одного цвета, то месяц называется удачным.

    Две раскраски календаря называются различными, если в них хотя бы одна из ячеек имеет разные цвета. Нетрудно заметить, что всего существует \(3^{n \cdot n}\) различных раскрасок. Посчитайте, сколько среди них удачных. Так как это количество может быть достаточно большим, выведите его по модулю \(998244353\).

    Входные данные

    Первая и единственная строка входных данных содержит одно число \(n\) (\(1 \le n \le 1000\,000\)) — количество строк и столбцов в календаре.

    Выходные данные

    Выведите одно число — количество удачных раскрасок календаря по модулю \(998244353\)

    Примечание

    В первом примере любая раскраска является удачной, так как единственный столбец состоит только из одного цвета.

    Во втором примере удачными, в том числе, являются следующие раскраски:

    А вот эти раскраски удачными не являются:

    Корабельный архив

    математика *1000 реализация

    В трюме «Нулевого указателя» хранится стопка из n секретных свитков с морскими картами, пронумерованных от 1 до n. Сверху лежит свиток a1, под ним a2, и так далее. Все номера различны.

    Капитан Архипов, не отрываясь от чая, выкрикивает номера нужных свитков. На i-м шаге он требует свиток bi. Если свиток ещё в стопке — Шкипер Баг снимает его вместе со всеми свитками выше (вытащить из середины нельзя — свитки слиплись от сырости). Если нужного свитка в стопке уже нет — Шкипер Баг делает умное лицо и ждёт следующей команды.

    Посчитайте, сколько свитков Шкипер Баг достанет на каждом шаге.

    Формат входных данных
    Первая строка: n (1 ≤ n ≤ 200 000).

    Вторая строка: n чисел ai — начальный порядок стопки (все различны).

    Третья строка: n чисел bi — порядок требований капитана (все различны).

    Формат выходных данных
    n чисел — количество свитков, снятых на каждом шаге.


    Примечание: 
    В тестовом примере капитан потребовал свиток №2 — Шкипер Баг снял №1 и №2 сверху (2 штуки). Затем потребовал №1 — но его уже нет, ничего не происходит. Затем №3 — снял один.

    Сундук с секретом

    математика *1000 реализация

    На борту «Нулевого указателя» обнаружили старинный сундук с n рычагами. Чтобы открыть его, рычаги нужно нажимать в правильном порядке — но Шкипер Баг этого порядка не знает.

    Когда Шкипер Баг нажимает рычаг: если этот рычаг действительно следующий в правильной последовательности — он остаётся нажатым. Если рычаг неправильный — он сбрасывается вместе со всеми уже нажатыми рычагами, и придётся начинать заново с нужного места.

    Когда все n рычагов окажутся нажаты одновременно — сундук откроется. Шкипер Баг действует оптимально. Найдите количество нажатий в худшем случае.

    Формат входных данных

    Единственная строка: целое число n (1 ≤ n ≤ 2000) — количество рычагов.


    Формат выходных данных

    Одно число — количество нажатий в худшем случае.

     

    Примечание (n = 3). Пусть правильная последовательность — {2, 3, 1}.

    Шкипер Баг ищет первый рычаг. Нажимает рычаг 1 — сброс (1 нажатие). Нажимает рычаг 3 — сброс (2 нажатия). Нажимает рычаг 2 — остаётся нажатым (3 нажатия).

    Теперь ищет второй рычаг. Нажимает рычаг 1 — сброс, рычаг 2 тоже сбросился (4 нажатия). Повторно нажимает рычаг 2 (5 нажатий), затем рычаг 3 — остаётся нажатым (6 нажатий).

    Ищет третий рычаг. Единственный оставшийся — рычаг 1, нажимает (7 нажатий). Сундук открыт!

    Итого в худшем случае: 7 нажатий.

    Глючные робоанты

    теория чисел математика Алгоритмы сортировки

    Недавно директору Ресторана Отеля пришла в голову следующая мысль: <<Все какое-то обычное. Надо что-то модернизировать!>> Именно так и решили заменить всех официантов на роботов или, точнее, робоантов.

    Но вот беда! Денег на закупку высококачественного оборудования не нашлось, и партия робоантов была заказана в ОАО <<В Гараже у Петровича>>. И вот теперь, спустя неделю работы по непонятным причинам робоанты начали глючить. Проблема в том, что скоро в Отеле большой банкет. Для его проведения в Ресторане уже расставили \(n\) столов и приготовили \(n\) блюд. Все блюда попарно различны и имеют номера от \(1\) до \(n\). Изначально, блюда по мере готовности как-то расставили по \(n\) столам, причем на каждый стол поставили только одно блюдо. Однако, к банкету необходимо расставить все на свои места, а именно, \(i\)-е блюдо должно оказаться на \(i\)-м столе.

    Рядом с каждым столом изначально стоит робоант. Далее каждый робоант независимо от других может выполнять следующую операцию неограниченное число раз: пусть сейчас робоант стоит у \(i\)-го стола. Тогда, если у него с собой нет ни одного блюда, он может взять (а может и не брать) блюдо в данный момент, находящееся на \(i\)-м столе и перейти к любому \(j\)-му столу при условии, что \(i\) и \(j\) имеют общий делитель больший \(1\). Далее, если у робоанта есть с собой блюдо, он может положить его на \(j\)-й стол (а может и не класть).

    Теперь директор просит помочь ему у написать программу, которая определит, смогут ли его робоанты расставить все блюда по местам.

    Формат входных данных
    В первой строке записано одно целое число \(n\) (\(1 \le n \le 200\,000\)) — количество столиков в Ресторане.

    Во-второй строке записано \(n\) различных целых чисел \(a_1, a_2, \dots a_n\) (\(1 \le a_i \le n\)) — номера блюд изначально расставленных на соответственно \(1\)-й, \(2\)-й, …\(n\)-й столиках.

    Формат выходных данных
    Выведите <<YES>>, если робоанты смогут расставить все блюда по местам, и <<NO>> в противном случае случае.

     

    Рассмотрим первый пример: здесь расставить все по местам может один робоант, изначально стоящий у второго стола. Для этого он:

    1. Берёт со \(2\)-го стола \(8\)-е блюдо, перемещается к \(8\)-му столу, кладет блюдо.

    2. Берёт с \(8\)-го стола \(2\)-е блюдо, перемещается ко \(2\)-му столу, кладет блюдо.

    3. Перемещается к \(4\)-му столу.

    4. Берёт с \(4\)-го стола \(6\)-е блюдо, перемещается к \(6\)-му столу, кладет блюдо.

    5. Берёт с \(6\)-го стола \(4\)-е блюдо, перемещается к \(4\)-му столу, кладет блюдо.

    Можно доказать, что во втором примере невозможно расставить все блюда по местам.

    21728

    математика

    Какая наука является первоисточником информатики?

    1. математика
    2. обществознание
    3. кибернетика
    4. теория информации

    21587

    математика

    Появление новых свойств системы, которым не обладал ни один из ее элементов называется

    1. системный эффект
    2. результат объединения
    3. бином системы
    4. эффект бабочки

    21577

    математика

    Какая концепция характеризует информацию как свойство саморганизующихся систем?

    1. классическая
    2. системная
    3. коммуникационная
    4. функциональная

    Package Pickup

    математика

    **Замечание: время на тест в этой задаче 4 сек, в два раза больше, чем по умолчанию.**

    Фермер Джон распределил коров и пакеты по странной схеме на числовой оси, используя следующий процесс:

    • ФД выбрал число \(M\) (\(1 \le M \le 10^{18}\)).
    • ФД выбрал \(N\) (\(1 \le N \le 2 \cdot 10^4)\) интервалов \([L_i, R_i]\) чтобы распределить коров (\(1 \le L_i \le R_i \le 10^{18}\)). Затем он разместил коров в позициях \(L_i, L_i + M, L_i + 2M, \ldots, R_i\). Гарантируется, что \(R_i - L_i\) кратно \(M\).
    • ФД выбирает \(P\) (\(1 \le P \le 2 \cdot 10^4)\) интервалов \([A_i, B_i]\) чтоб распределить пакеты (\(1 \le A_i \le B_i \le 10^{18}\)). Затем он размещает пакеты в позициях \(A_i, A_i + M, A_i + 2M, \ldots, B_i\). Гарантируется, что \(B_i - A_i\) кратно \(M\).
    Поле распределения коров и пакетов, ФД хочет увидеть сколько времени требуется коровам, чтобы забрать пакеты. Каждую секунду ФД может дать команду одной корове двинуться на одну единицу влево или вправо от текущей позиции. Если корова попадает в позицию, где размещён пакет, она его забирает. ФД хочет узнать минимальное количество секунд, которое потребуется коровам чтобы собрать все пакеты.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(M\), \(N\), \(P\).

    Каждая из последующих \(N\) строк содержит два целых числа \(L_i\) и \(R_i\).

    Каждая из последующих \(P\) строк содержит два целых числа \(A_i\) и \(B_i\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите одно целое число, представляющее минимальное количество времени, которое потребуется коровам, собрать все пакеты, если в каждую секунду он может передвинуть одну любую корову влево или вправо на единицу.

    Shock Wave

    математика

    Бесси экспериментирует с мощным имплантатом копыта, который способен создавать мощные ударные волны. Перед ней выстроено \(N\) (\(2 \leq N \leq 10^5\)) плиток, для разрушения которых требуется мощность не менее \(p_0,p_1,\dots,p_{N-1}\), соответственно (\(0 \leq p_i \leq 10^{18}\)).

    Бесси может применить силу, ударив по определенной плитке, но из-за странной природы ее имплантата, она не применит никакой силы к плитке, которую она пробьет. Вместо этого, если она решит ударить плитку \(x\) один раз, где \(x\) — это целое число в диапазоне \([0,N-1]\), она применит \(|i-x|\) силу к плитке \(i\) для всех целых чисел \(i\) в диапазоне \([0,N-1]\). Эта сила также является кумулятивной, поэтому применение \(2\) силы дважды к плитке применит в общей сложности \(4\) силы к плитке.

    Определите наименьшее количество ударов, необходимое для разбивания всех плиток.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(T\) (\(1 \leq T \leq 100\)) представляющее количество подтестов.

    Строка \(2t\) содержит одно целое число \(N\), количество плиток в подтесте \(t\).

    Строка \(2t+1\) содержит \(N\) разделённых одиночными пробелами чисел \(p_0,p_1, \ldots, p_{N-1}\) представляющих что плитку \(i\) разрушит удар силы \(p_i\).

    Гарантируется, что сумма всех \(N\) в одном тесте не превысит \(5\cdot 10^5\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    \(T\) строк, \(i\)-ая строка представляет ответна \(i\)-ый подтест.

    Farmer John's Favorite Operation

    математика

    У Фермера Джона есть массив \(a\) из \(N\) (\(1 \leq N \leq 2 \cdot 10^5\)) неотрицательных целых чисел и целое число \(M\) (\(1 \leq M \leq 10^9\)). Затем ФД спрашивает у Беси число \(x\). За одну операцию ФД может выбрать индекс \(i\) и вычесть или прибавить \(1\) к \(a_i\). ФД называет число скучным - если оно равно минимальному количеству операций, которые он должен выполнить, чтобы \(a_i-x\) стало делится на \(M\) для всех \(1 \leq i \leq N\).

    Среди всех возможных \(x\) выберите минимально возможное скучное число.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(T\) (\(1 \leq T \leq 10\)), количество независимых подтестов.

    Первая строка каждого подтеста содержит числа \(N\) и \(M\).

    Вторая строка каждого подтеста содержит \(a_1, a_2, ..., a_N\) (\(0 \leq a_i \leq 10^9\)).

    Гарантируется, что сумма \(N\) по всем подтестам не превысит \(5 \cdot 10^5\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Для каждого подтеста выведите целое число - минимальное скучное число по всем возможным \(x\).

    Good Bitstrings

    математика

    Для любых двух положительных целых чисел \(a\) и \(b\) определим функцию \(\texttt{gen_string}(a,b)\) следующим кодом Python:

    def gen_string(a: int, b: int):
    	res = ""
    	ia, ib = 0, 0
    	while ia + ib < a + b:
    		if ia * b <= ib * a:
    			res += '0'
    			ia += 1
    		else:
    			res += '1'
    			ib += 1
    	return res
    

    Эквивалентный код C++:

    string gen_string(int64t a, int64t b) {
    	string res;
    	int ia = 0, ib = 0;
    	while (ia + ib < a + b) {
    		if ((__int128)ia * b <= (__int128)ib * a) {
    			res += '0';
    			ia++;
    		} else {
    			res += '1';
    			ib++;
    		}
    	}
    	return res;
    }
    

    \(ia\) будет равно \(a\), а \(ib\) будет равно \(b\), когда цикл завершится, так что это функция возвращает битовую строку длины \(a+b\), содержащую ровно \(a\) нулей и \(b\) единиц. Например, \(\texttt{gen_string}(4,10)=01110110111011\).

    Назовём строку битов \(s\) \(\textbf{хорошей}\), если существуют положительные целые числа \(x\) и \(y\) такие, что \(s=\texttt{gen_string}(x,y)\). Даны два натуральных числа \(A\) и \(B\) (\(1\le A,B\le 10^{18}\)), ваша задача состоит в том, чтобы вычислить количество хороших префиксов \(\texttt{gen_string}(A,B)\). Например, есть \(6\) хороших префиксов \(\texttt{gen_string}(4,10)\):

    х = 1 | у = 1 | gen_string(х, у) = 01
    х = 1 | у = 2 | gen_string(х, у) = 011
    х = 1 | у = 3 | gen_string(х, у) = 0111
    х = 2 | у = 5 | gen_string(х, у) = 0111011
    х = 3 | у = 7 | gen_string(х, у) = 0111011011
    х = 4 | у = 10 | gen_string(х, у) = 01110110111011
    

    ФОРМАТ ВВОДА (ввод поступает с терминала/стандартного ввода):

    Первая строка содержит \(T\) (\(1\le T\le 10\)), количество подтестов.

    Каждая из следующих строк \(T\) содержит два целых числа \(A\) и \(B\).

    ФОРМАТ ВЫВОДА (вывод на терминал / стандартный вывод):

    Ответ для каждого подтеста на новой строке.

    ОБРАЗЕЦ ВВОДА:

    6
    1 1
    3 5
    4 7
    8 20
    4 10
    27 21
    

    ОБРАЗЕЦ ВЫВОДА:

    1
    5
    7
    10
    6
    13
    

    ОЦЕНКА:

    • Тест 2: \(A,B\le 100\)
    • Тест 3: \(A,B\le 1000\)
    • Тесты 4–7: \(A,B\le 10^6\)
    • Тесты 8–13: все ответы не превышают \(10^5\).
    • Тесты 14–21: дополнительные ограничения отсутствуют.

    Автор: Benjamin Qi

    Bakery

    математика

    Беси открыла пекарню!

    Она может делать печенье за \(t_C\) единиц времени или булочку за \(t_M\) единиц времени (\(1\le t_C,t_M\le 10^9\)). В каждый момент времени она может делать только один вид выпечки, поэтому чтобы произвести \(A\) печенек и \(B\) булочек, её требуется \(A \cdot t_C + B \cdot t_M\) единиц времени.

    У Беси есть \(N\) (\(1\le N\le 100\)) друзей, которые любят заглядывать в пекарню по одному. \(i\)-ый друг делает заказ на \(a_i\) (\(1 \leq a_i\leq 10^9\)) печенек и \(b_i\) (\(1 \leq b_i \leq 10^9\)) булочек немедленно после входа. У Беси нет места хранить выпечку, поэтому она начинает изготовление сразу после получения заказа. Кроме того, друзья Беси очень заняты и не могут ждать более \(c_i\) (\(a_i + b_i \leq c_i \leq 2 \cdot 10^{18}\)) единиц времени, после чего печалятся и уходят.

    Беси не хочет огорчать своих друзей. За один муни она может апгрейдить свою печь, чтобы печь печенье на одну единицу времени меньше или печь булочку на одну единицу времени меньше. Она не может апгрейдить печь на дробное количество времени, но она может апргрейдить печь сколько хочет раз прежде чем придут друзья, при этом время на изготовление печенек и булочек должно оставаться строго положительным.

    Для каждого из \(T\) (\(1 \leq T \leq 100\) подтестов помогите Беси вычислить минимальное количество муни, которое ей требуется потратить так, чтобы её пекарня могла удовлетворить всех друзей.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(T\), количество подтестов.

    Каждый подтест начинается со строки, содержащей \(N\), \(t_C\), \(t_M\). Затем следуют \(N\) строк, каждая из которых содержит три целых числа \(a_i,b_i, c_i\).

    Последовательные подтесты разделены пустыми строками.

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Минимальное количество муни, которые должна потратить Беси на каждый подтест на отдельной строке.

    Equal Sum Subarrays

    математика

    **Замечание: Время на тест 3 сек, в 1.5 раза больше чем по умолчанию.**

    Фермер Джон дал Беси масив \(a\) длины \(N\) (\(2\le N\le 500, -10^{15}\le a_i\le 10^{15}\)) и все \(\frac{N(N+1)}{2}\) суммы непрерывных подмассивов различны. Для каждого индекса \(i\in [1,N]\), помогите Беси вычислить минимальное количество действий, чтобы изменить \(a_i\) так, чтобы появились два различных непрерывных подмассива \(a\) с равными суммами.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая срока содержит \(N\).

    Следующая строка содержит \(a_1,\dots, a_N\) (элементы массива \(a\), по порядку).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Одна строка для каждого индекса \(i\in [1,N]\).

    Cow Camp

    математика

    Чтобы отобраться на коровий лагерь, Беси должна набрать много очков на последней задаче из USACOW Open. В этой задаче есть \(T\) различных тестов (\(2\le T\le 10^3\)) с одинаковыми весами и первым тестов из примера условий. Её баллы будут равны количеству тестов, которое пройдёт её последняя отсылка.

    Беси устала и потому не хочет решать задачу, но у неё есть план. Поскольку ответы только "yes" и "no", она решила непрерывно посылать такое решение

    if input == sample_input:
      print sample_output
    else:
      print "yes" или "no" с независимой вероятность 1/2 для каждого теста. 
    

    Заметим, что для всех тестов, кроме теста из условия, при новой отсылке эта программа может выдавать разные ответы, и потому количество пройденных тестов будут разниться.

    Беси знает, что она может послать решение не более чем \(K\) (\(1\le K\le 10^9\)) раз поскольку иначе она будет дисквалифицирована. Каково максимальное значение счета Беси, если она будет придерживаться оптимальной стратегии?

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Единственная строка ввода содержит два разделённых пробелом целых числа \(T\) и \(K.\)

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите ответ как десятичную дробь, которая отличается от правильного ответа с абсолютной или относительной ошибкой, не превышающей \(10^{-6}\).

    Falling Portals

    графы кратчайшие пути математика

    Имеется \(N\) (\(2\le N\le 2\cdot 10^5\)) миров, каждый с порталом. Изначально, мир \(i\) (for \(1 \leq i \leq N\)) имеет \(x\)-координату \(i\), и \(y\)-координату \(A_i\) (\(1\le A_i\le 10^9\)). В каждом мире есть по одной корове. В момент времени \(0\), все \(y\)-координаты различны и все миры начинают падать. Мир \(i\) двигается непрерывно в отрицательном направлении координаты \(y\) со скоростью \(i\) единиц в секунду.

    В любой момент времени, когда два мира находятся на одной и той же \(y\)-координате (возможно в дробное время), порталы "выравниваются". Это означает, что корова из одного из этих миров, может используя эти порталы мгновенно перебраться в другой мир.

    Для каждого \(i\) корова из мира \(i\) хочет перебраться в мир \(Q_i\) (\(Q_i\neq i\)). Определите для каждой коровы, сколько времени ей понадобиться, чтобы перебраться в желаемый мир, если она будет путешествовать оптимально.

    Ответ на каждый запрос необходимо вывести в виде дроби \(a/b\), где \(a\) и \(b\) положительные и взаимно простые целые числа. Выведите \(-1\) если путешествие невозможно.

    ОЦЕНИВАНИЕ:

    • В тестах 2-3 \(N\le 100.\)
    • В тестах 4-5 \(N\le 2000.\)
    • В тестах 6-14 нет дополнительных ограничений.

    ФОРМАТ ВВОДА (файл falling.in):

    Первая строка ввода должна содержать одно целое число \(N.\)

    Следующая строка содержит \(N\) разделённых одиночными пробелами целых числе \(A_1,A_2,\ldots,A_N.\)

    Следующая строка содержит \(N\) разделённых одиночными пробелами целых чисел \(Q_1,Q_2,\ldots,Q_N.\)

    ФОРМАТ ВЫВОДА (файл falling.out):

    Выведите \(N\) строк, \(i\)-th из которых содержит длину пути для коровы \(i.\)

    Cowmistry

    битмаски разделяй и властвуй математика

    Беси нуждается в Вашей помощи. Она должна создать микстуру из трёх различных компонент. Некоторые из компонент нельзя смешивать друг с другом. В частности, две компоненты с метками \(a\) и \(b\) могут присутствовать в одной микстуре, только если \(a \oplus b \le K\) (\(1 \le K \le 10^9\)).

    Замечание: Здесь, \(a\oplus b\) обозначает побитовое исключающее ИЛИ неотрицательных целых чисел \(a\) и \(b\). Эта операция эквивалентна сложению соответствующих пар битов по модулю 2 и игнорированию переноса. Например

    \[0\oplus 0=1\oplus 1=0,\]
    \[1\oplus 0=0\oplus 1=1,\]
    \[5\oplus 7=101_2\oplus 111_2=010_2=2.\]

    У Беси есть \(N\) (\(1\le N\le 2\cdot 10^4\)) ящиков с компонентами. \(i\)-ый ящик содержит компоненты с номерами от \(l_i\) до \(r_i\) включительно \((0\le l_i \le r_i \le 10^9)\). Никакие два ящика не содержат одинаковые компоненты. Беси хочет узнать, сколько уникальных микстур из трёх различных компонент она может создать. Две микстуры рассматриваются как различные, если хотя бы одна компонента есть в одной микстуре и отсутствует в другой. Ответ выводите по модулю \(10^9 + 7\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит два целых числа \(N\) и \(K\).

    Каждая из последующих \(N\) строк содержит два разделённых пробелом целых числа \(l_i\) и \(r_i\). Гарантируется, что ящики даются в порядке возрастания содержимого. а именно , \(r_i<l_{i+1}\) для каждого \(1\le i<N\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Количество микстур из трёх различных компонент, которые Беси может создать по модулю \(10^9 + 7\).

    SCORING

    • В тестах 3-4 \(\max(K,r_N)\le 10^4\).
    • В тестах 5-6 \(K=2^k-1\) для некоторого целого \(k\ge 1\).
    • В тестах 7-11 \(\max(K,r_N)\le 10^6\).
    • В тестах 12-16 \(N\le 20\).
    • В тестах 17-21 нет дополнительных ограничений.

    Автор: Benjamin Qi

    Tree Depth

    дп разделяй и властвуй математика

    На Новый год Фермер Джон решил подарить своим коровам праздничное двоичное дерево поиска (BST)

    Чтобы сгенерировать это BST, ФД начинает с перестановки \(a=\{a_1,a_2,\ldots,a_N\}\) целых чисел \(1\ldots N\), где \(N\le 300\). Затем он выполняет следующий псевдокод с аргументами \(1\) and \(N\).

    generate(l,r):
      if l > r, return empty subtree;
      x = argminl <= i <= r ai; // index of min ai in {al,...,ar}
      return a BST with x as the root, 
        generate(l,x-1) as the left subtree,
        generate(x+1,r) as the right subtree;
    

    Например, перестановка \(\{3,2,5,1,4\}\) сгенерирует такое BST

        4
       / \
      2   5
     / \ 
    1   3
    

    Пусть \(d_i(a)\) обозначает глубину вершины \(i\) в дереве, соотвествующем \(a\), то есть количество вершин на пути из \(a_i\) к корню. В примере выше, \(d_4(a)=1, d_2(a)=d_5(a)=2,\) and \(d_1(a)=d_3(a)=3\).

    Количество инверсий \(a\) равно количеству пар целых чисел \((i,j)\), таких что \(1\le i<j\le N\) и \(a_i>a_j\). Коровы знают, что \(a\), которую ФД использовал для генерации BST, имеет ровно \(K\) инверсий \((0\le K\le \frac{N(N-1)}{2})\). Среди всех перестановок \(a\), удовлетворяющих этому условию, вычислите Остаток, когда \(\sum_ad_i(a)\) поделено на \(M\) для каждого \(1\le i\le N\).

    ФОРМАТ ВВОДА (файл treedepth.in):

    Единственная строка ввода содержит три разделённых одиночными пробелами целых числа: \(N, K\), \(M\), за которыми идёт перевод строки. \(M\) будет простым числом в интервале \([10^8,10^9+9]\).

    ФОРМАТ ВЫВОДА (файл treedepth.out):

    Выведите \(N\) разделённых одиночными пробелами целых чисел, обозначающих \(\sum_ad_i(a)\pmod{M}\) для каждого \(1\le i\le N.\)

    ОЦЕНИВАНИЕ (по группам) :

    • Тесты 3-4 удовлетворяют \(N\le 8.\)
    • Тесты 5-7 удовлетворяют \(N\le 20.\)
    • Тесты 8-10 удовлетворяют \(N\le 50.\)

    Teleportation

    математика

    Большего всего из фермерских забот Фермер Джон ненавидит убирать лотки с коровьим навозом. Для того чтобы упростить процесс он придумал телепортер навоза. Вместо того, чтобы везти навоз в тележке за трактором, он может использовать телепортер для перемещения навоза из одного места в другое.

    Ферма Джона построена вдоль длинной прямой дороги, поэтому любое место фермы может быть описано его позицией на этой дороге (точка на числовой прямой). Телепортер описывается двумя числами \(x\) и \(y\), которые обозначают, что навоз из точки \(x\) может быть мгновенно телепортирован в точку \(y\).

    ФД решил построить телепортер с первой конечной точкой расположенной в \(x=0\); Ваша задача помочь ему определить наилучший выбор для другой конечной точки \(y\). В частности, имеется \(N\) лотков с навозом на ферме (\(1 \leq N \leq 100,000\)). \(i\)-ый лоток нужно переместить с позиции \(a_i\) в позицию \(b_i\) и ФД транспортирует каждый лоток отдельно от других. Обозначим \(d_i\) расстояние,на которое нужно перевезти каждый лоток. \(d_i\) может быть потенциально меньше, если ФД использует телепортер (везя на тракторе от \(a_i\) до \(x\) и затем от \(y\) до \(b_i\)).

    Пожалуйста, помогите ФД определить минимально возможную сумму \(d_i\) которую может достичь ФД, правильно выбрав значение \(y\) (второго конца телепорта). Одно и то же значение \(y\) используется для транспортировки всех лотков.

    ФОРМАТ ВВОДА (файл teleport.in):

    Первая строка ввода содержит \(N\). Каждая из последующих \(N\) строк содержит по два целых числа \(a_i\) и \(b_i\), в интервале \(-10^8 \ldots 10^8\). Все значения не обязательно различны.

    ФОРМАТ ВЫВОДА (файл teleport.out):

    Выведите одно число - минимальную сумму \(d_i\), которую может достичь ФД. Заметим, что это число может превысить 32-битное целое, поэтому нужно использовать больший тип данных, например "long long" в C/C++.

    Large Banner

    математика


    Беси возвращается домой после длительного путешествия, а Фермер Джон хочет встретить ее баннером "Welcome Home". Поле ФД представляет собой целочисленную решетку размером M*N (1 <= M, N <= 100,000). Левый нижний угол поля имеет координаты (0,0), правый верхний - координаты (M,N). В каждой целочисленной точке поля вкопан столб. Из этих (M+1) * (N+1) точек ФД должен выбрать две в качестве конечных точек баннера.
    Баннер должен быть точно прямым. Это означает, что на отрезке прямой между столбами, которые ФД выберет, не должно быть других столбов Кроме того, ФД хочет, чтобы баннер имел длину не менее L и не более H (1 <= L <= H <= 150,000).
    Посчитайте, сколько существует различных способов повесить баннер. Способ, в котором меняются точки начала и конца друг с другом, считается одним и тем же. Поскольку число может быть очень большим, выводите ответ по модулю B (1 <= B <=1,000,000,000).
    Рассмотрим пример M = 2 и N = 2:
    * * * * * * * * *
    ФД хочет баннер с длиной от 1 до 3 метров включительно. Все способы подходят по длине, но 8 пар должны быть исключены: Farmer John wants the length of the banner to be between 1 and 3 inclusive.
    (0, 0) и (2, 0): (1, 0) на отрезке между ними (0, 1) и (2, 1): (1, 1) на отрезке между ними (0, 2) и (2, 2): (1, 2) на отрезке между ними (0, 0) и (2, 2): (1, 1) на отрезке между ними (0, 0) и (0, 2): (0, 1) на отрезке между ними (1, 0) и (1, 2): (1, 1) на отрезке между ними (2, 0) и (2, 2): (2, 1) на отрезке между ними (0, 2) и (2, 0): (1, 1) на отрезке между ними
    Таким образом, ответ = (к-во способов из 9 по 2) - 8 = 28 вариантов.
    PROBLEM NAME: banner
    Формат входных данных
    * Строка 1: Пять разделенных пробелом целых чисел: M, N, L, H, B.
    Формат выходных данных
    * Строка 1: Одно целое число, обозначающее количество баннеров по модулю B

    Минимальное максимальное

    математика реализация

    Алексей Юрьевич и Михаил Леонидович отправились на поезде в Троицк. По дороге к ним подсели вахтовик и дембель. После знакомства и небольших историй о себе вахтовик и дембель решили устроить Алексею Юрьевичу и Михаилу Леонидовичу тест «на мужика»: нужно решить непростую задачку по программированию.
    Помогите Алексею Юрьевичу и Михаилу Леонидовичу пройти тест «на мужика».
    Задан массив целых чисел a1,a2,...,an.
    Стоимостью подотрезка массива 1 <= l <= r <= n назовем величину f(l,r) = sum(l,r) − xor(l,r), где sum(l,r) = al +al+1+...+ar, а xor(l,r) = al ⊕al+1 ⊕...⊕ar (⊕ здесь обозначает операцию XOR, побитовое исключающее «ИЛИ» чисел, подробнее в разделе «Замечание»).
    Требуется найти подотрезок заданного массива с максимальным значением f(l,r). Если ответов несколько, то среди них нужно найти подотрезок с минимальной длиной, то есть минимальным значением r − l +1.
    Входные данные
    Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число t (1 <= t <= 104) — количество наборов входных данных. Далее следует описание наборов входных данных.
    Первая строка каждого набора входных данных содержит единственное целое число n (1 <= n <= 105) — длину массива.
    Вторая строка каждого набора входных данных содержит n целых чисел a1,a2,...,an (0 <= ai <= 109) — элементы массива.
    Гарантируется, что сумма n по всем наборам входных данных не превосходит 2 · 105.
    Выходные данные
    Для каждого набора входных данных выведите два числа 1 <= l <= r <= n таких, что значение f(l,r) максимально по всем подотрезкам массива a, а длина r −l +1 минимальна. Если существует несколько правильных ответов, выведите любой из них.
     

    Примеры
    Входные данные Выходные данные
    1 6
    1
    0
    2
    5 10
    3
    0 2 4
    4
    0 12 8 3
    5
    21 32 32 32 10
    7
    0 1 0 1 0 1 0
    1 1
    2 2
    3 3
    2 3
    3 4
    4 6

    Замечание
    Операция XOR двух чисел a и b — это битовая операция, которая применяется независимо к каждой паре соответствующих битов a и b. Эта операция представляет собой сложение по модулю 2. Вот её таблица истинности для пары битов:
    a b a⊕b
    0 0 0
    0 1 1
    1 0 1
    1 1 0

    В первом наборе входных данных f(1,1) = 1 − 1 = 0.
    Во    втором    наборе    входных    данных    f(2,2)    =    10 − 10    =    0.    Заметим,    что f(1,2) = (10 + 5) − (10 ⊕ 5) = 0, но нам среди максимальных значений f(l,r) нужно найти подотрезок с минимальной длиной.
    В четвертом наборе входных данных f(2,3) = (12+8) − (12 ⊕ 8) = 16.
    В пятом наборе входных данных есть два правильных ответа, так как f(2,3) = f(3,4) и их длины равны.

     

    Копейский рок

    математика реализация

    Мало кто знает, но у Данилы Багрова и Татарина есть ещё один брат, неизвестный широкой публике. Проживает он тихо, мирно в Копейске, вдали от столичной суеты и назойливых папарацци.
    Однажды Данила Багров и Татарин решили навестить своего брата. Приехав к нему домой в Копейск, Данила обнаружил в шкафу обширную коллекцию дисков различных рок-групп. На полках лежали диски «Nautilus Pompilius», «Би-2», «АукцЫона», «Смысловых галлюцинаций», «Агаты Кристи» и многих других. Однако Даниле не понравилось, как эти диски были разложены на полках.
    Шкаф с полками можно представить в виде прямоугольника n×m, где в каждой клетке лежит один диск. Каждый диск описывается одним числом — некоторым номером группы, которая записала этот диск. Будем считать, что если два диска имеют одинаковое число, то их записала одна и та же группа, а если разные — то их записали разные группы.
    Данила хочет добиться того, чтобы в каждом столбце все диски были записаны разными группами. Для этого он может сколько угодно раз переставлять диски произвольным образом на любой полке (то есть внутри любой строки), однако, запрещено менять местами диски с разных полок.
    Помогите Даниле и скажите, можно ли такими действиями добиться того, чтобы в каждом столбце все диски были записаны разными группами.
    Входных данные
    В первой строке через пробел заданы два целых числа n и m — размеры шкафа (1 <= n,m <= 100).
    В следующих n строках через пробел записаны m целых чисел ai,j — номер группы, которая записала диск, лежащий на i-й полке в j-м столбце (1<= ai,j <=109).
    Выходные данные
    В первой строке выведите Impossible, если Данила не может расставить всё так, чтобы в каждом столбце диски были записаны разными группами, и Possible, если такая расстановка возможна.
    В случае, если Данила может добиться желаемого, выведите финальную расстановку дисков в шкафу. Если таких расстановок несколько, выведите любую из них.
     

    Примеры
    Входные данные Выходные данные
    1 3 4
    1 2 2 3
    3 2 1 4
    2 4 1 3
    Possible
    3 2 1 2
    1 3 2 4
    2 1 4 3
    2 3 3
    1 1 1
    1 1 1
    1 1 1
    Impossible

    Ящики

    математика Вывод формулы Задача на реализацию

    Саша Белый давно планировал переехать в Кыштым. И вот настал день X. Саша собрал все свои вещи в ящики и вынес их на улицу. Ящики были распределены на n стопок, расположенных вдоль одной прямой, следующим образом: a1 ящиков в первой стопке стоят непосредственно у газели, a2 ящиков во второй стопке – правее первой на метр, следующие a3 еще через метр и т.д. Теперь Белому нужно переставить все ящики как можно ближе к газели, а именно, все ящики из второй, третьей и т.д. стопок должны быть переставлены в первую стопку к исходным a1 ящикам.
    Саша за этот день уже очень устал. Но, к счастью, мимо проходили n мальчишек. Ребята согласились перенести ящики. Каждый из них, ввиду своей выносливости, переносит грузы следующим образом:
    1. i-й мальчик проходится по стопкам, номера которых делятся на i, справа налево.
    2. Он берет из первой стопки на своем пути ровно один ящик (эта стопка обязана быть непустой).
    3. Пройдя i метров налево (то есть до следующей стопки, номер которой делится на i), он снова берет один ящик со стопки, рядом с которой он стоит (исходя из этого, в стопке  обязательно должен быть хотя бы один ящик), пройдя еще i метров налево он снова берет ящик и так далее.
    4. Когда i-й мальчик доходит до стопки с номером i, он кладет все ранее взятые ящики в эту стопку.

    Каждый из ребят может делать сколько угодно проходов. Мальчики могут делать проходы в любом порядке (например, возможна ситуация, когда сначала проходится второй
    мальчик, потом первый и снова второй).
    Теперь Саша Белый хочет знать, получится ли у них переставить все ящики в начало. Скажите ему ответ на вопрос.

    Входные данные
    В первой строке входных данных записано целое число n количество стопок ящиков (1 <= n <= 105).
    Во второй строке через пробел записаны n целых чисел di количество ящиков в i-й стопке (1 <= di <= 109).
    Выходные данные
    Выведите YES, если существует способ, при котором ребята перенесут все ящики к газели в первую стопку, или NO, если такого способа нет.

    Примеры
    Входные данные Выходные данные
    1 5
    2 1 3 5 3
    YES
    2 4
    1 5 2 3
    NO

    Замечание
    В первом примере сначала второй мальчик пройдется два раза, таким образом перенеся два ящика из четвертой стопки во вторую. После этого шага d = (2,3,3,3,3). Потом первый мальчик пройдется 3 раза, перетащив все ящики в первую стопку.
    Во втором примере мальчикам не удастся перенести все ящики в первую стопку.
     

    Финансовая реформа

    Вывод формулы математика

    Однажды после олимпиады по экономике Мише приснился очень красочный и необычный сон.
    Мальчик оказался министром финансов Берляндии. Осознав свою значимость, он тут же решил произвести в стране реформу. Раньше в Берляндии использовались банкноты с номиналами 1, 10, 100 и 1 000 бурлей. Мише данная система показалась крайне банальной, поэтому он решил придумать что-то свое.
    Мальчик выбрал два целых числа x и y (x ≤ y) и заявил, что теперь в Берляндии будут использоваться только банкноты с номиналами x, x + 1, x + 2, . . . , y бурлей. Вскоре реформа была принята и вступила в силу, однако населению страны это совсем не понравилось. Недовольства начались из-за того, что теперь, используя новые банкноты, можно было набрать далеко не любую сумму.
    Например, если Мишей были выбраны числа x = 5 и y = 7, то невозможно набрать суммы 1, 2, 3 и 4 бурлей. Также не получится набрать суммы 8 и 9 бурлей. Если же выбрать числа x = y = 2, то невозможно будет набрать любую нечетную сумму.
    Миша, находясь на грани увольнения, решил успокоить население Берляндии и предъявить такое минимальное число N, что при помощи новых банкнот возможно набрать любую сумму, начиная с N. Таким образом, должно быть возможно набрать суммы N бурлей, N + 1 бурлей, N + 2 бурлей, и так далее. Помогите Мише найти искомое число N и избежать увольнения.

    Входные данные
    В первой строке входных данных записано целое число x — минимальный номинал новых банкнот.
    Во второй строке записано целое число y (1 ≤ x ≤ y ≤ 2 · 109 ) — максимальный номинал новых банкнот.

    Выходные данные
    Выведите одно натуральное число N — минимальное число, такое, что при помощи банкнот с номиналами x, x + 1, x + 2, . . . , y можно набрать любую сумму, начиная с N бурлей. Если такого числа не существует, в качестве ответа выведите −1.

     
    Примеры

    Входные данные Выходные данные Пояснение
    1 5
    7
    10 Имеются банкноты трех номиналов: 5, 6 и 7 бурлей. Ниже перечислены суммы,
    которые можно набрать при помощи данных банкнот:
    • 5 = 5,
    • 6 = 6,
    • 7 = 7,
    • 10 = 5 + 5,
    • 11 = 5 + 6,
    • 12 = 5 + 7,
    • 13 = 6 + 7,
    • . . .
    Можно показать, что при помощи банкнот данных номиналов возможно набрать любую сумму, начиная с 10 бурлей.
    2 2
    2
    -1 Есть банкноты всего одного номинала: 2 бурля. При помощи данных банкнот можно набрать только любую чётную сумму: 2, 4, 6, .... Таким образом, искомого числа N не существует.
    3 1900000000
    2000000000
    36100000000  

    Ну все, я попрыгал!

    Вывод формулы математика Задача на реализацию

    Персонаж известной компьютерной игры Марио постарел и почти перестал прыгать. Но совсем недавно он увидел спуск из N ступенек, и его накрыло ностальгией. Марио встал на самую верхнюю ступеньку и решил преодолеть этот спуск при помощи прыжков.
    Когда-то Марио знал тысячи различных видов прыжков, но теперь он смог вспомнить только два: короткие и длинные. Короткий прыжок позволяет спуститься на произвольное число ступенек, не большее X, а длинный — на произвольное число, не большее Y (X < Y ). Но в силу возраста Марио не может делать два длинных прыжка подряд и вынужден между ними совершать хотя бы один короткий. При этом Марио не хочет слишком уж сильно ухудшить свои прошлые результаты и поэтому постарается обойтись как можно меньшим числом прыжков.
    Помогите Марио посчитать минимальное количество прыжков, требующееся для преодоления всех N ступенек.

    Входные данные
    В первой строке входных данных записано целое число X — максимальная длина короткого прыжка.
    Во второй строке записано целое число Y (1 ≤ X < Y ≤ 1018) — максимальная длина длинного прыжка.
    В третьей строке записано целое число N (1 ≤ N ≤ 1018) — количество ступенек в спуске.

    Выходные данные
    В единственной строке выведите целое число — минимальное число прыжков, необходимое Марио для спуска.


    Примеры
    Входные данные Выходные данные
    1 2
    3
    5
    2
    2 1
    2
    4
    3
    3 1
    100
    1000000000000000000
    19801980198019801


    Замечание
    На изображениях ниже приведены возможные способы решения первых двух тестов из условия:

    Ирригация

    математика Задача на реализацию реализация

    Мальчика Мишу с юных лет волновали вопросы доставки воды. Когда Мише было четыре года, он приносил воду для полива растений в воздушных шариках вместо вёдер, так как воду в ведре было проще расплескать. Когда Мише исполнилось шесть лет, он построил в квартире водопровод из трубочек для сока, автоматизировав тем самым поливку цветов у себя в комнате. Все полученные в школе знания Миша сразу же использовал в своих смелых изобретениях: передача воды по проводам, насос из зубочисток, кран из маминого флакончика духов — вот далеко не полный список изобретений мальчика в школьные годы.

    Как известно, любому таланту надо дать возможность реализоваться, поэтому мама Миши отправила сына на инновационную олимпиаду по ирригации (ИОИ). На этой олимпиаде школьники со всех концов Берляндии соревнуются в умении доставить воду для поливки растений самыми причудливыми способами. Зная список изобретений Миши, несложно догадаться, что проведение подобной олимпиады весьма затратно, поэтому спустя n первых проведений олимпиады было решено ввести правило, по которому будет определяться место проведения соревнования в следующий год. Город для проведения олимпиады выбирается следующим образом: всего в Берляндии есть m городов, пронумерованных от 1 до m, готовых принять соревнование. Каждый год олимпиада проводится в городе, в котором она проводилась наименьшее число раз. Если таких городов несколько, то олимпиада проводится в городе с наименьшим номером среди городов с минимальным числом проведений олимпиады.

    Мишина мама очень волнуется за сына, поэтому её интересует, в каком городе будет проходить олимпиада в определённые годы. Единственная информация, которой располагает мама Миши, — места проведения олимпиады в первые n лет. Помогите маме Миши, и она попросит Мишу не залить вашу квартиру.

    Входные данные
    В первой строке заданы три целых числа n, m и q (1 ≤ n, m ≤ 500000 , 1 ≤ q ≤ 20) — количество проведений олимпиады до введения правила, количество городов в Берляндии, готовых провести олимпиаду, и число лет, про которые маму Миши интересует место проведения олимпиады, соответственно.

    В следующей строке содержится n целых чисел ai (1 ≤ ai ≤ m) — номера городов, в которых проводилась олимпиада в год i. Обратите внимание, что до принятия правила место проведения олимпиады могло выбираться произвольным образом.

    В следующих q строках заданы целые числа ki (n+1 ≤ ki ≤ 1018) — номера годов, для которых маму Миши интересует место проведения олимпиады.

    Выходные данные
    Выведите q целых чисел. В строке с номером i выведите одно целое число — место проведения олимпиады в год ki.

    Примеры
    Входные данные Выходные данные
    1 6 4 10
    3 1 1 1 2 2
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    4
    3
    4
    2
    3
    4
    1
    2
    3
    4
    2 4 5 4
    4 4 5 1
    15
    9
    13
    6
    5
    3
    3
    3

    Ануфрий

    Вывод формулы математика

    Жил дотер по имени Ануфрий. И вдруг случилось так, что его заботливая мама отрубила ему интернет. И как назло на компьютере Ануфрия была всего одна офлайновая игра – Minecraft.
     
    Во время увлекатейнешего разрушения своего разума мальчик не знал что в этой версии игры надо думать о еде. И тут ему пришла интереснейшая мысль насчет своей еды: так как у него был только торт(как ни странно он круглый), каким образом он может получить максимальное количество кусков торта при разрезаний n. Но так как, как типичный игрок в Dota 2, Ануфрий не отличался сообразительностью. HELP HIM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    Гарантируется, что меч, которым он режет торт, прямой. Так как Ануфрий не учит математику, а играет в доту, то не гарантируется n – натуральное(если такое произошло то выведите смайлик «
     
    -1»).
     
    На вход подается n.
     
    На выходе вы должны вывести ответ на задачу)))

    Ввод Вывод
    -2 -1
    0 0
    3 7

    (с) Тимченко А., 2018 г.

    Пепелац Деда Мороза

    математика реализация Конструктив

    Ни для кого не секрет, что Дед Мороз передвигается на особом транспортном средстве, принцип которого известен только самым приближенным зайцам Дедам Мороза. Однако, зайцы немного слабы в составлении маршрутов, и вам придется помочь им.

    Принцип работы транспортного средства Деда Мороза(в дальнейшем ПепеЛАЦ(Пепе Летающий агрегат Цвайхандер)) такой:
    на расстоянии одного километра друг от друга в точках (0, 0) и (1, 0) были построены две станции управления пепелацами A и B. С помощью них можно мгновенно переместить любой пепелац, повернув его на 90 градусов по или против часовой стрелки относительно точки A или B. Расстояние от пепелаца до соответствующей станции при этом не меняется. Следующее перемещение можно делать как относительно той же станции, так и относительно другой.

    Например, если повернуть пепелац, находящийся в точке (3, 1) на 90 градусов против часовой стрелки относительно станции A, то он переместится в точку (−1, 3), если его затем повернуть на 90 градусов по часовой стрелке относительно станции B, то он переместится в точку (4, 2), если затем повернуть его вокруг станции B по часовой стрелке еще раз, он переместиться в точку (3, −3).
    Деду Морозу необходимо добраться из точки (x1, y1) в точку (x2, y2). Помогите зайцам Деда Мороза составить маршрут, чтобы ему меньше пришлось ходить по заснеженному лесу.
    Поскольку перемещения мгновенные и абсолютно бесплатные(магия же), то минимизировать количество перемещений не надо.

    Формат входного файла
    Входной файл содержит четыре целых числа — x1, y1, x2 и y2, они не превышают 104 по
    абсолютной величине.

    Формат выходного файла
    Выведите в выходной файл последовательность перемещений с использованием станций управления, которая перемещает пепелац из точки (x1, y1) как можно ближе к точке (x2, y2).
    Поворот по часовой стрелке относительно станции A обозначается как «+A», поворот против часовой стрелки относительно станции A обозначается как «-A», соответствующие повороты относительно станции B обозначаются как «+B» и «-B». Выводите по одному перемещению на строке. Выведенная последовательность не обязана быть минимальной по количеству перемещений, но должна содержать не более 106 действий.

    Примеры

    Ввод Вывод
    3 1
    3 -3
    -A   
    +B
    +B
    0 0
    3 0
    -B
    +B

     (с) Павел Колодкин, 12И