| | | |
|
C. Цифровой корень
теория чисел
*2000
Недавно Васе попалась такая задача, в которой были заданы три натуральных числа A, B и C из диапазона [1, N], и требовалось проверить, верно ли равенство AB = C. Недавно Вася изучил понятие цифрового корня из числа. Напомним, что цифровой корень d(x) числа x равен сумме цифр s(x) этого числа, если s(x) ≤ 9, и равен d(s(x)) в противном случае. К примеру, цифровой корень числа 6543 вычисляется следующим образом: d(6543) = d(6 + 5 + 4 + 3) = d(18) = 9. Вася вычитал, что цифровой корень произведения чисел равен цифровому корню произведения цифровых корней сомножителей, т.е. d(xy) = d(d(x)d(y)). И ему пришел в голову такой способ решения задачи: посчитать цифровые корни и проверить выполнение этого условия. Однако Вася подозревает, что это условие не является достаточным. Поэтому он просит вас посчитать, сколько существует тестовых примеров для встреченной им задачи таких, что предложенный им алгоритм ошибется. Выходные данные Выведите одно число — количество искомых троек A, B и C из диапазона [1, N]. Примечание В первом примере искомые тройки это (3, 4, 3) и (4, 3, 3).
| |
|
|
D. Поликарп и Div 3
дп
*1500
теория чисел
жадные алгоритмы
Поликарп очень любит числа, которые делятся на \(3\). У него есть длинное число \(s\). Поликарп хочет вырезать из него наибольшее количество чисел, которые делятся на \(3\). Для этого он проводит произвольное количество вертикальных разрезов между парами соседних цифр. В результате, после проведения \(m\) разрезов получается \(m+1\) число. Каждое из полученных чисел Поликарп анализирует и подсчитывает количество тех, которые делятся на \(3\). Например, если исходное число \(s=3121\), то Поликарп может разрезать его на три части двумя разрезами \(3|1|21\). В результате он получит два числа, которые делятся на \(3\). Поликарп может провести произвольное количество разрезов, каждый разрез проводится между парой соседних цифр. Числа, которые получатся в итоге не могут содержать лишних лидирующих нулей (то есть число может начинаться с 0 тогда и только тогда, когда это число в точности один символ '0'). Например, 007, 01 и 00099 не являются корректными числами, а 90, 0 и 10001 — являются. Какое наибольшее количество делящихся на три чисел он сможет получить? Выходные данные Выведите наибольшее количество делящихся на \(3\) чисел, которые Поликарп сможет получить, проведя вертикальные разрезы в заданном числе \(s\). Примечание Пример оптимального разделения числа для первого теста — 3|1|21. Во втором тесте никаких разрезов совершать не нужно. Заданное число 6 образует одно число, делящееся на \(3\). В третьем тесте надо провести разрезы между каждой парой цифр. В результате получим одну цифру 1 и \(33\) цифры 0. Каждая из \(33\) цифр 0 образует число, которое делится на \(3\). Пример оптимального разделения числа для четвертого теста — 2|0|1|9|201|81. Числа \(0\), \(9\), \(201\) и \(81\) делятся на \(3\).
| |
|
|
B. Замостите параллелепипед
Перебор
Комбинаторика
математика
теория чисел
*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\). Выходные данные Для каждого теста выведите количество троек чисел, которые удовлетворяют всем условиям. Примечание В первом тесте параллелепипед со сторонами \((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. Граница
теория чисел
*1800
Космонавт Наташа полетела исследовать Марс. Она знала, что марсиане — очень бедные инопланетяне. Чтобы обеспечить лучшую жизнь для своих граждан, их император решил брать налог с каждого туриста, посетившего планету. Наташа — жительница Земли, поэтому, чтобы попасть на территорию Марса, ей пришлось заплатить налог. На Марсе существуют \(n\) номиналов банкнот: \(i\)-й номинал равен \(a_i\). У Наташи есть бесконечное количество купюр каждого номинала. На руке каждого марсианина находится \(k\) пальцев, поэтому на Марсе используется система счисления с основанием \(k\). Кроме того, марсиане считают цифру \(d\) (в системе счисления с основанием \(k\)) божественной. В связи с этим, если последняя цифра в записи суммы налога Наташи в системе счисления с основанием \(k\) будет \(d\), марсиане будут счастливы. К сожалению, Наташа пока не знает божественную цифру марсиан. Определите, при каких значениях \(d\) Наташа сможет сделать марсиан счастливыми. Наташа может использовать только свои банкноты. Марсиане ей не дают сдачу. Выходные данные В первой строке выведите количество значений \(d\), при которых Наташа сможет сделать марсиан счастливыми. Во второй строке выведите все эти значения в возрастающем порядке. Все числа выводите в десятичной системе счисления. Примечание Рассмотрим первый тестовый пример. В нём используется восьмеричная система счисления. Возьмём одну купюру номиналом \(12\). В восьмеричной системе счисления это \(14_8\). Последняя цифра — \(4_8\). Возьмём одну купюру номиналом \(12\) и одну купюру номиналом \(20\). Сумма — \(32\). В восьмеричной системе счисления это \(40_8\). Последняя цифра — \(0_8\). Возьмём две купюры номиналом \(20\). Сумма — \(40\). В восьмеричной системе счисления это \(50_8\). Последняя цифра — \(0_8\). Никакую другую цифру, кроме \(0_8\) и \(4_8\), получить нельзя. Цифры \(0_8\) и \(4_8\) можно также получить и другими способами. Во втором тестовом примере используется десятичная система счисления. Номиналы всех купюр заканчиваются нулём, поэтому Наташа может дать марсианам только сумму, десятичная запись которой тоже заканчивается нулём.
| |
|
|
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\) — наименьшее общее кратное. Выходные данные Выведите единственное число — количество пар \((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. Ослабленный Общий Делитель
Перебор
*1600
теория чисел
жадные алгоритмы
В процессе исследования свойств наибольшего общего делителя (НОД) набора чисел известный математик Ильдар предложил новую концепцию ослабленного общего делителя (ООД) набора пар чисел. Для заданного набора пар целых чисел \((a_1, b_1)\), \((a_2, b_2)\), ..., \((a_n, b_n)\) их ООД называется произвольное число превосходящее \(1\), которое делит хотя бы один элемент в каждой паре. ОДД может и не существовать для некоторых наборов. Например, если набор пар имеет вид \([(12, 15), (25, 18), (10, 24)]\), то их ОДД может быть равен \(2\), \(3\), \(5\) или \(6\) (каждое из этих чисел строго больше \(1\) и делит хотя бы одно число в каждой паре). Вы — аспирант Ильдара, и ваша задача помочь ему с вычислением ООД. Поможете ему с эффективной реализацией вычисления ООД? Выходные данные Выведите единственное число — ООД списка пар. Если возможных ответов несколько, выведите любой; если ответа не существует, выведите \(-1\). Примечание В первом примере одним из возможных ООД является число \(6\). В первой паре оно делит \(18\), во второй — \(24\), а в третьей — \(12\). Во втором примере ни одно число, большее \(1\), не удовлетворяет условию. В третьем примере одним из возможных ответов является \(5\). Обратите внимание, что одним из возможных ответов также является \(15\), но в задаче не требуется максимизировать ответ.
| |
|
|
D. Восстановление BST
Деревья
Перебор
математика
*2100
дп
теория чисел
Хомяк Дима обожает грызть различные объекты, среди которых клетки, коробки, авторы плохих задач и даже деревья! Недавно он обнаружил двоичное дерево поиска и тут же сгрыз все его ребра, в результате чего вершины дерева перемешались в случайном порядке. Дима знает, что если Андрей, который кропотливо строил дерево на протяжении долгого времени, придет и увидит, что все разрушено, то он очень расстроится. По счастью, прежде чем сгрызть все ребра, Дима заметил, что для любых двух вершин, соединенных ребром, наибольший общий делитель их значений превосходит \(1\). Помогите Диме восстановить любое подходящее двоичное дерево поиска или скажите, что это невозможно. Определение и свойства двоичного дерева поиска можно найти здесь. Выходные данные Если можно собрать двоичное дерево поиска, такое что наибольший общий делитель любых двух вершин соединённых ребром больше \(1\), выведите «Yes» (без кавычек). В противном случае выведите «No» (без кавычек). Примечание На картинке ниже проиллюстрировано одно из возможных деревьев для первого примера. На картинке ниже проиллюстрировано одно из возможных деревьев для третьего примера.
| |
|
|
G. X-мышь в общежитии
математика
теория чисел
*2600
битмаски
Общежитие состоит из \(m\) комнат, пронумерованных от \(0\) до \(m - 1\). Также в общежитии проживает \(x\)-мышь. \(x\)-мышь — это необычная мышь, так как \(x\)-мышь движется каждую секунду из комнаты \(i\) в комнату \(i \cdot x \mod{m}\) (фактически, телепортируется, так как не посещает никаких других комнат по дороге). Начальная позиция \(x\)-мыши неизвестна. На Вас возложили ответственность поймать эту необычную \(x\)-мышь, поэтому сейчас Вам интересно, какое минимальное количество ловушек Вы должны установить (одна ловушка в одной комнате), чтобы гарантированно ее поймать. Вы можете быть уверены, что если \(x\)-мышь посетит комнату с установленной в ней ловушкой, то она абсолютно точно будет поймана. Единственное сделанное Вами наблюдение: \(\text{GCD} (x, m) = 1\). Выходные данные Выведите единственное число — минимальное количество ловушек, которое Вам надо установить, чтобы гарантированно поймать \(x\)-мышь. Примечание В первом примере вы можете, например, установить ловушки в комнатах \(0\), \(2\), \(3\). Если \(x\)-мышь начнет в одной из этих комнат, то она сразу будет поймана. Если же \(x\)-мышь начнет путешествие в \(1\)-й комнате, то она будет поймана, когда переместится в комнату \(3\). Во втором примере мы можете поставить одну ловушку в комнату \(0\) и одну ловушку в любую другую комнату, так как если \(x\)-мышь начнет двигаться из любой комнаты в диапазоне \(1..m-1\) она посетит все комнаты из данного диапазона.
| |
|
|
F. Разноцветные маркеры
Бинарный поиск
Перебор
математика
теория чисел
*2000
Дана бесконечная доска, состоящая из квадратных клеток. Изначально все клетки белого цвета. У Вовы есть красный маркер и синий маркер. Красным маркером можно закрасить \(a\) клеток. Синим маркером можно закрасить \(b\) клеток. Если какая-то клетка не белая, то нельзя использовать маркер какого-либо цвета на ней. Каждый маркер должен был использован полностью, поэтому в конце на доске должно оказаться ровно \(a\) красных клеток и ровно \(b\) синих клеток. Вова хочет раскрасить такой набор клеток, чтобы: - они образовали прямоугольник, состоящий ровно из \(a+b\) закрашенных клеток;
- все клетки хотя бы одного цвета также образовали прямоугольник.
Некоторые примеры корректных раскрасок: Некоторые примеры некорректных раскрасок: Среди всех корректных раскрасок Вова хочет выбрать такую, что ее периметр минимален. Какой минимальный периметр Вова может получить? Гарантируется, что существует хотя бы одна корректная раскраска. Выходные данные Выведите одно целое число — минимальный периметр закрашенного прямоугольника, который Вова может получить, раскрасив ровно \(a\) клеток в красный и ровно \(b\) клеток в синий. Гарантируется, что существует хотя бы одна корректная раскраска. Примечание Первые четыре примера совпадают с первой картинкой из условия. Обратите внимание, что существует по несколько корректных раскрасок для каждого из примеров. В первом примере можно также сделать прямоугольник со сторонами \(1\) и \(8\), однако его периметр будет \(18\), что больше \(8\). Во втором примере можно также сделать прямоугольник с теми же сторонами \(3\) и \(4\), но красные клетки образуют прямоугольник со сторонами \(1\) и \(3\), а синие — прямоугольник со сторонами \(3\) и \(3\).
| |
|
|
D. Вася и треугольник
геометрия
теория чисел
*1800
У Васи есть три целых числа \(n\), \(m\) и \(k\). Он хочет найти три целочисленные точки \((x_1, y_1)\), \((x_2, y_2)\), \((x_3, y_3)\) такие что \(0 \le x_1, x_2, x_3 \le n\), \(0 \le y_1, y_2, y_3 \le m\) и площадь треугольника, образованная этими точками равна \(\frac{nm}{k}\). Помогите Васе! Найдите такие три точки (если возможно). Если существует несколько решений, выведите любое из них. Выходные данные Если не существует точек, удовлетворяющих описанным выше условиям, в первой строке выведите «NO». В противном случае в первой строке выведите «YES». В следующий трех строках выведите по два целых числа \(x_i, y_i\). Если существует несколько решений, выведите любое из них. Вы можете выводить буквы в любом регистре (строчные или заглавные). Примечание В первом примере площадь треугольника равна \(\frac{nm}{k} = 4\). Сам треугольник представлен на рисунке ниже: Во втором примере не существует ни одного треугольника с площадью \(\frac{nm}{k} = \frac{16}{7}\).
| |
|
|
G. Линейный конгруэнтный генератор
теория чисел
*2900
Вам задан генератор кортежей чисел \(f^{(k)} = (f_1^{(k)}, f_2^{(k)}, \dots, f_n^{(k)})\), где \(f_i^{(k)} = (a_i \cdot f_i^{(k - 1)} + b_i) \bmod p_i\) и \(f^{(0)} = (x_1, x_2, \dots, x_n)\). Здесь \(x \bmod y\) означает остаток от деления \(x\) на \(y\). Все \(p_i\) — простые числа. Можно заметить, что при фиксированных наборах \(x_i\), \(y_i\), \(a_i\) начиная с некоторого номера кортежи \(f^{(k)}\) будут повторять кортежи с меньшими номерами. Найдите максимальное количество различных кортежей (из всех \(f^{(k)}\) при \(k \ge 0\)), которые может выдать данный генератор, если \(x_i\), \(a_i\), \(b_i\) — целые числа в диапазоне \([0, p_i - 1]\) и могут быть выбраны произвольно. Так как ответ может быть слишком большим, выведите остаток от его деления на \(10^9 + 7\). Выходные данные Выведите единственное число — максимальное количество различных кортежей по модулю \(10^9 + 7\). Примечание В первом примере можно выбрать следующие параметры: \(a = [1, 1, 1, 1]\), \(b = [1, 1, 1, 1]\), \(x = [0, 0, 0, 0]\), тогда \(f_i^{(k)} = k \bmod p_i\). Во втором примере можно выбрать следующие параметры: \(a = [1, 1, 2]\), \(b = [1, 1, 0]\), \(x = [0, 0, 1]\).
| |
|
|
B. Разница квадратов
математика
теория чисел
*1100
У Алисы есть кусочек ткани. Он имеет форму квадрата, длины сторон которого равны \(a\) сантиметров. А Боб тоже хочет себе кусочек ткани. Он хотел бы себе квадрат, длины сторон которых равны \(b\) сантиметров (при этом \(b < a\)). Алиса хочет сделать Боба счастливым, поэтому она отрежет нужный квадрат в углу её кусочка и отдаст его Бобу. Теперь у неё остался некрасивый кусочек, который имеет форму буквы L (смотрите картинки ниже). Алиса хочет определить, является ли площадь, выраженная в квадратных сантиметрах, простым числом. Можете ли вы помочь ей это сделать? Выходные данные Выведите \(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\). Выходные данные Выведите одно целое число \(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\).
| |
|
|
A. Увеличить НОД
теория чисел
*1800
У Mr. F есть \(n\) положительных целых чисел, \(a_1, a_2, \ldots, a_n\). Он считает, что наибольший общий делитель этих чисел слишком маленький, и хочет увеличить его, удалив некоторые из чисел. Но эта задача показалась ему слишком простой, поэтому он не хочет решать ее сам. Если вы ему поможете, он даст вам несколько баллов в качестве вознаграждения. Ваша задача найти минимальное количество чисел, удалив которые, наибольший делитель оставшихся будет строго больше чем наибольший общий делитель всех исходных чисел. Выходные данные Выведите одно целое положительное число — минимальное количество чисел, удалив которые, наибольший делитель оставшихся будет строго больше чем наибольший общий делитель всех исходных чисел. Вы не можете удалить все числа. Если решения не существует, выведите «-1» (без кавычек). Примечание В первом примере, НОД изначально \(1\). Вы можете удалить \(1\), НОД увеличится, и станет равным \(2\). Таким образом, ответ \(1\). Во втором примере, НОД изначально \(3\). Вы можете удалить два числа, \(6\) и \(9\), НОД увеличится, и станет равным \(15\). Можно показать, что удалив одно число, увеличить НОД невозможно. Таким образом, ответ \(2\). В третьем примере, невозможно удалить числа, чтобы НОД увеличился. Таким образом, ответ \(-1\).
| |
|
|
C. Разбиение на регионы
Деревья
Комбинаторика
дп
теория чисел
*2700
В королевстве Осени \(n\) городов, пронумерованных от \(1\) до \(n\). От любого города можно добраться до любого другого, используя некоторые из \(n-1\) дорог в королевстве. В этом году правительство приняло решение разбить королевство на регионы. После разбиения будут существовать регионы нескольких уровней, при этом само королевство будет являться регионом первого уровня. Любой регион уровня \(i\) должен быть разделен на несколько (хотя бы два) регионов уровня \(i+1\), если это не регион последнего уровня. Каждый город должен принадлежать ровно одному региону каждого уровня. Внутри одного региона, между любыми двумя городами в нем должен существовать путь, проходящий только по городам этого региона. Согласно исследованию, для каждого города \(i\) есть уровень важности — \(a_i\). Все регионы одного уровня должны иметь одинаковую сумму этих значений. Ваша задача состоит в том, чтобы узнать, сколько существует планов разбиения королевства на регионы, чтобы все условия выполнялись. Два плана считаются различными тогда и только тогда, когда количество уровней в них различно, или существует пара городов, которые для какого-то уровня находятся в одном регионе в одном плане, но в разных регионах того же уровня в другом. Поскольку ответ может быть очень большим, выведите его по модулю \(10^9+7\). Выходные данные Выведите одно число — количество различных планов по модулю \(10^9+7\). Примечание В первом примере существует \(4\) различных плана: План \(1\): Уровень \(1\): \(\{1,2,3,4\}\). План \(2\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1,2\}\),\(\{3,4\}\). План \(3\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1\}\),\(\{2\}\),\(\{3\}\),\(\{4\}\). План \(4\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1,2\}\),\(\{3,4\}\), Уровень \(3\): \(\{1\}\),\(\{2\}\),\(\{3\}\),\(\{4\}\). Во втором примере существует \(2\) различных плана: План \(1\): Уровень \(1\): \(\{1,2,3,4\}\). План \(2\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1\}\),\(\{2\}\),\(\{3\}\),\(\{4\}\). В третьем примере существует \(3\) различных плана: План \(1\): Уровень \(1\): \(\{1,2,3,4\}\). План \(2\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1,2\}\),\(\{3,4\}\). План \(3\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1,3\}\),\(\{2\}\),\(\{4\}\).
| |
|
|
E. Покрытые точки
геометрия
теория чисел
*2400
бпф
Задано \(n\) отрезков на декартовой плоскости. Концы каждого отрезка имеют целочисленные координаты. Отрезки могут пересекаться друг с другом. Никакие два отрезка не лежат на одной прямой. Посчитайте количество различный точек с целочисленными координатами, которые покрыты хотя бы одним отрезком. Выходные данные Выведите единственное число — количество различных точек с целочисленными координатами, которые покрыты хотя бы одним отрезком. Примечание Картинка для первого примера: Некоторые ключевые точки отмечены синим, в ответе также содержатся и некоторые непомеченные точки. Картинка для второго примера:
| |
|
|
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\) строк — в \(i\)-й строке должно содержаться количество изящных чисел от \(2\) до \(n_i\). Примечание Приведен список не изящных чисел до \(10\): - \(4 = 2^2, GCD = 2\);
- \(8 = 2^3, GCD = 3\);
- \(9 = 3^2, GCD = 2\).
Для остальных \(GCD = 1\).
| |
|
|
F. Сделай единицу
Комбинаторика
математика
дп
теория чисел
кратчайшие пути
битмаски
*2500
Януш — бизнесмен. Он владеет компанией «Янушзекс», которая производит игры для школьников. Последним хитом Янушзекс является крутая игра для одного человека «Сделай единицу». Игроку дана последовательность из \(n\) целых чисел \(a_i\). Разрешается выбрать любое подмножество из них и количество очков равно наибольшему общему делителю выбранных чисел. Игроку нужно выбрать наименьшее количество элементов, получив количество очков, равное \(1\). Теперь Януш интересуется, какое минимальное количество элементов нужно выбрать игроку в таком случае? Выходные данные Если нет ни одного подмножества данной последовательности с наибольшим общим делителем равным \(1\), то выведите -1. Иначе выведите ровно одно целое число — размер минимального множества с наибольшим общим делителем равным \(1\). Примечание В первом примере подмножество, соответствующее всей последовательности даёт наибольший общий делитель равный \(1\). Все меньшие подмножества дают наибольший общий делитель больший \(1\). Во втором примере наибольший общий делитель любого подмножества хотя бы \(2\).
| |
|
|
B. Космический Исаак
теория чисел
*2400
хэши
Все думают, что марсиане зеленые, но на самом деле они розоватые с металлическим отливом и полные. У Ажса есть два мешочка с различными неотрицательными числами. Числа в мешочках не пересекаются, а объединение множеств чисел равно \(\{0,1,…,M-1\}\) для некоторого положительного числа \(M\). Ажс достает одно число из первого мешочка, одно число из второго, и вычисляет их сумму по модулю \(M\). Какие остатки по модулю \(M\) Ажс не может получить после такого действия? Выходные данные В первой строке выведите мощность \(K\) множества остатков по модулю \(M\), которые Ажс не может получить. На второй строке выведите \(K\) целых чисел, больших или равных нуля и меньших \(M\) — остатки, которые Ажс не может получить. Эти числа должны быть упорядочены по возрастанию. Если \(K\)=0, не выводите вторую строку. Примечание В первом примере первый и второй мешочки содержат числа \(\{3,4\}\) и \(\{0,1,2\}\) соответственно. Ажс может получить любой остаток по модулю \(5\), кроме \(2\): \( 4+1 \equiv 0, \, 4+2 \equiv 1, \, 3+0 \equiv 3, \, 3+1 \equiv 4 \) по модулю \(5\). Вы можете убедиться, что невозможно выбрать число из первого списка и число из второго списка так, что их сумма равняется \(2\) по модулю \(5\). Во втором примере содержимое первого мешочка равно \(\{5,25,125,625\}\), в то время как второй мешочек содержит все остальные целые неотрицательные числа, имеющие не более \(9\) цифр в десятичной записи. Все остатки по модулю \(1\,000\,000\,000\) могут быть получены как сумма элемента из первого мешочка и элемента из второго мешочка.
| |
|
|
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\). Каждое число должно встретиться ровно в одной паре. Выведите полученные пары или сообщите, что решения не существует. Если существует несколько корректных решений, то выведите любое из них. Выходные данные Если существует некоторое решение, то выведите "YES" в первой строке. В каждой из следующих \(\frac{r - l + 1}{2}\) строк выведите некоторую пару чисел. НОД чисел в каждой паре должен быть равен \(1\). Все \((r - l + 1)\) чисел должны быть попарно различны, а также должны иметь значения от \(l\) до \(r\) включительно. Если существует несколько корректных решений, то выведите любое из них. Если решений не существует, то выведите "NO".
| |
|
|
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\). Выходные данные Выведите одно число — значение суммы по модулю \(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\). Алиса и Боб хотят вместе выступать в командных соревнованиях, и для этого они хотят выяснить, какое максимально количество дней подряд у них обоих могут быть удачные дни. Выходные данные Выведите одно целое число: максимальное количество подряд идущих дней, которые и для Алисы, и для Боба являются удачными. Примечание Диаграммы соответствуют двум вышеприведённым тестам, в них показаны удачные и неудачные дни Алисы и Боба, а также возможные решения для этих тестов. 

| |
|
|
B. Подели конфеты
математика
*1600
теория чисел
Аркадий и его друзья любят играть в шашки на доске \(n \times n\). Строки и столбцы доски пронумерованы от \(1\) до \(n\). Друзья недавно выиграли какой-то турнир, поэтому Аркадий хочет поздравить их и подарить конфеты. Вспомнив старинную притчу (но не ее мораль), Аркадий решил дать друзьям по одному набору конфет за каждую клетку доски: набор конфет, соответствующий клетке \((i, j)\), будет состоять из ровно \((i^2 + j^2)\) конфет особенного для этой клетки типа. Всего друзей, выигравших турнир, \(m\). Сколько же из этих \(n \times n\) наборов конфет можно разделить поровну на \(m\) частей, не разделяя конфеты на части? Обратите внимание, что каждый набор нужно делить независимо, так как конфеты в разных наборах разные. Выходные данные Выведите одно целое число — количество наборов, которые можно поделить поровну. Примечание В первом примере только набор, соответствующий клетке \((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\).
| |
|
|
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\) различных подпоследовательностей (не считая пустую). Выходные данные Выведите одно целое число — количество хороших подпоследовательностей по модулю \(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\), которого можно добиться с помощью операций выше и минимальное требуемое для этого число операций. Примечание В первом примере можно применить операцию mul \(5\), чтобы получить \(100\), а затем sqrt, чтобы получить \(10\). Во втором примере можно сначала применить sqrt, чтобы получить \(72\), затем выполнить mul \(18\), чтобы получить \(1296\), и в конце ещё две операции sqrt, чтобы получить \(6\). Обратите внимание, что не смотря на то, что изначальное значение значение \(n\) не превосходит \(10^6\), оно вполне может становится больше \(10^6\) после выполнения одной или нескольких операций.
| |
|
|
B. НОК
математика
теория чисел
*1200
У Вани есть число \(b\). Он перебирает все натуральные числа \(a\) от \(1\) до \(10^{18}\), и выписывает для каждого \(a\) число \(\frac{[a, \,\, b]}{a}\) на доску. Здесь за \([a, \,\, b]\) обозначается наименьшее общее кратное чисел \(a\) и \(b\). Ваня — ленивый человек, поэтому ему быстро надоело это занятие, но ему интересно, сколько бы на доске получилось различных чисел. Помогите Ване узнать количество различных чисел на доске. Выходные данные Выведите одно число: количество различных значений выражения из условия. Примечание В первом примере \([a, \,\, 1] = a\), следовательно \(\frac{[a, \,\, b]}{a}\) всегда равно \(1\). Во втором примере \([a, \,\, 2]\) может быть равно \(a\) или \(2 \cdot a\), в зависимости от четности \(a\). \(\frac{[a, \,\, b]}{a}\) может принимать два значения: \(1\) и \(2\).
| |
|
|
A. Find a Number
дп
теория чисел
графы
*2200
кратчайшие пути
You are given two positive integers \(d\) and \(s\). Find minimal positive integer \(n\) which is divisible by \(d\) and has sum of digits equal to \(s\). Output Print the required number or -1 if it doesn't exist.
| |
|
|
B. Вычитание делителя
математика
реализация
теория чисел
*1200
Задано целое число \(n\). К нему применяется следующий алгоритм: - если \(n = 0\), то завершить алгоритм;
- найти наименьший простой делитель \(d\) числа \(n\);
- вычесть \(d\) из \(n\) и перейти к шагу \(1\).
Определите количество вычитаний, которые совершит алгоритм. Выходные данные Выведите единственное целое число — количество вычитаний, которые совершит алгоритм. Примечание В первом примере \(5\) — это наименьший простой делитель, поэтому он сразу вычтется, приведя число к \(0\). Во втором примере \(2\) — наименьший простой делитель на обоих шагах.
| |
|
|
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\). Задача состоит в том, чтобы восстановить изначальную последовательность. Он снова просит у вас помощи с решением этой задачи. Автор задачи может допускать ошибки, поэтому подходящая последовательность может и не существовать. Если же существует несколько подходящих последовательностей, выведите любую. Выходные данные Если не существует ни одной подходящей последовательности, выведите «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\) является другим возможным ответом. В третьем примере можно показать, что подходящей последовательности не существует.
| |
|
|
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\) возможных уровней веселья. Выходные данные Предположим, что множество уровней веселья — \(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\), соответственно.
| |
|
|
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\). Выходные данные Вы можете вывести столько запросов, сколько пожелаете, придерживаясь ограничения по времени (смотрите раздел «Протокол взаимодействия» для более подробной информации). Когда вы считаете, что знаете ответ, выведите ! 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\). Тогда мы делаем: - \((12 + 16) \bmod 21 = 28 \bmod 21 = 7\).
- \((6 - 10) \bmod 21 = -4 \bmod 21 = 17\).
- \((8 \cdot 15) \bmod 21 = 120 \bmod 21 = 15\).
- \((5 \cdot 4^{-1}) \bmod 21 = (5 \cdot 16) \bmod 21 = 80 \bmod 21 = 17\).
- Квадратный корень \(16\). Ответ \(11\), поскольку \((11 \cdot 11) \bmod 21 = 121 \bmod 21 = 16\). Обратите внимание, что ответ также может быть равен \(10\).
- Квадратный корень \(5\). Нет таких \(x\), что \(x^2 \bmod 21 = 5\), значит вывод \(-1\).
- \((6^{12}) \bmod 21 = 2176782336 \bmod 21 = 15\).
Мы пришли к выводу, что наш калькулятор работает, нужно прекратить дурачиться и понять, что \(21 = 3 \cdot 7\).
| |
|
|
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\). Выходные данные Выведите одно целое число, математическое ожидание числа записанного на доске после \(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}\).
| |
|
|
F. Алексей и телешоу
Комбинаторика
теория чисел
битмаски
*2500
Алексей решил попытать счастья в телешоу. Однажды он сходил на викторину. После того, как он идеально ответил на вопросы «Как обычно называют псевдоним в интернете?» («Ум... может быть ник?»), «В честь какого известного изобретателя назвали единицу силы магнитного поля?» («Ум... Никола Тесла?»), он решил посетить гораздо более сложное телешоу: «Что в этом мультимножестве?!». Это телешоу устроено следующим образом: есть \(n\) мультимножеств, пронумерованных от \(1\) до \(n\). Каждое из них изначально пусто. Затем, происходят \(q\) запросов, где каждый запрос имеет один из четырёх следующих типов: - 1 x v — присвоить \(x\)-му мультимножеству мультимножество из одного элемента \(\{v\}\).
- 2 x y z — присвоить \(x\)-му мультимножеству объединение мультимножеств \(y\) и \(z\). For example: \(\{1, 3\}\cup\{1, 4, 4\}=\{1, 1, 3, 4, 4\}\).
- 3 x y z — присвоить \(x\)-му мультимножеству произведение \(y\)-го и \(z\)-го мультимножества. Произведение \(A \times B\) мультимножеств \(A\) и \(B\) определяется как \(\{ \gcd(a, b)\, \mid\, a \in A,\, b \in B \}\), где \(\gcd(p, q)\) обозначает наибольший общий делитель \(p\) и \(q\). Например, \(\{2, 2, 3\} \times \{1, 4, 6\}=\{1, 2, 2, 1, 2, 2, 1, 1, 3\}\).
- 4 x v — вас спрашивают, сколько раз число \(v\) встречается в мультимножестве \(x\). Так как викторина показал себя достаточно сложной в прошлом, то теперь нужно лишь сказать ответ на этот вопрос по модулю \(2\).
Обратите внимание, что \(x\), \(y\), и \(z\) в описании выше не обязательно различны. Для запросов \(2\)-го и \(3\)-го типа нужно сначала вычислить соответствующую сумму или произведение и лишь затем выполнить присвоение. Алексея смущают запутанные правила шоу. Помогите ему узнать ответы на все запросы \(4\)-го типа. Выходные данные Выведите строку из \(0\) и \(1\), имеющую длину равную количеству запросов \(4\)-го типа, \(i\)-й символ строки должен быть равен ответу на \(i\)-й запрос \(4\)-го типа. Примечание Мультимножества в тесте из примера выглядят следующим образом (\(i\) обозначает количество уже обработанных запросов). 
| |
|
|
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\). Выходные данные Выведите одно число — нижнюю медиану массива \(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\).
| |
|
|
D. Подсчёт GCD
Деревья
Структуры данных
дп
теория чисел
*2000
поиск в глубину и подобное
Дано дерево из \(n\) вершин. На каждой вершине дерева записано число; на \(i\)-й вершине записано число \(a_i\). Определим функцию \(g(x, y)\) как наибольший общий делитель всех чисел, записанных на вершинах на простом пути от вершины \(x\) до вершины \(y\) (включая эти две вершины). Также определим \(dist(x, y)\) как количество вершин на простом пути между \(x\) и \(y\), включая концы пути. \(dist(x, x) = 1\) для каждой вершины \(x\). Посчитайте максимальное значение \(dist(x, y)\) по всем таким парам вершин, что \(g(x, y) > 1\). Выходные данные Если не существует такой пары вершин \(x, y\), что \(g(x, y) > 1\), выведите \(0\). Иначе выведите максимальное значение \(dist(x, y)\) по всем таким парам.
| |
|
|
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\) целых чисел \(y_0, \ldots, y_{n-1}\) — \(y_i\) должно равняться остатку при делении соответствующего количества способов на \(2^{58}\). Примечание В первом примере существуют последовательности: последовательность \((5,5)\) с цифровой суммой \(0\), последовательность \((5,6)\) с цифровой суммой \(1\), последовательность \((6,5)\) с цифровой суммой \(1\), последовательность \((6,6)\) с цифровой суммой \(2\).
| |
|
|
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\). Если решений нет, скажите Бобу, что восстановить его любимую последовательность нельзя. Выходные данные Выведите возможное значение \(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\) строк, \(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\)-сжатие этой матрицы. Обратите внимание: входные данные заданы в сжатом виде. Несмотря на это, лучше используйте быстрое считывание. Выходные данные Выведите одно число: максимальное \(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\). Выходные данные Выведите два положительных целых числа \(x\) и \(y\) — такие числа, что объединенные списки их делителей являются перестановкой заданного списка целых чисел. Гарантируется, что ответ существует.
| |
|
|
E. Саша и очень лёгкий тест
Структуры данных
теория чисел
*2700
Егор очень любит математику, и недавно он получил высшую степень признания в математических кругах — Егор стал красным математиком. По такому поводу Саша решил поздравить Егора и подарить ему математический тест. В тесте содержался массив \(a\) длины \(n\) из целых чисел и ровно \(q\) запросов. Запросы бывают трёх типов: - «1 l r x» — увеличить все числа на отрезке от \(l\) до \(r\) в \(x\) раз.
- «2 p x» — уменьшить число в позиции \(p\) в \(x\) раз (делимость гарантирована).
- «3 l r» — найти сумму на отрезке от \(l\) до \(r\).
Так как сумма может быть очень большой, то Саша попросил Егора вычислить лишь её остаток от деления на число \(mod\). Так как Егор теперь красный математик, ему больше некогда решать столь простые задачи, поэтому, чтобы не обидеть Сашу, он попросил вас помочь ему и найти ответы на все запросы \(3\)-го типа. Выходные данные Для каждого запроса \(3\)-го типа в отдельной строке выведите ответ на запрос по модулю \(mod\). Примечание Первый пример: Изначальный массив — \([4, 1, 2, 3, 5]\) - В первом запросе нужно посчитать сумму на всём массиве, она равна \((4 + 1 + 2 + 3 + 5) \bmod 100 = 15 \bmod 100 = 15\)
- Во втором запросе нужно умножить числа на позициях от \(2\)-й до \(3\)-й на \(6\). Полученный массив будет равен \([4, 6, 12, 3, 5]\)
- В третьем запросе нужно посчитать сумму от \(1\)-го до \(2\)-го элемента, она равна \((4 + 6) \bmod 100 = 10 \bmod 100 = 10\)
- В четвёртом запросе нужно умножить числа на позициях от \(1\)-й до \(5\)-й на \(1\). Умножение на \(1\) массив не изменяет.
- В пятом запросе нужно найти сумму от \(2\)-го до \(4\)-го элемента, она равна \((6 + 12 + 3) \bmod 100 = 21 \bmod 100 = 21\)
Второй пример: Изначальный массив — \([4, 1, 2, 3, 5]\) - В первом запросе нужно посчитать сумму на всём массиве, она равна \((4 + 1 + 2 + 3 + 5) \bmod 2 = 15 \bmod 2 = 1\)
- Во втором запросе нужно умножить числа на позициях от \(2\)-й до \(3\)-й на \(6\). Полученный массив будет равен \([4, 6, 12, 3, 5]\)
- В третьем запросе нужно посчитать сумму от \(1\)-го до \(2\)-го элемента, она равна \((4 + 6) \bmod 2 = 10 \bmod 2 = 0\)
- В четвёртом запросе нужно умножить числа на позициях от \(1\)-й до \(5\)-й на \(1\). Умножение на \(1\) массив не изменяет.
- В пятом запросе нужно найти сумму от \(2\)-го до \(4\)-го элемента, она равна \((6 + 12 + 3) \bmod 2 = 21 \bmod 2 = 1\)
- В шестом запросе нужно разделить число в позиции \(3\) на \(4\). \(\frac{12}{4}=3\), следовательно, массив станет равным \([4, 6, 3, 3, 5]\).
- В седьмом запросе нужно найти сумму от \(3\)-го до \(4\)-го элемента, она равна \((3 + 3) \bmod 2 = 6 \bmod 2 = 0\)
| |
|
|
B. Петя и делители
Бинарный поиск
Структуры данных
теория чисел
*1900
Маленький Петя любит искать делители у чисел. Однажды Петя столкнулся со следующей задачей. Дано n запросов вида «xi yi». Для каждого запроса Пете нужно посчитать, сколько существует делителей числа xi, которые не делят ни одно из чисел xi - yi, xi - yi + 1, ..., xi - 1. Помогите ему. Выходные данные Для каждого запроса выведите ответ в отдельной строке: количество таких положительных целых чисел k, что  Примечание Выпишем делители, которые дают ответ для первых 5 запросов: 1) 1, 2, 4 2) 3 3) 5 4) 2, 6 5) 9, 18
| |
|
|
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\)). Выходные данные Для каждого числа выведите ответ на него в том же порядке, в котором числа даны во входных данных. Примечание Для первого числа оптимально выбрать \(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\).
| |
|
|
B. Саша и магнитные установки
теория чисел
жадные алгоритмы
*1300
Однажды Саша посетил фермера 2D и его знаменитую магнитную ферму. На этой ферме урожай растёт благодаря воздействию специального магнитного поля. Поддержание магнитного поля на ферме обеспечивают \(n\) установок, причём мощность \(i\)-й установки равна \(a_i\). В этом году 2D решил выращивать новую культуру, но какую, он не рассказал. Для успешного роста новой культуры необходимо слегка изменить мощности установок. 2D может не более одного раза выбрать произвольное целое число \(x\), затем уменьшить мощность одной из установок в \(x\) раз, а мощность какой-либо другой увеличить в \(x\) раз, при этом, мощности всех установок должны оставаться целыми и положительными числами. Обратите внимание, что он может этого не делать, если захочет. Более формально, 2D может выбрать две различные установки \(i\) и \(j\), а также число \(x\) такое, что \(a_i\) делится на \(x\), и заменить мощности следующим образом: \(a_i = \frac{a_i}{x}\), \(a_j = a_j \cdot x\). Саша — очень любопытный, поэтому решил посчитать, какую минимальную суммарную мощность может достичь фермер. Так как установок слишком много, то Саша не справится с расчётами сам, помогите ему! Выходные данные Выведите одно целое число — минимальную суммарную мощность. Примечание В первом примере фермер может уменьшить мощность установки с номером \(4\) в \(2\) раза, при этом увеличив мощность установки с номером \(1\) в \(2\) раза, тогда мощности установок будут выглядеть так: \([2, 2, 3, 2, 5]\). Во втором примере фермер может уменьшить мощность установки с номером \(3\) в \(2\) раза, при этом увеличив мощность установки с номером \(2\) в те же \(2\) раза. А также можно ничего не делать, ответ все равно не изменится. В третьем примере лучше всего оставить всё как есть.
| |
|
|
C. Замыкающие нули
Перебор
математика
реализация
теория чисел
*1700
Аки любит числа. Особенно те, что заканчиваются на большое количество нулей. Например, число \(9200\) заканчивается на два нуля. Аки считает, что чем больше таких замыкающих нулей в записи числа, тем лучше. Однако Аки полагает, что количество замыкающих нулей не постоянно, а зависит от основания системы счисления, которая используется. Поэтому он изучает различные сценарии с разными числами и разными основаниями систем счисления. К настоящему моменту интересующие его числа стали настолько странными, что без вашей помощи ему никак не обойтись. Вам даны два целых числа \(n\) и \(b\) (записанные в десятичной системе счисления). Выясните, сколько замыкающих нулей в \(b\)-ичной (то есть в системе счисления с основанием \(b\)) записи числа \(n\,!\) (факториала \(n\)). Выходные данные Выведите одно целое число — количество замыкающих нулей в \(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\). Вы можете прочитать ещё о системах счисления здесь.
| |
|
|
E. Арифметическая прогрессия
Бинарный поиск
Теория вероятностей
теория чисел
*2200
интерактив
Это интерактивная задача! Арифметическая прогрессия — такая последовательность целых чисел, что разность каждого элемента и предшествующего ему (\(x_i - x_{i - 1}\), где \(i \ge 2\)) постоянна (это значение называется разностью арифметической прогрессии). Тем самым, арифметическая прогрессия — последовательность вида \(x_i = x_1 + (i - 1) d\), где \(d\) — разность арифметической прогрессии. Загадан список из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Гарантируется, что все элементы \(a_1, a_2, \ldots, a_n\) лежат в диапазоне от \(0\) до \(10^9\), включительно. Этот список особенный: если отсортировать его в возрастающем порядке, то он превратится в арифметическую прогрессию с положительной разностью (\(d > 0\)). Например, список \([14, 24, 9, 19]\) удовлетворяет этому условию, так как после сортировки он становится равен \([9, 14, 19, 24]\), что может быть получено с помощью \(x_n = 9 + 5 \cdot (n - 1)\). Вместе со списком, у вас есть устройство с практически разряженной батареей, которым вы можете воспользоваться, чтобы выполнить не более \(60\) запросов следующих двух видов: - Вы называете значение \(i\) (\(1 \le i \le n\)), а устройство отображает значение \(a_i\).
- Вы называете значение \(x\) (\(0 \le x \le 10^9\)), а устройство отображает \(1\), если есть элемент со значением строго больше \(x\), и отображает \(0\) иначе.
Вы можете использовать это устройство, чтобы задать не более \(60\) запросов. Ваша задача — узнать наименьший элемент и разность заданной арифметической прогрессии, то есть значения \(x_1\) и \(d\) из ее определения. Обратите внимание, что список \(a\) не упорядочен по возрастанию. Протокол взаимодействия Взаимодействие начинается с одного целого числа \(n\) (\(2 \le n \le 10^6\)), количества элементов в списке. Затем вы можете делать запросы двух видов: - "? i" (\(1 \le i \le n\)) — чтобы узнать значение \(a_i\).
- "> x" (\(0 \le x \le 10^9\)) — чтобы проверить есть ли элемент больший \(x\).
После вывода запроса, считайте ответ \(r\) на него как целое число. - Для запроса первого типа, \(r\) удовлетворяет \(0 \le r \le 10^9\).
- Для запроса второго типа, \(r\) равен \(0\) или \(1\).
- В случае, если вы сделаете более \(60\) запросов или нарушите ограничения на числа в запросе, то в ответ вы получите \(r = -1\).
- Если ваша программа завершится после получения -1, то вы получите вердикт «Неправильный ответ». В противном случае, вердикт может быть любым, так как ваша програма продолжит читать из закрытого потока.
После того как вы выясните значение наименьшего элемента (\(x_1\)) и разность прогрессии (\(d\)), выведите: И завершите программу после этого. Этот запрос не учитывается относительно ограничения в \(60\) запросов. После вывода любого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте: - fflush(stdout) или cout.flush() в C++;
- System.out.flush() в Java;
- flush(output) в Pascal;
- stdout.flush() в Python;
- смотрите документацию для других языков.
Hacks Для взломов используйте следующий формат: Первая строка должна содержать одно целое число \(n\) (\(2 \le n \le 10^6\)) — количество элементов в списке. Вторая строка должна содержать \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы списка. Также после сортировки списка по возрастанию, он должен образовывать арифметическую прогрессию с положительной разностью. Примечание Обратите внимание, что взаимодействие в примере содержит пустые строки только для наглядности. В настоящем взаимодействии нет пустых строк, и вы тоже не должны их выводить. Список в примере равен \([14, 24, 9, 19]\).
| |
|
|
F. Очередная задача про запросы к массиву
Структуры данных
математика
теория чисел
*2400
разделяй и властвуй
битмаски
Вам дан массив \(a_1, a_2, \ldots, a_n\). Необходимо выполнить \(q\) запросов следующих двух видов: - «MULTIPLY l r x» — для каждого \(i\) (\(l \le i \le r\)) нужно умножить \(a_i\) на \(x\).
- «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\). Выходные данные Для каждого запроса типа «TOTIENT» выведите ответ на него. Примечание В первом примере \(\varphi(1) = 1\) для первого запроса, \(\varphi(2) = 1\) для второго запроса и \(\varphi(6) = 2\) для третьего.
| |
|
|
C. Счастье на двоих
Перебор
математика
теория чисел
*2200
На уроке математики учительница попросила каждого ученика предложить свое множество счастливых чисел. Будучи без ума от теории чисел, Петя сразу же заявил, что простые числа — это его счастливые числа. Вася оказался оригинальнее, он сказал, что число t для него счастливое, если и только если оно может быть представлено в виде: t = a2 + b2, где a, b — произвольные положительные целые числа. Теперь мальчики решили выяснить сколько дней на отрезке [l, r] (l ≤ r) подходят для парного программирования. Они решили, что день i (l ≤ i ≤ r) подходит для парного программирования, если и только если i является счастливым числом как для Пети, так и для Васи. Помогите мальчикам найти количество таких дней на отрезке [l, r]. Выходные данные Выведите единственное число — количество дней в отрезке [l, r], которые подходят для парного программирования.
| |
|
|
B. Подготовка к 8 марта
математика
теория чисел
*1200
Совсем скоро наступит Международный женский день! Поликарп готовится к празднику. В магазине продается \(n\) коробок с конфетами, в \(i\)-й коробке \(d_i\) конфет. Поликарп хочет подготовить максимальное количество подарков для \(k\) подруг. Каждый подарок будет состоять из ровно двух коробок конфет. Чтобы \(k\) девушек могли поделить подарок поровну, сумма количеств конфет в подарке (в паре коробок) должна делится на \(k\). Иными словами, две коробки \(i\) и \(j\) (\(i \ne j\)) можно объединить в подарок, если \(d_i + d_j\) делится на \(k\). Сколько максимум коробок сможет подарить Поликарп? Конечно, каждая коробка может быть в составе не более одного подарка. Поликарп не может использовать коробки «частично» или перераспределять конфеты между ними. Выходные данные Выведите одно целое число — максимальное количество коробок конфет, сколько сможет подарить Поликарп. Примечание В первом тестовом примере Поликарп сможет подарить следующие пары коробок (пары представлены номерами соответствующих коробок): - \((2, 3)\);
- \((5, 6)\);
- \((1, 4)\).
Таким образом, ответ равен \(6\). Во втором тестовом примере Поликарп сможет подарить следующие пары коробок (пары представлены номерами соответствующих коробок): - \((6, 8)\);
- \((2, 3)\);
- \((1, 4)\);
- \((5, 7)\).
Таким образом, ответ равен \(8\). В третьем тестовом примере Поликарп сможет подарить следующие пары коробок (пары представлены номерами соответствующих коробок): Таким образом, ответ равен \(4\).
| |
|
|
D. Максимизация количества нулей
математика
*1500
теория чисел
хэши
Задано два массива \(a\) и \(b\), каждый состоит из \(n\) целых чисел. Вы хотите создать новый массив \(c\) следующим образом: выбрать какое-то вещественное (то есть не обязательно целое) число \(d\), и для каждого \(i \in [1, n]\) присвоить \(c_i := d \cdot a_i + b_i\). Ваша задача — максимизировать количество нулей в массиве \(c\). Чему равен максимально возможный ответ, если вы выберете значение \(d\) оптимально? Выходные данные Выведите одно целое число — максимальное количество нулей в массиве \(c\), если вы выберете \(d\) оптимально. Примечание В первом тестовом примере мы можем выбрать \(d = -2\). Во втором тестовом примере мы можем выбрать \(d = -\frac{1}{13}\). В третьем тестовом примере мы не можем получить ни одного нуля в массиве \(c\), какое бы значение \(d\) мы ни выбрали. В четвертом тестовом примере мы можем выбрать \(d = 6\).
| |
|
|
D. Кооперативная игра
Конструктив
теория чисел
*2400
интерактив
Это интерактивная задача. Миша очень любит играть в кооперативные игры с неполной информацией. Сегодня он предложил десяти своим друзьям сыграть в кооперативную игру «Озеро». Миша уже нарисовал игровое поле для предстоящей игры. Оно представляет из себя ориентированный граф, состоящий из двух частей. Одна из этих частей — дорожка вдоль берега озера, являющаяся циклом из \(c\) вершин. Вторая часть — тропинка от домика к озеру, представляющая из себя цепь из \(t\) вершин, причём из последней вершины этой цепи проведено ребро в одну из вершин дорожки вокруг озера — в ту, из которой на озеро открывается наилучший вид. Игровое поле Миша решил держать в секрете, так что никто кроме него не знает ни \(t\), ни \(c\). Обратите внимание, что у каждой вершины игрового поля есть только одна следующая, при этом каждая кроме стартовой и вершины с лучшими видами является следующей только для одной вершины. Стартовая вершина не является следующей ни для какой вершины, а вершина с лучшими видами является следующей для последней вершины цепочки и для одной из вершин цикла. В начале игры игровые фишки всех десяти игроков, для удобства пронумерованных цифрами от \(0\) до \(9\), располагаются в начале тропинки, в вершине у домика. Затем не более \(q\) раз Миша будет одновременно передвигать в следующие вершины фишки игроков, высказавших такое желание на этом ходу, а после этого объявлять, фишки каких игроков находятся в одной вершине, а каких — в разных. Цель игры — перевести игровые фишки всех игроков в вершину с наилучшим видом на озеро, то есть в ту, которая отмечена финишным флагом. Мишины друзья не представляют, как можно выиграть в такой игре, не зная ни \(c\), ни \(t\), ни \(q\), но, к счастью для них, они ещё и ваши друзья. Помогите им: скоординируйте их действия так, чтобы победить. Миша нарисовал такое игровое поле, что \(1 \le t, c\), \((t+c) \leq 1000\) и \(q = 3 \cdot (t+c)\). Выходные данные После того, как все друзья соберутся в вершине с лучшим видом, необходимо вывести «done» и завершить работу программы. Протокол взаимодействия Для того, чтобы отдать команды перемещения друзьям, выведите «next», а затем через пробел номера друзей, которым необходимо отдать команды. Например, чтобы отдать команду перемещения друзьям с номерами \(0\), \(2\), \(5\) и \(9\) выведите «next 0 2 5 9». На каждом ходу обязательно перемещать хотя бы одного из друзей. В качестве ответа проверяющая программа выдаст сначала число \(k\), а потом \(10\) цифр, разбитых на \(k\) групп, разделённых пробелами. Друзья, соответствующие цифрам, находящимся в одной группе, находятся в одной вершине. Друзья, соответствующие цифрам, находящимся в разных группах, находятся в разных вершинах. Цифры в каждой группе следуют в порядке возрастания. Например, ответ «2 05 12346789» означает, что друзья с номерами \(0\) и \(5\) находятся в одной вершине, а все остальные друзья в одной и той же, но другой вершине. Ответ «4 01 567 234 89» означает, что друзья Миши находятся в четырёх различных вершинах: в первой находятся друзья с номерами \(0\) и \(1\), во второй — друзья с номерами \(5\), \(6\) и \(7\), в третьей — друзья с номерами \(2\), \(3\) и \(4\), а в четвёртой — друзья с номерами \(8\) и \(9\). После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте: - fflush(stdout) или cout.flush() в C++;
- System.out.flush() в Java;
- flush(output) в Pascal;
- stdout.flush() в Python;
- смотрите документацию для других языков.
Ответ «stop» вместо корректного означает, что ваша программа сделала некорректный запрос или превысила число запросов. Ваша программа должна немедленно завершиться после прочтения ответа «stop», вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока. Взломы Чтобы совершить взлом, выведите два целых числа \(t\) и \(c\) в одной строке (\(1 \le t, c\), \((t+c) \leq 1000\)). Примечание В условии в примере взаимодействия вводимые и выводимые данные расположены для удобства восприятия в хронологическом порядке, при реальном взаимодействии никакие «лишние» переводы строк возникать не должны. В примере перемещение друзей происходит следующим образом:
| |
|
|
D. Получить единицу
Теория вероятностей
математика
дп
теория чисел
*2300
У Вивека есть изначально пустой массив \(a\) и некоторая целая константа \(m\). Он выполняет следующий алгоритм: - Выбрать случайное целое число \(x\) равновероятно в диапазоне от \(1\) до \(m\) и добавить в конец \(a\).
- Вычислить наибольший общий делитель чисел в массиве \(a\).
- Если он равен \(1\), то закончить.
- Иначе продолжить с шага \(1\).
Найдите математическое ожидание длины массива \(a\). Можно показать, что его можно представить как \(\frac{P}{Q}\), где \(P\) и \(Q\) взаимнопростые целые числа и \(Q\neq 0 \pmod{10^9+7}\). Выведите значение \(P \cdot Q^{-1} \pmod{10^9+7}\). Выходные данные Выведите одно целое число — математическое ожидание длины массива \(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\).
| |
|
|
B. Nirvana
Перебор
математика
теория чисел
*1200
Курт достигает состояние нирваны, когда находит произведение всех цифр некоторого целого положительного числа. Чем больше найденное произведение, тем более глубокую нирвану он достигает. Помогите Курту найти максимальное возможное произведение цифр среди всех целых чисел от \(1\) до \(n\). Выходные данные Выведите максимальное произведение цифр среди всех целых чисел от \(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\) строчных букв латинского алфавита — медиану (средний элемент) списка строк длины \(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\). Выходные данные Выведите одно целое число — искомую сумму. Примечание В первом примере нам нужно найти \(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\). В третьем примере лягушка не может прыгать.
| |
|
|
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\)) такое, что в нём все вершины честные или все вершины не являются честными. Можно показать, что хотя бы одно такое множество всегда существует. Выходные данные Выведите ровно \(k\) различных целых чисел — индексы элементов в множестве в любом порядке. Примечание В первом примере, множество \(\{2, 4, 5\}\) является примером множества без честных вершин. Видно, что вершина \(2\) не имеет общего ребра с вершиной \(4\), так как \(gcd(15, 8) = 1\). Вершина \(4\) не имеет общего ребра с вершиной \(2\). Вершина \(5\) не имеет общего ребра с вершиной \(2\). Во втором примере множество \(\{8, 5, 6, 4\}\) является примером множества, где все вершины честные.
| |
|
|
A. Простые префиксные суммы
Конструктив
математика
теория чисел
жадные алгоритмы
*1200
Мы раздаем огромные красивые мешки, содержащие плитки с числами! Мешок, который мы хотим вам подарить, содержит \(n\) плиток. На каждой из них записано одно число — \(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. Неко занимается математикой
Перебор
математика
теория чисел
*1800
Неко любит делители. На последнем уроке по теории чисел он получил интересное упражнение от своего учителя. У Неко есть два целых числа \(a\) и \(b\). Он должен найти такое целое неотрицательное число \(k\), что наименьшее общее кратное чисел \(a+k\) и \(b+k\) является минимально возможным. В случае если есть несколько подходящих чисел \(k\), он должен выбрать наименьшее из них. Учитывая его математические способности, Неко без особого труда получил «Неправильный ответ» по этой задаче. Не могли бы вы помочь ему решить её? Выходные данные Выведите наименьшее неотрицательное число \(k\) (\(k \ge 0\)), такое что наименьшее общее кратное чисел \(a+k\) и \(b+k\) является минимально возможным. В случае если есть несколько целых чисел \(k\), приводящих к одному и тому же наименьшему общему кратному, выведите наименьшее из них. Примечание В первом пример следует выбрать \(k = 2\), тогда наименьшее общее кратное \(6 + 2\) и \(10 + 2\) будет равно \(24\), что является наименьшим возможным наименьшим общим кратным.
| |
|
|
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\) являются делителями этого числа). Выходные данные Выведите два целых числа \(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\) или сказать, что невозможно выбрать такие значения заданных свойств. Если существует несколько ответов, вы можете вывести любой. Выходные данные Если невозможно выбрать такие значения \(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\). Если существует несколько возможных ответов, выведите любой.
| |
|
|
D. Почти все делители
математика
*1600
теория чисел
Мы загадали некоторые целое число \(x\). Вам задан список почти всех его делителей. Почти всех означает, что в списке есть все делители кроме \(1\) и \(x\). Ваша задача — найти минимально возможное целое число \(x\), которое может быть загаданным числом, или сказать, что входные данные противоречивы и невозможно найти такое число. Вам необходимо ответить на \(t\) независимых запросов. Выходные данные Выведите ответ на каждый запрос. Если входные данные противоречивы и невозможно найти такое число \(x\), что заданный список делителей — это список почти всех его делителей, выведите -1. Иначе выведите минимально возможное такое \(x\).
| |
|
|
B. Больше гласных!
Конструктив
математика
теория чисел
*1100
Том любит гласные, он обожает длинные слова с большим количеством гласных букв. Его любимые слова — те, которые набиты гласными. Мы считаем, что слово длины \(k\) набито гласными, если существуют такие положительные целые числа \(n\) и \(m\), что \(n\cdot m = k\), и если записать буквы слова в таблицу с \(n\) строками и \(m\) столбцами (сначала заполняется первая строка, потом вторая и так далее, каждая строка заполняется слева направо), то каждая гласная буква латинского алфавита встречается (один или более раз) в каждой строке и каждом столбце. Вам дано целое число \(k\). Найдите набитое гласными слово длины \(k\) или выведите \(-1\), если такого слова не существует. Гласными буквами латинского алфавита в этой задаче считаются буквы «a», «e», «i», «o», «u». Словом в данной задаче называется любая последовательность строчных букв латинского алфавита. Выходные данные Выведите одну строку, содержащую набитое гласными слово длины \(k\), состоящее только из строчных букв латинского алфавита, или \(-1\), если таких слов нет. Если существует несколько таких слов, выведите любое из них. Примечание Во втором примере слово «agoeuioaeiruuimaeoieauoweouoiaouimae» может быть записано в таблицу \(6 \times 6\): Видно, что в каждом столбце и каждой строке есть все гласные.
| |
|
|
E. НОКи должны быть большими
Перебор
Конструктив
математика
*2100
теория чисел
битмаски
Даша-путешественница решила использовать все заработанные за несколько лет отчисления на шоппинг. А где же еще лучше магазины, чем в Нлогонии? Всего в Нлогонии \(n\) магазинов, пронумерованных от \(1\) до \(n\). В \(i\)-м из этих магазинов можно купить положительное целое число \(a_i\). В каждый из последних \(m\) дней Даша покупала по одному числу в некоторых магазинах. В каждый из этих дней лисенок Жулик покупал по одному числу во всех магазинах, в которых Даша не купила число в этот день. Дора считает, что Жулик соперничает с ней; она считает, что выиграла у Жулика в день \(i\), если и только если наименьшее общее кратное чисел, которые она купила в \(i\)-й день строго больше наименьшего общего кратного чисел, которые купил в \(i\)-й день Жулик. Наименьшем общем кратном (НОК) набора целых чисел называется наименьшее положительное целое число, делящееся на все числа из набора. К сожалению, Даша забыла, чему равны значения \(a_i\). Помогите Даше определить, существуют ли такие положительные целые числа \(a_i\), что она выигрывала у Жулика каждый день. Сами значения \(a_i\) находить не нужно. Обратите внимание, возможно, что некоторые значения \(a_i\) в решении совпадают. Выходные данные Выведите единственную строку, содержащую "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. Очень занимательная игра
Перебор
теория чисел
*1800
В одной очень древней стране была популярна следующая игра. В игру играет два человека. Сначала первый игрок выписывает строку s1, состоящую ровно из девяти цифр и обозначающую число, не превосходящее a. Потом второй игрок, видя s1, выписывает строку s2, состоящую ровно из девяти цифр и обозначающую число, не превосходящее b. Здесь a и b — некоторые заданные константы, строки s1 и s2 игроки выбирают сами. Лидирующие нули в строках разрешаются. Если число, задающееся конкатенацией (склейкой) строк s1 и s2, делится на mod, выигрывает второй игрок. Иначе — выигрывает первый игрок. Даны числа a, b, mod. Требуется определить, кто выиграет при оптимальной игре обоих. Если выиграет первый игрок, также требуется найти лексикографически минимальный выигрышный ход. Выходные данные Если выиграет первый игрок, выведите «1» и лексикографически минимальную строку, которую ему нужно выписать, чтобы победить. Если выиграет второй игрок, выведите одно число «2». Примечание Лексикографическое сравнение строк реализует оператор < в современных языках программирования. Строка x лексикографически меньше строки y, если существует такое i (1 ≤ i ≤ 9), что xi < yi, а для любого j (1 ≤ j < i) xj = yj. Сравниваемые строки всегда имеют длину 9.
| |
|
|
C. Ихаб и особая задача о раскраске
Конструктив
теория чисел
*1300
Вам дано целое число \(n\). Для каждого целого числа \(i\) от \(2\) до \(n\) найдите положительное целое число \(a_i\) такое, что выполняются следующие условия: - Для каждой пары целых чисел \((i,j)\), если \(i\) и \(j\) взаимно просты, то \(a_i \neq a_j\).
- Максимальное значение всех \(a_i\) должно быть минимальным (то есть как можно меньшим).
Два натуральных числа называются взаимно простыми, если их наибольший общий делитель равен \(1\). Выходные данные Выведите \(n-1\) целое число \(a_2\), \(a_3\), \(\ldots\), \(a_n\) (\(1 \leq a_i \leq n\)). Если существует несколько решений, выведите любое из них. Примечание Обратите внимание, что \(3\) и \(4\) взаимно просты, поэтому \(a_3 \neq a_4\). Также обратите внимание, что \(a=[1,2,3]\) удовлетворяет первому условию, но это неправильный ответ, поскольку максимальное число равно \(3\).
| |
|
|
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\). Выходные данные В единственной строке выведите ответ по модулю \(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\).
| |
|
|
D. Восстанавливай!
теория чисел
*1800
поиск в глубину и подобное
жадные алгоритмы
сортировки
графы
Авторы загадали массив \(a\), состоящий из \(n\) целых чисел; каждое число не меньше \(2\) и не больше \(2 \cdot 10^5\). Вы не знаете его, но Вы знаете массив \(b\), который был получен из массива \(a\) при помощи следующей последовательности операций: - Сначала весь массив \(b\) равен массиву \(a\);
- Затем для каждого \(i\) от \(1\) до \(n\):
- если \(a_i\) является простым числом, тогда число \(p_{a_i}\) добавляется в массив \(b\), где \(p\) — бесконечная последовательность простых чисел (\(2, 3, 5, \dots\));
- иначе (если \(a_i\) не является простым числом), наибольший делитель \(a_i\), не равный \(a_i\), добавляется в \(b\);
- Затем получившийся массив длины \(2n\) перемешивается и дается Вам во входных данных.
Здесь \(p_{a_i}\) означает \(a_i\)-е простое число. Первое простое число \(p_1 = 2\), второе простое число \(p_2 = 3\), и так далее. Ваша задача — восстановить любой подходящий массив \(a\), который формирует заданный массив \(b\). Гарантируется, что ответ существует (таким образом, массив \(b\) получен из какого-либо подходящего массива \(a\)). Если существует несколько возможных ответов, Вы можете вывести любой. Выходные данные В единственной строке выходных данных выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(2 \le a_i \le 2 \cdot 10^5\)) в любом порядке — массив \(a\), из которого можно получить массив \(b\) при помощи последовательности ходов, описанных в условии задачи. Если существует несколько возможных ответов, Вы можете вывести любой.
| |
|
|
D. Простой граф
Конструктив
математика
*1500
теория чисел
жадные алгоритмы
Все любят простые числа. Алиса тоже. Боб хотел вручить ей подарок, но не смог придумать ничего оригинального. Поэтому он решил подарить ей граф. Как изобретательно, Боб! Алисе точно понравится. При построении графа Бобу нужно выполнить следующие четыре требования: - Это должен быть простой неориентированный граф, то есть без петель и кратных (параллельных) ребер.
- Количество вершин должно быть ровно \(n\) — число, которое выбрал Боб. Это число не обязательно простое.
- Количество ребер должно быть простым числом.
- Степень (т.е. количество рёбер, которые соприкасаются с вершиной) каждой вершины должна быть простым числом.
Ниже представлен пример для \(n = 4\). Первый граф (слева) неправильный, так как степень вершины \(2\) (так же как и \(4\)) равна \(1\), а это число не является простым. Второй граф (посередине) неправильный, так как в нем \(4\) ребра, что также не является простым числом. Третий граф (справа) правильный для \(n = 4\). Обратите внимание, что граф может быть несвязным. Пожалуйста, помогите Бобу найти любой такой граф! Выходные данные Если нет такого графа, для которого выполняются все условия, то выведите \(-1\). Иначе в первой строке выведите простое число \(m\) (\(2 \leq m \leq \frac{n(n-1)}{2}\)) — количество ребер в графе. После этого выведите \(m\) строк, в \(i\)-й из которых выведите два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\)), которые значат, что есть ребро между вершинами \(u_i\) и \(v_i\). Степень каждой вершины должна быть простым числом. Не должно быть петель и кратных (параллельных) ребер. Если существует несколько решений, выведите любое из них. Обратите внимание, что граф может быть несвязным. Примечание Первый пример объяснен в легенде. Во втором примере степени вершин равны \([7, 5, 2, 2, 3, 2, 2, 3]\). Каждое из этих чисел простое. Кроме того, количество ребер равно \(13\), что тоже является простым числом, поэтому все условия выполнены.
| |
|
|
E. Рекуррентность произведений
математика
дп
теория чисел
*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)\). Выходные данные Выведите \(f_{n} \bmod (10^{9} + 7)\). Примечание В первом примере \(f_{4} = 90\), \(f_{5} = 72900\). Во втором примере \(f_{17} \approx 2.28 \times 10^{29587}\).
| |
|
|
F. Максимальный синус
Бинарный поиск
Структуры данных
теория чисел
*2700
Вам даны числа \(a\), \(b\), \(p\) и \(q\). Пусть \(f(x) = \text{abs}(\text{sin}(\frac{p}{q} \pi x))\). Найдите минимальное возможное целое число \(x\), которое максимизирует \(f(x)\), где \(a \le x \le b\). Выходные данные Для каждого теста в новой строке выведите минимально возможно целое число \(x\). Примечание В первом примере, \(f(0) = 0\), \(f(1) = f(2) \approx 0.866\), \(f(3) = 0\). Во втором примере, \(f(55) \approx 0.999969\), которое максимально возможное число среди всех возможных чисел.
| |
|
|
A1. Хайди изучает хеширование (лёгкая)
Перебор
математика
теория чисел
*1200
Мадам Ковариан украла новорожденную Мелоди Понд у её родителей, чтобы та стала оружием молчания в крестовом походе против Доктора. Мадам Ковариан изменила имя Мелоди на Ривер Сонг, что дало ей новую личность и позволило убить Одиннадцатого Доктора. Хайди выяснила, что Мадам Ковариан использует достаточно сложную хеш-функцию, чтобы менять имена украденных малышей. Чтобы такое не произошло с будущими Докторами, Хайди решила подговиться и изучить основные технологии хеширования. Первая хеш-функция, которую она рассматривает, выглядит следующим образом: Предположим, что даны положительные целые числа \((x, y)\), тогда она определяет \(H(x,y):=x^2+2xy+x+1\). Теперь, Хайди интересуется, является ли данная функция обратимой. В частности, у неё есть целое положительное \(r\), не могли бы вы найти пару \((x, y)\) (целые положительные числа), такие что \(H(x, y) = r\)? Если существуют несколько таких пар, то выведите пару с минимальным \(x\). Если ни одной такой пары не существует, то выведите «NO». Выходные данные Выведите целые числа \(x, y\), такие что \(H(x,y) = r\) и \(x\) является минимально возможным, или «NO», если такой пары не существует.
| |
|
|
A2. Хайди изучает хеширование (средняя)
Перебор
*2100
теория чисел
После того, как Хайди изучила полиномиальное хеширование, она решила изучить хэширование через битовый сдвиг и xor. В частности, она наткнулась на следующую задачу: Дана битовая строка \(y \in \{0,1\}^n\). Нужно посчитать количество \(k\) (\(0 \leq k < n\)), таких что существует \(x \in \{0,1\}^n\), такой что \(y = x \oplus \mbox{shift}^k(x).\) Где \(\oplus\) обозначает побитового xor, а \(\mbox{shift}^k\) обозначает операцию циклического сдвига битовой строки направо \(k\) раз. Например, \(001 \oplus 111 = 110\), а \(\mbox{shift}^3(00010010111000) = 00000010010111\). Выходные данные Выведите одно целое число: количество подходящих \(k\). Примечание В первом примере: - \(1100\oplus \mbox{shift}^1(1100) = 1010\)
- \(1000\oplus \mbox{shift}^2(1000) = 1010\)
- \(0110\oplus \mbox{shift}^3(0110) = 1010\)
Не существует \(x\), такого что \(x \oplus x = 1010\), а значит ответ равен \(3\).
| |
|
|
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\), состоящих из строчных латинских букв. Выходные данные Выведите целые числа \(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» разные длины...
| |
|
|
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\). Выходные данные Выведите одно число — ответ к задаче. Примечание В первом примере: \((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)\).
| |
|
|
F. Tokitsukaze и степени
Теория вероятностей
теория чисел
*3400
Tokitsukaze играет в «побег из комнаты», разработанный SkywalkerT. В этой игре она должна найти скрытые подсказки в комнате, чтобы раскрыть способ побега. Через некоторое время она поняла, что единственный способ убежать — открыть цифровой дверной замок. Она случайно зашла в тайный отсек и нашла некоторые зацепки, которые могут быть интерпретированы следующим образом: - Дверь можно будет открыть только после того, как будут введены \(n\) возможных различных паролей.
- Пароли должны быть целыми числами от \(0\) до \((m - 1)\);
- Пароль не может быть равен \(x\) (\(0 \leq x < m\)), если \(x\) и \(m\) не являются взаимно простыми числами (т.е. \(x\) и \(m\) имеют некоторый общий делитель больший одного);
- Пароль не может быть равен \(x\) (\(0 \leq x < m\)), если существуют неотрицательные целые числа \(e\) и \(k\) такие, что \(p^e = k m + x\), где \(p\) — секретное число;
- Любое целое число, не нарушающее описанных выше правил, может являться паролем.
- Несколько целых чисел спрятаны в комнате, однако только одно из них может являться числом \(p\).
К счастью, она узнала, что \(n\) и \(m\) записаны в замке. Тем не менее, Tokitsukaze расстроена тем, что она не очень хороша в математике. Теперь, когда она нашла число, которое может являться числом \(p\), она хочет, чтобы Вы помогли ей найти \(n\) возможных паролей или определить, что данное число не может быть числом \(p\). Выходные данные Если существует строго меньше чем \(n\) различных возможных паролей, выведите единственное число \(-1\). Иначе, выведите \(n\) различных целых чисел от \(0\) до \((m - 1)\), являющихся возможными паролями. Вы можете выводить эти числа в любом порядке. Кроме того, если существует несколько возможных решений, выведите любое. Примечание В первом примере, не существует возможных паролей. В каждом из следующих трех примеров, данное число \(n\) равняется количеству возможных паролей для данных \(m\) и \(p\), поэтому если игнорировать порядок выведенных чисел, решение уникально, как показано выше.
| |
|
|
F. Эксперт по кроссвордам
Теория вероятностей
Комбинаторика
дп
теория чисел
*2400
Сегодня у Адилбека тест по теории вероятности. К сожалению, к моменту, когда Адилбек пришел в университет, уже сформировалась огромная очередь из других желающих сдать этот же тест. Адилбек оценил, что он сможет приступить к тесту только через \(T\) секунд. К счастью, Адилбек может провести время ожидания более интересным образом, чем повторение скучных теорем и формул. У него на телефоне есть приложение с \(n\) японскими кроссвордами. Адилбек собрался решать их по одному, в том же порядке, в котором они перечислены в приложении, не пропуская ни одного кроссворда. Для каждого кроссворда известно время \(t_i\), за которое его в среднем может решить эксперт по кроссвордам (время также задано в секундах). Адилбек — настоящий эксперт по японским кроссвордам, но, к сожалению, ему иногда не везет с выбором стратегии решения. Поэтому решение \(i\)-го кроссворда будет занимать у него либо \(t_i\) секунд, либо \(t_i + 1\) секунд равновероятно (с вероятностью \(\frac{1}{2}\) он решает кроссворд ровно за \(t_i\) секунд, а с вероятностью \(\frac{1}{2}\) он потратит дополнительную секунду на решение кроссворда). Все эти события независимы. Ровно через \(T\) секунд (либо после решения последнего кроссворда, если он успевает их все решить меньше чем за \(T\) секунд) Адилбек закрывает приложение (если он заканчивает какой-то кроссворд в последний момент, то данный кроссворд считается решенным; иначе Адилбек бросает кроссворд не решенным до конца). Он считает, что будет очень интересно и по теме посчитать \(E\) — математическое ожидание количества кроссвордов, которые он успеет полностью решить. Можете ли вы посчитать данное матожидание? Напомним, что матожидание дискретной случайной величины — это вероятностно-взвешенное среднее всех ее возможных значений. В данной задаче это означает, что матожидание количества решенных кроссвордов может быть посчитано как как \(E = \sum \limits_{i = 0}^{n} i p_i\), где \(p_i\) — вероятность того, что Адилбек решит ровно \(i\) кроссвордов. Мы можем представить \(E\) как рациональную дробь \(\frac{P}{Q}\) с \(Q > 0\). В качестве ответа выведите \(P \cdot Q^{-1} \bmod (10^9 + 7)\). Выходные данные Выведите одно число — матожидание количества кроссвордов, решенных Адилбеком за \(T\) секунд, в форме \(P \cdot Q^{-1} \bmod (10^9 + 7)\). Примечание Ответ для первого примера равен \(\frac{14}{8}\). Ответ для второго примера равен \(\frac{17}{8}\).
| |
|
|
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\). Выходные данные Выведите ответ по модулю \(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\). Выходные данные Выведите ответ по модулю \(998\,244\,353\).
| |
|
|
F. GCD-группы 2
Теория вероятностей
теория чисел
жадные алгоритмы
*2900
Дан массив из \(n\) чисел. Требуется разбить все числа на два множества таким образом, чтобы НОД всех чисел первого множества был равен единице и НОД всех чисел второго множества был равен единице. НОД множества чисел — наибольшее целое число, делящее все числа из множества. Оба множества должны быть непустыми. Выходные данные В первой строке выведите «YES» (без кавычек), если разбить числа на два множества требуемым образом возможно, или «NO» (без кавычек) в противном случае. Если разбить числа на два множества возможно, во второй строке выведите \(n\) чисел, где \(i\)-е число равно \(1\), если элемент \(a_i\) должен оказаться в первом множестве, и \(2\) в противном случае. Если существует несколько решений, вы можете вывести любое.
| |
|
|
C. Круглый коридор
математика
теория чисел
*1400
Амуга находится в большом круглом коридоре. Коридор состоит из двух колец. Внутреннее кольцо разбито на \(n\) равных секторов, а внешнее — на \(m\) равных секторов. Между каждой парой соседних секторов в одной части (внешней или внутренней) есть стена, но стены между внутренней и внешней частями нет. Сектора расположены так, что в положении «12 часов» стена есть в обоих секторах. Сектора внутреннего кольца обозначаются \((1,1), (1,2), \dots, (1,n)\) по часовой стрелке. Сектора внешнего кольца обозначаются \((2,1), (2,2), \dots, (2,m)\) таким же образом. Для лучшего понимания смотрите рисунок выше. Амуга хочет знать, может ли он переместиться между двумя заданными секторами. У него \(q\) таких вопросов. Для каждого вопроса выведите, может ли он переместиться между двумя заданными секторами. Выходные данные Для каждого вопроса выведите «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\). Путь по графу определяется следующим образом. - Гильдон выбирает вершину, с которой начнет путь, а также некоторое начальное целое число. Запомним это число в переменную \(c\).
- Когда Гильдон приходит в вершину \(i\), а также, в начале, если путь начинается с вершины \(i\), он добавляет значение \(k_i\) к \(c\).
- Следующая вершина пути — это \(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\). Обратите внимание, что не нужно учитывать вершины, которые будут посещены только конечное число раз. Выходные данные Для каждого запроса выведите количество различных вершин, которые будут посещены бесконечно много раз, если Гильдон начнет путь из вершины \(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\)
| |
|
|
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\). Выходные данные Выведите ответ на задачу по модулю \(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\).
| |
|
|
G. Многоугольники
математика
теория чисел
*2800
жадные алгоритмы
Вам даны два целых числа \(n\) и \(k\). Вам нужно построить \(k\) правильных многоугольников с общей описанной окружностью с различными количествами сторон \(l\) от \(3\) до \(n\). Изображение к первому примеру. Вы можете вращать их, чтобы минимизировать количество различных точек на окружности. Найдите минимальное количество таких точек. Выходные данные Выведите одно целое число — минимальное число точек на окружности, необходимых для размещения \(k\) многоугольников. Примечание В первом примере \(n = 6\) и \(k = 2\). Таким образом, есть \(4\) многоугольника с количествами сторон \(3\), \(4\), \(5\) и \(6\) из которых нужно выбирать, и если выбрать треугольник и шестиугольник, получится картинка из условия. Таким образом, минимальное необходимое количество точек на круге \(6\), что также минимально по всем возможных множествам.
| |
|
|
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\). Коала интересуется, чему будет равно наибольшее число ламп, которые будут одновременно включены. Вам нужно это выяснить. Так выглядит состояние ламп в первом примере. Выходные данные Выведите одно число — максимальное возможное число одновременно горящих ламп. Примечание В первом примере состояния ламп изображены на картинке выше. Наибольшее число одновременно включённых ламп равно \(2\) (например в момент \(2\)). Во втором примере все лампы изначально включены. Значит ответ равен \(4\).
| |
|
|
C. Счастливая перестановка
Перебор
Комбинаторика
теория чисел
*1900
Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются. Однажды во сне Петя увидел лексикографически k-ую перестановку целых чисел от 1 до n. Определите, сколько счастливых чисел стоит в этой перестановке на позициях, номера которых также являются счастливыми числами. Выходные данные Если не существует k-ой перестановки чисел от 1 до n, выведите одно число «-1» (без кавычек). Иначе выведите ответ на задачу: количество таких i, что одновременно и i, и ai являются счастливыми числами. Примечание Перестановка — это упорядоченный набор из n элементов, в котором каждое целое число от 1 до n встречается ровно один раз. Элемент перестановки в позиции i обозначается ai (1 ≤ i ≤ n). Перестановка a лексикографически меньше перестановки b, если существует такое i (1 ≤ i ≤ n), что ai < bi, и для любого j (1 ≤ j < i) aj = bj. Составим список из всех возможный перестановок из n элементов, и отсортируем его в порядке лексикографического возрастания. Тогда лексикографически k-ая перестановка — k-ый элемент этого списка перестановок. В первом примере перестановка имеет вид: 1 2 3 4 6 7 5 Единственная подходящая позиция — 4. Во втором примере перестановка имеет вид: 2 1 3 4 Единственная подходящая позиция — 4.
| |
|
|
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\). Выходные данные Выведите сумму красот всех таких путей \((u, v)\), что \(u\) предок \(v\). Эта сумма должна быть выведена по модулю \(10^9 + 7\). Примечание На следующей иллюстрации изображены все \(10\) возможных путей, в которых один из концов является предком другого. Сумма красот всех этих путей равна \(42\):
| |
|
|
A. Счастливое деление
Перебор
*1000
теория чисел
Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются. Петя называет число почти счастливым, если оно делится без остатка на какое-либо счастливое число. Помогите ему узнать, является ли заданное число n почти счастливым? Выходные данные В единственной строке выведите «YES» (без кавычек), если число n почти счастливое, иначе выведите «NO» (без кавычек). Примечание Заметим, что все счастливые числа являются почти счастливыми, так как любое число делится само на себя без остатка. В первом примере 47 — счастливое число. Во втором примере 16 делится на 4.
| |
|
|
B. Таблица умножения
математика
теория чисел
*1300
Саша подросла и пошла в первый класс. В честь этого события мама подарила ей таблицу умножения \(M\) с \(n\) строками и \(n\) столбцами, такую что \(M_{ij}=a_i \cdot a_j\), где \(a_1, \dots, a_n\) — некоторый массив целых положительных чисел. Конечно же, девочка решила взять её с собой в школу. Но пока она обедала, хулиган Гриша стёр числа на главной диагонали и выкинул массив \(a_1, \dots, a_n\). Помогите Саше восстановить исходный массив! Выходные данные В единственной строке выведите \(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 множества так, что не существует ребер между вершинами из одного множествами. Выходные данные В первой строке выведите целое число \(k\) — количество удаляемых элементов множества, а во второй строке выведите \(k\) чисел через пробел — значения удаляемых элементов в любом порядке. Если возможных ответов несколько, выведите любой
| |
|
|
G. Деревянный плот
Бинарный поиск
математика
теория чисел
*3200
Представьте, что вы застряли на необитаемом острове. Единственный способ спастись — построить деревянный плот и выйти на нем в море. К счастью, вы смогли смастерить пилу, а на острове оказался лес. Более того, вы уже спилили несколько деревьев и подготовили их, получив в конечном счёте \(n\) бревен, где длина \(i\)-го бревна равна \(a_i\). Деревянный плот, который вы хотите построить, имеет следующий вид: \(2\) бревна длины \(x\) и \(x\) бревен длины \(y\). Площадь такого плота будет равна \(x \cdot y\). При этом оба значения \(x\) и \(y\) должны быть целыми, так как это единственный метод измерения, который вы освоили, будучи на необитаемом острове. А также, оба значения \(x\) и \(y\) должны быть не менее \(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\).
| |
|
|
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\). Выходные данные Выведите одно число — количество подходящих пар. Примечание В примере подходят следующие пары: - \(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\).
| |
|
|
G. Получить 1
Конструктив
дп
теория чисел
жадные алгоритмы
битмаски
*3100
На доске написано \(n\) положительных чисел. Также выбрано положительное число \(k \geq 2\), и ни одно из написанных чисел не делится на \(k\). За одну операцию разрешается стереть с доски любые два числа \(x\) и \(y\) и записать вместо них \(f(x + y)\), где \(f(x)\) равно \(x\), если \(x\) не делится на \(k\), и \(f(x) = f(x / k)\) в противном случае. В конце на доске останется одно число. Возможно ли сделать это число равным \(1\)? Если это так, восстановите любую последовательность операций, которая к этому приводит. Выходные данные Если получить \(1\) в качестве последнего числа невозможно, выведите единственную строку «NO». В противном случае, в первой строке выведите «YES», а затем выведите \(n - 1\) строку с описанием операций. \(i\)-я из этих строк должна содержать два целых числа \(x_i\) и \(y_i\), которые необходимо заменить на \(f(x_i + y_i)\) на \(i\)-й операции. Если существует несколько подходящих последовательностей, выведите любую из них. Примечание Во втором примере: - \(f(8 + 7) = f(15) = f(5) = 5\);
- \(f(23 + 13) = f(36) = f(12) = f(4) = 4\);
- \(f(5 + 4) = f(9) = f(3) = f(1) = 1\).
| |
|
|
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)}\). Выходные данные Выведите ответ. Примечание В первом примере \(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)\). В третьем примере будьте осторожны с переполнением.
| |
|
|
A. Перестановка на простоту
Строки
реализация
теория чисел
*1300
Дана строка s, состоящая из строчных букв латинского алфавита. Будем обозначать длину строки |s|. Нумерация символов в этой строке начинается с 1. Определите, возможно ли в строке s так переставить символы, чтобы для любого простого числа p ≤ |s| и для любого целого i в диапазоне от 1 до |s| / p (включительно) выполнялось условие sp = sp × i. В случае положительного ответа найдите один из способов так переставить символы. Выходные данные Если в строке можно переставить символы так, чтобы выполнялись перечисленные выше условия, то выведите в первой строке «YES» (без кавычек) и во второй — одну из возможных получившихся строк. Если такая перестановка невозможна, выведите одну строку «NO». Примечание В первом примере подойдет любая из шести возможных строк «abc», «acb», «bac», «bca», «cab» или «cba». Во втором примере никакая перестановка букв не будет выполнять условие при p = 2 (s2 = s4). Третий тест — подойдет любая строка, в которой символ «y» не стоит на позиции 2, 3, 4, 6.
| |
|
|
A. Вычитание простого
математика
*900
теория чисел
Вам заданы два целых числа \(x\) и \(y\) (гарантируется, что \(x > y\)). Вы можете выбрать любое простое целое число \(p\) и вычесть его любое количество раз из \(x\). Можно ли сделать \(x\) равным \(y\)? Напомним, что простым называется целое положительное число, которое имеет ровно два положительных делителя: \(1\) и само это целое число. Последовательность простых чисел начинается с \(2\), \(3\), \(5\), \(7\), \(11\). Ваша программа должна ответить на \(t\) независимых тестов. Выходные данные На каждый тест выведите YES, если возможно выбрать простое число \(p\) и вычесть его некоторое количество раз из \(x\), чтобы \(x\) стало равным \(y\). Иначе выведите NO. Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ). Примечание В первом примере вы можете выбрать \(p = 2\) и вычесть его один раз. Во втором примере вы можете выбрать \(p = 5\) и вычесть два раза. Обратите внимание, что вы не можете выбрать \(p = 7\), вычесть его, после этого выбрать \(p = 3\) и вычесть его снова, потому что разрешена только одна такая операция. В третьем примере вы можете выбрать \(p = 3\) и вычесть его \(333333333333333333\) раз.
| |
|
|
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\)). Уджан хочет украсить своё место. В какое наибольшее количество цветов Уджан может покрасить тропинку таким образом, чтобы она была эстетичной? Выходные данные Выведите одно число — максимальное возможное количество цветов, в которое можно покрасить тропинку. Примечание В первом примере тропинку можно покрасить в максимум два цвета. Плитки \(1\) и \(3\) должны иметь одинаковый цвет, так как \(4 \bmod |3-1| = 0\). Плитки \(2\) и \(4\) тоже должны иметь одинаковый цвет, так как \(4 \bmod |4-2| = 0\). Во втором примере могут быть использованы все пять цветов. Примеры покрасок для первого и второго теста.
| |
|
|
C. Футбольный сезон
Перебор
математика
теория чисел
*2000
Совсем недавно закончился футбольный сезон в Берляндии. В каждом футбольном матче в Берляндии участвуют по две команды. Результатом матча может быть победа одной из команд, либо ничья. Победившая в матче команда получает \(w\) очков, а проигравшая команда получает \(0\) очков. Если результат игры ничейный, то обе команды получают по \(d\) очков. Владелец команды столицы Берляндии захотел подвести итоги сезона, но все данные об играх его команды были утеряны. Осталась лишь информация о том, что команда столицы Берляндии провела за сезон \(n\) матчей, в которых набрала \(p\) очков. Перед вами стоит задача определить три целых числа \(x\), \(y\) и \(z\) — сколько матчей выиграла, сыграла вничью и проиграла команда столицы Берляндии. Если подходящих ответов несколько, вы можете вывести любой из них. Если не существует ни одной подходящей тройки \((x, y, z)\), сообщите об этом. Выходные данные Если не существует ни одного подходящего ответа, выведите \(-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\) матчей были проиграны.
| |
|
|
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» (без кавычек). Выходные данные Для каждого набора входных данных выведите одну строку, содержащую «Infinite» or «Finite» (без кавычек). Регистр букв не имеет значения (например, «infinite», «inFiNite» или «finiTE» — все корректные значения).
| |
|
|
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\)-ю коробку (если такие коробки существуют). Конечно, он хочет помочь своему другу как можно быстрее. Поэтому он просит вас подсчитать минимальное количество секунд, которое понадобится ему, чтобы сделать Алису счастливой. Выходные данные Если Чарли не может сделать Алису счастливой, выведите \(-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\)-ю коробку (если такие коробки существуют). Конечно, он хочет помочь своему другу как можно быстрее. Поэтому он просит вас подсчитать минимальное количество секунд, которое понадобится ему, чтобы сделать Алису счастливой. Выходные данные Если Чарли не может сделать Алису счастливой, выведите \(-1\). Иначе выведите \(x\) — минимальное количество секунд, которые нужны Чарли, чтобы помочь Бобу сделать Алису счастливой. Примечание В первом примере Чарли может передвинуть все шоколадные кусочки во вторую коробку. Каждая коробка будет делиться на \(17\). Во втором примере Чарли может передвинуть кусочек из \(2\)-й коробки в \(3\)-ю и еще один из \(4\)-й в \(5\)-ю. Каждая коробка делится на \(3\). В третьем примере каждая коробка уже делится на \(5\). В четвертом примере Чарли не может ничего сделать, он не может помочь Бобу сделать Алису счастливой.
| |
|
|
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\). Выходные данные Выведите максимально возможный размер хорошего подмножества по модулю \(998244353\). Примечание В первом примере \(x = 2999999 \cdot 43 \cdot 2999957\) и одним из его максимальных хороших подмножеств является \(\{ 43, 2999957, 2999999 \}\). Во втором примере \(x = 2 \cdot 3 \cdot 2 \cdot 3 \cdot 2 \cdot 2 = 144\) и одним из его максимальных хороших подмножеств является \(\{ 9, 12, 16 \}\).
| |
|
|
C. Бесконечный забор
математика
теория чисел
жадные алгоритмы
*1700
Вы являетесь лидером повстанцев и планируете начать революцию в вашей стране. Но злое Правительство узнало о ваших планах и решило наказать вас в форме исправительных работ. Вы обязаны покрасить забор в два цвета, который состоит из \(10^{100}\) досок, следующим образом (будем считать, что доски пронумерованы слева направо, начиная с \(0\)): - если номер доски делится на \(r\) (это доски с номерами \(0\), \(r\), \(2r\) и так далее), то вы обязаны покрасить ее в красный;
- если номер доски делится на \(b\) (это доски с номерами \(0\), \(b\), \(2b\) и так далее), то вы обязаны покрасить ее в синий;
- если номер доски делится и на \(r\) и на \(b\), то вы можете выбрать цвет, в который покрасите эту доску;
- в противном случае, вам не надо красить доску совсем (тратить лишнюю краску в принципе запрещено).
Более того, Правительство добавило еще одно условие, чтобы усложнить вам задачу. Давайте выпишем номера всех покрашенных досок забора в порядке возрастания: если в данном списке найдется \(k\) последовательных досок одного цвета, то Правительство объявит вас лицом, неспособным к исправительным работам, и отправит вас на казнь. Если вы не покрасите забор, согласно заданным выше условиям, вас тоже казнят. Вопрос в следующем: сможете ли вы выполнить работу (время выполнения не имеет значения) или же казнь неизбежна и вам необходимо сбежать любым способом. Выходные данные Выведите \(T\) слов — по одному в строке. Для каждого набора выведите REBEL (регистр не важен), если казнь неизбежна или OBEY (регистр не важен), в противном случае.
| |
|
|
C. Вы все уже победители!
Бинарный поиск
математика
теория чисел
*1400
meet-in-the-middle
На всеми известной тестирующей системе 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\) заданных наборов входных данных. Каждый ответ должен состоять из двух строк. В первой строке выведите число \(m\) — количество различных значений приращения рейтинга, которые может получить Вася. В следующей строке выведите \(m\) различных чисел — сами значения приращения рейтинга в порядке возрастания.
| |
|
|
F. Красивая задача с числами Фиббоначи
Конструктив
теория чисел
*3500
Известные числа Фиббоначи \(F_0, F_1, F_2,\ldots \) определяются следующим образом: - \(F_0 = 0, F_1 = 1\).
- Для всех \(i \geq 2\): \(F_i = F_{i - 1} + F_{i - 2}\).
Дана возрастающая арифметическая прогрессия положительных целых чисел с \(n\) числами \((a, a + d, a + 2\cdot d,\ldots, a + (n - 1)\cdot d)\). Вы должны найди другую возрастающую арифметическую прогрессию положительных целых чисел с \(n\) числами \((b, b + e, b + 2\cdot e,\ldots, b + (n - 1)\cdot e)\), такую что: - \(0 < b, e < 2^{64}\),
- для всех \(0\leq i < n\), запись числа \(a + i \cdot d\) в десятичной системе счисления встречается как подстрока в строке, образованной последними \(18\)-ю цифрами десятичной записи числа \(F_{b + i \cdot e}\) (если это число содержит меньше чем \(18\) цифр, тогда рассмотрим все его цифры).
Выходные данные Если не существует подходящей арифметической прогрессии, выведите единственное число \(-1\). Иначе, выведите два целых числа \(b\) и \(e\), разделенных пробелом в единственной строке (\(0 < b, e < 2^{64}\)). Если существует несколько возможных ответов, вы можете найти любой из них. Примечание В первом тесте, мы можем выбрать \((b, e) = (2, 1)\), потому что \(F_2 = 1, F_3 = 2, F_4 = 3\). Во втором тесте, мы можем выбрать \((b, e) = (19, 5)\), потому что: - \(F_{19} = 4181\) содержит \(1\);
- \(F_{24} = 46368\) содержит \(3\);
- \(F_{29} = 514229\) содержит \(5\);
- \(F_{34} = 5702887\) содержит \(7\);
- \(F_{39} = 63245986\) содержит \(9\).
| |
|
|
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\): - \(b_1\) — наибольший общий делитель \(2\), \(9\) и \(7\), он равен \(1\);
- \(b_2\) — наибольший общий делитель \(4\), \(144\) и \(84\), он равен \(4\);
- \(b_3\) — наибольший общий делитель \(2\) и \(4\), он равен \(2\);
- \(b_4\) — наибольший общий делитель \(9\) и \(144\), он равен \(9\);
- \(b_5\) — наибольший общий делитель \(7\) и \(84\), он равен \(7\).
Итак, \(b = [1, 4, 2, 9, 7]\). Все значения в этом массиве различны, поэтому матрица является разнообразной. Модулем матрицы является число \(9\). Для заданных \(r\) и \(c\) найдите разнообразную матрицу с минимально возможным модулем. Если таких матриц несколько, найдите любую из них. Если решения нет, выведите единственное целое число \(0\). Выходные данные Если решения нет, выведите одно целое число \(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\) будет всегда соблюдаться, поэтому разнообразных матриц не существует.
| |
|
|
F. Карты
Теория вероятностей
Комбинаторика
математика
дп
теория чисел
*2600
Рассмотрим следующий эксперимент. У вас есть колода из \(m\) карт, ровно одна из них — джокер. \(n\) раз вы производите следующие действия: перемешиваете колоду, берете верхнюю карту, просматриваете ее и возвращаете ее в колоду. Пусть \(x\) — количество раз, когда вы брали с вершины колоды джокера. Предполагая, что при каждом перемешивании колоды все \(m!\) перестановок карт равновероятны, чему равно математическое ожидание \(x^k\)? Выведите ответ по модулю \(998244353\). Выходные данные Выведите одно число — математическое ожидание \(x^k\), взятое по модулю \(998244353\) (ответ всегда можно представить в виде несократимой дроби \(\frac{a}{b}\), где \(b \mod 998244353 \ne 0\); выведите \(a \cdot b^{-1} \mod 998244353\)).
| |
|
|
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\). Разумеется, Фади сразу нашел ответ. Сможете ли вы найти любую такую пару прямо как Фади? Выходные данные Выведите два целых положительных числа, \(a\) и \(b\), такие, что значение \(max(a, b)\) минимально возможное, а \(LCM(a, b)\) равен \(X\). Если существует несколько возможных пар, то выведите любую из них.
| |
|
|
F. Баян?
Бинарный поиск
Комбинаторика
теория чисел
*2900
Дан массив \(a\), состоящий из \(n\) целых чисел, найдите: \(\)\max\limits_{1 \le i < j \le n} LCM(a_i,a_j),\(\) где \(LCM(x, y)\) — это наименьшее положительное целое число, которое делится и на \(x\), и на \(y\). Например, \(LCM(6, 8) = 24\), \(LCM(4, 12) = 12\), \(LCM(2, 3) = 6\). Выходные данные Выведите одно целое число — максимальное значение наименьшее общего кратного двух чисел из массива \(a\).
| |
|
|
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\). Выходные данные Выведите одно целое число, обозначающее минимальную сумму путей от фрагментов до вершины с образцами эмоций \(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\).
| |
|
|
C. Произведение трех чисел
математика
теория чисел
жадные алгоритмы
*1300
Вам задано целое число \(n\). Найдите три различных целых числа \(a, b, c\) таких, что \(2 \le a, b, c\) и \(a \cdot b \cdot c = n\) или скажите, что невозможно сделать это. Если существует несколько подходящих ответов, вы можете вывести любой. Вам нужно ответить на \(t\) независимых наборов входных данных. Выходные данные Выведите ответ для каждого набора входных данных. Выведите «NO» если невозможно представить \(n\) как \(a \cdot b \cdot c\) для каких-то различных целых чисел \(a, b, c\) таких, что \(2 \le a, b, c\). Иначе выведите «YES» и любое такое возможное представление.
| |
|
|
D. Одинаковые GCD
математика
теория чисел
*1800
Даны два целых числа \(a\) и \(m\). Посчитайте количество таких целых чисел \(x\), что \(0 \le x < m\) и \(\gcd(a, m) = \gcd(a + x, m)\). \(\gcd(a, b)\) в данной задаче обозначает наибольший общий делитель \(a\) и \(b\). Выходные данные Выведите \(T\) целых чисел — по одному на каждый набор входных данных. Для каждого набора выведите количество подходящих чисел \(x\). Примечание В первом наборе входных данных примера возможные значения \(x\) — это \([0, 1, 3, 4, 6, 7]\). Во втором наборе входных данных единственное возможное значение \(x\) равно \(0\).
| |
|
|
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\). Выходные данные Выведите единственное число — \(\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\).
| |
|
|
F. Курони и наказание
Теория вероятностей
математика
теория чисел
*2500
Курони очень зол на других авторов за использование его в качестве темы! В качестве наказания он заставил их решить следующую задачу: У вас есть массив \(a\), состоящий из \(n\) целых положительных чисел. Операция состоит из выбора элемента и добавления к нему \(1\) или вычитания из него \(1\), чтобы элемент остался положительным. Назовем массив хорошим, если наибольший общий делитель всех его элементов не равен \(1\). Найдите минимальное количество операций, необходимых, чтобы сделать массив хорошим. Не в силах сравниться с интеллектом Курони, авторы не смогли решить задачу. Помоги им сбежать от наказания Курони! Выходные данные Выведите одно целое число — минимальное количество операций, необходимых, чтобы сделать массив хорошим. Примечание В первом примере первый массив уже хороший, так как наибольший общий делитель всех элементов равен \(2\). Во втором примере мы можем применить следующие операции: - Добавьте \(1\) ко второму элементу, сделав его равным \(9\).
- Вычтите \(1\) из третьего элемента, сделав его равным \(6\).
- Добавьте \(1\) к пятому элементу, сделав его равным \(2\).
- Добавьте \(1\) к пятому элементу снова, сделав его равным \(3\).
Наибольший общий делитель всех элементов будет равен \(3\), поэтому массив будет хорошим. Можно показать, что никакая последовательность из трех или менее операций не может сделать массив хорошим.
| |
|
|
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\), либо определять что такого не существует. Выходные данные Для каждой пары выведите одно целое число \(x\) (\(0 \le x < 2^{64}\)), такое что \(a^{\odot x} = b\), либо число -1, если таких степенй не существует. Можно показать, что если существует хоть какое-то такое число \(x\), то существует и лежащее в указанных границах. Если ответов в указанных границах несколько, можно вывести любой из них.
| |
|
|
A. Два правильных многоугольника
математика
геометрия
теория чисел
жадные алгоритмы
*800
Вам задано два целых числа \(n\) и \(m\) (\(m < n\)). Рассмотрим выпуклый правильный многоугольник на \(n\) вершинах. Напомним, что правильный многоугольник — это многоугольник, у которого все углы равны между собой и все стороны равны между собой. Примеры выпуклых правильных многоугольников Ваша задача — узнать, возможно ли построить другой выпуклый правильный многоугольник на \(m\) вершинах такой, что его центр совпадает с центром изначального многоугольника, а каждая его вершина является какой-то вершиной изначального многоугольника. Вам необходимо ответить на \(t\) независимых наборов тестовых данных. Выходные данные Выведите ответ на каждый набор тестовых данных — «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\)) после некоторого шага? Выходные данные Для каждого набора тестовых данных выведите либо 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\).
| |
|
|
C. Лапша быстрого приготовления
математика
теория чисел
графы
хэши
*2300
Ву проголодался после интенсивной тренировки и отправился в ближайший магазин, чтобы приобрести его любимую лапшу быстрого приготовления. После того, как Ву расплатился, кассир задал ему интересную задачу. Дан двудольный граф, в вершинах правой доли которого записаны положительные целые числа. Для подмножества вершин \(S\) левой доли определим \(N(S)\) как множество вершин правой доли, смежной хотя бы с одной из вершин \(S\), а \(f(S)\) — как сумму чисел, записанных в вершинах \(N(S)\). Требуется найти наибольший общий делитель чисел \(f(S)\) для всех возможных непустых подмножеств \(S\) (полагайте, что НОД пустого множества равен \(0\)). Ву слишком устал во время тренировки, чтобы справиться с такой задачей. Помогите ему! Выходные данные Для каждого тестового случая выведите единственное число — искомый наибольший общий делитель. Примечание Наибольшим общим делителем множества чисел называется наибольшее целое число \(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\).
| |
|
|
A. Очередная задача про тетрис
реализация
*900
теория чисел
Вам задано поле Тетриса, состоящее из \(n\) столбцов. Начальная высота \(i\)-го столбца поля равна \(a_i\) блоков. Сверху на столбцы вы можете ставить только фигуры размера \(2 \times 1\) (то есть высоты \(2\) блока и ширины \(1\) блок). Заметьте, что вы не можете поворачивать эти фигуры. Ваша задача — определить, возможно ли очистить заданное поле, используя только описанные фигуры. Более формально, задачу можно описать следующим образом: Пока хотя бы одно из \(a_i\) больше \(0\), происходит следующий процесс: - Вы ставите одну фигуру \(2 \times 1\) (выбираете какое-то \(i\) от \(1\) до \(n\) и заменяете \(a_i\) на \(a_i + 2\));
- затем, пока все \(a_i\) больше нуля, каждое \(a_i\) заменяется на \(a_i - 1\).
Ваша задача — определить, возможно ли очистить заданное поле (т.е. завершить описанный процесс), выбирая места для новых фигур правильным образом. Вам необходимо ответить на \(t\) независимых наборов тестовых данных. Выходные данные Для каждого набора тестовых данных выведите ответ — «YES» (без кавычек), если вы можете очистить поле тетриса полностью, и «NO» в противном случае. Примечание Первый набор тестовых данных из примера показан ниже: 
Серые линии означают границы поля Тетриса. Заметьте, что поле не имеет верхней границы. Одним из корректных ответов является сначала поставить фигуру в первый столбец. Затем, после второго шага процесса, поле станет равно \([2, 0, 2]\). Затем надо поставить фигуру во второй столбец и после второго шага процесса поле станет равно \([0, 0, 0]\). И второй набор тестовых данных из примера показан ниже: 
Можно показать, что вы не можете сделать ничего, чтобы закончить процесс. В третьем наборе тестовых данных из примера можно сначала поставить фигуру во второй столбец и после второго шага процесса поле станет равно \([0, 2]\). Затем можно поставить фигуру в первый столбец и после второго шага процесса поле станет равно \([0, 0]\). В четвертом наборе тестовых данных из примера можно поставить фигуру в первый столбец, тогда после первого шага процесса поле станет равно \([102]\), и затем после второго шага процесса поле станет равно \([0]\).
| |
|
|
A. ЕхАб И нОд
Конструктив
теория чисел
жадные алгоритмы
*800
Вам дано целое положительное число \(x\). Найдите любые такие два \(2\) целые положительные числа \(a\) и \(b\), для которых \(НОД(a,b)+НОК(a,b)=x\). Напомним, что \(НОД(a,b)\) — это наибольшее целое число, на которое делятся и \(a\) и \(b\). Аналогично, \(НОК(a,b)\) - это наименьшее целое число, которое делится и на \(a\) и на \(b\). Гарантируется, что решение всегда существует. Если существует несколько таких пар \((a, b)\), вы можете вывести любую из них. Выходные данные Для каждого набора тестовых данных, выведите пару целых положительных чисел \(a\) и \(b\) (\(1 \le a, b \le 10^9)\) таких, что \(НОД(a,b)+НОК(a,b)=x\). Гарантируется, что решение всегда существует. Если существует несколько таких пар \((a, b)\), вы можете вывести любую из них. Примечание В первом наборе тестовых данных примера, \(НОД(1,1)+НОК(1,1)=1+1=2\). Во втором наборе тестовых данных примера, \(НОД(6,4)+НОК(6,4)=2+12=14\).
| |
|
|
D. Ехаб, XORминатор
Конструктив
теория чисел
жадные алгоритмы
*1700
битмаски
Для данных 2 чисел \(u\) и \(v\), найдите самые короткий массив такой, что побитовое исключающее ИЛИ его элементов равно \(u\), а сумма его элементов равна \(v\). Выходные данные Если нет массива, удовлетворяющего условию, выведите "-1 ". В противном случае: Первая строка должна содержать одно целое число, \(n\), равное длине нужного массива. Следующая строка должна содержать \(n\) положительных целых чисел, сам массив. Если есть несколько возможных ответов, выведите любой. Примечание В первом примере, \(3\oplus 1 = 2\) and \(3 + 1 = 4\). Заметьте, что подходящего массива меньшей длины не существует. Обратите внимание, что в четвертом примере массив пуст.
| |
|
|
E. НАСТОЯЩАЯ Теория чисел от Ехаба
Перебор
теория чисел
*2600
поиск в глубину и подобное
графы
кратчайшие пути
Вам дан массив \(a\) длины \(n\), который имеет специальное условие: каждый элемент в этом массиве имеет не более 7 делителей. Найдите длину кратчайшей непустой подпоследовательности этого массива, произведение элементов которой является полным квадратом. Последовательность \(a\) является подпоследовательностью массива \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль или все) элементов. Выходные данные Выведите длину кратчайшей непустой подпоследовательности \(a\), произведение элементов которой является полным квадратом. Если существует несколько таких кратчайших подпоследовательностей, вы можете найти любую из них. Если такой подпоследовательности нет, выведите «-1». Примечание В первом примере, вы можете выбрать подпоследовательность \([1]\). Во втором примере, вы можете выбрать подпоследовательность \([6, 6]\). В третьем примере, вы можете выбрать подпоследовательность \([6, 15, 10]\). В четвертом примере, такой подпоследовательности не существует.
| |
|
|
A. Плохие некрасивые числа
Конструктив
*1000
теория чисел
Вам дано целое число \(n\) (\(n > 0\)). Вы должны найти любое целое число \(s\), которое удовлетворяет следующим условиям, или сказать, что таких чисел не существует: Если рассмотреть десятичное представление числа \(s\), то: - \(s > 0\),
- \(s\) содержит ровно \(n\) цифр,
- никакая из цифр \(s\) не равна \(0\),
- \(s\) не делится ни на одну из своих цифр.
Выходные данные Для каждого набора входных данных выведите целое число \(s\), которое удовлетворяет всем описанным условиям или «-1» (без кавычек), если таких чисел не существует. Если существует несколько возможных \(s\), вы можете найти любое. Примечание Не существует таких чисел \(s\), состоящих из одной цифры, потому что такие числа делятся сами на себя. Все возможные ответы на второй тестовый случай это \(23\), \(27\), \(29\), \(34\), \(37\), \(38\), \(43\), \(46\), \(47\), \(49\), \(53\), \(54\), \(56\), \(57\), \(58\), \(59\), \(67\), \(68\), \(69\), \(73\), \(74\), \(76\), \(78\), \(79\), \(83\), \(86\), \(87\), \(89\), \(94\), \(97\), \(98\). Число \(239\) является одним из возможных ответов на третий тестовый случай, потому что \(239\) не делится на \(2\), \(3\) и \(9\), содержит ровно три цифры, ни одна из которых не равна нулю.
| |
|
|
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\) целых чисел — по одному на набор входных данных. Для каждого набора выведите минимальное \(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\).
| |
|
|
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.
Выходные данные Выведите одно число.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите \(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\). Таким образом, допустимо раскрасить все три элемента в один цвет. Обратите внимание, что для данного набора входных данных существуют и другие раскраски, которые удовлетворяют требованиям Алисы. Во втором наборе входных данных в каждый цвет покрашен только один элемент, так что раскраска точно походит под все требования Алисы.
| |
|
|
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 - 1\) число: \(I_2\), \(I_3\), ..., \(I_n\). Примечание Ответ на первый пример 1, так как \(gcd(1, 2) = 1\). Во втором примере существуют подмножества \(S\) размеров \(2, 3\) с уродливостью 1. Например, \(\{2,3\}\) и \(\{1, 2, 3\}\).
| |
|
|
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\). Выходные данные Выведите \(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\)).
| |
|
|
B. Пары чисел
Перебор
математика
теория чисел
поиск в глубину и подобное
*1900
Допустим, мы имеем пару чисел (a, b). Мы можем получить новую пару чисел вида (a + b, b) или (a, a + b) из данной. Назовем такое действие шагом. Пусть начальная пара чисел — (1,1). Ваша задача — найти число k, наименьшее количество шагов, необходимых чтобы получить из (1,1) пару, в которой хотя бы одно число равно n. Выходные данные Выведите единственное число k. Примечание Из пары (1,1) можно за три хода получить пару, содержащую 5: (1,1) → (1,2) → (3,2) → (5,2).
| |
|
|
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\). Выходные данные Для каждого набора тестовых данных выведите \(q\) целых чисел — ответы на запросы в том порядке, в котором они задаются.
| |
|
|
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}\). Определите, верно ли, что после этого процесса перемещения в каждой комнате по-прежнему находится ровно один гость. Это означает, что нет пустых комнат и комнат, в которых больше одного гостя. Выходные данные Для каждого тестового случая выведите единственную строку, содержащую «YES», если в каждой комнате после перемещения находится ровно один гость, и «NO» иначе. Вы можете выводить каждый символ в любом регистре. Примечание В первом тестовом случае номер комнаты каждого гостя увеличился на \(14\), поэтому по-прежнему в каждой комнате находится ровно один гость. Во втором тестовом случае гости в комнатах с четными номерами перемещаются в комнату с номером, на \(1\) большим исходного; гости в комнатах с нечетными номерами перемещаются в комнату с номером, на \(1\) меньшим исходного. Можно показать, что по-прежнему в каждой комнате находится ровно один гость. В третьем тестовом случае каждый четвертый гость перемещается в комнату с номером, на \(1\) большим исходного, а остальные гости перемещаются в комнату с номером, на \(5\) большим. Можно показать, что по-прежнему в каждой комнате находится ровно один гость. В четвертом тестовом случае гости, исходно находящиеся в комнатах \(0\) и \(1\), перемещаются в комнату с номером \(3\). В пятом тестовом случае гости, находящиеся в комнатах \(1\) и \(2\), перемещаются в комнату с номером \(2\).
| |
|
|
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\)). Камеры могут снимать фото и в моменты, которые вас не интересуют. Выходные данные Выведите 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. Орак и 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)\) для него. Иначе говоря, вам нужно найти НОД НОКов всех пар элементов в данной последовательности. Выходные данные Выведите одно целое число: \(\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. Орак и модели
математика
дп
теория чисел
*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\) строк, в \(i\)-й из которых должно быть записано максимальное число моделей, которое Орак может купить для \(i\)-го запроса. Примечание Для первого запроса, например, Орак может купить модели с индексами \(2\) и \(4\), расстановка которых будет красивой так как \(4\) делится на \(2\) и \(6\) больше, чем \(3\). Рассмотрев остальные варианты, можно легко убедиться, что нет красивой расстановки с более, чем тремя моделями. Во втором запросе Орак может купить модели с индексами \(1\), \(3\), и \(6\). Рассмотрев остальные варианты, можно легко убедиться, что нет красивой расстановки с более, чем тремя моделями. В третьем примере не существует красивой расстановки с более, чем одной моделью.
| |
|
|
F. Угадать количество делителей
Конструктив
теория чисел
*2600
интерактив
Это интерактивная задача. Загадано число \(1 \le X \le 10^{9}\). Вам не нужно угадывать это число. Вам нужно определить количество делителей этого числа, и даже это вам не нужно делать точно: ваш ответ будет считаться верным, если его абсолютная погрешность не превышает 7 или его относительная погрешность не превышает \(0.5\). Формально, пусть ваш ответ равен \(ans\), а количество делителей \(X\) равно \(d\), тогда ваш ответ будет считаться правильным, если выполнено хотя бы одно из следующих двух условий: - \(| ans - d | \le 7\);
- \(\frac{1}{2} \le \frac{ans}{d} \le 2\).
Вы можете не более \(22\) раз сделать запрос. Запрос состоит из одного целого числа \(1 \le Q \le 10^{18}\). В ответ на запрос вы получите \(gcd(X, Q)\) — наибольший общий делитель \(X\) и \(Q\). Число \(X\) зафиксировано до всех запросов. Иными словами, интерактор не является адаптивным. Назовём процесс отгадывания количества делителей числа \(X\) игрой. В рамках одного теста вам нужно будет сыграть \(T\) независимых игр, то есть отгадать количество делителей \(T\) раз для \(T\) независимых чисел \(X\). Протокол взаимодействия Чтобы сделать запрос, выведите строку вида «? Q» (\(1 \le Q \le 10^{18}\)). После запроса считайте одно число — \(gcd(X, Q)\). Вы можете сделать не более \(22\) таких запросов в рамках одной игры. Если вы считаете, что знаете количество делителей \(X\) с достаточной точностью, выведите ваш ответ в формате «! ans». \(ans\) должно быть целым числом. Если это последняя игра, то вы должны завершить выполнение программы, иначе вы должны начать следующую игру. Обратите внимание, что интерактор не выводит ничего в ответ на вывод ответа. После вывода запроса или ответа не забудьте вывести перевод строки и сбросить буфер вывода. Для сброса буфера вывода используйте: - fflush(stdout) или cout.flush() в C++;
- System.out.flush() в Java;
- flush(output) в Pascal;
- stdout.flush() в Python;
- смотрите документацию для других языков.
Взломы Для взломов используйте следующий формат: Первая строка содержит одно целое число \(T\) (\(1 \le T \le 100\)) — количество игр. Каждая из следующих \(T\) строк содержит одно целое число \(X\)(\(1 \le X \le 10^{9}\)) — загаданное число. Так, пример из условия имеет вид 2 998244353 4194304
Примечание Почему ограничение на запросы именно 22? Возможно, автор задачи — фанат Тейлор Свифт. Рассмотрим пример из условия. В первой игре загадано число \(X = 998\,244\,353\). Было бы сложно это угадать, правда? Это число является простым, то есть количество его делителей равно 2. Решение сделало запросы с несколькими случайными числами, и ответы на все запросы оказались равны 1 (удивительно, что ни один из трёх запросов не оказался кратным \(998\,244\,353\)). Логично предположить, что у загаданного числа не очень много делителей, поэтому решение ответило 5. Почему бы и не 5. Этот ответ будет засчитан, так как \(| 5 - 2 | = 3 \le 7\). Во второй игре загадано число \(X = 4\,194\,304 = 2^{22}\), количество его делителей равно 23. Решение сделало запросы \(1024 = 2^{10}\), \(1\,048\,576 =2^{20}\), \(1\,073\,741\,824 = 2^{30}\) и получило ответы \(1024 = 2^{10}\), \(1\,048\,576 =2^{20}\), \(4\,194\,304 = 2^{22}\), соответственно. Затем решение окончательно запуталось и выдало ответ на Главный вопрос жизни, Вселенной и всего такого. Этот ответ будет засчитан, так как \(\frac{1}{2} \le \frac{42}{23} \le 2\).
| |
|
|
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\). Выходные данные Выведите количество стабильных массивов \([a_1, a_2, \dots, a_k]\), в которых \(1 \le a_1 < a_2 < \dots < a_k \le n\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).
| |
|
|
D. Покупка лопат
математика
теория чисел
*1300
Поликарп хочет купить ровно \(n\) лопат. В магазине продаются упаковки с лопатами. Всего в магазине \(k\) различных видов упаковок — упаковка \(i\)-го вида состоит из \(i\) лопат (\(1 \le i \le k\)). В магазине есть бесконечное количество упаковок каждого вида. Поликарп хочет выбрать один вид упаковки и после этого купить несколько (одну или более) упаковок этого вида. Какое наименьшее количество упаковок придется купить Поликарпу, чтобы суммарно купить ровно \(n\) лопат? Например, если \(n=8\) и \(k=7\), то Поликарп купит \(2\) упаковки из \(4\) лопат. Помогите Поликарпу найти минимальное количество упаковок, которое необходимо купить при условии, что он: - суммарно купит ровно \(n\) лопат;
- размеры всех купленных им упаковок одинаковы и являются целым числом от \(1\) до \(k\) включительно.
Выходные данные Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ является целым положительным числом — минимальным количеством упаковок. Примечание Ответ на первый набор тестовых данных разобран в условии. Во втором наборе существует только один способ купить \(8\) лопат — \(8\) упаковок по одной лопате. В третьем наборе нужно купить \(1\) упаковку из \(6\) лопат.
| |
|
|
A. XXXXX
Перебор
Структуры данных
теория чисел
*1200
Ехаб любит теорию чисел, но по какой-то причине он ненавидит число \(x\). Для данного массива \(a\) найдите длину самого длинного его подмассива, сумма элементов которого не делится на \(x\), или определите, что такого подмассива не существует. Массив \(a\) является подмассивом массива \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца. Выходные данные Для каждого набора входных данных выведите длину самого длинного подмассива, сумма элементов которого не делится на \(x\). Если такого подмассива не существует, выведите \(-1\). Примечание В первом наборе входных данных подмассив \([2,3]\) имеет сумму элементов \(5\), которая не делится на \(3\). Во втором наборе входных данных сумма всего элементов всего массива равна \(6\), и не делится на \(4\). В третьем наборе входных данных все подмассивы имеют четную сумму, поэтому ответ равен \(-1\).
| |
|
|
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\) чисел в каждой. В первой и второй строках \(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)\). Вы можете вывести любую из них.
| |
|
|
E. Сборка ожерелья
Перебор
дп
теория чисел
поиск в глубину и подобное
жадные алгоритмы
*1900
графы
В магазине продаются \(n\) бусинок. Цвет каждой бусинки описывается строчной буквой латинского алфавита («a»–«z»). Вы хотите купить какие-то бусинки, чтобы собрать из них ожерелье. Ожерелье — набор бусинок, соединенных по кругу. Например, если в магазине продаются бусинки «a», «b», «c», «a», «c», «c», то вы можете собрать следующие ожерелья (это не все возможные варианты): А следующие ожерелья нельзя собрать из бусинок, которые продаются в магазине: Первое ожерелье собрать не получится, потому что в нем есть три бусинки «a» (из двух доступных). Второе ожерелье собрать не получится, потому что в нем есть бусинка «d», которой нет в магазине. Назовем ожерелье \(k\)-красивым, если при его повороте по часовой стрелке на \(k\) бусинок ожерелье остается неизменным. Например, вот последовательность из трех поворотов некоторого ожерелья. Так как после трех поворотов по часовой стрелке ожерелье не изменилось, то оно является \(3\)-красивым. Как можно заметить, это ожерелье также является \(6\)-красивым, \(9\)-красивым и так далее, но не является \(1\)-красивым или \(2\)-красивым. В частности, ожерелье длины \(1\) является \(k\)-красивым для любого целого \(k\). Ожерелье, которое состоит из бусинок одинакового цвета, тоже является красивым для любого \(k\). Вам даны числа \(n\) и \(k\), а также строка \(s\), содержащая \(n\) строчных букв латинского алфавита — каждая буква задает бусинку в магазине. Вы можете купить любое подмножество бусинок и соединить их в произвольном порядке. Найдите максимальную длину \(k\)-красивого ожерелья, которое вы можете собрать. Выходные данные Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ является целым положительным числом — максимальной длиной \(k\)-красивого ожерелья, которое вы можете собрать. Примечание Первый набор тестовых данных разобран в условии. Во втором наборе тестовых данных \(6\)-красивое ожерелье можно собрать из всех букв. В третьем наборе тестовых данных \(1000\)-красивое ожерельем можно собрать, например, из бусинок «abzyo».
| |
|
|
A. Максимальный НОД
математика
реализация
теория чисел
жадные алгоритмы
*800
Рассмотрим все целые числа в промежутке от \(1\) до \(n\) (включительно). По всем парам различных целых чисел из этого промежутка, найдите максимальное возможное значение наибольшего общего делителя чисел в паре. Более формально, найдите максимальное значение \(\mathrm{gcd}(a, b)\) по всем \(1 \leq a < b \leq n\). Наибольшим общим делителем \(\mathrm{gcd}(a, b)\) пары положительных целых чисел \(a\) и \(b\) называется наибольшее целое число, являющееся делителем числа \(a\) и делителем числа \(b\). Выходные данные Для каждого набора входных данных, выведите максимальное значение \(\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 найти способ это сделать. Выходные данные Для каждого набора входных данных, выведите \(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 ходит первым. Определите победителя игры, если оба игрока играют оптимально. Выходные данные Для каждого набора входных данных, выведите «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\).
| |
|
|
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. Выходные данные В первой строке выведите количество хороших чисел \(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. Выходные данные В первой строке выведите количество хороших чисел \(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)\) принимает минимально возможное значение. Можете ли вы помочь Омкару решить его смешную математическую задачу? Выходные данные Для каждого набора входных данных выведите два положительных целых числа \(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\).
| |
|
|
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\) было максимально возможным. Выходные данные В первой строке выведите единственное целое число \(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\).
Выходные данные Для каждого набора входных данных в единственной строке выведите три целых числа \(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\) обязательно должно быть натуральным.
| |
|
|
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\) из них были почти простыми или сказать, что это невозможно. Дядя Богдан с легкостью справился с задачей и попал в команду капитана Флинта. Удастся ли это Вам? Выходные данные Для каждого набора входных данных выведите: - 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\) — почти простые.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите два целых числа: - если невозможно найти удовлетворяющие условиям числа \(x\) и \(y\), два раза выведите \(-1\);
- иначе выведите значения \(x\) и \(y\) (если существует несколько возможных решений, выведите любое из них).
| |
|
|
E. Неоднозначность календаря
математика
теория чисел
*2200
Берляндский год состоит из \(m\) месяцев, в каждом месяце по \(d\) дней. Месяца пронумерованы от \(1\) до \(m\). Берляндская неделя состоит из \(w\) дней. Первый день года также является и первым днем недели. Обратите внимание, что последняя неделя года может быть короче \(w\) дней. Пара \((x, y)\) такая, что \(x < y\), неоднозначна, если день \(x\) месяца \(y\) выпадает на тот же день недели, что и день \(y\) месяца \(x\). Посчитайте количество неоднозначных пар. Выходные данные Выведите \(t\) целых чисел — на каждый набор входных данных выведите количество пар \((x, y)\) таких, что \(x < y\), и день \(x\) месяца \(y\) выпадает на тот же день недели, что и день \(y\) месяца \(x\). Примечание Пары для первого набора входных данных:
| |
|
|
A. Кратные длине
Конструктив
*1600
теория чисел
жадные алгоритмы
Вам дан массив \(a\) из \(n\) целых чисел. Вы хотите сделать все элементы \(a\) равными нулю, применив следующую операцию ровно три раза: - Выберите отрезок, к каждому числу на этом отрезке добавьте число кратное \(len\), где \(len\) это длина этого отрезка (добавленные числа могут быть разными).
Можно доказать, что таким образом всегда можно превратить все элементы \(a\) в нули. Выходные данные Выведите шесть строк, описывающих три операции. Для каждой операции, выведите две строки: - В первой строке выведите два числа \(l\), \(r\) (\(1 \le l \le r \le n\)): границы выбранного отрезка.
- Во второй строке выведите \(r-l+1\) целых чисел \(b_l, b_{l+1}, \dots, b_r\) (\(-10^{18} \le b_i \le 10^{18}\)): числа, которые нужно прибавить к \(a_l, a_{l+1}, \ldots, a_r\), соответственно; \(b_i\) должно делиться на \(r - l + 1\).
| |
|
|
B. Степенная последовательность
Перебор
математика
*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}\) в степенную последовательность. Выходные данные Выведите минимальную стоимость, необходимую для превращения \(a_0, a_1, ..., a_{n-1}\) в степенную последовательность. Примечание В первом примере сначала можно переупорядочить \(\{1, 3, 2\}\) в \(\{1, 2, 3\}\), затем увеличить \(a_2\) до \(4\) за стоимость \(1\), чтобы получить степенную последовательность \(\{1, 2, 4\}\).
| |
|
|
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\). Выходные данные Выведите \(q\) целых чисел. \(i\)-е число должно быть равно максимально возможной длине круга для \(i\)-го этапа, или \(-1\), если невозможно выбрать круг для данного этапа.
| |
|
|
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\). Выходные данные Для каждого набора, выведите «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\) на простые числа. Выходные данные Выведите максимально возможный индекс распределения. Так как ответ может быть слишком большим, выведите его по модулю \(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\).
| |
|
|
D. Игра Пар
Конструктив
математика
теория чисел
*2800
поиск в глубину и подобное
интерактив
Это интерактивная задача. Дано целое число \(n\). Два игрока, First и Second играют в следующую игру: - First берет \(2n\) целых чисел \(1, 2, \dots, 2n\), и разбивает их на \(n\) попарно непересекающихся пар по своему усмотрению.
- Затем, 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\), поэтому ответ верен. Обратите внимание, что примеры предназначены только для иллюстрации протокола взаимодействия и необязательно соответствуют поведению реального интерактора.
| |
|
|
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\). Протокол взаимодействия Каждый раз, ваша программа должна вывести строку, содержащую один символ 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\). Это является правильным ответом.
| |
|
|
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\).
Выходные данные На каждый набор входных данных выведите ответ в отдельной строке — искомую последовательность \(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. Ещё одно восстановление массива
Перебор
математика
теория чисел
*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\) независимых наборов тестовых данных. Выходные данные Для каждого набора тестовых данных выведите ответ на него: \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — \(i\)-й элемент загаданного массива. Если существует несколько подходящих ответов, вы можете выбрать любой (это также означает, что порядок элементов не имеет значения). Можно доказать, что такой массив всегда существует при заданных ограничениях.
| |
|
|
B. Справедливые числа
Перебор
*1000
теория чисел
Назовём натуральное число справедливым, если оно делится на каждую из своих ненулевых цифр. Например, число \(102\) справедливое (так как оно делится и на \(1\), и на \(2\)), а число \(282\) — нет, потому что не делится на \(8\). По данному \(n\) найдите минимальное \(x\), такое что \(n \leq x\) и \(x\) — справедливое. Выходные данные Для каждого из \(t\) тестовых случаев в новой строке выведите наименьшее справедливое число, не меньшее \(n\). Примечание Пояснения к некоторым тестовым случаям: - В первом тестовом случае число \(1\) само по себе является справедливым.
- Во втором тестовом случае число \(288\) — справедливое (делится и на \(2\), и на \(8\)). Ни одно число из отрезка \([282, 287]\) не является справедливым, потому что, например, не делится на \(8\).
| |
|
|
F. Одинаковое произведение
Структуры данных
математика
теория чисел
*3000
Вам задано четыре целых числа \(n\), \(m\), \(l\) и \(r\). Назовем четверку чисел \((x_1, y_1, x_2, y_2)\) хорошей если: - \(1 \le x_1 < x_2 \le n\);
- \(1 \le y_2 < y_1 \le m\);
- \(x_1 \cdot y_1 = x_2 \cdot y_2\);
- \(l \le x_1 \cdot y_1 \le r\).
Найдите любую хорошую четверку для каждого \(x_1\) от \(1\) по \(n\) включительно. Выходные данные Для каждого \(x_1\) от \(1\) по \(n\): - если такой четверки целых чисел не существует, выведите \(-1\);
- Иначе, выведите четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\). Если существует несколько возможных ответов, выведите любой из них.
| |
|
|
E. Расшифровка
Конструктив
математика
реализация
*2100
теория чисел
Агент по имени Кефир расшифровывает послание, которое содержит только одно составное число \(n\). Сначала Кефир выписывает по кругу все делители числа \(n\), большие \(1\). Он может задать любой изначальный порядок чисел в кругу. После этого за одно действие Кефир может выбрать любые два соседние числа в кругу и вставить между ними их наименьшее общее кратное. Он может выполнять такое действие сколько угодно раз. Послание расшифровано, если любые два соседние числа в кругу не взаимно просты. Заметим, что при заданных ограничениях послание всегда можно расшифровать. Найдите, за какое минимальное количество действий послание можно расшифровать и как для этого нужно изначально расставить по кругу делители. Выходные данные Для каждого набора входных данных в первой строке выведите изначальный порядок делителей, больших \(1\), в кругу. Во второй строке выведите минимальное количество действий, необходимых для того, чтобы расшифровать послание. Если существует несколько возможных порядков с минимальным количеством действий, выведите любой. Примечание В первом наборе входных данных у числа \(6\) три делителя, больших \(1\): \(2, 3, 6\). В любом случае числа \(2\) и \(3\) будут стоять рядом в кругу, и поэтому между ними необходимо вставить их наименьшее общее кратное. После этого в кругу будут числа \(2, 6, 3, 6\), и каждые два соседних числа будут не взаимно просты. Во втором наборе входных данных у числа \(4\) два делителя, больших \(1\): \(2, 4\), и они не взаимно просты, поэтому вставлять наименьшее общее кратное не нужно. В третьем наборе входных данных все делители \(30\), большие \(1\), можно расставить в кругу так, чтобы любые два соседние числа не были взаимно просты.
| |
|
|
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\). НОК некоторого набора элементов — это наименьшее натуральное число, которое делится на каждое из чисел данного набора. Посчитанный НОК будет являться ответом на текущий запрос. Помогите Владику и выведите ответ на каждый запрос! Выходные данные Выведите \(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\).
| |
|
|
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? 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.
| |
|
|
E. Ксумма
Конструктив
математика
теория чисел
битмаски
*2500
матрицы
У вас есть доска и изначально на ней написано только одно нечетное число \(x\). Ваша цель — написать на доске число \(1\). Вы можете писать новые числа на доску, используя две следующие операции. - Вы можете взять два числа (не обязательно разные), которые уже написаны на доске, и написать их сумму на доске. Два выбранных вами числа остаются на доске.
- Вы можете взять два числа (не обязательно разные), которые уже написаны на доске, и записать их побитовое исключающее ИЛИ (XOR) на доске. Два выбранных вами числа остаются на доске.
Выполните последовательность операций так, чтобы в конце число \(1\) находилось на доске. Выходные данные В первой строке выведите \(q\) — число выполняемых операций. Затем должны следовать \(q\) строк, каждая из которых описывает одну операцию. - Операция "сумма" описывается строкой "\(a\) + \(b\)", где \(a, b\) должны быть целыми числами, уже присутствующими на доске.
- Операция "'xor" описывается строкой "\(a\) ^\(b\)", где \(a, b\) должны быть целыми числами, уже присутствующими на доске.
Символ операции (+ или ^) должен быть отделен от \(a, b\) пробелами.Вы можете выполнить не более \(100,000\) операций (т.е. \(q\le 100,000\)), а все числа, записанные на доске, должны быть в диапазоне \([0, 5\cdot10^{18}]\). Можно доказать, что при таких ограничениях требуемая последовательность операций существует. Вы можете вывести любую подходящую последовательность операций.
| |
|
|
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\). Выходные данные В единственной строке выведите одно целое число — искомую сумму по модулю \(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. Деление
Перебор
математика
*1500
теория чисел
Из предметов в школе Олегу больше всего нравятся история и математика, а его любимый раздел математики — деление. Чтобы улучшить свои навыки в делении, Олег загадал \(t\) пар целых чисел \(p_i\) и \(q_i\) и решил для каждой пары найти максимальное число \(x_i\), такое что - \(p_i\) делится нацело на \(x_i\),
- \(x_i\) не делится нацело на \(q_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\).
| |
|
|
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\) независимых наборов тестовых данных. Выходные данные Выведите ответ на каждый набор тестовых данных: в первой строке выведите одно положительное целое число \(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\). Выходные данные Для набора входных данных выведите одно целое число — количество различных значений, которые может принимать \(g(x)\), если \(x\) может быть любым целым числом из \([1, n]\). Примечание Пояснения к двум первым наборам входных данных примера из условия: - если \(n = 4\), то для каждого целого числа \(x\) такого, что \(1 \le x \le n\), \(\dfrac{x}{f(f(x))} = 1\);
- если \(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)\).
| |
|
|
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\). Выходные данные Выведите \(m\) целых чисел. \(j\)-е из этих чисел должно быть равно НОД\((a_1 + b_j, \ldots, a_n + b_j)\).
| |
|
|
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\) были равны между собой). Выходные данные Для каждого набора входных данных выведите одно число — минимальное количество операций, которые нужно сделать Поликарпу, чтобы все элементы массива \(a\) оказались одинаковыми. Примечание В первом наборе входных данных ответ может быть получен следующим образом (один из возможных вариантов): \([3, 1, 6, 6, 2]\) \(\xrightarrow[]{i=4,~прибавляет~влево}\) \([3, 1, 12, 2]\) \(\xrightarrow[]{i=2,~прибавляет~вправо}\) \([3, 13, 2]\) \(\xrightarrow[]{i=1,~прибавляет~вправо}\) \([16, 2]\) \(\xrightarrow[]{i=2,~прибавляет~влево}\) \([18]\). Все элементы в массиве \([18]\) одинаковые. Во втором наборе входных данных ответ может быть получен следующим образом (один из возможных вариантов): \([1, 2, 2, 1]\) \(\xrightarrow[]{i=1,~прибавляет~вправо}\) \([3, 2, 1]\) \(\xrightarrow[]{i=3,~прибавляет~влево}\) \([3, 3]\). Все элементы в массиве \([3, 3]\) одинаковые. В третьем наборе входных данных Поликарпу не надо производить ни одну операцию, так как массив \([2, 2, 2]\) уже содержит одинаковые элементы. В четвертом наборе входных данных ответ может быть получен следующим образом (один из возможных вариантов): \([6, 3, 2, 1]\) \(\xrightarrow[]{i=3,~прибавляет~вправо}\) \([6, 3, 3]\) \(\xrightarrow[]{i=3,~прибавляет~влево}\) \([6, 6]\). Все элементы в массиве \([6, 6]\) одинаковые.
| |
|
|
F. Full Turn
геометрия
теория чисел
*1700
хэши
There are \(n\) persons located on a plane. The \(i\)-th person is located at the point \((x_i, y_i)\) and initially looks at the point \((u_i, v_i)\). At the same moment of time, all persons will start to rotate clockwise synchronously with the same angular speed. They will rotate until they do one full \(360\)-degree turn. It is said that persons \(A\) and \(B\) made eye contact if person \(A\) looks in person \(B\)'s direction at the same moment when person \(B\) looks in person \(A\)'s direction. If there is a person \(C\) located between persons \(A\) and \(B\), that will not obstruct \(A\) and \(B\) from making eye contact. A person can make eye contact with more than one person at the same time. Calculate the number of pairs of persons that will make eye contact at least once during the rotation (including the initial moment). Output For each test case, print one integer — the number of pairs of persons who will make eye contact at least once during the rotation, including the initial moment.
| |
|
|
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. 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\) шагов. Заметим, что не нужно минимизировать количество шагов. Выходные данные Для каждого набора входных данных, выведите список операций, который сделает так, что массив \(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]\). Вы можете сделать, например, следующее: - выберем \(3\), \(2\): \(a_3 = \left\lceil \frac{a_3}{a_2} \right\rceil = 2\) и массив \(a = [1, 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]\). Вы можете, например, сделать следующее: - выберем \(3\), \(4\): \(a_3 = \left\lceil \frac{3}{4} \right\rceil = 1\) и массив \(a = [1, 2, 1, 4]\);
- выберем \(4\), \(2\): \(a_4 = \left\lceil \frac{4}{2} \right\rceil = 2\) и массив \(a = [1, 2, 1, 2]\);
- выберем \(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\) секунд. Выходные данные Для каждого запроса выведите одно число — красоту массива в соответствующий момент времени. Примечание В первом наборе входных данных исходный массив состоит из чисел \([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\). Определите, какое наименьшее и наибольшее значение красоты можно получить, преобразовав данный массив с помощью операций выше. Выходные данные Для каждого из наборов входных данных выведите два числа — минимальное и максимальное значение красоты, которые можно получить. Примечание В первом наборе входных данных красота массива не меняется при выполнении операций замены. Во втором наборе входных данных для достижения максимальной красоты можно оставить массив без изменений, а для достижения минимальной — объединить элементы \(4\) и \(11\), получив массив \([6, 15]\), красота которого равна \(7\).
| |
|
|
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)\) существует, то он единственный. Выходные данные Для каждого набора входных данных выведите \(LCM(s, t)\), если он существует; в противном случае выведите -1. Можно показать, что если \(LCM(s, t)\) существует, то он единственный. Примечание В первом примере «baba» = «baba» \(\cdot~1~=\) «ba» \(\cdot~2\). Во втором примере, «aaaaaa» = «aa» \(\cdot~3~=\) «aaa» \(\cdot~2\).
| |
|
|
B. Различные делители
Бинарный поиск
Конструктив
математика
*1000
теория чисел
жадные алгоритмы
Число \(x\) называется делителем числа \(y\), если \(y\) делится на \(x\) без остатка. Например, \(1\) является делителем \(7\), а \(3\) не является делителем \(8\). Мы дали Вам число \(d\) и попросили найти наименьшее положительное целое \(a\), обладающее следующими свойствами: - у числа \(a\) есть хотя бы \(4\) делителя;
- разность между любыми двумя различными делителями \(a\) не меньше \(d\).
Выходные данные Для каждого набора входных данных выведите одно целое число \(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\).
| |
|
|
A. Нечетный делитель
математика
*900
теория чисел
Вам дано целое число \(n\). Проверьте, есть ли у \(n\) нечетный делитель, отличный от единицы (существует ли такое число \(x\) (\(x > 1\)), что \(n\) делится на \(x\) и \(x\) нечетно). Например, если \(n=6\), то существует \(x=3\). Если же \(n=4\), то такого числа не существует. Выходные данные Для каждого набора входных данных в отдельной строке выведите: - «YES», если у \(n\) есть нечетный делитель отличный от единицы;
- «NO» в противном случае.
Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).
| |
|
|
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\) стал красивым. Выходные данные Для каждого набора входных данных выведите одно целое число — минимальное число элементов массива, которые необходимо удалить, чтобы массив \(a\) стал красивым. Примечание В первом наборе входных данных удаление элементов \(7\) и \(14\) сделает массив \(a\) красивым. Во втором наборе входных данных массив \(a\) уже является красивым. В третьем наборе входных данных удаление одного из элементов \(45\) или \(18\) сделает массив \(a\) красивым. В четвертом наборе входных данных массив \(a\) уже является красивым.
| |
|
|
A. Nezzar и доска
Конструктив
математика
теория чисел
*1800
На доске написаны \(n\) различных целых чисел \(x_1,x_2,\ldots,x_n\). Nezzar может сделать следующую операцию несколько раз. - Выбрать два числа \(x,y\) (не обязательно различных) на доске и записать на доске число \(2x-y\). Обратите внимание, что он не убирает выбранные числа.
Nezzar интересуется, может ли его любимое число \(k\) оказаться на доске после того, как он выполнит эту операцию несколько раз. Выходные данные Для каждого набора входных данных в собственной строке выведите «YES», если число \(k\) может оказаться на доске. Иначе выведите «NO». Вы можете вывести каждый символ в любом регистре (верхнем или нижнем). Примечание В первом наборе входных данных число \(1\) уже написано на доске. Во втором наборе входных данных Nezzar может выполнить следующие операции, чтобы написать число \(k=0\) на доску: - Выбрать \(x=3\) и \(y=2\) и написать \(4\) на доску.
- Выбрать \(x=4\) и \(y=7\) и написать \(1\) на доску.
- Выбрать \(x=1\) и \(y=2\) и написать \(0\) на доску.
В третьем наборе входных данных невозможно получить число \(k = -1\) на доске.
| |
|
|
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\) при заданных ограничениях задачи. Выходные данные Выведите одно целое число — ожидаемое количество дней, пока все студенты не окажутся в одном клубе впервые, по модулю \(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. Прибавляй и дели
Перебор
математика
*1000
теория чисел
жадные алгоритмы
У вас есть два положительных целых числа \(a\) и \(b\). Вы можете выполнять операции двух видов: - \(a = \lfloor \frac{a}{b} \rfloor\) (заменить \(a\) на целую часть от деления \(a\) на \(b\))
- \(b=b+1\) (увеличить \(b\) на \(1\))
Найдите минимальное количество операций, которое нужно, чтобы сделать \(a=0\). Выходные данные Для каждого набора входных данных выведите единственное целое число: минимальное количество операций, которое нужно, чтобы сделать \(a=0\). Примечание В первом наборе входных данных одно из оптимальных решений — следующее. - Поделить \(a\) на \(b\). После этой операции \(a = 4\) и \(b = 2\).
- Поделить \(a\) на \(b\). После этой операции \(a = 2\) и \(b = 2\).
- Увеличить \(b\). После этой операции \(a = 2\) и \(b = 3\).
- Поделить \(a\) на \(b\). После этой операции \(a = 0\) и \(b = 3\).
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите ответ в единственной строке. Примечание В первом наборе входных данных единственная специальная пара — это \((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\) целых чисел. \(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\)-м часу. Выходные данные Для каждого набора входных данных, выведите одно число — номер места, где кот 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]\).
| |
|
|
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\) таких, что они являются пифагоровыми как по его формуле, так и по настоящему определению? Он попросил вас посчитать количество таких троек. Выходные данные Для каждого теста выведите одно целое число — количество троек целых чисел \((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. Раскраска чисел
Структуры данных
теория чисел
*особая задача
жадные алгоритмы
*2500
Задано \(n\) целых чисел, каждое целое число от \(1\) до \(n\), все числа попарно различны. Вы должны покрасить их в красный и синий цвета (каждое целое число должно иметь ровно один цвет). Стоимость покраски — это количество пар \((x, y)\) таких, что \(y \bmod x = 0\), \(y\) красный и \(x\) синий. Для каждого \(k \in [1, n]\) вычислите максимальную стоимость покраски, если ровно \(k\) целых чисел красные. Выходные данные Для каждого \(k \in [1,n]\) выведите одно целое число — максимальная стоимость покраски, если ровно \(k\) целых чисел красные.
| |
|
|
E. Фиб-дерево
Деревья
Перебор
теория чисел
поиск в глубину и подобное
*2400
разделяй и властвуй
Пусть \(F_k\) обозначает \(k\)-й член последовательности Фибоначчи, определенной следующим образом: - \(F_0 = F_1 = 1\)
- для любого целого \(n \geq 0\), \(F_{n+2} = F_{n+1} + F_n\).
Вам дано дерево с \(n\) вершинами. Напомним, что дерево — это связный неориентированный граф без циклов. Дерево называется Фиб-деревом, если его количество вершин равно \(F_k\) для некоторого \(k\), и выполняется хотя бы одно из следующих условий: - Дерево состоит только из \(1\) вершины;
- Вы можете разделить его на два Фиб-дерева, удалив некоторое ребро дерева.
Определите, является ли данное дерево Фиб-деревом. Выходные данные Выведите «YES», если данное дерево является Фиб-деревом, или «NO», если не является. Ответ можно вывести в любом регистре. Например, если ответ «YES», то вывод «Yes» или «yeS» также будет считаться правильным ответом. Примечание В первом примере можно удалить ребро \((1, 2)\), и дерево будет разбито на \(2\) дерева размера \(1\) и \(2\) соответственно. Любое дерево размера \(2\) является Фиб-деревом, так как его можно разбить на \(2\) дерева размером \(1\). Во втором примере, независимо от того, какое ребро мы удаляем, дерево будет разбито на \(2\) дерева размера \(1\) и \(4\). Поскольку \(4\) не равняется \(F_k\) ни для какого \(k\), это не Фиб-дерево. В третьем примере, вот один из возможных порядков удаления ребер, чтобы все деревья в процессе были Фиб-деревьями: \((1, 3), (1, 2), (4, 5), (3, 4)\).
| |
|
|
D. НОД массива
Перебор
Структуры данных
математика
реализация
*2100
теория чисел
сортировки
хэши
Дан массив \(a\) длины \(n\). Требуется обработать \(q\) запросов следующего вида: даны два целых числа \(i\) и \(x\), необходимо умножить элемент \(a_i\) на \(x\). После обработки каждого запроса нужно вывести наибольший общий делитель (НОД) всех чисел массива \(a\). Так как ответ может быть слишком большим, вам требуется вывести его по модулю \(10^9+7\). Выходные данные Выведите \(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}\) обозначает наибольший общий делитель.
| |
|
|
F. Заколдованная матрица
теория чисел
*2600
битмаски
интерактив
Это интерактивная задача. Есть матрица \(a\) размера \(n \times m\) (\(n\) строк и \(m\) столбцов), вам известны только числа \(n\) и \(m\). Строки матрицы пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы от \(1\) до \(m\) слева направо. Клетка матрицы на пересечении строки \(x\) и столбца \(y\) обозначается как \((x, y)\). Необходимо найти количество пар \((r, c)\) (\(1 \le r \le n\), \(1 \le c \le m\), \(r\) — делитель \(n\), \(c\) — делитель \(m\)) таких, что если разбить матрицу на прямоугольники \(r \times c\) (высотой \(r\) строк и шириной \(c\) столбцов, каждая клетка принадлежит ровно одному прямоугольнику), все эти прямоугольники будут попарно равны между собой. Вам доступны следующие запросы: - ? \(h\) \(w\) \(i_1\) \(j_1\) \(i_2\) \(j_2\) (\(1 \le h \le n\), \(1 \le w \le m\), \(1 \le i_1, i_2 \le n\), \(1 \le j_1, j_2 \le m\)) — узнать, равны ли непересекающиеся подпрямоугольники матрицы \(a\) высотой \(h\) строк и шириной \(w\) столбцов, левая верхняя клетка первого из которых — \((i_1, j_1)\); левая верхняя клетка второго подпрямоугольника — \((i_2, j_2)\). Подпрямоугольники пересекаются, если у них есть хотя бы одна общая клетка. Если подпрямоугольники в вашем запросе будут иметь некорректные координаты (например, выходить за границы матрицы) или пересекаться, ваше решение будет считаться неверным.
Вы можете сделать не более \( 3 \cdot \left \lfloor{ \log_2{(n+m)} } \right \rfloor\) запросов. Все элементы матрицы \(a\) зафиксированы до запуска вашей программы и не зависят от ваших запросов. Выходные данные Когда будете готовы, выведите строку, содержащую восклицательный знак («!») и затем ответ на задачу — количество подходящих пар \((r, c)\). После этого ваша программа должна завершиться. Протокол взаимодействия Чтобы сделать запрос, выведите строку вида «? \(h\) \(w\) \(i_1\) \(j_1\) \(i_2\) \(j_2\)», в которой целые числа — высота, ширина и координаты верхних левых углов непересекающихся прямоугольников, про которые вы хотите узнать, равны они или нет. После каждого запроса считайте одно целое число \(t\) (\(t\) равно \(0\) или \(1\)). Если заданные подпрямоугольники равны, \(t=1\), иначе \(t=0\). В случае, если ваш запрос имеет неверный формат, или вы сделали более \(3 \cdot \left \lfloor{ \log_2{(n+m)} } \right \rfloor\) запросов, вы получите вердикт «Неправильный ответ». После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте: - fflush(stdout) или cout.flush() в C++;
- System.out.flush() в Java;
- flush(output) в Pascal;
- stdout.flush() в Python;
- смотрите документацию для других языков.
Гарантируется, что матрица \(a\) зафиксирована и не будет меняться в процессе взаимодействия. Формат взломов Для взломов необходимо использовать следующий формат. В первой строке находятся два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1000\)) — количество строк и столбцов в матрице соответственно. В каждой из следующих \(n\) строк находятся по \(m\) целых чисел — элементы матрицы \(a\). Все элементы матрицы должны являться целыми числами между \(1\) и \(n \cdot m\) включительно. Примечание В тесте из примера матрица \(a\) размера \(3 \times 4\) следующая: 1 2 1 2 3 3 3 3 2 1 2 1
| |
|
|
D. Гений
дп
теория чисел
графы
битмаски
*2500
Обратите внимание на нестандартное ограничение по памяти. Есть \(n\) задач, пронумерованных целыми числами от \(1\) до \(n\). У \(i\)-й задачи есть сложность \(c_i = 2^i\), тэг \(tag_i\) и счёт \(s_i\). После задачи с номером \(i\) можно решить задачу с номером \(j\) только в том случае, если \(\text{IQ} < |c_i - c_j|\) и \(tag_i \neq tag_j\). После этого \(\text{IQ}\) меняется и становится равным \(\text{IQ} = |c_i - c_j|\) и вы набираете \(|s_i - s_j|\) очков. Первой можно решить любую задачу. Задачи можно решать в любом порядке, каждую сколько угодно раз. Изначально \(\text{IQ} = 0\). Найдите максимальное количество очков, которое можно набрать. Выходные данные Для каждого набора входных данных выведите одно число — максимальное количество очков, которое можно набрать. Примечание В первом наборе входных данных оптимальная последовательность решения задач такая: - \(1 \rightarrow 2\), после этого суммарный счёт равен \(5\) и \(\text{IQ} = 2\)
- \(2 \rightarrow 3\), после этого суммарный счёт равен \(10\) и \(\text{IQ} = 4\)
- \(3 \rightarrow 1\), после этого суммарный счёт равен \(20\) и \(\text{IQ} = 6\)
- \(1 \rightarrow 4\), после этого суммарный счёт равен \(35\) и \(\text{IQ} = 14\)
Во втором наборе входных данных оптимальная последовательность решения задач такая: - \(1 \rightarrow 2\), после этого суммарный счёт равен \(5\) и \(\text{IQ} = 2\)
- \(2 \rightarrow 3\), после этого суммарный счёт равен \(10\) и \(\text{IQ} = 4\)
- \(3 \rightarrow 4\), после этого суммарный счёт равен \(15\) и \(\text{IQ} = 8\)
- \(4 \rightarrow 1\), после этого суммарный счёт равен \(35\) и \(\text{IQ} = 14\)
В третьем наборе входных данных оптимальная последовательность решения задач такая: - \(1 \rightarrow 3\), после этого суммарный счёт равен \(17\) и \(\text{IQ} = 6\)
- \(3 \rightarrow 4\), после этого суммарный счёт равен \(35\) и \(\text{IQ} = 8\)
- \(4 \rightarrow 2\), после этого суммарный счёт равен \(42\) и \(\text{IQ} = 12\)
| |
|
|
E1. Бесквадратное разбиение (простая версия)
Структуры данных
математика
дп
теория чисел
жадные алгоритмы
*1700
Это простая версия задачи. Единственное отличие — в этой версии задачи \(k = 0\). Дан массив \(a_1, a_2, \ldots, a_n\) из \(n\) положительных целых чисел. Необходимо разбить его на наименьшее количество непрерывных отрезков так, чтобы ни на каком отрезке не было двух чисел (на разных позициях), произведение которых является полным квадратом. При этом до разбиения разрешается сделать не более \(k\) раз следующую операцию: выбрать любое число в массиве и заменить его значение на произвольное целое положительное число. Но в этой версии задачи \(k = 0\), поэтому это не важно. Какое наименьшее количество непрерывных отрезков нужно использовать, если сделать изменения оптимально? Выходные данные Для каждого набора входных данных выведите одно число — ответ на задачу. Примечание В первом наборе входных можно сделать такое разбиение: - \([18, 6]\)
- \([2, 4]\)
- \([1]\)
| |
|
|
E2. Бесквадратное разбиение (сложная версия)
Структуры данных
математика
дп
теория чисел
жадные алгоритмы
*2500
Это сложная версия задачи. Единственное отличие — в этой версии задачи \(0 \leq k \leq 20\). Дан массив \(a_1, a_2, \ldots, a_n\) из \(n\) положительных целых чисел. Необходимо разбить его на наименьшее количество непрерывных отрезков так, чтобы ни на каком отрезке не было двух чисел (на разных позициях), произведение которых является полным квадратом. При этом до разбиения разрешается сделать не более \(k\) раз следующую операцию: выбрать любое число в массиве и заменить его значение на произвольное целое положительное число. Какое наименьшее количество непрерывных отрезков нужно использовать, если сделать изменения оптимально? Выходные данные Для каждого набора входных данных выведите одно число — ответ на задачу. Примечание В первом наборе входных данных можно сначала изменить массив следующим образом: \([\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]\)
| |
|
|
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\). Выходные данные Для каждого тестового случая выведите одно целое число — количество пар (\(a, b\)), таких, что выполняется вышеописанное равенство. Примечание В первом примере корректные пары: (\(1, 4\)), (\(4,1\)), (\(3, 6\)), (\(6, 3\)). Во втором примере корректные пары: (\(1, 2\)), (\(2, 1\)), (\(3, 3\)).
| |
|
|
A. Победи или замерзни
математика
теория чисел
*1400
игры
Вы даже не представляете себе, как же холодно нашим друзьям этой зимой в городе XXXводске! Чтобы согреться, двое из них играют в следующую игру. Изначально на бумажке написано одно целое число q. Своим ходом игрок должен написать любое число, являющееся нетривиальным делителем последнего из написанных чисел, после чего он должен столько раз пробежать вокруг гостиницы. Напоминаем, что делитель числа называется нетривиальным, если он отличен от единицы и от самого делимого числа. Тот, кто первым не может сделать ход, выигрывает, так как он остается лежать в теплой кроватке под тремя одеялами, пока другой еще наворачивает круги. Определите, кто выигрывает при оптимальной игре обоих, и, если выигрывает первый игрок, то выведите любой выигрышный первый ход. Выходные данные В первой строке выведите номер игрока-победителя (1 или 2). Если побеждает первый игрок, то во второй строке должно находиться еще одно целое число — его первый ход (если первый игрок не может сделать даже первый ход, выведите 0). Если решений несколько, выведите любое. Примечание Число 6 имеет только два нетривиальных делителя: 2 и 3. Из чисел 2 и 3 ходов сделать уже нельзя, поэтому они оба являются выигрышными, а значит число 6 проигрышное. Из числа 30 можно сделать ход в число 6, которое, как мы уже знаем, проигрышное, значит этот ход принесет нам победу.
| |
|
|
B. Две люстры
Бинарный поиск
Перебор
математика
теория чисел
*2200
китайская теорема об остатках
Вася — директор крупной строительной компании. Как и у всякого большого начальника у него есть большой, солидно обставленный кабинет, в котором висят две хрустальные люстры. Так сложилось, что Васе проще думать, если свет в комнате каждый день разного цвета. Когда Вася отдавал распоряжение о том, как именно оформлять его кабинет, он также указал, что ему нужны две таких люстры, чтобы в них каждый день цвет освещения изменялся по какому-нибудь циклу. Например, по такому: красный – коричневый – желтый – красный – коричневый – желтый, и так по кругу. В продаже было несколько люстр, отличающихся друг от друга набором цветов в цикле или порядком. По какой-то ошибке, а может из-за невнимательности, человек, ответственный за выбор люстр, купил две разные люстры. Из-за того, что люстры разные, в некоторые дни они будут светить одинаково, а в некоторые — по-разному. Естественно, это не солидно, и вообще раздражает Васю, так что когда в \(k\)-й раз наступит событие «сегодня люстры светят разными цветами», Вася очень разозлится и кого-то уволит (вероятно, сотрудника, купившего люстры). Ваша задача – понять, на какой день, начиная со дня установки люстр, это случится. Считайте, что Вася очень любит работать, поэтому работает каждый день, без праздников и выходных. Выходные данные Выведите одно число — через сколько дней Вася очень разозлится. Примечание В первом тесте из условия люстры будут гореть разными цветами в дни \(1\), \(2\), \(3\) и \(5\). Соответственно ответом является \(5\).
| |
|
|
B. DMCA
реализация
*1600
теория чисел
*особая задача
Многие знают о DMCA – Digital Millennium Copyright Act (Закон об авторском праве в цифровую эпоху). Но мало кто знает о другом недавно предложенном DMCA – Digital Millennium Calculation Act (Закон о вычислениях в цифровую эпоху). В этой задаче вам нужно найти корень числа в соответствии с этим новым законом. Выходные данные Выведите ответ – целое число.
| |
|
|
D. Xenolith? Hippodrome?
теория чисел
*особая задача
*1800
Выходные данные Выведите «YES» или «NO».
| |
|
|
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\). Если возможны несколько ответов, то выведите любой из них. Выходные данные На каждый набор входных данных выведите два целых положительных числа — \(x\) и \(y\) (\(x > 0\), \(y > 0\)) такие, что: - десятичная запись \(x\) без лидирующих нулей состоит из \(a\) цифр;
- десятичная запись \(y\) без лидирующих нулей состоит из \(b\) цифр;
- десятичная запись \(gcd(x, y)\) без лидирующих нулей состоит из \(c\) цифр.
Примечание В примере: - \(gcd(11, 492) = 1\)
- \(gcd(13, 26) = 13\)
- \(gcd(140133, 160776) = 21\)
- \(gcd(1, 1) = 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\). Выходные данные Для каждого набора входных данных выведите: - «-1», если не существует \(n\), такого что \(d(n) = c\);
- \(n\), иначе.
| |
|
|
D. НОД и МОД
Конструктив
теория чисел
*2000
жадные алгоритмы
сортировки
графы
снм
Вам дан массив \(a\) из \(n\) (\(n \geq 2\)) положительных целых чисел, а также целое число \(p\). Рассмотрим неориентированный взвешенный граф на \(n\) вершинах, пронумерованных от \(1\) до \(n\), в котором между вершинами \(i\) и \(j\) (\(i<j\)) добавлены следующие ребра: - Если \(gcd(a_i, a_{i+1}, a_{i+2}, \dots, a_{j}) = min(a_i, a_{i+1}, a_{i+2}, \dots, a_j)\), то между вершинами \(i\) и \(j\) существует ребро веса \(min(a_i, a_{i+1}, a_{i+2}, \dots, a_j)\).
- Если \(i+1=j\), то между вершинами \(i\) и \(j\) существует ребро веса \(p\).
Здесь \(gcd(x, y, \ldots)\) обозначает наибольший общий делитель (НОД) чисел \(x\), \(y\), .... Обратите внимание, между вершинами \(i\) и \(j\) появляются кратные ребра, если оба условия выполнены. Если же ни одно условие не выполнено для \(i\) и \(j\), то между ними нет ребер. Ваша цель — найти вес минимального остовного дерева данного графа. Выходные данные Выведите \(t\) строк. Для каждого набора входных данных выведите вес соответствующего минимального остовного дерева. Примечание Ниже изображены графы для четырех наборов входных данных примера (ребра одного из минимальных остовных деревьев показаны розовым): Набор 1 Набор 2 Набор 3 Набор 4
| |
|
|
A. Идеально неидеальный массив
математика
теория чисел
*800
Вам дан массив \(a\) длины \(n\). Скажите, существует ли непустая подпоследовательность этого массива такая, что произведение ее элементов не является полным квадратом. Последовательность \(b\) является подпоследовательностью массива \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, ни одного) элементов. Выходные данные Если существует подпоследовательность массива \(a\), произведение элементов которой не является полным квадратом, выведите «YES». Иначе, выведите «NO». Примечание В первом примере, произведение элементов всего массива (\(20\)) не является полным квадратом. Во втором примере, произведение элементов любой подпоследовательности является полным квадратом.
| |
|
|
C. Произведение 1 по модулю N
*1600
теория чисел
жадные алгоритмы
А вот первые слова маленького Эхаба: «Дано целое число \(n\), найдите самую длинную подпоследовательность массива \([1,2, \ldots, n-1]\), произведение элементов которой равно \(1\) по модулю \(n\)». Решите эту задачу. Последовательность \(b\) является подпоследовательностью массива \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, всех) элементов. Произведение элементов пустой подпоследовательности равно \(1\). Выходные данные В первой строке выведите длину найденной подпоследовательности. Во второй строке выведите элементы подпоследовательности в возрастающем порядке. Если существует несколько ответов, выведите любой. Примечание В первом примере произведение элементов равно \(6\), что равно \(1\) по модулю \(5\). Единственная более длинная последовательность это \([1,2,3,4]\). Произведение ее элементов равно \(24\), что равно \(4\) по модулю \(5\). Поэтому, ответ это \([1,2,3]\).
| |
|
|
B. Феникс и пазл
Перебор
математика
*1000
геометрия
теория чисел
Феникс играет с новым пазлом, который состоит из \(n\) одинаковых фрагментов. Каждый фрагмент — это равнобедренный прямоугольный треугольник, как показано ниже. Фрагмент пазла Цель пазла — собрать квадрат, используя \(n\) фрагментов. Феникс может поворачивать и двигать фрагменты как хочет, но фрагменты нельзя накладывать друг на друга и все \(n\) фрагментов должны быть использованы (конечно же, в квадрате не должно быть никаких прогалов). Может ли Феникс решить пазл? Выходные данные Для каждого набора, если Феникс может собрать квадрат из \(n\) фрагментов, выведите YES. Иначе, выведите NO. Примечание Для \(n=2\), Феникс может собрать следующий квадрат: Для \(n=4\), Феникс может собрать такой квадрат: Для \(n=6\), Феникс не сможет собрать квадрат.
| |
|
|
G. Феникс и одометры
математика
теория чисел
поиск в глубину и подобное
графы
*2700
В городе Огня, есть \(n\) перекрестков и \(m\) односторонних дорог: \(i\)-я дорога ведет от перекрестка \(a_i\) к \(b_i\) и имеет длину \(l_i\) миль. Также есть \(q\) машин, которые могут передвигаться только по этим дорогам. Машина \(i\) стоит у перекрестка \(v_i\) и оборудована одометром с начальным значением \(s_i\), который увеличивается на один за каждую пройденную милю и сбрасывается в \(0\) когда достигает значения \(t_i\). Фениксу дано задание покататься на машинах по каким-то дорогам (возможно, совсем не двигаться) и вернуться к стартовому перекрестку с одометром, сброшенным в \(0\). Для каждой машины определите, возможно ли это. Машина может посещать одни и те же перекрестки и ездить по одним и тем же дорогам произвольное количество раз. Одометры не прекращают считать пройденное расстояние после сброса, а потому одометры можно сбрасывать произвольное количество раз. Выходные данные Выведите \(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\), а поэтому нет необходимости куда-то ехать. Ниже представлена иллюстрация второго примера:
| |
|
|
D. Ехаб разрезает массив
Бинарный поиск
Структуры данных
*2100
дп
теория чисел
графы
В этот раз Ехаб решил только разрезать массив. Он начинает с массива \(a\) длины \(n\), записанного на полоске бумаги, и делает следующее: - Ехаб выбирает отрезок \((l, r)\) и вырезает отрезок с элементами \(a_l, a_{l + 1}, \ldots, a_r\), выбрасывая остальные элементы.
- Затем он разрезает его на несколько подотрезков.
- Чтобы добавить интереса в это занятие, он требует, чтобы произведение элементов на каждом подотрезке было равно их наименьшему общему кратному (НОК).
Формально, он разбивает элементы \(a_l, a_{l + 1}, \ldots, a_r\) на подотрезки так, чтобы произведение элементов каждого подотрезка было равно НОК элементов этого подотрезка. У Ехаба есть \(q\) независимых отрезков \((l, r)\), для которых он хочет узнать, на какое минимальное число подотрезков их необходимо разрезать, чтобы условие выполнялось. Выходные данные Для каждого запроса выведите ответ на него. Примечание Первый запрос спрашивает про весь массив. Вы можете разделить его так: \([2]\), \([3,10,7]\), и \([5,14]\). Произведение и НОК первого подотрезка равны \(2\). Произведение и НОК второго подотрезка равны \(210\). И произведение и НОК третьего подотрезка равны \(70\). Существует другое возможное разделение: \([2,3]\), \([10,7]\), и \([5,14]\). Второй запрос спрашивает про отрезок \((2,4)\). Его произведение уже равно его НОК, следовательно, не нужно делить его ни разу. Последний запрос про отрезок \((3,5)\). Вы можете разделить его на \([10,7]\) и \([5]\).
| |
|
|
C. Берляндский отбор
Перебор
Структуры данных
теория чисел
*1400
жадные алгоритмы
сортировки
Поликарп организует региональные ICPC соревнования в Берляндии. Всего в Берляндии \(n\) университетов, пронумерованных от \(1\) до \(n\). Поликарп знает всех спортивных программистов в регионе. Всего \(n\) студентов: \(i\)-й студент учится в университете \(u_i\), а его навык программирования оценивается величиной \(s_i\). Поликарп сейчас думает над правилами регионального соревнования. В частности, над количеством участников в командах. Поликарп знает, что если он выберет размер команды, как некоторое целое число \(k\), то каждый университет отправит \(k\) своих самых сильных (с наибольшей величиной навыка \(s\)) студентов в первой команде, следующие \(k\) — во второй команде и так далее. Если остается меньше \(k\) студентов, то команду нельзя собрать. Обратите внимание, что некоторые университеты могут отправить ноль команд. Сила региона определяется, как суммарная величина навыков участников всех команд. Если ни одной команды нет, то сила равна \(0\). Помогите Поликарпу найти силу региона для каждого \(k\) от \(1\) до \(n\). Выходные данные На каждый набор входных данных выведите \(n\) целых чисел: силу региона — суммарную величину навыка программирования участников команд — для каждого выбора размера команды \(k\). Примечание В первом наборе входных данных команды университетов для каждого \(k\): - \(k=1\):
- университет \(1\): \([6], [5], [5], [3]\);
- университет \(2\): \([8], [1], [1]\);
- \(k=2\):
- университет \(1\): \([6, 5], [5, 3]\);
- университет \(2\): \([8, 1]\);
- \(k=3\):
- университет \(1\): \([6, 5, 5]\);
- университет \(2\): \([8, 1, 1]\);
- \(k=4\):
- университет \(1\): \([6, 5, 5, 3]\);
| |
|
|
B. Заурядные числа
Перебор
математика
теория чисел
*800
Назовем целое положительное число \(n\) заурядным, если в десятичной системе счисления все его цифры одинаковые. Например числа \(1\), \(2\) и \(99\) являются заурядными числами, а \(719\) и \(2021\) не являются заурядными числами. Для заданного числа \(n\) найдите количество заурядных чисел среди чисел от \(1\) до \(n\). Выходные данные Для каждого набора входных данных выведите одно целое число — количество заурядных чисел среди чисел от \(1\) до \(n\).
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите: - «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\) наборов входных данных в первой строке выведите одно целое число \(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]\) — хороший массив. Во втором наборе входных данных исходный массив уже является хорошим.
| |
|
|
A. Зельеварение
математика
теория чисел
*800
У вас есть первоначально пустой чан, и вы хотите сварить в нем зелье. Зелье состоит из двух ингредиентов: магическая эссенция и вода. Но чтобы зелье получилось хорошим, вам нужно, чтобы магическая эссенция составляла ровно \(k\ \%\) от полного объема зелья, а вода — \((100 - k)\ \%\). За один шаг вы можете налить в чан либо один литр эссенции, либо один литр воды. Через какое минимальное количество шагов вы получите хорошее зелье? Вас не волнует количество полученного зелья, а только соотношение между количеством эссенции и воды. Небольшое напоминание: если вы нальете в чан \(e\) литров эссенции и \(w\) литров воды (\(e + w > 0\)), то магическая эссенция будет составлять ровно \(\frac{e}{e + w} \cdot 100\ \%\) (без округления) от всего объема зелья, а вода — \(\frac{w}{e + w} \cdot 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\ \%\). Выходные данные Для каждого набора входных данных выведите минимальное количество шагов, за которое можно получить хорошее зелье. Можно доказать, что всегда можно получить хорошее зелье за конечное количество ходов. Примечание В первом наборе входных данных вы можете налить \(3\) литра магической эссенции и \(97\) литров воды в чан, чтобы получить зелье с \(3\ \%\) эссенции. Во втором наборе вы можете налить лишь \(1\) литр магической эссенции и получить зелье со \(100\ \%\) эссенции. В третьем наборе вы можете налить \(1\) литр эссенции и \(3\) литра воды.
| |
|
|
B. Я ненавижу 1111
математика
дп
теория чисел
*1400
Вам дано целое число \(x\). Можете ли вы получить \(x\), просуммировав некоторое количество \(11, 111, 1111, 11111, \ldots\)? (Вы можете использовать любое число среди них любое количество раз). Например, - \(33=11+11+11\)
- \(144=111+11+11+11\)
Выходные данные Для каждого набора входных данных вы должны вывести одну строку. Если вы можете получить \(x\), выведите «YES» (без кавычек). В противном случае выведите «NO». Вы можете вывести каждую букву из «YES» и «NO» в любом регистре (верхнем или нижнем). Примечание Cпособы получения \(33\) и \(144\) были представлены в условии. Можно показать, что мы не можем представить \(69\) таким образом.
| |
|
|
B. Переупорядочение массива
Перебор
математика
*900
теория чисел
жадные алгоритмы
сортировки
Вам задан массив \(a\), состоящий из \(n\) целых чисел. Назовем пару индексов \(i\), \(j\) хорошей, если \(1 \le i < j \le n\) и \(\gcd(a_i, 2a_j) > 1\) (где \(\gcd(x, y)\) — наибольший общий делитель чисел \(x\) и \(y\)). Найдите максимальное количество хороших пар индексов, если вы можете переупорядочить элементы массива \(a\) произвольным образом. Выходные данные Для каждого набора выходных данных выведите одно целое число — максимальное количество хороших пар индексов после переупорядочивания элементов массива \(a\). Примечание В первом примере из условия элементы массива можно переставить следующим образом: \([6, 3, 5, 3]\). В третьем примере из условия элементы массива можно переставить следующим образом: \([4, 4, 2, 1, 1]\).
| |
|
|
C. Diluc и Kaeya
Структуры данных
дп
*1500
теория чисел
хэши
Магнат винодельческой империи в Мондштадте, непревзойденный во всех отношениях. Мыслитель из рыцарей Фавониуса с экзотической внешностью}. На этот раз братья имеют дело со странным куском дерева, помеченного их именами. Этот кусок дерева можно представить в виде строки из \(n\) символов. Каждый символ — это либо 'D', либо 'K'. Вы хотите сделать некоторое количество разрезов (возможно, \(0\)) в этой строке, разделив ее на несколько последовательных частей, каждая из которых имеет длину не менее \(1\). Оба брата ведут себя достойно, поэтому они хотят разделить дерево как можно более равномерно. Они хотят знать, на какое максимальное число кусков можно разделить дерево, чтобы отношение числа символов 'D' и числа символов 'K' в каждом куске было одинаковым. Kaeya, любознательный мыслитель, хотел бы знать решение сразу для нескольких сценариев. Он хочет узнать ответ для каждого префикса данной строки. Помогите ему решить эту задачу! Для строки мы определяем отношение как \(a:b\), где 'D' встречается в ней \(a\) раз, а 'K' встречается \(b\) раз. Обратите внимание, что \(a\) или \(b\) могут быть равны \(0\), но не оба. Отношения \(a:b\) и \(c:d\) считаются равными тогда и только тогда, когда \(a\cdot d = b\cdot c\). Например, для строки 'DDD' отношение будет \(3:0\), для 'DKD' — \(2:1\), для 'DKK' — \(1:2\), а для 'KKKKDD' — \(2:4\). Обратите внимание, что отношения двух последних строк равны между собой, но не равны отношениям первых двух строк. Выходные данные Для каждого набора входных данных выведите \(n\) целых чисел через пробел. \(i\)-е из этих чисел должно быть равно ответу для префикса \(s_{1},s_{2},\dots,s_{i}\). Примечание Для первого набора входных данных нет способа разбить 'D' или 'DDK' на более чем один блок с равным отношением количеств 'D' и 'K', в то время как 'DD' можно разбить на 'D' и 'D'. Для второго набора входных данных, каждый префикс длины \(i\) вы можете разделить на \(i\) блоков 'D'.
| |
|
|
D. Удаляя делители
математика
теория чисел
*1700
игры
Алиса и Боб играют в игру. Они начинают с целого положительного числа \(n\) и поочередно выполняют над ним операции. В свой игрок может вычесть из \(n\) один из его делителей, который не равен \(1\) или \(n\). Игрок, который не может сделать ход в свой ход, проигрывает. Алиса всегда ходит первой. Обратите внимание, что в каждый ход они вычитают делитель текущего числа. Вам предлагается выяснить, кто победит в игре, если оба игрока будут играть оптимально. Выходные данные Для каждого набора входных данных выведите «Alice», если Алиса выиграет игру, или «Bob», если выиграет Боб, если оба игрока играют оптимально. Примечание В первом наборе входных данных игра немедленно заканчивается, потому что Алиса не может сделать ход. Во втором наборе входных данных Алиса может вычесть \(2\), получив \(n = 2\), тогда Боб не сможет сделать ход, и Алиса выиграет. В третьем наборе входных данных Алиса может вычесть \(3\), получив \(n = 9\). Единственный ход Боба — вычесть \(3\) и сделать \(n = 6\). Теперь Алиса может снова вычесть \(3\) и получить \(n = 3\). После этого Боб не может сделать ход, и Алиса выигрывает.
| |
|
|
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\) ходов. Выходные данные Для каждого набора входных данных выведите: - «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\). Выходные данные Для каждого набора входных данных вычислите суммарное количество изменённых цифр, если требуется из \(l\) получить \(r\), прибавляя каждый раз единицу.
| |
|
|
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-ый коллайдер уже был выключен.
При выводе ответа на запрос кавычки выводить не нужно. Выходные данные Выведите m строк — результаты выполнения запросов в формате, описанном выше. Запросы необходимо обрабатывать в том порядке, в котором они подаются на вход. Не забудьте, что ответы на запросы требуется выводить без кавычек. Примечание Обратите внимание, что в примере после второго и девятого запросов включения не происходит. На девятый запрос допустимо также вывести «Conflict with 3».
| |
|
|
B. Приятные пары
Перебор
математика
реализация
теория чисел
*1200
Вам задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) различных целых чисел. Посчитайте количество пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i \cdot a_j = i + j\). Выходные данные Для каждого набора выведите количество пар индексов \((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)\).
| |
|
|
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\) множеству. Выходные данные Для каждого набора входных данных выведите «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\). Выходные данные Для каждого набора входных данных выведите единственное целое число \(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\).
| |
|
|
A. Азартные ставки
математика
*900
теория чисел
жадные алгоритмы
Добро пожаловать в Рокпорт-Сити! Пришло время для вашей первой гонки в игре против Ронни. Чтобы сделать гонку интересной, вы поставили \(a\) долларов, а Ронни — \(b\) долларов. Но, похоже, фанаты разочарованы. Азарт фанатов равен \(gcd(a,b)\), где \(gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\). Чтобы сделать гонку более азартной, вы можете выполнять следующие операции: - Увеличить и \(a\), и \(b\) на \(1\).
- Уменьшить и \(a\), и \(b\) на \(1\). Эту операцию разрешено выполнять лишь тогда, когда и \(a\), и \(b\) больше \(0\).
За один шаг вы можете выполнить любую из этих операций. Вы можете сделать любое (в том числе ноль) число шагов. Определите максимальный азарт, который могут испытать фанаты, и минимальное число шагов, необходимое, чтобы его достичь. Обратите внимание, что \(gcd(x,0)=x\) для всех \(x \ge 0\). Выходные данные Для каждого набора входных данных выведите строку, содержащую два целых числа. Если фанаты могут испытать бесконечный азарт, выведите 0 0. В противном случае первое число должно быть равно максимальному азарту, который фанаты могут испытать, а второе — минимальному количеству шагов, необходимому, чтобы достичь этот азарт. Примечание В первом наборе входных данных вы можете проделать первую операцию \(1\) раз, получив \(a=9\) и \(b=6\). Можно показать, что \(3\) – максимальный возможный азарт. Во втором наборе входных данных, независимо от операций, азарт фанатов будет равен \(1\). Поскольку изначальный азарт так же равен \(1\), вам не нужно проделывать никакие операции. В третьем наборе входных данных фанаты могут испытать бесконечный азарт, применяя первую операцию бесконечное количество раз. В четвертом наборе входных данных вы можете применить вторую операцию \(3\) раза, получив \(a=0\) и \(b=6\). Поскольку \(gcd(0,6)=6\), фанаты испытают азарт, равный \(6\).
| |
|
|
F. Стабилизируй массив (НОД-версия)
Бинарный поиск
Перебор
Структуры данных
теория чисел
*1900
разделяй и властвуй
Задан массив из положительных целых чисел \(a = [a_0, a_1, \dots, a_{n - 1}]\) (\(n \ge 2\)). За один шаг массив \(a\) заменяется на другой массив длины \(n\), в котором каждый элемент это наибольший общий делитель (НОД) двух соседних элементов (самого элемента и его правого соседа; считайте, что правый сосед \((n - 1)\)-го элемента это \(0\)-й элемент). Формально говоря, по массиву \(a = [a_0, a_1, \dots, a_{n - 1}]\) строится новый массив \(b = [b_0, b_1, \dots, b_{n - 1}]\) такой, что \(b_i\) \(= \gcd(a_i, a_{(i + 1) \mod n})\), где \(\gcd(x, y)\) — это наибольший общий делитель \(x\) и \(y\), а \(x \mod y\) — это остаток от деления \(x\) на \(y\). За один шаг строится массив \(b\), а затем массив \(a\) заменяется массивом \(b\) (то есть осуществляется присваивание \(a\) := \(b\)). Например, если \(a = [16, 24, 10, 5]\), то \(b = [\gcd(16, 24)\), \(\gcd(24, 10)\), \(\gcd(10, 5)\), \(\gcd(5, 16)]\) \(= [8, 2, 5, 1]\). Таким образом, массив \(a = [16, 24, 10, 5]\) после одного шага станет равен \([8, 2, 5, 1]\). Для заданного массива \(a\) найдите минимальное количество шагов, после которых все значения \(a_i\) станут равными (то есть \(a_0 = a_1 = \dots = a_{n - 1}\)). Если изначально массив \(a\) уже состоял из одинаковых элементов, то считайте, что количество шагов равно \(0\). Выходные данные Выведите \(t\) чисел — ответы на наборы входных данных теста.
| |
|
|
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\) строк. Каждая строка должна содержать одно целое число — размер наибольшей группы друзей из \(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\).
| |
|
|
D1. Грегор и нечетные коровы (простая версия)
математика
геометрия
теория чисел
*2300
битмаски
Это простая версия задачи. Единственное отличие от сложной версии заключается в том, что в данной версии все координаты — четные числа. Даны \(n\) столбов, расположенных в различных точках на плоскости. Гарантируется, что никакие три столба не лежат на одной прямой. На плоскости также есть бесконечное количество коров, по одной в каждой точке с целочисленными координатами. Грегор — член общества иллюминатов и хочет построить треугольный загон, соединив \(3\) различных существующих столба забором. Корова, находящаяся строго внутри загона, считается огражденной. Если ограждено нечётное число коров, и при этом площадь загона равна целому числу, то загон считается интересным. Найдите количество интересных загонов. Выходные данные Напечатайте одно целое число — количество интересных загонов. Два загона считаются различными, если они образованы различными множествами трех столбов. Примечание В первом примере существует только \(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\) различных существующих столба забором. Корова, находящаяся строго внутри загона, считается огражденной. Если ограждено нечётное число коров, и при этом площадь загона равна целому числу, то загон считается интересным. Найдите количество интересных загонов. Выходные данные Напечатайте одно целое число — количество интересных загонов. Два загона считаются различными, если они образованы различными множествами трех столбов. Примечание В первом примере существует только \(1\) загон. Этот загон является интересным, поскольку его площадь равна \(4\) и есть \(1\) пойманная корова, помеченная красным. Во втором примере существует \(4\) возможных загона. Однако, только один из них является интересным. Этот загон имеет площадь, равную \(8\), и \(5\) пойманных коров.
| |
|
|
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\) строк. Каждая строка должна содержать два целых числа \(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\).
| |
|
|
H. Угадайте периметр
Бинарный поиск
теория чисел
интерактив
*3300
Назовем точку плоскости допустимой, если ее координаты — положительные целые числа, не превышающие \(200\). Есть невидимый прямоугольник такой, что: - его вершины все допустимы;
- его стороны параллельны координатным осям;
- его площадь строго положительна.
Ваша задача — угадать периметр этого прямоугольника. Для того чтобы его угадать, вы можете задать не более \(4\) запросов. В каждом запросе вы выбираете непустое подмножество допустимых точек, и вам говорят, сколько из выбранных точек находится внутри или на границе невидимого прямоугольника. Протокол взаимодействия Чтобы задать запрос (такой, который описан в утверждении), нужно вывести две строки: - В первой строке выведите «? \(k\)» (без кавычек), где \(k\) (\(k\ge 1\)) — количество выбранных точек.
- Во второй строке выведите \(2k\) целых чисел \(x_1,\, y_1,\, x_2,\, y_2,\, \dots,\, x_k,\, y_k\) (\(1\le x_i,y_i\le 200\) для \(i=1,2,\dots,k\)), где \((x_1, y_1),\,(x_2, y_2),\,(x_3, y_3),\, \dots,\,(x_k, y_k)\) — это \(k\) попарно различных допустимых выбранных точек (порядок точек не важен).
После этого вы должны считать одно целое число — количество выбранных точек, которые находятся внутри или на границе невидимого прямоугольника. Когда вы определите периметр \(p\) невидимого прямоугольника, вы должны вывести «! \(p\)» (без кавычек) и завершить свою программу. Если вы зададите более \(4\) запросов или один из запросов будет некорректным, интерактор немедленно завершит работу, а ваша программа получит вердикт Неправильный ответ. Интерактор может быть адаптивным (т.е. скрытый прямоугольник может быть не выбран до начала взаимодействия). После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте: - fflush(stdout) или cout.flush() в C++;
- System.out.flush() в Java;
- flush(output) в Pascal;
- stdout.flush() в Python;
- смотрите документацию для других языков.
Hacks Чтобы взломать решение, используйте следующий формат. Выведите только одну строку, содержащую \(4\) целых числа \(x_0\), \(y_0\), \(x_1\), \(y_1\) (\(1\le x_0<x_1\le 200\), \(1\le y_0 < y_1 \le 200\)), где \((x_0,y_0)\) — левая нижняя вершина скрытого прямоугольника, \((x_1, y_1)\) - правая верхняя вершина скрытого прямоугольника. Обратите внимание, что для взломов взаимодействие не будет адаптивным. Примечание Ниже приведен пример взаимодействия для первого примера, призванный показать формат запросов. \(\) \begin{array}{l|l|l} \text{Запрос (программа участника)} & \text{Ответ (интерактор)} & \text{Пояснение}\\ \hline \mathtt{?\ 4} & & \text{Мы выбрали $4$ вершины} \\ \mathtt{13\ 5\ 13\ 80\ 123\ 5\ 123\ 80} & \mathtt{4} &\text{скрытого прямоугольника.}\\ \hline \mathtt{?\ 5} & & \text{Мы выбрали $4$ точки за пределами скрытого}\\ \mathtt{100\ 4\ 100\ 81\ 12\ 40\ 124\ 40\ 50\ 50} & \mathtt{1} & \text{прямоугольника, а также точку $(50,50)$.}\\ \hline \mathtt{?\ 2} & & \text{Выбираем точки $(1, 1)$} \\ \mathtt{200\ 200\ 1\ 1} & \mathtt{0} & \text{и $(200,200)$.}\\ \hline \mathtt{!\ 370} & & \text{Это правильный периметр.} \end{array} \(\) Для второго образца, возможное взаимодействие следующее. \(\) \begin{array}{l|l|l|l} \text{Запрос (программа участника)} & \text{Ответ (интерактор)} & \text{Пояснение} \\ \hline \mathtt{?\ 4} & & \text{Мы выбираем точки $(3, 2)$, $(4, 1)$,} \\ \mathtt{3\ 2\ 4\ 1\ 5\ 2\ 4\ 3} & 2 & \text{$(5, 2)$ и $(4, 3)$.} \\ \hline \mathtt{?\ 7} & & \text{Мы выбираем точки $(1, 4)$, $(2, 4)$,} \\\\\ \mathtt{1\ 4\ 2\ 4\ 1\ 5\ 2\ 5\ 5\ 5\ 5\ 5\ 6\ 6\ 5} & 1 & \text{$(1, 5)$, $(2, 5)$, $(5, 5)$, $(5, 6)$ и $(6, 5)$.} \\ \hline \mathtt{!\ 8} & & \text{Это правильный периметр.} \end{array} \(\) Ситуация показана на следующем рисунке: Зеленые точки — это точки, относящиеся к первому запросу, а оранжевые — ко второму. Видно, что существует ровно два прямоугольника, соответствующих ответам собеседника: - прямоугольник вершин \((2, 2)\) и \((4, 4)\), показанный красным цветом;
- прямоугольник из вершин \((4, 2)\) и \((5, 5)\), показанный синим цветом.
Поскольку оба этих прямоугольника имеют периметр \(8\), это и есть окончательный ответ.
| |
|
|
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\) целых чисел, \(i\)-е число должно быть ответом на \(i\)-й набор входных данных. Примечание Первым интересным числом является \(9\).
| |
|
|
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\), заданной во входных данных. Выходные данные Выведите \(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\).
| |
|
|
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\).
Выходные данные Для каждого набора входных данных выведите в одной строке \(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\).
Обратите внимание, что здесь мы считаем количество различных последовательностей, а не количество различных порядков удаления узлов.
| |
|
|
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\) в ячейку \(1\), по модулю \(m\). Примечание В первом тесте есть три способа добраться из ячейки \(3\) в ячейку \(1\) за один сдвиг: с помощью вычитания \(y = 2\), а также с помощью деления на \(z = 2\) или \(z = 3\). Также есть два способа добраться из ячейки \(3\) в ячейку \(1\) через ячейку \(2\): сначала вычесть \(y = 1\), а потом либо снова вычесть \(y = 1\), либо поделить на \(z = 2\). Таким образом, всего способов пять.
| |
|
|
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\). Выходные данные Выведите одно целое число — количество различных математических состояний созвездия по модулю \(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\).
| |
|
|
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\) в ячейку \(1\), по модулю \(m\). Примечание В первом тесте есть три способа добраться из ячейки \(3\) в ячейку \(1\) за один сдвиг: с помощью вычитания \(y = 2\), а также с помощью деления на \(z = 2\) или \(z = 3\). Также есть два способа добраться из ячейки \(3\) в ячейку \(1\) через ячейку \(2\): сначала вычесть \(y = 1\), а потом либо снова вычесть \(y = 1\), либо поделить на \(z = 2\). Таким образом, всего способов пять.
| |
|
|
B. Scenes From a Memory
Перебор
Конструктив
математика
*1000
реализация
теория чисел
Во время сеанса гипноза Николас неожиданно вспомнил целое положительное число \(n\), не содержащее нулей в десятичной записи. Вскоре, когда он уже вернулся домой, ему стало интересно: какое максимальное количество цифр можно удалить из числа так, чтобы оно стало не простым, то есть либо составным, либо равным единице? Помогите ему найти ответ! Для некоторых чисел сделать это невозможно: например, для числа \(53\) невозможно удалить некоторые из его цифр, чтобы получить не простое целое число. Однако, для всех \(n\) в тестах этой задачи гарантируется, что можно удалить некоторые из их цифр, чтобы получить не простое число. Из числа нельзя удалять все цифры. Простым называется число, которое не имеет никаких делителей, кроме единицы и самого себя. Составным называется число, которое имеет более двух делителей. \(1\) не является ни простым, ни составным числом. Выходные данные Для каждого набора входных данных выведите в отдельных двух строках выведите два числа: количество цифр, которое вы оставили в первой строке, и оставшееся после удалений число во второй. Если существует несколько правильных вариантов ответа, вы можете вывести любой. Примечание В первом наборе входных данных нельзя удалить \(2\) цифры из числа \(237\), так как все числа \(2\), \(3\) и \(7\) являются простыми. Однако вы можете удалить \(1\) цифру, получив число \(27 = 3^3\). Во втором наборе входных данных можно удалить все цифры, кроме одной, так как \(4 = 2^2\) — составное число.
| |
|
|
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\). Решите задачу Майка! Протокол взаимодействия Для каждого набора входных данных считайте одно целое число \(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\) различны.
| |
|
|
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\) возможных запросов. Протокол взаимодействия В первой строке вы должны вывести целое число \(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. Cyclic Sum
Структуры данных
теория чисел
*3000
бпф
Denote a cyclic sequence of size \(n\) as an array \(s\) such that \(s_n\) is adjacent to \(s_1\). The segment \(s[r, l]\) where \(l < r\) is the concatenation of \(s[r, n]\) and \(s[1, l]\). You are given an array \(a\) consisting of \(n\) integers. Define \(b\) as the cyclic sequence obtained from concatenating \(m\) copies of \(a\). Note that \(b\) has size \(n \cdot m\). You are given an integer \(k\) where \(k = 1\) or \(k\) is a prime number. Find the number of different segments in \(b\) where the sum of elements in the segment is divisible by \(k\). Two segments are considered different if the set of indices of the segments are different. For example, when \(n = 3\) and \(m = 2\), the set of indices for segment \(s[2, 5]\) is \(\{2, 3, 4, 5\}\), and for segment \(s[5, 2]\) is \(\{5, 6, 1, 2\}\). In particular, the segments \(s[1, 6], s[2,1], \ldots, s[6, 5]\) are considered as the same segment. Output the answer modulo \(10^9 + 7\). Output Output an integer denoting the number of different segments in \(b\) where the sum of elements in the segment is divisible by \(k\), modulo \(10^9 + 7\). Note In the first example, all valid segments are \([1,4]\), \([2, 3]\), \([3, 5]\), and \([4, 2]\). In the second example, one of the valid segments is \([1, 5]\).
| |
|
|
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\)! Output Output an integer denoting the prettiness value of \(a\) modulo \(10^9 + 7\).
| |
|
|
F. Стабилизируй массив (И-версия)
Перебор
математика
теория чисел
*1700
графы
кратчайшие пути
Задан массив из нулей и единиц \(a[0 \ldots n - 1] = [a_0, a_1, \ldots, a_{n - 1}]\). Обратите внимание, что в этой задаче, в отличие от остальных, индексы массива нумеруются с нуля, а не с единицы. За один шаг массив \(a\) заменяется на другой массив длины \(n\) по следующим правилам: - Сначала строится новый массив \(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}]\(\) - Затем каждый элемент массива \(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. Примечание В третьем наборе входных данных из примера с массивом будут происходить следующие изменения: - В начале \(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]\(\)
- Теперь \(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]\(\)
- И, наконец, при \(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, массив никогда не будет состоять только из нулей.
| |
|
|
D. Ледяные скульптуры
Перебор
теория чисел
*особая задача
*1300
Берляндский университет готовится встретить юбилей — ему исполняется 256 лет! Специально назначенный проректор по празднованию готовится украсить университетский городок. В центре городка были воздвигнуты n ледяных скульптур. Скульптуры расположены по кругу на равном расстоянии друг от друга, то есть образуют правильный n-угольник. Они пронумерованы по порядку по часовой стрелке числами от 1 до n. На сайте университета уже успело состояться голосование, по результатам которого каждая скульптура получила характеристику ti — степень своей привлекательности. Величины ti могут быть положительными, нулевыми или отрицательными. Пришедший оценить работу ректор университета отметил, что, возможно, работа выполнена не идеально. Он предложил растопить некоторые скульптуры так, что: - оставшиеся скульптуры будут образовывать правильный многоугольник (с количеством вершин от 3 до n),
- сумма величин ti для оставшихся скульптур будет максимальна.
Помогите проректору по празднованию произвести анализ замечания — найдите максимальное значение суммы ti, которое может быть получено таким способом. Разрешается не растапливать скульптуры вообще. Передвигать скульптуры нельзя. Выходные данные Выведите искомую максимальную сумму привлекательностей скульптур. Примечание В первом примере наиболее оптимально оставить скульптуры через одну, то есть оставить скульптуры с привлекательностями: 2, 4, 5 и 3.
| |
|
|
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\).
Выходные данные Для каждого примера выведите ответ в отдельной строке. Примечание \(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].\)
| |
|
|
G. Кузя и домашнее задание
Структуры данных
теория чисел
*2600
Кузя начал ходить в школу. На уроке математики ему дали домашнее задание. Для этого задания ему выдали массив натуральных чисел \(a\) длины \(n\) и массив символов \(b\) длины \(n\), состоящий только из символов '*' или '/'. Давайте определим траекторию вычислений для отрезка \([l; r]\) (\(1 \le l \le r \le n\)) следующим образом: - Пусть изначально \(x=1\). Для всех \(i\) от \(l\) до \(r\) последовательно выполним следующее: если \(b_i=\) '*', \(x=x*a_i\), а если \(b_i=\) '/', то \(x=\frac{x}{a_i}\). Траекторией вычисления для отрезка \([l; r]\) назовем список всех \(x\), которые были получены в процессе вычислений (их будет ровно \(r - l + 1\)).
Например, пусть \(a=[7,\) \(12,\) \(3,\) \(5,\) \(4,\) \(10,\) \(9]\), \(b=[/,\) \(*,\) \(/,\) \(/,\) \(/,\) \(*,\) \(*]\), \(l=2\), \(r=6\), тогда траектория вычислений для этого отрезка — это \([12,\) \(4,\) \(0.8,\) \(0.2,\) \(2]\). Давайте назовем отрезок \([l;r]\) простым, если траектория вычислений для него содержит только целые числа. Кузе нужно посчитать количество простых отрезков \([l;r]\) (\(1 \le l \le r \le n\)). Так как у него явно нет ни времени, ни желания проводить вычисления для всех вариантов, он попросил вас написать программу, чтобы узнать это количество! Выходные данные В единственной строке выведите одно целое число — количество простых отрезков \([l;r]\).
| |
|
|
A. Ода ветру
математика
теория чисел
*800
Лук, украшенный безымянными цветами, несет в себе искренние надежды столь же безымянного человека. Вы получили элегантный лук, известный как Windblume Ode. В оружие вписан массив из \(n\) (\(n \ge 3\)) положительных попарно различных целых чисел (иными словами, все числа различны). Найдите наибольшее по количеству элементов подмножество этого массива, сумма которого является составным числом. Положительное целое число \(x\) называется составным, если существует положительное целое число \(y\) такое, что \(1 < y < x\) и \(x\) делится на \(y\). Если существует несколько подмножеств с таким наибольшим размером с составной суммой, можно вывести любое из них. Можно доказать, что при ограничениях задачи такое непустое подмножество всегда существует. Выходные данные Для каждого набора входных данных выведите две строки. Первая строка должна содержать одно целое число \(x\): размер наибольшего подмножества с составной суммой. Следующая строка должна содержать \(x\) разделенных пробелами целых чисел, обозначающих позиции элементов выбранного вами подмножества в исходном массиве. Примечание В первом наборе входных данных подмножество \(\{a_2, a_1\}\) имеет сумму \(9\), которая является составным числом. Единственное подмножество размера \(3\) имеет простую сумму, равную \(11\). Обратите внимание, что вы также могли выбрать подмножество \(\{a_1, a_3\}\) с суммой \(8 + 2 = 10\), которое является составным, так как кратно \(2\). Во втором наборе входных данных сумма всех элементов равна \(21\), что является составным числом. Здесь мы просто берем весь массив в качестве подмножества.
| |
|
|
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\) ребер должны образовывать дерево. Примечание Дерево в первом примере приведено ниже: 
| |
|
|
D1. Все одинаковые
математика
теория чисел
*1100
Эта задача является упрощённой версией задачи D2, но при этом имеет существенные отличия, поэтому прочитайте условие полностью. У Поликарпа есть массив из \(n\) (\(n\) — чётное число) целых чисел \(a_1, a_2, \dots, a_n\). Поликарп задумал положительное целое число \(k\). После этого Поликарп стал совершать над массивом операции следующего вида: взять произвольный индекс \(i\) (\(1 \le i \le n\)) и уменьшить число \(a_i\) на \(k\). После того, как Поликарп совершил некоторое (возможно, нулевое) количество таких операций, оказалось, что все числа в массиве стали одинаковыми. Найдите максимальное \(k\), при котором такая ситуация возможна, или выведите \(-1\), если такое число может быть сколь угодно большим. Выходные данные Для каждого набора входных данных в отдельной строке выведите одно целое число \(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\), если такое число может быть сколь угодно большим. Выходные данные Для каждого набора входных данных в отдельной строке выведите одно целое число \(k\) (\(k \ge 1\)) — максимальное возможное число, которое Поликарп использовал в операциях над массивом, или \(-1\), если такое число может быть сколь угодно большим.
| |
|
|
C. Монитор
Бинарный поиск
теория чисел
*1800
Компания Reca выпускает мониторы, большой популярностью пользуется их модель AB999 с размерами экрана a × b сантиметров. Из-за особенностей производства, размеры экрана выражаются целым числом сантиметров. Недавно в моду вошло соотношение сторон x: y. Компания хочет уменьшить размеры экрана своего монитора AB999 так, чтобы его соотношение сторон стало x: y, но при этом его площадь была максимально возможной. Ваша задача — определить размеры экрана уменьшенной модели, или выяснить, что это сделать невозможно. Выходные данные Если решение существует, выведите 2 целых положительных числа — размеры экрана уменьшенной модели, иначе выведите 0 0.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите все значения \(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} \(\)
| |
|
|
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 определить, можно ли удалить всю последовательность с помощью вышеупомянутой операции. Выходные данные Для каждого набора входных данных выведите «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\). Если таких целых чисел несколько, выведите любое. Можно показать, что такое целое число всегда существует при заданных ограничениях. Выходные данные Для каждого набора входных данных выведите одно целое число \(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\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца. Выходные данные Для каждого набора входных данных выведите одно целое число — сумму экстремальных значений по всем подмассивам \(a\), по модулю \(998\,244\,353\). Примечание Пусть \(f(l, r)\) обозначает экстремальное значение в подмассиве \([a_l, a_{l+1}, \ldots, a_r]\). В первом наборе входных данных: - \(f(1, 3) = 3\), потому что YouKn0wWho может выполнить следующие операции над подмассивом \([5, 4, 3]\) (новые вставленные элементы подчеркнуты):
\([5, 4, 3] \rightarrow [\underline{3}, \underline{2}, 4, 3] \rightarrow [3, 2, \underline{2}, \underline{2}, 3] \rightarrow [\underline{1}, \underline{2}, 2, 2, 2, 3]\); - \(f(1, 2) = 1\), потому что \([5, 4] \rightarrow [\underline{2}, \underline{3}, 4]\);
- \(f(2, 3) = 1\), потому что \([4, 3] \rightarrow [\underline{1}, \underline{3}, 3]\);
- \(f(1, 1) = f(2, 2) = f(3, 3) = 0\), потому что они уже неубывающие.
Таким образом, общая сумма экстремальных значений всех подмассивов \(a = 3 + 1 + 1 + 0 + 0 + 0 = 5\).
| |
|
|
D. Художественное разбиние
дп
теория чисел
разделяй и властвуй
*3000
Для двух положительных целых чисел \(l\) и \(r\) (\(l \le r\)) обозначим за \(c(l, r)\) количество пар целых чисел \((i, j)\) таких, что \(l \le i \le j \le r\) и \(\operatorname{gcd}(i, j) \ge l\). Здесь \(\operatorname{gcd}(i, j)\) обозначает наибольший общий делитель (НОД) чисел \(i\) и \(j\). У вас есть два целых числа \(n\) и \(k\), где \(1 \le k \le n\). Пусть \(f(n, k)\) обозначает минимум \(\sum\limits_{i=1}^{k}{c(x_i+1,x_{i+1})}\) по всем последовательностям из целых чисел \(0=x_1 \lt x_2 \lt \ldots \lt x_{k} \lt x_{k+1}=n\). Помогите YouKn0wWho найти \(f(n, k)\). Выходные данные Для каждого набора входных данных выведите одно целое число — \(f(n, k)\). Примечание В первом наборе входных данных YouKn0wWho может выбрать последовательность \([0, 2, 6]\). Тогда \(f(6, 2) = c(1, 2) + c(3, 6) = 3 + 5 = 8\), что является минимально возможным.
| |
|
|
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)\), которое может быть получено после применения операции любое количество раз. Выходные данные Для каждого набора входных данных выведите минимальное значение \(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\)?
Помогите ему, ответив на каждый вопрос. Выходные данные Выведите \(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\).
| |
|
|
C. Банкноты
теория чисел
*1400
жадные алгоритмы
В Берляндии используют банкноты \(n\) различных типов. Банкноты \(i\)-го типа имеют номинал \(10^{a_i}\) бурлей (бурли — валюта, используемая в Берляндии); номинал банкнот первого типа равен \(1\). Давайте обозначим \(f(s)\) как минимальное количество банкнот, необходимое для представления ровно \(s\) бурлей. Например, если номиналы банкнот, используемых в Берляндии, составляют \(1\), \(10\) и \(100\), то \(f(59) = 14\): \(9\) банкнот номиналом \(1\) и \(5\) банкнот номиналом \(10\) могут быть использованы для представления ровно \(9 \cdot 1 + 5 \cdot 10 = 59\) бурлей, и это невозможно сделать меньшим количеством банкнот. Для заданного целого числа \(k\) найдите минимальное положительное число бурлей \(s\), которое не может быть представлено с помощью \(k\) или меньшего количества банкнот (то есть \(f(s) > k\)). Выходные данные Для каждого набора входных данных выведите одно целое число — минимальное положительное число бурлей \(s\), которое не может быть представлено с помощью \(k\) или меньшего количества банкнот.
| |
|
|
D. Домино
Комбинаторика
математика
теория чисел
*2400
графы
бпф
Вам дано \(n\) домино. Каждое домино имеет левую и правую клетку. Каждая клетка может быть окрашена в черный или белый цвет. Некоторые клетки уже окрашены, а некоторые еще нет. Раскраска считается допустимой тогда и только тогда, когда можно переставить доминошки в некотором порядке так, чтобы для каждого \(1 \le i \le n\) цвет правой клетки \(i\)-го домино отличался от цвета левой клетки \(((i \bmod n)+1)\)-го домино. Обратите внимание, что домино нельзя вращать, поэтому левая клетка всегда остается левой, а правая — правой. Подсчитайте количество допустимых способов раскрасить еще не раскрашенные клетки домино. Два способа считаются разными, если есть клетка, которая в одном способе окрашивается в белый цвет, а во втором — в черный. В частности, раскраски BW WB и WB BW различны (и обе недопустимы). Поскольку это число может быть очень большим, выведите его по модулю \(998\,244\,353\). Выходные данные Выведите одно целое число — ответ на задачу. Примечание В первом примере есть только одна доминошка, и нам нужно, чтобы цвет ее правой клетки отличался от цвета ее левой клетки. Этого можно добиться только одним способом. Во втором примере существует только \(2\) таких раскраски: BB WW и WB WB.
| |
|
|
A. Дели и преумножай
математика
реализация
*900
теория чисел
жадные алгоритмы
У Василия есть массив из \(n\) чисел \(a_1, a_2, \dots, a_n\). Он может любое количество раз выполнить следующую последовательность операций: - выбрать два любых элемента массива \(a_i\) и \(a_j\), где \(a_i\) должно делиться нацело на \(2\)
- \(a_i = \frac{a_i}{2}\)
- \(a_j = a_j \cdot 2\)
Помогите Василию найти максимальную сумму элементов массива, которую он сможет добиться, используя описанную последовательность операций. Выходные данные Для каждого набора входных данных выведите максимальную сумму элементов массива после оптимального применения последовательности операций. Примечание В первом тестовом примере оптимальный порядок выглядит следующим образом: - Выбрать \(i = 2\) и \(j = 1\). После выполнения последовательности операций \(a_2 = \frac{4}{2} = 2\) и \(a_1 = 6 \cdot 2 = 12\), массив будет следующим: [12, 2, 2].
- Выбрать \(i = 2\) и \(j = 1\). После выполнения последовательности операций \(a_2 = \frac{2}{2} = 1\) и \(a_1 = 12 \cdot 2 = 24\), массив будет следующим: [24, 1, 2].
- Выбрать \(i = 3\) и \(j = 1\). После выполнения последовательности операций \(a_3 = \frac{2}{2} = 1\) и \(a_1 = 24 \cdot 2 = 48\), массив будет следующим: [48, 1, 1].
Итоговый ответ \(48 + 1 + 1 = 50\). В третьем тестовом примере нет возможности поменять сумму элементов, поэтому ответ \(10\).
| |
|
|
C. Сложный анализ рынка
Бинарный поиск
реализация
дп
теория чисел
*1400
расписания
В процессе сложного анализа рынка у Василия возникла следующая задача: Дан массив \(a\) длины \(n\) и натуральное число \(e\). Требуется посчитать количество пар натуральных чисел \((i, k)\) для которых выполняются следующие условия: - \(1 \le i, k\)
- \(i + e \cdot k \le n\).
- Произведение \(a_i \cdot a_{i + e} \cdot a_{i + 2 \cdot e} \cdot \ldots \cdot a_{i + k \cdot e} \) является простым числом.
Простым числом называется натуральное число больше единицы, имеющее ровно два различных натуральных делителя — единицу и самого себя. Выходные данные Для каждого набора входных данных выведите ответ в следующем формате: В единственной строке выведите количество подходящих пар чисел \((i, k)\). Примечание В первом тестовом примере подходят две пары: - \(i = 2, k = 1\), тогда произведение: \(a_{2} \cdot a_{5} = 2\) является простым числом.
- \(i = 3, k = 1\), тогда произведение: \(a_{3} \cdot a_{6} = 19\) является простым числом.
Во втором тестовом примере не существует подходящих пар. В третьем тестовом примере подходят четыре пары: - \(i = 1, k = 1\), тогда произведение: \(a_{1} \cdot a_{4} = 2\) является простым числом.
- \(i = 1, k = 2\), тогда произведение: \(a_{1} \cdot a_{4} \cdot a_{7} = 2\) является простым числом.
- \(i = 3, k = 1\), тогда произведение: \(a_{3} \cdot a_{6} = 2\) является простым числом.
- \(i = 6, k = 1\), тогда произведение: \(a_{6} \cdot a_{9} = 2\) является простым числом.
В четвертом тестовом примере не существует подходящих пар. В пятом тестовом примере подходят пять пар: - \(i = 1, k = 1\), тогда произведение: \(a_{1} \cdot a_{2} = 2\) является простым числом.
- \(i = 1, k = 2\), тогда произведение: \(a_{1} \cdot a_{2} \cdot a_{3} = 2\) является простым числом.
- \(i = 1, k = 3\), тогда произведение: \(a_{1} \cdot a_{2} \cdot a_{3} \cdot a_{4} = 2\) является простым числом.
- \(i = 2, k = 1\), тогда произведение: \(a_{2} \cdot a_{3} = 2\) является простым числом.
- \(i = 2, k = 2\), тогда произведение: \(a_{2} \cdot a_{3} \cdot a_{4} = 2\) является простым числом.
В шестом тестовом примере не существует подходящих пар.
| |
|
|
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\) путем удаления нескольких (возможно, нуля или всех) элементов. Выходные данные Выведите одно целое число — количество непустых хороших подпоследовательностей \(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)\).
| |
|
|
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\) независимых наборов тестовых данных. Выходные данные Для \(i\)-го набора тестовых данных выведите YES, если соответствующая пара \((a, b)\) является \(x\)-магической, и NO в противном случае.
| |
|
|
D1. Divan и Костомукша (простая версия)
*2100
дп
теория чисел
Это простая версия задачи. Единственным различием между версиями является ограничение на \(a_i\). Однажды в Костомукше Divan нашел массив \(a\), состоящий из целых положительных чисел! Он хочет каким-нибудь образом переупорядочить элементы массива \(a\) так, чтобы максимизировать следующее выражение: \(\)\sum_{i=1}^n \operatorname{gcd}(a_1, \, a_2, \, \dots, \, a_i),\(\) где \(\operatorname{gcd}(x_1, x_2, \ldots, x_k)\) — это наибольший общий делитель чисел \(x_1, x_2, \ldots, x_k\), а \(\operatorname{gcd}(x) = x\) для всех целых чисел \(x\). Переупорядочить элементы массива означает каким-либо образом поменять порядок элементов в массиве или оставить исходный порядок. Разумеется, Divan может решить эту задачу сам. Однако он посчитал, что она достаточно интересная, чтобы поделиться ею с вами. Выходные данные Выведите максимальное значение функции, которое можно получить, переупорядочив элементы массива \(a\). Примечание В первом примере можно расположить элементы массива в следующем порядке: \([6, \, 2, \, 2, \, 2, \, 3, \, 1]\). Тогда \(\)\operatorname{gcd}(a_1) + \operatorname{gcd}(a_1, \, a_2) + \operatorname{gcd}(a_1, \, a_2, \, a_3) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4, \, a_5) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4, \, a_5, \, a_6) = 6 + 2 + 2 + 2 + 1 + 1 = 14.\(\) Можно показать, что большего ответа для данного массива не существует. Во втором примере оптимально переупорядочить элементы можно, например, так: \([100, \, 10, \, 10, \, 5, \, 1, \, 3, \, 3, \, 7, \, 42, \, 54]\).
| |
|
|
D2. Divan и Костомукша (сложная версия)
дп
теория чисел
*2300
Это сложная версия задачи. Единственным различием между версиями является ограничение на \(a_i\). Однажды в Костомукше Divan нашел массив \(a\), состоящий из целых положительных чисел! Он хочет каким-нибудь образом переупорядочить элементы массива \(a\) так, чтобы максимизировать следующее выражение: \(\)\sum_{i=1}^n \operatorname{gcd}(a_1, \, a_2, \, \dots, \, a_i),\(\) где \(\operatorname{gcd}(x_1, x_2, \ldots, x_k)\) — это наибольший общий делитель чисел \(x_1, x_2, \ldots, x_k\), а \(\operatorname{gcd}(x) = x\) для всех целых чисел \(x\). Переупорядочить элементы массива означает каким-либо образом поменять порядок элементов в массиве или оставить исходный порядок. Разумеется, Divan может решить эту задачу сам. Однако он посчитал, что она достаточно интересная, чтобы поделиться ею с вами. Выходные данные Выведите максимальное значение функции, которое можно получить, переупорядочив элементы массива \(a\). Примечание В первом примере можно расположить элементы массива в следующем порядке: \([6, \, 2, \, 2, \, 2, \, 3, \, 1]\). Тогда \(\)\operatorname{gcd}(a_1) + \operatorname{gcd}(a_1, \, a_2) + \operatorname{gcd}(a_1, \, a_2, \, a_3) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4, \, a_5) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4, \, a_5, \, a_6) = 6 + 2 + 2 + 2 + 1 + 1 = 14.\(\) Можно показать, что большего ответа для данного массива не существует. Во втором примере оптимально переупорядочить элементы можно, например, так: \([100, \, 10, \, 10, \, 5, \, 1, \, 3, \, 3, \, 7, \, 42, \, 54]\).
| |
|
|
B. Задача про НОД
Перебор
Конструктив
математика
*900
теория чисел
Дано целое положительное число \(n\). Найдите три различных целых положительных числа \(a\), \(b\), \(c\) таких, что \(a + b + c = n\) и \(\operatorname{gcd}(a, b) = c\), где \(\operatorname{gcd}(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\). Выходные данные Для каждого набора входных данных выведите три различных целых положительных числа \(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\).
| |
|
|
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)\). Так как у Льдинки не очень хорошо с математикой, она надеется, что вы поможете ей решить эту задачу. Выходные данные Выведите три целых числа \(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\).
| |
|
|
F. Квадратное множество
Конструктив
математика
теория чисел
хэши
*2900
Назовем множество целых положительных чисел \(a_1, a_2, \dots, a_k\) квадратным, если произведение факториалов его элементов является квадратом целого числа, т. е. \(\prod\limits_{i=1}^{k} a_i! = m^2\), для некоторого целого \(m\). Вам задано положительное целое число \(n\). Ваша задача — для множества \(1, 2, \dots, n\) найти квадратное подмножество максимального размера. Если оптимальных ответов несколько, выведите любой из них. Выходные данные В первой строке выведите одно целое число — размер максимального подмножества. Во второй строке выведите само подмножество в произвольном порядке.
| |
|
|
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 после выполнения этого кода. Обратите внимание, что входные данные генерируется специальным образом (подробнее в секции «Входные данные»). Выходные данные Пусть матожидание значения переменной ans после выполнения кода равно \(E\). Можно показать, что \(E \cdot n^k\) — целое число. Выведите остаток от деления этого числа на \(998244353\). Примечание Массив в первом примере — \([10, 35, 22]\). Во втором примере — \([15363, 1418543]\).
| |
|
|
C. Не назначать
Деревья
Конструктив
теория чисел
*1400
поиск в глубину и подобное
Вам дано дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\), ребра которого пронумерованы от \(1\) до \(n-1\). Деревом называется связный неориентированный граф без циклов. Вам нужно назначить целочисленный вес каждому ребру дереву так, чтобы в результате получилось простое дерево. Дерево называется простым, если вес каждого пути, состоящего из одного или двух ребер, является простым числом. Рассматриваются только пути, не посещающие никакую вершину дважды. Весом пути называется сумма весов ребер на пути. Рассмотрим граф ниже. Он является простым деревом, так как вес любого пути из не более чем двух ребер простой. Например, путь из двух ребер \(2 \to 1 \to 3\) имеет вес \(11 + 2 = 13\), который является простым числом. Другой пример, путь из одного ребра \(4 \to 3\) имеет вес \(5\), который является простым числом. Назначьте веса ребрам любым возможным способом таким, что получившееся дерево будет простым. Если такого способа нет, выведите \(-1\). Можно показать, что если существуют способы сделать дерево простым, то существуют и способ, использующий только веса от \(1\) до \(10^5\). Выходные данные Для каждого набора входных данных, если существует способ корректно назначить веса, выведите \(n-1\) целое число \(a_1, a_2, \dots, a_{n-1}\) (\(1 \leq a_i \le 10^5\)), где \(a_i\) обозначает вес, назначенный ребру \(i\). В противном случае выведите \(-1\). Если существует несколько решений, выведите любое. Примечание В первом примере есть только два пути по одному ребру: \(1 \to 2\) и \(2 \to 1\), оба пути имеют вес \(17\) — простое число. Второй пример описан в условии задачи. Можно показать, что для третьего примера не существует корректного способа назначить веса.
| |
|
|
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\).
Обратите внимание, что после каждой операции массив меняется, и последующие операции выполняются с новым массивом. Какое максимальное число раз вы можете выполнить операцию? Выходные данные Выведите одно целое число — максимальное количество операций, которое можно выполнить с данным массивом. Примечание В первом примере один из способов выполнить максимальное число операций такой: - Выбрать \(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\).
| |
|
|
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\). Выходные данные Для каждого тестового примера выведите «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\).
| |
|
|
D. Переверни отрезки
Конструктив
дп
теория чисел
жадные алгоритмы
*2400
Дан массив \(a\), состоящий из \(n\) целых чисел, и множество \(B\), состоящее из \(m\) положительных целых чисел таких, что \(1 \leq b_i \leq \lfloor \frac{n}{2} \rfloor\) при \(1\le i\le m\), где \(b_i\) — \(i\)-й элемент \(B\). Вы можете выполнять следующую операцию с \(a\): - Выбрать некоторый \(x\) такой, что \(x\) содержится в \(B\).
- Выбрать подмассив \(a\) размера \(x\) и умножить на \(-1\) каждый элемент этого подмассива. Формально, выбрать \(l\) и \(r\) такие, что \(1\leq l\leq r \leq n\) и \(r-l+1=x\), и затем присвоить \(a_i:=-a_i\) для всех \(i\) таких, что \(l\leq i\leq r\).
Рассмотрим пример. Пусть \(a=[0,6,-2,1,-4,5]\) и \(B=\{1,2\}\): - \([0,6,-2,-1,4,5]\) получится, если выбрать размер подмассива \(2\) и \(l=4\), \(r=5\).
- \([0,6,2,-1,4,5]\) получится, если после этого выбрать размер подмассива \(1\) и \(l=3\), \(r=3\).
Найдите максимальную сумму \(\sum\limits_{i=1}^n {a_i}\), которую можно получить, применяя данную операцию неограниченное количество раз (возможно ноль). Выходные данные Для каждого набора входных данных напечатайте одно целое число — максимальную сумму всех \(a_i\), которую можно получить, применяя описанную операцию неограниченное количество раз. Примечание В первом наборе входных данных можно проделать операции с \(x=1\), \(l=3\), \(r=3\) и \(x=1\), \(l=5\), \(r=5\), и получить массив \([0, 6, 2, 1, 4, 5]\) Во втором наборе можно проделать операцию с \(x=2\), \(l=2\), \(r=3\), получив массив \([1, 1, -1, -1, 1, -1, 1]\), затем проделать операцию с \(x=2\), \(l=3\), \(r=4\), получив массив \([1, 1, 1, 1, 1, -1, 1]\). Не существует способа получить сумму, большую \(5\).
| |
|
|
E. Ожидаемые компоненты
Теория вероятностей
Комбинаторика
математика
теория чисел
*2900
Дан кольцевой массив \(a\) размера \(n\), где \(a_i\) равно значению \(a\) в \(i\)-й позиции, значения могут повторяться. Пусть перестановка \(a\) равна другой перестановке \(a\) тогда и только тогда, когда их значения равны в каждой позиции \(i\) или можно сделать из одной перестановки другую циклическим сдвигом. Положим в качестве количества компонент циклического массива \(b\) количество компонент связности в графе, в котором вершины — это позиции \(b\), и между двумя соседними позициями \(b\) существует ребро, если значения в этих позициях равны (заметьте, что в кольцевом массиве первая и последняя позиции считаются соседними). Найдите математическое ожидание количества компонент перестановки \(a\), если мы равновероятно выбираем ее из множества всех различных перестановок \(a\). Выходные данные Для каждого набора входных данных напечатайте одно целое число — математическое ожидание количества компонент перестановки \(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\)
| |
|
|
F. Сделай его двудольным!
Потоки
Паросочетания
теория чисел
графы
*3400
Дан неориентированный граф, состоящий из \(n\) вершин, пронумерованных от \(1\) до \(n\). Вершина \(i\) имеет значение \(a_i\), все \(a_i\) попарно различны. Между вершинами \(u\) и \(v\) есть ребро, если либо \(a_u\) делит \(a_v\), либо \(a_v\) делит \(a_u\). Найдите минимальное количество вершин, которое нужно удалить, чтобы граф стал двудольным. При удалении вершины удаляются все инцидентные ей ребра. Выходные данные Для каждого набора входных данных выведите одно число — минимальное количество вершин, которое нужно удалить, чтобы граф стал двудольным.
| |
|
|
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\) чисел — \(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]\).
| |
|
|
D. Бесконечный набор
Строки
математика
дп
теория чисел
*1800
битмаски
матрицы
Вам дан массив \(a\), состоящий из \(n\) различных целых положительных чисел. Рассмотрим бесконечное множество целых чисел \(S\), содержащее все целые числа \(x\), удовлетворяющие хотя бы одному из следующих условий: - \(x = a_i\) для некоторого \(1 \leq i \leq n\).
- \(x = 2y + 1\) и \(y\) находится в \(S\).
- \(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\). Выходные данные Выведите единственное целое число — количество элементов в \(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\}\).
| |
|
|
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\).
Выведите минимальное количество массивов в такой последовательности. Выходные данные Выведите одно целое число — минимальное количество массивов в последовательности, удовлетворяющей условию задачи. Так как ответ может быть очень большим, выведите его по модулю \(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]\).
| |
|
|
E. Степенная таблица
Перебор
математика
дп
теория чисел
*2200
У вас есть прямоугольная таблица размера \(n\times m\) (\(n\) строк, \(m\) столбцов). \(n\) строк пронумерованы от \(1\) до \(n\) сверху вниз, а \(m\) столбцов пронумерованы от \(1\) до \(m\) слева направо. Клетка на пересечении строки \(i\) и столбца \(j\) содержит число \(i^j\) (число \(i\), возведенное в степень \(j\)). Например, если \(n=3\) и \(m=3\), то таблица выглядит следующим образом: Найдите количество различных чисел в таблице. Выходные данные Выведите одно целое число: количество различных целых чисел в таблице. Примечание В условии показана таблице из первого примера. В этом случае \(7\) различных чисел: \(1\), \(2\), \(3\), \(4\), \(8\), \(9\) и \(27\). Во втором примере таблица следующая: В ней \(5\) различных чисел: \(1\), \(2\), \(4\), \(8\) и \(16\). В третьем примере таблица следующая: В ней \(6\) различных чисел: \(1\), \(2\), \(3\), \(4\), \(9\) и \(16\).
| |
|
|
D. Мадока и лучшая школа России
Конструктив
математика
дп
теория чисел
*1900
Мадока собирается поступить в «ЦНУС ПТУ». Но на вступительном экзамене по информатике ей попалась сложная задача: - Число называется хорошим, если оно кратно \(d\).
- Число называется красивым, если оно хорошее и его нельзя представить в виде произведения двух хороших чисел.
Обратите внимание, что красивое число обязано быть хорошим. Дано хорошее число \(x\). Требуется определить, можно ли его представить хотя бы двумя различными способами в виде произведения нескольких (возможно одного) красивых чисел. Два способа считаются различными, если в них отличаются множества используемых чисел. Решите эту задачу за Мадоку и помогите ей поступить в лучшую школу России! Выходные данные Для каждого набора входных данных выведите «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\). Поэтому его можно разложить хотя бы двумя способами.
| |
|
|
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\). Определите, можно ли сделать все элементы массива равными, применяя операцию ноль или более раз. Выходные данные Для каждого теста выведите строку с «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\) не существует. Выходные данные Для каждого набора входных данных выведите строку со значением \(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\).
| |
|
|
H. Одинаковые НОК подмножеств
Структуры данных
математика
теория чисел
*3200
Вам даны два набора натуральных чисел \(A\) и \(B\). Необходимо найти два непустых подмножества \(S_A \subseteq A\), \(S_B \subseteq B\) такие, что наименьшее общее кратное (НОК) элементов \(S_A\) равно наименьшему общему кратному (НОК) элементов \(S_B\). Выходные данные Для каждого набора входных данных если не существует двух подмножеств с одинаковым наименьшим общим кратным, выведите одну строку с «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\). Если существует несколько возможных пар подмножеств, вы можете вывести любую.
| |
|
|
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\)). Выходные данные Для каждого набора входных данных выведите одно целое число — количество красивых перестановок. Так как ответ может быть очень большим, выведите его по модулю \(998\,244\,353\). Примечание В первом наборе существует единственная перестановка \([1]\), но она не является красивой, так как \(\gcd(1 \cdot 1) = 1\). Во втором наборе существует единственная красивая перестановка \([2, 1]\), так как \(\gcd(1 \cdot 2, 2 \cdot 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\) строк. \(i\)-я строка должна содержать \(n\) символов, где \(j\)-й символ является результатом партии, в которой Марин начинает с ячейки \((i, j)\). Выведите 'M' в случае победы Марин, 'G' — в случае победы Годзё и 'D' — в случае равного количества очков. Не выводите пробелы между символами в одной строке.
| |
|
|
D. НОД-угадайка
Конструктив
математика
теория чисел
*2000
битмаски
интерактив
игры
китайская теорема об остатках
Это интерактивная задача. Загадано некоторое положительное целое число \(1 \le x \le 10^9\). За один запрос вы можете выбрать два положительных целых числа \(a \neq b\). В качестве ответа на этот запрос вы получите \(\gcd(x + a, x + b)\), где \(\gcd(n, m)\) обозначает наибольший общий делитель чисел \(n\) и \(m\). Чтобы угадать одно загаданное число \(x\), вы можете совершить не более \(30\) запросов. Протокол взаимодействия Загаданное число \(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\).
| |
|
|
C. Палиндромный базис
Перебор
математика
дп
*1500
теория чисел
Вам дано положительное целое число \(n\). Назовём некоторое положительное целое число \(a\) без лидирующих нулей палиндромным, если оно остаётся таким же после переворота порядка его цифр. Найдите количество способов представить \(n\) как сумму положительных палиндромных чисел. Два способа считаются различными, если количества вхождений хотя бы одного палиндромного числа в них различаются. Например, \(5=4+1\) и \(5=3+1+1\) считаются различными, но \(5=3+1+1\) и \(5=1+3+1\) считаются одинаковыми. Формально, вам нужно найти количество различных мультимножеств положительных палиндромных чисел, сумма которых равна \(n\). Поскольку ответ может быть очень большим, выведите его по модулю \(10^9+7\). Выходные данные Для каждого набора входных данных выведите единственное целое число, обозначающее требуемый ответ по модулю \(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\). Выходные данные Для каждого набора входных данных выведите единственную строку, содержащую единственное число. Если существует бесконечно много конечных арифметических прогрессий, которые могут быть потерянной прогрессией \(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\). Выходные данные Выведите единственную строку, содержащую двоичную строку без лидирующих нулей, обозначающую ответ на задачу. Если ответ равен \(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\).
| |
|
|
A. AvtoBus
Перебор
математика
*900
теория чисел
жадные алгоритмы
Наступила весна, и руководство автобусного парка AvtoBus дало распоряжение поменять у всех автобусов зимние шины на летние. Вы владеете небольшой фирмой, занимающейся обслуживанием автобусов, и только что вам поступил долгожданный заказ на замену \(n\) шин. Вы знаете, что автобусный парк владеет автобусами двух типов: с двумя осями (у таких автобусов \(4\) колеса) и с тремя осями (у таких автобусов \(6\) колес). Вы не знаете, сколькими автобусами какого типа владеет парк AvtoBus, поэтому вам стало интересно, сколько автобусов может быть в парке. Вам нужно определить, какое минимальное и какое максимальное количество автобусов может быть в парке, зная, что суммарное количество колес у всех автобусов равно \(n\). Выходные данные Для каждого набора входных данных выведите ответ в отдельной строке в следующем формате. В единственной строке выведите два целых числа \(x\) и \(y\) (\(1 \le x \le y\)) — минимальное и максимальное возможное количество автобусов, которыми владеет парк. В случае, если для данного \(n\) не существует подходящего количества автобусов, выведите в качестве ответа число \(-1\). Примечание В первом примере известно, что суммарное количество колес у всех автобусов равно \(4\). Это значит, что в автобусном парке есть ровно один автобус с двумя осями. Во втором примере не трудно показать, что не существует такого количества автобусов, чтобы их суммарное количество колес было равно \(7\). В третьем примере суммарное количество колес у всех автобусов равно \(24\). Возможны следующие варианты: - Четыре автобуса с тремя осями.
- Три автобуса с двумя осями и два автобуса с тремя осями.
- Шесть автобусов с двумя осями.
Таким образом, минимальное количество автобусов равно \(4\), а максимальное — \(6\).
| |
|
|
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\), или сказать, что это невозможно. Выходные данные - Если ответа не существует, выведите \(-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]\).
| |
|
|
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\). Найдите возможную последовательность действий для нее. Вам не нужно ничего минимизировать. Выходные данные Первая строка содержит целое неотрицательное число \(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. Движущаяся строка
Строки
математика
теория чисел
*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\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите единственное число — минимальное количество операций, после которого строка \(s\) станет такой же, какой была до их применения. Примечание В первом наборе входных данных применение операции не изменяет строку, поэтому она станет равной самой себе после \(1\) операции. Во втором наборе входных данных строка будет меняться следующим образом: - \(s\) = babaa
- \(s\) = abaab
- \(s\) = baaba
- \(s\) = abbaa
- \(s\) = baaab
- \(s\) = ababa
| |
|
|
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}\). Выходные данные Если нельзя получить подходящую под условие строку \(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}\), поэтому задача невыполнима.
| |
|
|
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)\). Найдите минимально возможный баланс после применения нескольких (возможно, нуля) операций. Выходные данные Для каждого набора входных данных выведите единственное целое число — минимально возможный баланс. Примечание В первом наборе входных данных мы можем применить операцию к каждому из чисел \(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. Два простых числа называются соседними, если между ними не существует других простых чисел. Вам предстоит помочь Никите, и сказать, прав он или ошибается. Выходные данные В единственной строке выходных данных выведите слово YES, если не менее k простых чисел в промежутке от 2 до n представимы в виде описанном выше. В противном случае, выведите слово NO. Примечание В первом примере ответ YES, так как чисел, которые можно представить в описанном виде не меньше двух (например, 13 и 19). Во втором примере ответ NO так как нельзя представить в искомом виде 7 простых чисел от 2 до 45.
| |
|
|
D. Блокнот
теория чисел
*2400
Никиту привлекает всё нестандартное. Даже десятичная система ему больше не нравится, так что он решил изучить другие системы счисления. Его внимание привлекла система счисления с основанием b. Для начала её изучения он хочет записать в свой блокнот все числа длины n без ведущих нулей в этой системе счисления. На каждом листе бумаги в его блокноте достаточно места для написания ровно c чисел. Никита записывает каждое подходящее число ровно один раз, начиная с первого чистого листа бумаги и не оставляя на листах свободного места. Никита никогда не выпишет число 0, так как с ним у него связаны плохие воспоминания о делении чисел. Помогите Никите выяснить, сколько чисел будет записано на последнем листе бумаги. Выходные данные В единственной строке выходных данных выведите количество чисел, записанных на том листе бумаги, на котором будет записано последнее число. Примечание В обоих примерах существует ровно 4 числа длины 3 в двоичной системе счисления. В первом примере Никита запишет 3 числа на первом листе бумаги и 1 число на втором. Во втором примере все 4 числа поместятся на один лист бумаги.
| |
|
|
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\}\).
Выходные данные Для каждого набора входных данных в отдельной строке выведите: - 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\}\).
| |
|
|
D1. Нарезка морковки (простая версия)
Бинарный поиск
Перебор
Конструктив
теория чисел
жадные алгоритмы
*1700
Это простая версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(n\), \(k\), \(a_i\) и сумму \(n\) по всем наборам входных данных. Вы можете делать взломы, только если обе версии задачи решены. Обратите внимание на нестандартное ограничение по памяти. Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и целое число \(k\). Стоимость массива целых чисел \(p_1, p_2, \ldots, p_n\) длины \(n\) равна \(\)\max\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right) - \min\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right).\(\) Здесь \(\lfloor \frac{x}{y} \rfloor\) обозначает целую часть от деления \(x\) на \(y\). Найдите минимальную возможную стоимость массива \(p\) такого, что \(1 \le p_i \le k\) для всех \(1 \le i \le n\). Выходные данные Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(p\), удовлетворяющего условию выше. Примечание В первом наборе входных данных оптимальный массив \(p = [1, 1, 1, 2, 2]\). Массив значений \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равен \([4, 5, 6, 4, 5]\). Стоимость \(p\) равна \(\max\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) - \min\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) = 6 - 4 = 2\). Можно показать, что не существует массива (удовлетворяющего требованию из условия) с меньшей стоимостью. Во втором наборе входных данных один из оптимальных массивов \(p = [12, 12, 12, 12, 12]\). Все значения \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равны \(0\). В третьем наборе входных данных единственный возможный массив \(p = [1, 1, 1]\).
| |
|
|
D2. Нарезка морковки (cложная версия)
Перебор
Структуры данных
Конструктив
математика
дп
теория чисел
жадные алгоритмы
*2400
Это сложная версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(n\), \(k\), \(a_i\) и сумму \(n\) по всем наборам входных данных. Вы можете делать взломы, только если обе версии задачи решены. Обратите внимание на нестандартное ограничение по памяти. Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и целое число \(k\). Стоимость массива целых чисел \(p_1, p_2, \ldots, p_n\) длины \(n\) равна \(\)\max\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right) - \min\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right).\(\) Здесь \(\lfloor \frac{x}{y} \rfloor\) обозначает целую часть от деления \(x\) на \(y\). Найдите минимальную возможную стоимость массива \(p\), такого что \(1 \le p_i \le k\) для всех \(1 \le i \le n\). Выходные данные Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(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]\).
| |
|
|
F. Бугабу
Конструктив
дп
теория чисел
битмаски
*3500
Трансформация массива положительных целых чисел \(a_1,a_2,\dots,a_n\) определена как замена \(a\) на массив \(b_1,b_2,\dots,b_n\), получающийся операцией \(b_i=a_i\oplus a_{(i\bmod n)+1}\), где \(\oplus\) обозначает операцию побитового XOR (исключающего ИЛИ). Вам даны целые числа \(n\), \(t\) и \(w\). Мы считаем, что массив \(c_1,c_2,\dots,c_n\) (\(0 \le c_i \le 2^w-1\)) является бугабу тогда и только тогда, когда существует массив \(a_1,a_2,\dots,a_n\) такой, что после трансформации массива \(a\) ровно \(t\) раз массив \(a\) превращается в \(c\). Например, если \(n=6\), \(t=2\), \(w=2\), то массив \([3,2,1,0,2,2]\) — бугабу, потому что его можно получить, трансформировав массив \([2,3,1,1,0,1]\) \(2\) раза: \(\) [2,3,1,1,0,1]\to [2\oplus 3,3\oplus 1,1\oplus 1,1\oplus 0,0\oplus 1,1\oplus 2]=[1,2,0,1,1,3]; \\ [1,2,0,1,1,3]\to [1\oplus 2,2\oplus 0,0\oplus 1,1\oplus 1,1\oplus 3,3\oplus 1]=[3,2,1,0,2,2]. \(\) Массив \([4,4,4,4,0,0]\) не бугабу, потому что \(4 > 2^2 - 1\). Массив \([2,3,3,3,3,3]\) не бугабу, потому что он не может быть получен трансформацией одного массива \(2\) раза. Вам дан массив \(c\), значения на некоторых позициях которого неизвестны (вначале только \(m\) элементов известны, остальные — нет). Также есть \(q\) модификаций, где каждая модификация меняет какой-либо элемент \(c\). Модификация может изменить, известен ли элемент на какой-либо позиции или нет, а так же, возможно, переопределить элемент на позиции, которая уже известна. Вам нужно посчитать, сколько возможных массивов \(c\) (с произвольными элементами на неизвестных позициях) являются бугабу после каждой модификации. Выведите \(i\)-й ответ по модулю \(p_i\) (\(p_i\) — заданный массив из \(q\) элементов). Выходные данные Выведите \(q\) строк — ваши ответы. Примечание В первом примере \(n=3\), \(t=1\) и \(w=1\). Пусть \(?\) обозначает неизвестную позицию в массиве \(c\). В первом запросе \(c=[1,0,1]\). Единственный возможный массив \([1,0,1]\) — бугабу, потому что он может быть получен одной трансформацией из \([0,1,1]\). Поэтому ответ \(1\bmod 123\,456\,789 = 1\). Во втором запросе \(c=[1,1,1]\). Единственный возможный массив \([1,1,1]\) — не бугабу. Поэтому ответ \(0\bmod 111\,111\,111 = 0\). В третьем запросе \(c=[?,1,1]\). Есть два возможных массива: \([1,1,1]\) и \([0,1,1]\). Из них только \([0,1,1]\) является бугабу, потому что может быть получен одной трансформацией из \([1,1,0]\). Поэтому ответ \(1\bmod 987\,654\,321=1\). В четвертом запросе \(c=[?,1,?]\). Есть четыре возможных массива, из них \([0,1,1]\) и \([1,1,0]\) являются бугабу. \([1,1,0]\) может быть получен из \([1,0,1]\) одной трансформацией. Поэтому ответ \(2\bmod 555\,555\,555=2\).
| |
|
|
F. фювбюая
Перебор
реализация
*1600
теория чисел
*особая задача
фювбюая - мвю яаюбвюф жшбыю, жлф чфаъпылэюф ювапцфэшф осыофвбо уагтшь яаюбвкь жшбыюь. Выходные данные сксфушвф фушэбвсфээюф жшбыю.
| |
|
|
B. Жалкая перестановка
Конструктив
теория чисел
жадные алгоритмы
*800
I wonder, does the falling rain Forever yearn for it's disdain? Effluvium of the Mind Вам дано целое положительное число \(n\). Найдите любую перестановку \(p\) длины \(n\) такую, что сумма \(\operatorname{lcm}(1,p_1) + \operatorname{lcm}(2, p_2) + \ldots + \operatorname{lcm}(n, p_n)\) максимальна. Здесь \(\operatorname{lcm}(x, y)\) означает наименьшее общее кратное (НОК) двух чисел \(x\) и \(y\). Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)). Выходные данные Для каждого набора входных данных выведите \(n\) чисел \(p_1\), \(p_2\), \(\ldots\), \(p_n\) — перестановку с максимально возможным значением \(\operatorname{lcm}(1,p_1) + \operatorname{lcm}(2, p_2) + \ldots + \operatorname{lcm}(n, p_n)\). Если существуют несколько решений, выведите любое из них. Примечание Для \(n = 1\), существует только одна перестановка, поэтому ответ — \([1]\). Для \(n = 2\), существует две перестановки: - \([1, 2]\) — сумма равна \(\operatorname{lcm}(1,1) + \operatorname{lcm}(2, 2) = 1 + 2 = 3\).
- \([2, 1]\) — сумма равна \(\operatorname{lcm}(1,2) + \operatorname{lcm}(2, 1) = 2 + 2 = 4\).
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите единственное целое число — количество уникальных троек целых чисел, подходящих под условия задачи. Примечание В первом наборе входных данных существует \(3\) подходящих тройки: - \((1,2,3)\),
- \((1,3,4)\),
- \((2,3,4)\).
Во втором наборе входных данных существует только \(1\) подходящая тройка:
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите единственное целое число — количество уникальных троек целых чисел, подходящих под условия задачи. Примечание В первом наборе входных данных существует \(3\) подходящих тройки: - \((1,2,3)\),
- \((1,3,4)\),
- \((2,3,4)\).
Во втором наборе входных данных существует только \(1\) подходящая тройка:
| |
|
|
D. Отсчет турнира
Теория вероятностей
Конструктив
теория чисел
*1800
жадные алгоритмы
интерактив
Это интерактивная задача. Недавно состоялся турнир с \(2^n\) участниками. Сначала \(1\)-й участник соревновался со \(2\)-м, \(3\)-й с \(4\)-м и так далее. После этого победитель первого матча соревновался с победителем второго и так далее. Турнир завершился, когда остался только один участник, этот участник стал победителем. Такая схема проведения турнира называется «олимпийской системой». Вы не знаете результатов, но хотите определить победителя турнира. За один запрос вы можете выбрать два целых числа \(a\) и \(b\) — номера двух участников. Жюри ответит \(1\), если \(a\) выиграл больше матчей, чем \(b\); \(2\), если \(b\) выиграл больше матчей, чем \(a\); или \(0\), если они выиграли поровну матчей. Найдите победителя турнира за не более чем \(\left \lceil \frac{1}{3} \cdot 2^{n + 1} \right \rceil\) запросов. Здесь \(\lceil x \rceil\) обозначает значение \(x\), округленное вверх до ближайшего целого числа. Обратите внимание, что турнир уже прошел, а значит результаты уже зафиксированы и не зависят от ваших запросов. Протокол взаимодействия Взаимодействие в каждом наборе входных данных начинается со считывания целого числа \(n\). Чтобы сделать запрос, выведите «? a b» (\(1 \leq a, b \leq 2^n\)) без кавычек. После этого считайте одно целое число — ответ на запрос. Вы можете сделать не более \(\left \lceil \frac{1}{3} \cdot 2^{n + 1} \right \rceil\) таких запросов в каждом наборе входных данных. Если вы считали \(-1\) вместо корректного ответа на запрос или вместо корректного значения \(n\), это означает, что ваша программа сделала некорректный запрос, превысила число запросов или неправильно решила предыдущий набор входных данных. В таком случае ваша программа должна немедленно завершиться, вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока. Когда вы готовы дать ответ, выведите «! x» (\(1 \leq x \leq 2^n\)) без кавычек — номер победителя турнира. Вывод этого ответа не учитывается в ограничении на количество запросов. После этого ваша программа должна сразу перейти к решению следующего набора входных данных. После решения всех наборов входных данных ваша программа должна завершиться. После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте: - fflush(stdout) или cout.flush() в C++;
- System.out.flush() в Java;
- flush(output) в Pascal;
- stdout.flush() в Python;
- смотрите документацию для других языков.
Hacks Чтобы сделать взлом, используйте следующий формат теста. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2^{14}\)) — количество наборов входных данных. Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 17\)). Вторая строка каждого набора входных данных содержит \(2^n\) целых чисел на одной строке — количество выигранных матчей для каждого участника. Количество выигранных матчей должно соответствовать некоторому корректному турниру. Сумма значений \(2^n\) не должна превышать \(2^{17}\). Примечание Турнир в первом примере показан ниже. Количество выигранных матчей равно \([1,0,0,2,0,1,3,0]\). В этом примере победителем является \(7\)-й участник.
| |
|
|
E. Прибавление по модулю 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\) операций можно сделать все элементы массива равными. Выходные данные Для каждого набора входных данных выведите: - YES, если можно сделать все элементы массива равными;
- NO в противном случае.
Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ). Примечание Первый набор входных данных разобран в условии. Во втором наборе входных данных невозможно сделать все элементы массива равными. В третьем наборе входных данных нужно применить данную операцию по одному разу ко всем равным \(5\) элементам. В четвёртом наборе входных данных нужно применять данную операцию ко всем элементам, пока они не станут равными \(8\). В пятом наборе входных данных невозможно сделать все элементы массива равными. В шестом наборе нужно применять данную операцию ко всем элементам, пока они не станут равными \(102\).
| |
|
|
F. Мешки с шарами
Комбинаторика
математика
дп
теория чисел
*2500
Есть \(n\) мешков, в каждом лежат \(m\) шаров с числами от \(1\) до \(m\). В каждом мешке ровно один шар с числом \(i\) для каждого \(i \in [1, m]\). Из каждого мешка берется по одному шару (все мешки различные, так что, например, взять шар \(1\) из первого мешка и шар \(2\) из второго мешка — это не то же самое, что и взять шар \(2\) из первого мешка и шар \(1\) из второго мешка). После этого считается количество шаров с нечетными числами среди тех, которые достали. Пусть это количество будет равно \(F\). Ваша задача — посчитать сумму \(F^k\) по всем способам выбрать \(n\) шаров, по одному из каждого мешка. Выходные данные На каждый набор входных данных выведите одно целое число — сумму \(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\). Выходные данные Для каждого набора входных данных выведите одно целое число — количество пар чисел, удовлетворяющих условию задачи. Примечание Для \(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\), что не подходит под условие.
| |
|
|
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\). Решите эту задачу за Мадоку и помогите ей поступить в лучший университет! Выходные данные Выведите ровно одно число — \(\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\)-й буквы) в эту строку. К сожалению, Бурёнка уже не помнит теорию фибоначчиевых строк, поэтому без вашей помощи она не поступит в университет. Выходные данные Для каждого набора входных данных выведите строку «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\), то происходит следующее: - К полезности программы добавляется число \(a_{i}\).
- «Бурёнка» перемещается на \(k\) позиций вправо (выполняется \(i := i + k\), если \(i\) станет больше \(n\), то \(i := i - n\)).
Помогите Тоне найти максимальную возможную полезность программы для «Бурёнки», если изначальная полезность любой программы равна \(0\). Кроме того, друг Тони Илюша \(q\) раз просит изменить массив. Каждое изменение состоит в присваивании \(a_p := x\) для некоторых чисел \(p\) и \(x\). Вам необходимо найти максимальную возможную полезность программы после каждого из таких изменений. Выходные данные Для каждого набора входных данных выведите \(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\).
| |
|
|
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\). Помогите Жене ответить на вопросы! Выходные данные Выведите \(q\) чисел — ответы на вопросы Бурёнки. Примечание Рассмотрим запросы из примера: - в первом вопросе произведение чисел на первом отрезке равно \(1\), оно взаимно просто с числами \(1,2,3,4,5\).
- во втором вопросе произведение чисел на втором отрезке равно \(12\), оно взаимно просто с числами \(1\) и \(5\).
- в третьем вопросе произведение чисел на третьем отрезке равно \(10\), оно взаимно просто с числами \(1\) и \(3\).
| |
|
|
B. Период псевдослучайной последовательности
реализация
теория чисел
*особая задача
*1200
Недавно Поликарп заинтересовался последовательностями псевдослучайных чисел. Он узнал, что во многих языках программирования такие последовательности генерируются одинаковым образом: (для i ≥ 1). Здесь a, b, m — константы, фиксированные для данной реализации генератора псевдослучайных чисел, r0 — так называемый randseed (это значение может быть установлено из программы с помощью функций вроде RandSeed(r) или srand(n)), а обозначает операцию взятия остатка от деления. Например, если a = 2, b = 6, m = 12, r0 = 11, то генерируемая последовательность будет иметь вид: 4, 2, 10, 2, 10, 2, 10, 2, 10, 2, 10, .... Поликарп понял, что любая такая последовательность рано или поздно зациклится, но цикл может встретиться не сразу, то есть существует предпериод и период. В примере выше длина предпериода равна 1, а периода — 2. Ваша задача — найти период такой последовательности по заданным a, b, m и r0. Формально, необходимо найти минимальное натуральное t, для которого существует такое натуральное k, что для любого i ≥ k: ri = ri + t. Выходные данные Выведите единственное целое число — искомый период последовательности. Примечание Первый пример разобран выше. Во втором примере последовательность имеет вид (начиная с первого элемента): 0, 3, 4, 1, 0, 3, 4, 1, 0, ... В третьем примере последовательность имеет вид (начиная с первого элемента): 33, 24, 78, 78, 78, 78, ...
| |
|
|
D. Реформа календаря
*1500
теория чисел
*особая задача
В Берляндии снова реформы! На этот раз парламент обсуждает реформу календаря. Чтобы сделать жизнь граждан Берляндии разнообразнее, решено изменить календарь. Так как все большее количество граждан жалуются, что «годы летят...», решено что с нового года количество дней в году будет неуклонно расти. Так в предстоящем году будет ровно a дней, в следующем a + 1 день, затем a + 2 и так далее. Такой график планируется на ближайшие n лет (в n-ый год длина года будет составлять a + n - 1 день). Что станет с месяцами — пока не решено. Депутат Палевный выступил со следующим предложением. - Календарь каждого месяца удобно печатать на квадратном листе бумаге. Предлагается сделать так, что количество дней в каждом месяце должно быть квадратом некоторого натурального числа. Количество дней в месяце должно быть одинаковым для каждого месяца любого года, но может отличаться для разных лет.
- Количество дней в месяце должно делить количество дней в году этого месяца. Это правило гарантирует, что количество месяцев в каждом году — это целое число.
- Количество дней в месяце для каждого года надо подбирать так, чтобы сэкономить максимальное количество бумаги на печати календарей. Иными словами, количество дней в месяце должно быть как можно больше.
Эти правила дают однозначное правило выбора количества дней в каждом месяце года при фиксированной длине года. Например, согласно предложению Палевного, год, состоящий из 108 дней, будет содержать три месяца по 36 дней в каждом, год из 99 дней будет состоять из 11 месяцев по 9 дней, а год из 365 дней — из 365 месяцев по одному дню. Предложение вызвало бурное обсуждение в обществе, известный математик Перельманов быстро посчитал, что если предложение будет поддержано, то в период n лет, начиная с года в котором a дней, будет израсходовано p листов бумаги для печати комплекта календарей всех лет. В расчетах Перельманов учитывал, что комплект будет содержать по одному календарю каждого года, а каждый месяц будет напечатан на отдельном листе. Повторите достижение Перельманова и выведите искомое число p по заданным натуральным a и n. Перельманов предостерегает вас, что ваша программа не должна работать более четырех секунд на максимальном тесте. Выходные данные Выведите искомое число p. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d. Примечание Пояснение к первому тесту. Год из 25-ти дней будет содержать один месяц из 25-ти дней. Год из 26-ти дней будет содержать 26 месяцев по одному дню каждый. Год из 27-ми дней будет содержать три месяца по 9 дней каждый.
| |
|
|
A. Бурёнка играет с дробями
математика
*900
теория чисел
Бурёнка пришла в детский сад. Этот детский сад очень странный, поэтому в нём каждому ребёнку дают две дроби (\(\frac{a}{b}\) и \(\frac{c}{d}\)), числители и знаменатели которых являются целыми числами, и заставляют играть с ними. Бурёнка — умный ребёнок, поэтому она заметила, что за один хлопок в ладоши она может умножить числитель или знаменатель любой из двух своих дробей на любое целое число (но нельзя умножать знаменатели на \(0\)). Теперь она хочет сделать две дроби равными по значению за минимальное число хлопков. Помогите ей и сообщите это число! Выходные данные Для каждого набора входных данных выведите единственное число — минимальное число хлопков в ладоши, которое Бурёнке придётся сделать для того, чтобы сделать две дроби равными. Примечание В первом тестовом случае можно умножить \(c\) на \(2\), после этого дроби станут равными. Во втором тестовом случае дроби уже равны. В третьем тестовом случае можно умножить \(a\) на \(4\), а затем \(b\) на \(3\). Тогда дроби станут равны: \(\frac{1 \cdot 4}{2 \cdot 3} = \frac{2}{3}\).
| |
|
|
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\). 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\).
| |
|
|
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. Выходные данные Выведите \(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\).
| |
|
|
E. Максимумы и минимумы
Структуры данных
Комбинаторика
теория чисел
разделяй и властвуй
*2700
Вам дан массив целых положительных чисел \(a_1, a_2, \ldots, a_n\). Найдите количество пар индексов \((l, r)\) (\(1 \le l \le r \le n\)), которые проходят проверку. Проверка пары чисел выполняется следующим образом: - Находятся минимум и максимум среди чисел \(a_l, a_{l+1}, \ldots, a_r\).
- Проверка считается пройденной, если максимум делится на минимум.
Выходные данные Для каждого набора входных данных выведите единственное целое число — количество проходящих проверку пар чисел. Примечание Ниже запись \(x \mid y\) означает, что \(y\) делится на \(x\). В первом наборе входных данных существует всего одна пара индексов \((1, 1)\), для нее максимум равен \(1\), минимум также \(1\), \(1 \mid 1\), поэтому эта пара проходит проверку, а ответ равен \(1\). Во втором наборе входных данных \(3\) пары индексов: - \((1, 1)\): максимум равен \(2\), минимум равен \(2\), \(2 \mid 2\), проверка пройдена.
- \((1, 2)\): максимум равен \(4\), минимум равен \(2\), \(2 \mid 4\), проверка пройдена.
- \((2, 2)\): максимум равен \(4\), минимум равен \(4\), \(4 \mid 4\), проверка пройдена.
В третьем наборе входных данных \(3\) пары индексов: - \((1, 1)\): максимум равен \(2\), минимум равен \(2\), \(2 \mid 2\), проверка пройдена.
- \((1, 2)\): максимум равен \(3\), минимум равен \(2\), \(3\) не делится на \(2\), поэтому проверка не пройдена.
- \((2, 2)\): максимум равен \(3\), минимум равен \(3\), \(3 \mid 3\), поэтому проверка пройдена.
| |
|
|
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... Так, давайте закончим. Просто выведите сам ответ. Выходные данные Для каждого набора входных данных выведите количество подмассивов, \(\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\). Заметим, что результирующий граф может состоять из нескольких компонент связности. Выходные данные Для каждого набора входных данных выведите наименьшую стоимость построения графа или \(-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\), что является оптимальным ответом.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите единственное целое число — минимальную суммарную стоимость операций, которые нужно сделать, чтобы НОД всех элементов массива стал равен \(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\).
| |
|
|
D1. Баланс (простая версия)
Перебор
Структуры данных
реализация
*1500
теория чисел
Это простая версия задачи. Единственное различие состоит в том, что в этой версии нет запросов удаления. Изначально у вас есть множество, содержащее единственный элемент — \(0\). Вам нужно обработать \(q\) запросов следующих видов: - + \(x\) — добавить целое число \(x\) в множество. Гарантируется, что это число не принадлежит множеству до этого запроса;
- ? \(k\) — найти \(k\text{-mex}\) множества.
В нашей задаче мы определяем \(k\text{-mex}\) множества целых чисел как наименьшее неотрицательное целое число \(x\), которое делится на \(k\) и которого нет в множестве. Выходные данные Для каждого запроса типа ? выведите единственное целое число — \(k\text{-mex}\) множества. Примечание В первом примере: После первого и второго запроса в множестве будут элементы \(\{0, 1, 2\}\). Наименьшее неотрицательное число, которое делится на \(1\) и которого нет в множества, равно \(3\). После четвертого запроса в множестве будут элементы \(\{0, 1, 2, 4\}\). Наименьшее неотрицательное число, которое делится на \(2\) и которого нет в множества, равно \(6\). Во втором примере: - Изначально множество содержит только элемент \(\{0\}\).
- После добавления числа \(100\) множество содержит элементы \(\{0, 100\}\).
- \(100\text{-mex}\) множества равен \(200\).
- После добавления числа \(200\) множество содержит элементы \(\{0, 100, 200\}\).
- \(100\text{-mex}\) множества равен \(300\).
- После добавления числа \(50\) множество содержит элементы \(\{0, 50, 100, 200\}\).
- \(50\text{-mex}\) множества равен \(150\).
| |
|
|
D2. Баланс (сложная версия)
Перебор
Структуры данных
теория чисел
*2400
Это сложная версия задачи. Единственное различие состоит в том, что в этой версии есть запросы удаления. Изначально у вас есть множество, содержащее единственный элемент — \(0\). Вам нужно обработать \(q\) запросов следующих видов: - + \(x\) — добавить целое число \(x\) в множество. Гарантируется, что это число не принадлежит множеству до этого запроса;
- - \(x\) — удалить целое число \(x\) из множества. Гарантируется, что это число принадлежит множеству;
- ? \(k\) — найти \(k\text{-mex}\) множества.
В нашей задаче мы считаем, что \(k\text{-mex}\) множества — это наименьшее неотрицательное целое число \(x\), которое делится на \(k\) и которого нет в множестве. Выходные данные Для каждого запроса типа ? выведите единственное целое число — \(k\text{-mex}\) множества. Примечание В первом примере: После первого и второго запроса во множестве будут элементы \(\{0, 1, 2\}\). Наименьшее неотрицательное число, которое делится на \(1\) и которого нет в множества, равно \(3\). После четвертого запроса во множестве будут элементы \(\{0, 1, 2, 4\}\). Наименьшее неотрицательное число, которое делится на \(2\) и которого нет в множества, равно \(6\). Во втором примере: - Изначально множество содержит только элемент \(\{0\}\).
- После добавления числа \(100\) множество содержит элементы \(\{0, 100\}\).
- \(100\text{-mex}\) множества равен \(200\).
- После добавления числа \(200\) множество содержит элементы \(\{0, 100, 200\}\).
- \(100\text{-mex}\) множества равен \(300\).
- После удаления числа \(100\) множество содержит элементы \(\{0, 200\}\).
- \(100\text{-mex}\) множества равен \(100\).
- После добавления числа \(50\) множество содержит элементы \(\{0, 50, 200\}\).
- \(50\text{-mex}\) множества равен \(100\).
- После удаления числа \(50\) множество содержит элементы \(\{0, 200\}\).
- \(100\text{-mex}\) множества равен \(50\).
| |
|
|
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\) Выходные данные Для каждого запроса второго типа выведите ответ на задачу. Примечание В первом примере: - Для первого запроса мы можем выбрать \(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\).
| |
|
|
E. Прямоугольная конгруэнтность
Конструктив
*2100
теория чисел
У вас есть простое число \(n\) и массив из \(n\) целых чисел \(b_1,b_2,\ldots, b_n\), где \(0 \leq b_i < n\) для всех \(1 \le i \leq n\). Вы должны найти матрицу \(a\) размера \(n \times n\) такую, что выполняются все следующие условия: - \(0 \le a_{i,j} < n\) для всех \(1 \le i, j \le n\).
- \(a_{r_1, c_1} + a_{r_2, c_2} \not\equiv a_{r_1, c_2} + a_{r_2, c_1} \pmod n\) для всех положительных чисел \(r_1\), \(r_2\), \(c_1\), \(c_2\) таких, что \(1 \le r_1 < r_2 \le n\) и \(1 \le c_1 < c_2 \le n\).
- \(a_{i,i} = b_i\) для всех \(1 \le i \leq n\).
Здесь \(x \not \equiv y \pmod m\) означает, что \(x\) и \(y\) дают разные остатки от деления на \(m\). Если существуют несколько решений, выведите любое из них. Можно показать, что такая матрица всегда существует при данных ограничениях. Выходные данные Выведите \(n\) строк. На \(i\)-й строке выведите \(n\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, n}\). Если существуют несколько решений, выведите любое из них. Примечание В первом примере ответ корректный, так как все элементы являются неотрицательными числами меньшими \(n = 2\), и \(a_{1,1}+a_{2,2} \not\equiv a_{1,2}+a_{2,1} \pmod 2\) (потому что \(a_{1,1}+a_{2,2} = 0 + 0 \equiv 0 \pmod 2\), а \(a_{1,2}+a_{2,1} = 1 + 0 \equiv 1 \pmod 2 \)). Кроме того, значения на главной диагонали равны \(0,0\), как и требовалось. Во втором примере ответ корректный, так как все элементы являются неотрицательными числами меньшими \(n = 3\), и второе условие выполнено для всех четверок \((r_1, r_2, c_1, c_2)\). Например, - при \(r_1=1\), \(r_2=2\), \(c_1=1\) и \(c_2=2\), \(a_{1,1}+a_{2,2} \not\equiv a_{1,2}+a_{2,1} \pmod 3\), так как \(a_{1,1}+a_{2,2} = 1 + 1 \equiv 2 \pmod 3\), а \(a_{1,2}+a_{2,1} = 2 + 1 \equiv 0 \pmod 3 \);
- при \(r_1=2\), \(r_2=3\), \(c_1=1\) и \(c_2=3\), \(a_{2,1}+a_{3,3} \not\equiv a_{2,3}+a_{3,1} \pmod 3\), так как \(a_{2,1}+a_{3,3} = 1 + 1 \equiv 2 \pmod 3\), а \(a_{2,3}+a_{3,1} = 0 + 1 \equiv 1 \pmod 3 \).
Кроме того, значения на главной диагонали равны \(1,1,1\), как и требовалось.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите «YES», если существует подходящий массив \(b\), иначе выведите «NO». Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Примечание В первом примере можно взять \(b=[343,343]\). Во втором примере один из подходящих массивов \(b\) это \(b=[12,8,6]\). В третьем примере можно показать, что не существует массива \(b\), удовлетворяющего условиям.
| |
|
|
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\) делителя. Выходные данные Выведите ответ для каждого теста, по одному в строке. Если искомой последовательности для данного \(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]\) не существует ответа.
| |
|
|
A. Факторизуйте N+M
Конструктив
теория чисел
*800
У Пака Чанека есть простое число\(^\dagger\) \(n\). Найдите простое число \(m\) такое, что \(n + m\) не является простым. \(^\dagger\)Простое число — это число с ровно \(2\) множителями. Первые несколько простых чисел: \(2,3,5,7,11,13,\ldots\). В частности, \(1\) не является простым числом. Выходные данные Для каждого набора входных данных выведите строку, содержащую простое число \(m\) (\(2 \leq m \leq 10^5\)) такое, что \(n + m\) не является простым. Можно доказать, что при ограничениях задачи такие \(m\) всегда существуют. Если решений несколько, можно вывести любое из них. Примечание В первом наборе входных данных \(m = 2\) — простое число, а \(n + m = 7 + 2 = 9\) — не простое. Во втором наборе входных данных \(m = 7\) — простое число, а \(n + m = 2 + 7 = 9\) — не простое. В третьем наборе входных данных \(m = 47837\) — простое число, а \(n + m = 75619 + 47837 = 123456\) — не простое.
| |
|
|
I. Хрустальные шары
Структуры данных
геометрия
дп
теория чисел
графы
разделяй и властвуй
разделяй и властвуй
*3500
В мире Compfestnesia Пак Чанек нашел секретное подземелье. Внутри него находится сундук с сокровищами, окруженный \(n\) статуями, расположенными по кругу. Статуи пронумерованы от \(0\) до \(n-1\), причем статуя \(i\) находится слева от статуи \(i+1\), а статуя \(n-1\) — слева от статуи \(0\). Пак Чанек заметил, что каждая статуя держит хрустальный шар с целым числом от \(0\) до \(m-1\) включительно. В хрустальном шаре статуи \(i\) содержится число \(a_i\). В подземелье есть инструкция, согласно которой, чтобы открыть сундук с сокровищами, все целые числа в хрустальных шарах должны быть равны \(0\). Для этого Паку Чанеку дается целое число \(k\), и он может выполнить ноль или более операций. За одну операцию Пак Чанек делает следующее: - Он выберет ровно \(k\) последовательных статуй. Другими словами, выберет статуи \(p, (p+1) \bmod n, (p+2) \bmod n, (p+3) \bmod n, \ldots, (p+k-1) \bmod n\) для некоторого выбранного индекса \(p\).
- Выполнит одно из следующих действий:
- Для каждой выбранной статуи заменит её значение \(a_i\) на \((a_i+1) \bmod m\).
- Для каждой выбранной статуи заменит её значение \(a_i\) на \((a_i-1) \bmod m\).
Помогите Паку Чанеку найти минимально возможное количество операций, чтобы открыть сундук с сокровищами. Выходные данные Если возможно выполнить ноль или более операций так, чтобы стало \(a_0=a_1=\ldots=a_{n-1}=0\), выведите минимальное требуемое количество операций. В противном случае выведите \(-1\). Примечание В первом примере Пак Чанек может выполнять следующие операции: - Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(3\) раза для статуй \(1\), \(2\) и \(3\). Теперь \(a=[8,7,1,2,0]\).
- Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(1\) раз для статуй \(3\), \(4\) и \(0\). Теперь \(a=[7,7,1,1,8]\).
- Выполнить операцию \(a_i := (a_i+1) \bmod m\) \(2\) раза для статуй \(4\), \(0\) и \(1\). Теперь \(a=[0,0,1,1,1]\).
- Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(1\) раз для статуй \(2\), \(3\) и \(4\). Теперь \(a=[0,0,0,0,0]\).
| |
|
|
D. Взаимно простые
Перебор
теория чисел
*1100
жадные алгоритмы
Дан массив из \(n\) целых положительных чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 1000\)). Выведите максимальное значение \(i + j\) такое, что \(a_i\) и \(a_j\) взаимно простые\(^{\dagger}\), или \(-1\), если таких \(i\) и \(j\) не существует. Например, рассмотрим массив \([1, 3, 5, 2, 4, 7, 7]\). Максимальное значение \(i + j\), которое можно получить, равно \(5 + 7\), так как \(a_5 = 4\) и \(a_7 = 7\) являются взаимно простые. \(^{\dagger}\) Два целых числа \(p\) и \(q\) являются взаимно простыми, если единственное положительное целое число, которое является делителем их обоих, равно \(1\) (их наибольший общий делитель равен \(1\)). Выходные данные Для каждого набора выведите одно целое число — максимальное значение \(i + j\), такое, что \(i\) и \(j\) удовлетворяют условию, что \(a_i\) и \(a_j\) взаимно просты, или выведите \(-1\), если не существует таких \(i\) и \(j\). Примечание Для первого примера можно выбрать \(i = j = 3\), при этом сумма индексов равна \(6\), так как \(1\) и \(1\) - взаимно простые. Для второго примера можно выбрать \(i = 7\) и \(j = 5\), при этом сумма индексов равна \(7 + 5 = 12\), так как \(7\) и \(4\) являются взаимно простыми.
| |
|
|
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\) могут не существовать. Выходные данные Для каждого набора входных данных выведите пару чисел \(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\) могут не существовать. Выходные данные Для каждого набора входных данных выведите пару чисел \(a < x \leq c\) и \(b < y \leq d\), для которой \(x \cdot y\) делится на \(a \cdot b\). Если есть несколько вариантов ответа, то выведите любой из них. Если такой пары чисел не существует, то выведите -1 -1.
| |
|
|
D. ConstructOR
Конструктив
Комбинаторика
математика
*2100
теория чисел
битмаски
китайская теорема об остатках
Вам даны три целых числа \(a\), \(b\), \(d\). Найдите целое число \(x\), удовлетворяющее следующим требованиям, или сообщите, что такого числа не существует: - \(0 \le x \lt 2^{60}\);
- \(a|x\) делится на \(d\);
- \(b|x\) делится на \(d\).
Здесь \(|\) обозначает операцию побитового ИЛИ. Выходные данные Для каждого набора входных данных выведите одно число: - если существует число \(x\), удовлетворяющее требованиям из условия, выведите \(x\);
- иначе, выведите \(-1\).
Если существует несколько решений, выведите любое из них. Примечание В первом наборе входных данных одно из возможных решений \(x=18\). Оно корректно, так как \(39|18=55\) и \(12|18=30\) делятся на \(d=5\). Во втором наборе входных данных одно из возможных решений \(x=14\). Оно корректно, так как \(8|14=6|14=14\) делится на \(d=14\). Можно показать, что в третьем и четвёртом наборах входных данных решений не существует.
| |
|
|
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\). Выходные данные Выведите одно целое число — количество неоднозначных массивов \(a\), таких, что длина \(a\) от \(1\) до \(n\), а элементы \(a_i\) — целые числа от \(1\) до \(m\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите единственное целое число — количество различных массивов, удовлетворяющих приведенным выше условиям. Так как это число может быть большим, выведите его по модулю \(998\,244\,353\). Примечание В первом наборе входных данных допустимыми массивами \(b\) являются: - \([4,2,1]\);
- \([4,2,3]\);
- \([4,2,5]\).
Во втором наборе входных данных единственным массивом, удовлетворяющим требованиям, является \([1,1]\). В третьем наборе входных данных можно доказать, что такого массива не существует. В третьем и четвертом тестовых примерах есть красивые объяснения, но, к сожалению, они слишком длинные, чтобы их писать, поэтому мы просим вас поверить нам.
| |
|
|
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\). Выходные данные В единственной строке выведите «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. Почти все - кратные
теория чисел
*1400
жадные алгоритмы
Даны два целых числа \(n\) и \(x\). Перестановка\(^{\dagger}\) \(p\) длины \(n\) называется забавной, если \(p_i\) делится нацело на \(i\) для всех \(1 \leq i \leq n - 1\), при этом \(p_n = 1\), а \(p_1 = x\). Найдите лексокографически минимальную\(^{\ddagger}\) забавную перестановку, или скажите, что такой перестановки не существует. \(^{\dagger}\) Перестановкой длины \(n\) называется массив, содержащий все числа от \(1\) до \(n\) ровно по одному разу. \(^{\ddagger}\) Пусть \(a\) и \(b\) — перестановки длины \(n\). Перестановка \(a\) лексикографически меньше \(b\), если в первой позиции \(i\), где \(a\) и \(b\) различны, \(a_i < b_i\). Перестановка называется лексикографически минимальное, если она лексикографически меньше всех остальных перестановок. Выходные данные Для каждого набора входных данных, если ответ существует, выведите \(n\) различных целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \leq p_i \leq n\)) — лексикографически минимальную забавную перестановку \(p\). Иначе выведите \(-1\). Примечание В первом примере перестановка \([3,2,1]\) удовлетворяет всем условиям: \(p_1=3\), \(p_3=1\), и: - \(p_1=3\) делится на \(1\).
- \(p_2=2\) делится на \(2\).
Можно показать, что эта перестановка является лексикографически минимальной. Во втором примере перестановка \([2,4,3,1]\) удовлетворяет всем условиям: \(p_1=2\), \(p_4=1\), и: - \(p_1=2\) делится на \(1\).
- \(p_2=4\) делится на \(2\).
- \(p_3=3\) делится на \(3\).
Можно показать, что эта перестановка является лексикографически минимальной. В третьем примере не существует забавных перестановок.
| |
|
|
D. Сделай круглым
Перебор
теория чисел
*1400
В Берляндии произошла инфляция, поэтому в магазине нужно изменить цену товаров. Дана текущая цена товара \(n\). Разрешается увеличить цену товара в \(k\) раз, при этом \(1 \le k \le m\), k — целое. Выведите наиболее круглую возможную новую цену на товар. То есть ту, в которой максимально количество нулей в конце. Например, число 481000 более круглое чем число 1000010 (три нуля в конце числа 481000 и всего один — в конце числа 1000010). Если возможных вариантов несколько, выведите тот, в котором новая цена максимальна. Если же более круглую цену получить невозможно, выведите \(n \cdot m\) (то есть максимально возможную цену). Выходные данные Для каждого набора входных данных выведите в отдельной строке наиболее круглое целое число вида \(n \cdot k\) (\(1 \le k \le m\), \(k\) — целое). Если возможных вариантов несколько, выведите тот, в котором новая цена (значение \(n \cdot k\)) — максимальна. Если же более круглую цену получить невозможно, выведите \(n \cdot m\) (то есть максимально возможную цену). Примечание В первом примере \(n = 6\), \(m = 11\). Число с двумя нулями и больше в конце получить не можем, так как необходимо увеличить цену в \(50\) раз, но \(50 > m = 11\). Максимальная цена кратная \(10\) будет \(6 \cdot 10 = 60\). Во втором примере \(n = 5\), \(m = 43\). Максимальная цена кратная \(100\) будет \(5 \cdot 40 = 200\). В третьем примере \(n = 13\), \(m = 5\). Все возможные новые цены не будут оканчиваться на \(0\), тогда следует вывести \(n \cdot m = 65\). В четвертом примере следует увеличить цену в \(15\) раз. В пятом примере следует увеличить цену в \(12000\) раз.
| |
|
|
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\) хотя бы по одному разу. Выходные данные Для каждого набора входных данных выведите одно целое число — минимальное количество операций, за которое Дмитрий сможет получить на доске все цифры от \(0\) до \(p-1\). Можно показать, что для этого всегда требуется конечное число операций.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите минимальное необходимое число операций для того, чтобы сделать \(a\) хорошим. Примечание В первом набора входных данных массив \(a\) хороший изначально. Во втором наборе можно дважды выполнить операцию с индексом \(2\). После первой операции массив \(a\) становится равным \([7,2]\). После выполнения операции с индексом \(2\) снова массив \(a\) становится равным \([7,1]\), этот массив хороший. Можно показать, что невозможно сделать массив \(a\) хорошим за меньшее число операций. В третьем примере \(a\) станет равным \([0,2,4]\), если мы выполним операцию один раз с индексом \(1\). Так как \([0,2,4]\) хороший, то ответ равен \(1\). В четвертом примере нужно выполнить операцию с индексом \(1\) четыре раза. После всех операций \(a\) становится равным \([0]\). Можно показать, что невозможно сделать массив \(a\) хорошим за меньшее число операций.
| |
|
|
B. Сделайте массив хорошим
Конструктив
реализация
теория чисел
*1100
сортировки
Массив \(b\) из \(m\) положительных целых чисел называется хорошим, если для всех пар \(i\) и \(j\) (\(1 \leq i,j \leq m\)), значение \(\max(b_i,b_j)\) делится на \(\min(b_i,b_j)\). Вам дан массив \(a\) из \(n\) положительных целых чисел. Вы можете выполнять следующую операцию: - Выберите индекс \(i\) (\(1 \leq i \leq n\)) и целое число \(x\) (\(0 \leq x \leq a_i\)), затем добавьте \(x\) к \(a_i\). Другими словами, \(a_i := a_i+x\).
- После этой операции должно выполняться \(a_i \leq 10^{18}\).
Постройте последовательность из не более чем \(n\) операций, после которой массив \(a\) будет хорошим. Можно показать, что в ограничениях задачи такая последовательность операций всегда существует. Выходные данные Для каждого набора входных данных сначала выведите целое число \(p\) (\(0 \leq p \leq n\)) — количество операций в вашем решении. Для каждой из следующих \(p\) строк, выведите два целых числа через пробел — \(i\) и \(x\). Вам не нужно минимизировать число операций. Можно показать, что решение всегда существует. Примечание В первом примере массив \(a\) становится после операций равным \([5,5,5,5]\). Легко видеть, что \([5,5,5,5]\) — хороший. Во втором примере массив \(a\) изначально хороший. В третьем примере массив \(a\) становится после операций равным \([10,5,350,5,10]\), что является хорошим массивом. В четвертом примере после выполнения операций массив \(a\) становится равным \([60,10,20]\), что является хорошим массивом.
| |
|
|
D. Запросы НОД
Конструктив
*2100
теория чисел
интерактив
Это интерактивная задача. Загадана перестановка \(p\) чисел \([0,1,2,\ldots,n-1]\). Ваша задача — найти \(2\) индекса \(x\) и \(y\) (\(1 \leq x, y \leq n\), возможно, \(x=y\)) такие, что \(p_x=0\) или \(p_y=0\). Чтобы это сделать, вы можете сделать не более чем \(2n\) запросов. В каждом запросе вы даете два целых числа \(i\) и \(j\) (\(1 \leq i, j \leq n\), \(i \neq j\)) и получаете значение \(\gcd(p_i,p_j)^\dagger\). Обратите внимание, что перестановка \(p\) зафиксирована до начала взаимодействия, и не зависит от ваших запросов. \(^\dagger\) \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\). Обратите внимание, что \(\gcd(x,0)=\gcd(0,x)=x\) для всех положительных целых чисел \(x\). Протокол взаимодействия Взаимодействие начинается для каждого набора входных данных после считывания числа \(n\). Чтобы сделать запрос, выведите «? \(i\) \(j\)» (\(1 \leq i, j \leq n\), \(i \neq j\)) без кавычек. После этого считайте одно целое число — ответ на ваш запрос \(\gcd(p_i,p_j)\). Вы можете сделать не более чем \(2n\) таких запросов в каждом наборе входных данных. Если вы знаете ответ, выведите «! \(x\) \(y\)» (\(1 \leq x, y \leq n\)) без кавычек. После этого считайте целое число \(1\) или \(-1\). Если \(p_x=0\) или \(p_y=0\), вы получите \(1\), иначе вы получите \(-1\). Если вы получили \(-1\), ваша программа должна немедленно завершиться, чтобы получить вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока. Если вы получили число \(-1\) вместо ответа или корректного значения \(n\), то ваша программа сделала некорректный запрос, превысила число запросов, или дала неправильны ответ на предыдущий набор входных данных. Ваша программа должна немедленно завершиться для получения вердикта Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока. После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте: - fflush(stdout) или cout.flush() в C++;
- System.out.flush() в Java;
- flush(output) в Pascal;
- stdout.flush() в Python;
- смотрите документацию для других языков.
Взломы Чтобы сделать взлом, используйте следующий формат. Первая строка должна содержать одно целое число \(t\) (\(1 \leq t \leq 10^4\)). Первая строка каждого набора входных данных должна содержать одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^4\)). Вторая строка должна содержать \(n\) целых чисел \(p_1,p_2,\ldots,p_n\). \(p\) должно быть перестановкой чисел \([0,1,2,\ldots,n-1]\). Сумма значений \(n\) не должна превосходить \(2 \cdot 10^4\). Примечание В первом примере взаимодействие происходит следующим образом. | Решение | Жюри | Комментарий | | \(\texttt{2}\) | В тесте 2 набора входных данных. | | \(\texttt{2}\) | В первом наборе загадана перестановка \([1,0]\) длины \(2\). | | \(\texttt{? 1 2}\) | \(\texttt{1}\) | Решение запрашивает \(\gcd(p_1,p_2)\), жюри отвечает \(1\). | | \(\texttt{! 1 2}\) | \(\texttt{1}\) | Решение знает, что либо \(p_1=0\), либо \(p_2=0\), и выводит ответ. Так как ответ правильный, жюри отвечает \(1\) и переходит к следующему набору входных данных. | | \(\texttt{5}\) | Во втором наборе загадана перестановка \([2,4,0,1,3]\) длины \(5\). | | \(\texttt{? 1 2}\) | \(\texttt{2}\) | Решение запрашивает \(\gcd(p_1,p_2)\), жюри отвечает \(2\). | | \(\texttt{? 2 3}\) | \(\texttt{4}\) | Решение запрашивает \(\gcd(p_2,p_3)\), жюри отвечает \(4\). | | \(\texttt{! 3 3}\) | \(\texttt{1}\) | Решение каким-то образом определило, что \(p_3=0\), и выводит ответ. Так как ответ верный, жюри отвечает \(1\). | Обратите внимание, что пустые строки в примерах ввода и вывода показаны для ясности и отсутствуют в настоящем взаимодействии. Помните про считывание \(1\) или \(-1\) после каждого набора входных данных.
| |
|
|
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\), а затем уменьшайте до конца. Обратитесь к примечаниям для получения дополнительных разъяснений. Выходные данные Для каждого набора входных данных выведите одну строку, содержащую количество битонических перестановок, удовлетворяющих вышеуказанным условиям по модулю \(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\)-достижимого ориентированного графа, и максимальное количество однонаправленных пар вершин среди всех таких \(p\)-достижимых ориентированных графов с минимальным количеством вершин. Примечание В первом примере минимальное количество вершин, необходимое для создания \(3\)-достижимого ориентированного графа это \(3\). Среди всех \(3\)-достижимых ориентированных графов с \(3\) вершинами, следующий граф \(G\) является одним из графиков с максимальным количеством однонаправленных пар вершин, который является \(0\).
| |
|
|
B. Дореми и идеальный урок по математике
математика
*900
теория чисел
«Все-все! Идеальный урок Дореми по математике уже начинается! Присаживайтесь и хорошо поработайте, если хотите иметь такой же IQ, как у меня!» На сегодняшнем уроке Дореми обучает всех вычитанию. И прямо сейчас она дает вам задание, чтобы проверить, насколько вы внимательно слушаете. Вам дано множество \(S\), содержащее положительные целые числа. Вы можете выполнить следующую операцию несколько (возможно, ноль) раз: - выбрать два целых числа \(x\) и \(y\) из множества \(S\) такие, что \(x > y\) и \(x - y\) не принадлежит множеству \(S\).
- добавить \(x-y\) в множество \(S\).
Вам нужно сказать Дореми, какое максимальное количество чисел может быть в \(S\), если выполнять все операции оптимально. Можно показать, что это количество ограничено. Выходные данные Для каждого набора входных данных вам нужно вывести максимально возможное количество чисел в \(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\) чисел.
| |
|
|
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. 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\) чисел, где \(i\)-е число означает максимальную длину удачной цепочки, порожденной парой \((x_i, y_i)\) или \(-1\), если цепочка может быть бесконечно длинной. Примечание В первом наборе входных данных \(\gcd(5, 15) = 5 > 1\), то есть данная пара не является удачной, а потому длина удачной цепочки равна \(0\). Во втором наборе входных данных \(\gcd(13 + 1, 37 + 1) = \gcd(14, 38) = 2\). А потому удачная цепочка состоит из одной пары \((13, 37)\).
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите одно целое число — наибольшее возможное натуральное число \(x\), удовлетворяющее условиям выше. Если такого \(x\) не существует, выведите \(-1\). Примечание В первом наборе \(2! + 1! = 2 + 1 = 3\), что кратно \(3\). В третьем наборе \(7! + 6! = 5040 + 720 = 5760\), что кратно \(8\).
| |
|
|
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\)). Выходные данные Выведите ответ по модулю \(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\).
| |
|
|
B1. Прямоугольная игра
*1000
теория чисел
Умный Бобер из ABBYY решил устроить себе выходной. Но бездельничать целый день оказалось слишком скучно, и он решил поиграть в игру с камешками. Изначально у Бобра есть n камешков. Он раскладывает их в a одинаковых рядов по b штук в каждом (a > 1). Учтите, что Бобер обязательно использует все камешки, то есть n = a·b. 10 камешков, разложенных в два ряда по 5 штук в каждом После того, как он разложил камешки, Умный Бобер забирает обратно любой из полученных рядов (то есть b камешков) и выбрасывает все остальные камешки. Затем он снова раскладывает все свои камешки (выбирая, возможно, другие a и b) и снова забирает себе один ряд, и так далее. Игра продолжается до тех пор, пока в какой-то момент у Бобра не останется ровно один камешек. Игровой процесс можно представить себе как конечную последовательность целых чисел c1, ..., ck, где: - c1 = n
- ci + 1 — количество камешков, которые останутся у Бобра после i-ого хода, то есть количество камешков в ряду некоторого разложения ci камешков (1 ≤ i < k). Заметим, что ci > ci + 1.
- ck = 1
Результатом игры называется сумма чисел ci. Вам дано число n. Найдите максимальный возможный результат игры. Выходные данные Выведите единственное целое число — максимальный возможный результат игры. Примечание Рассмотрим первый пример (c1 = 10). Возможные варианты развития игры: - Можно разложить камешки в 10 рядов по одному в каждом. Тогда c2 = 1, и игра закончится после первого же хода с результатом 11.
- Можно разложить камешки в 5 рядов по два камешка в каждом. Тогда c2 = 2, и игра продолжается. На втором ходе 2 камешка можно разложить единственным способом (помните, что выкладывать все камешки в один ряд нельзя!) — в 2 ряда по одному камешку. c3 = 1, и игра закончится с результатом 13.
- Наконец, можно разложить камешки в 2 ряда по пять камешков. Аналогичными рассуждениями получим c2 = 5, c3 = 1, и игра закончится с результатом 16 — максимальным из возможных.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите «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\).
| |
|
|
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\). Выходные данные Выведите одно целое число — побитовое исключающее ИЛИ значений всех хороших массивов. Примечание В первом примере есть \(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\).
| |
|
|
C. Хоссам и ученики
математика
*1600
теория чисел
жадные алгоритмы
У Хоссама \(n\) учеников. Он присвоил число \(a_i\) \(i\)-му ученику. Пара \(i\)-го и \(j\)-го (\(i \neq j\)) учеников называется успешной, если существует число \(x\) (\(x \geq 2\)) такое, что \(x\) делит \(a_i\) и \(x\) делит \(a_j\) Хоссам хочет знать, существует ли успешная пара среди его учеников. Хоссам очень устал и попросил вас помочь ему решить эту задачу. Выходные данные Для каждого набора входных данных выведите «YES» (без кавычек), если среди учеников существует успешная пара, и «NO» иначе. Вы можете выводить буквы в любом регистре. Примечание В первом примере первый и второй ученики составляют успешную пару: \(a_1 = 32, a_2 = 48\), можно выбрать \(x = 4\)
| |
|
|
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\)-му пауку. У исследователей есть гипотеза, что пауки всегда передают сообщения оптимально. По этой причине ученым потребуется программа, которая смогла бы вычислить минимальное время передачи сообщения, а также вывести один из оптимальных маршрутов. Выходные данные Если передать сообщение между заданной парой пауков невозможно, выведите \(-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\) лапками) ни с кем не дружит, поэтому ему невозможно передать сообщение.
| |
|
|
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\). Иначе в этой теме он полный новичок. Будем говорить, что команда учеников коллегиально разбирается во всех темах, если для любой темы по крайней мере один участник команды разбирается в ней. Нужно найти такую команду учеников, которая бы коллегиально разбиралась во всех темах, но при этом разность между максимальным и минимальным уровнями интеллекта участников команды была бы минимальна. Для такой команды выведите эту разность. Выходные данные Для каждого набора входных данных выведите ответ на отдельной строке. Если решения нет, выведите \(-1\). Примечание В первом наборе входных данных имеем учеников с уровнями интеллекта \(3\) и \(7\), а \(m = 4\). В частности, нет ученика с уровнем интеллекта, который бы делился на \(2\). Но поскольку \(2 \leq m\), то выбрать подходящую команду невозможно. Во втором наборе входных данных мы можем составить команду из одного участника: в ней будет лишь ученик с уровнем интеллекта \(2\). Эта команда будет коллегиально разбираться в обеих темах \(1\) и \(2\). В третьем наборе входных данных рассмотрим команду с уровнями интеллекта \(4, 5, 6, 7\). Такая команда будет коллегиально разбираться во всех темах \(1, 2, \ldots, 7\).
| |
|
|
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\). Выходные данные Для каждого набора выведите максимальное значение корня после выполнения не более чем \(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. НОД разбиение
Перебор
математика
теория чисел
*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\). Выходные данные Для каждого набора входных данных выведите единственное число — максимальный счет при оптимальном разбиении. Примечание В первом наборе входных данных можно выбрать \(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\). Выходные данные Для каждого набора входных данных выведите единственное число — количество различных весов среди оставшихся ребер. Примечание Графа \(G'\) для первого набора входных данных. На рисунке видно, что в графе \(2\) различных веса ребер. В пятом наборе входных данных остается лишь одна вершина, из которой не исходит ни одного ребра, поэтому ответ — \(0\).
| |
|
|
F. Три стула
Перебор
Структуры данных
Комбинаторика
дп
теория чисел
сортировки
*2300
битмаски
Как-то раз Кира нашел \(n\) друзей из Морио и решил собрать их за одним столом, чтобы провести мирный разговор. Рост друга \(i\) равен \(a_i\). Так получилось, что рост каждого из друзей уникален. Но вот незадача, в доме Киры всего \(3\) стула, и всех друзей усадить явно не удастся! Поэтому Кира должен позвать только \(3\) друзей. Но все не так просто! Если рост самого низкого и самого высокого из приглашенных друзей не взаимно просты, то друзья будут подшучивать друг над другом, что сильно разозлит Киру. Кира заинтересовался, сколько есть способов позвать \(3\) друзей так, чтобы они не стали подшучивать друг над другом? Два способа считаются различными, если существует такой друг, что он приглашен в одном случае, и не приглашен в другом. Формально, если Кира позовет друзей с номерами \(i\), \(j\) и \(k\), то должно выполняться \(\gcd(\min(a_i, a_j, a_k), \max(a_i, a_j, a_k)) = 1\), где \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\). Кира не очень силен в информатике, поэтому просит вас посчитать количество различных способов позвать друзей. Выходные данные В единственной строке выведите количество способов позвать друзей. Примечание В первом примере подходит одна способ — позвать друзей \(1\), \(2\) и \(3\). Здесь \(1 < 2 < 3\), и числа \(1\) и \(3\) взаимно просты.
| |
|
|
G. Вкусный десерт
Бинарный поиск
математика
теория чисел
*2400
хэши
снм
строковые суфф. структуры
Сегодня у повара Тонио важный день — в его родной город Морио приехал ревизор. Он доехал и до ресторана Тонио и заказал у него десерт. Тонио к такому повороту событий не был готов. Как известно, десерт — это строка из строчных латинских символов. Тонио вспомнил общее правило десертов — строку \(s\) длины \(n\). Любой десерт \(t\) является вкусным, если количество вхождений строки \(t\) в строку \(s\) как подстроки делится нацело на длину \(t\). Теперь Тонио хочет знать количество вкусных подстрок заготовки \(s\). Если подстрока встречается в строке \(s\) несколько раз, то в ответе нужно учесть все вхождения. Выходные данные В единственной строке выведите количество подстрок строки \(s\), являющихся вкусными десертами. Примечание В первом примере есть много вкусных подстрок — \(7\) из них это подстроки длины \(1\) (так как любое число делится на \(1\) нацело). Рассмотрим другие вкусные подстроки: - «ab» встречается в \(s\) \(2\) раза, что делится на длину подстроки.
- «ba» также встречается \(2\) раза.
Следовательно ответ \(7 + 2 + 2 = 11\). Обратите внимание, что в ответе учтены оба вхождения как «ab», так и «ba».
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите одно целое число — наибольшее возможное количество чисел среди \(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\), то есть все его элементы станут точными квадратами.
| |
|
|
E. Игра года
Перебор
Структуры данных
математика
теория чисел
*2300
Монокарп и Поликарп играют в компьютерную игру. В этой игре есть \(n\) боссов, пронумерованных от \(1\) до \(n\). Они будут сражаться с каждым боссом по следующему алгоритму: - Монокарп делает \(k\) попыток убить босса;
- Поликарп делает \(k\) попыток убить босса;
- Монокарп делает \(k\) попыток убить босса;
- Поликарп делает \(k\) попыток убить босса;
- ...
Монокарп убивает \(i\)-го босса со своей \(a_i\)-й попытки. Поликарп убивает \(i\)-го босса со своей \(b_i\)-й попытки. Когда один из них убивает \(i\)-го босса, они переходят к \((i+1)\)-му боссу. Счетчики количества попыток сбрасываются для них обоих. Когда один из них убивает \(n\)-го босса, игра заканчивается. Найдите все такие значения \(k\) от \(1\) до \(n\), что Монокарп убивает всех боссов. Выходные данные На каждый набор входных данных выведите две строки. В первой строке должно быть записано одно целое число \(\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\) — это ответ.
| |
|
|
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\). Обратите внимание, что вам не нужно минимизировать или максимизировать длину массива. Выходные данные Для каждого набора входных данных выведите максимальное значение \(\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\).
| |
|
|
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\) без изменений. Выходные данные Для каждого набора входных данных выведите Yes, если возможно изменить порядок элементов в \(a\), чтобы сделать его красивым, и выведите No, если нет. Вы можете вывести Yes и No в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ). Примечание В первом наборе входных данных ни \([3,6]\), ни \([6,3]\) не являются хорошими, поэтому невозможно получить красивый массив, изменив порядок элементов в \(a\). Во втором наборе входных данных \([1,2,4]\) уже является красивым. Если оставить массив \(a\) без изменений, можно получить красивый массив.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите единственное целое число — сумму \(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\).
| |
|
|
E. Таблица и делители
Перебор
дп
теория чисел
поиск в глубину и подобное
*2400
Вам задана таблица умножения \(n \times n\) и положительное целое число \(m = m_1 \cdot m_2\). Таблица умножения \(n \times n\) — это таблица из \(n\) строк и \(n\) столбцов, пронумерованных от \(1\) по \(n\), где \(a_{i, j} = i \cdot j\). Для каждого делителя \(d\) числа \(m\) определите: встречается ли \(d\) в таблице хотя бы раз, и если встречается, то какой наименьший номер строки, которая содержит \(d\). Выходные данные Для каждого набора входных данный, пусть \(d_1, d_2, \dots, d_k\) – это все делители \(m\), отсортированные в порядке возрастания. А также, пусть \(a_1, a_2, \dots, a_k\) — это массив ответов, где \(a_i\) равно наименьшему номеру строки, в которой встречается \(d_i\), либо \(0\), если такой строки в таблице нет. Так как массив \(a\) может быть длинным, выведите сначала число \(s\) — количество делителей \(m\), которые встречаются в таблице умножения \(n \times n\). Далее выведите одно число \(X = a_1 \oplus a_2 \oplus \dots \oplus a_k\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Примечание В первом наборе входных данных, \(m = 72 \cdot 1 = 72\) и имеет \(12\) делителей \([1, 2, 3, 4, 6, 8, 9, 12, 18, 24, 36, 72]\). Таблица умножения \(3 \times 3\) выглядит следующим образом: Для каждого делителя \(m\), что присутствует в таблице, выделена позиция с наименьшим номером строки. Соответственно, массив ответов \(a\) равен \([1, 1, 1, 2, 2, 0, 3, 0, 0, 0, 0, 0]\). В нем только \(6\) ненулевых значений, а исключающее ИЛИ \(a\) равен \(2\). Во втором наборе, \(m = 10 \cdot 15 = 150\) и имеет \(12\) делителей \([1, 2, 3, 5, 6, 10, 15, 25, 30, 50, 75, 150]\). Все делители кроме \(75\) и \(150\) присутствуют в таблице \(10 \times 10\). Массив \(a\) \(=\) \([1, 1, 1, 1, 1, 1, 3, 5, 3, 5, 0, 0]\). В нем \(10\) ненулевых значений и исключающее ИЛИ \(a\) равно \(0\). В третьем наборе, \(m = 1 \cdot 210 = 210\) и имеет \(16\) делителей \([1, 2, 3, 5, 6, 7, 10, 14, 15, 21, 30, 35, 42, 70, 105, 210]\). Таблица умножения \(6 \times 6\) с выделенными делителями изображена ниже: | 1 | 2 | 3 | 4 | 5 | 6 | | 1 | 1 | 2 | 3 | 4 | 5 | 6 | | 2 | 2 | 4 | 6 | 8 | 10 | 12 | | 3 | 3 | 6 | 9 | 12 | 15 | 18 | | 4 | 4 | 8 | 12 | 16 | 20 | 24 | | 5 | 5 | 10 | 15 | 20 | 25 | 30 | | 6 | 6 | 12 | 18 | 24 | 30 | 36 | Массив \(a\) \(=\) \([1, 1, 1, 1, 1, 0, 2, 0, 3, 0, 5, 0, 0, 0, 0, 0]\). В нем \(8\) ненулевых значений и исключающее ИЛИ \(a\) равно \(5\).
| |
|
|
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\). Выходные данные Выведите одно целое число — количество положительных целых чисел \(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\) не являются простыми числами.
| |
|
|
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 < 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\) в противном случае. Выходные данные Для каждого запроса вида «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\). Выходные данные Для каждого набора входных данных, выведите минимальное количество ценников необходимое для описания стоимостей всех товаров в магазине. Примечание В первом наборе входных данных можно выбрать \(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\) ценника.
| |
|
|
F. Подарки от Деда Ахмеда
математика
дп
теория чисел
*2500
В Школе Деда Ахмеда обучается \(n+1\) ученик. Ученики разбиты на \(k\) классов, и в \(i\)-м классе обучается \(s_i\) учеников. Таким образом, \(s_1 + s_2 + \ldots + s_k = n+1\). В честь скорого Дня дурака все ученики получат подарки! Дед Ахмед планировал заказать \(n+1\) коробку с подарками. В каждой коробке будет один или несколько подарков. Дед Ахмед распределит их между классами так, чтобы были выполнены следующие условия: - Класс номер \(i\) должен получить ровно \(s_i\) коробок (чтобы каждый ученик мог открыть ровно одну коробку с подарками).
- Суммарное количество подарков в коробках, полученных \(i\)-м классом, должно быть кратным \(s_i\) (то есть поровну распределяться между \(s_i\) учениками этого класса).
К сожалению, Дед Ахмед по невнимательности заказал всего \(n\) коробок с подарками, в \(i\)-й из которых содержится \(a_i\) подарков. У Ахмеда есть время, чтобы купить недостающую коробку с подарками, причем количество подарков в коробке должно быть целым числом от \(1\) до \(10^6\). Помогите Ахмеду определить, коробку с каким количеством подарков ему стоит купить, а также постройте подходящее распределение коробок по классам, или сообщите, что это невозможно. Выходные данные Если подходящего распределения не существует, в единственной строке выведите число \(-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\).
| |
|
|
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-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. Ещё одна n-мерная шоколадка
математика
дп
теория чисел
*2700
meet-in-the-middle
Мама купила мальчику Васе \(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\). Помогите ему в этом. Выходные данные Выведите одно число — максимальный возможный объём наименьшего из полученных кусочков, умноженный на \(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\)
| |
|
|
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\) строк, \(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\).
| |
|
|
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\) операций. Выходные данные Для каждого набора входных данных выведите максимально возможную сумму массива после оптимального выполнения \(k\) операций. Примечание В первом наборе входных данных лучшим способом является выбор \(i=1\), \(j=3\) в первой операции. Итоговая последовательность — \([7,4]\).
| |
|
|
B. Конфеты
Конструктив
математика
теория чисел
*800
Эта задача про конфеты. Изначально у вас есть \(1\) конфета, а вы хотите иметь ровно \(n\) конфет. Вы можете использовать два следующих заклинания в любом порядке не более \(40\) раз суммарно. - Если у вас сейчас \(x\) конфет, то, используя первое заклинание, можно превратить \(x\) конфет в \(2x-1\) конфету.
- Если у вас сейчас \(x\) конфет, то, используя второе заклинание, можно превратить \(x\) конфет в \(2x+1\) конфету.
Составьте список заклинаний так, чтобы после использования этих заклинаний по порядку у вас было ровно \(n\) конфет, или определите, что это невозможно. Выходные данные Для каждого набора входных данных выведите следующее. Если есть возможность получить \(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\) конфет.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите в отдельной строке число \(a_k\) в индексации с \(1\).
| |
|
|
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\). Выходные данные Вывести одно целое число 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\).
| |
|
|
F. Факторизация
теория чисел
*особая задача
Каков самый большой делитель числа \(n\), являющийся простым числом?
| |
|
|
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\). Выходные данные Выведите единственное целое число — длину цикла движения частицы, взятую по модулю \(998244353\). Примечание В первом примере единственный излучатель на позиции \(1\) всегда имеет состояние \(\texttt{0}\). В моменты времени \(0,1,2,3\) позиции частицы равны \(0,1,2,1\) соответственно. Затем те же позиции будут повторяться, поэтому \(c=4\). Анимация для второго примера: здесь или более плавная анимация.
| |
|
|
A. Ян навещает Мэри
Конструктив
геометрия
теория чисел
*800
Лягушки Ян и Мэри живут в точках целочисленной решётки декартовой координатной плоскости, Ян живёт в \((0,0)\), Мэри живёт в \((a,b)\). Ян хочет навестить Мэри, прыгая по декартовой координатной плоскости. Каждую секунду он прыгает из его текущей позиции \((x_p, y_p)\) в другую целочисленную точку \((x_q, y_q)\), такую, что никакая другая целочисленная точка, кроме \((x_p, y_p)\) и \((x_q, y_q)\), не лежит на отрезке между точками \((x_p, y_p)\) и \((x_q, y_q)\). Так как Ян хочет встретить Мэри как можно быстрее, он хочет допрыгать до точки \((a,b)\), используя не более \(2\) прыжков. К сожалению, Ян плох в математике. Можете ему помочь? Точка целочисленной решётки определяется как точка, у которой \(x\)-координата и \(y\)-координата являются целыми числами. Выходные данные Для каждого набора входных данных выведите целое число \(n\) (\(1 \le n \le 2\)) в первой строке — количество прыжков, которые сделает Ян для встречи с Мэри. Обратите внимание, что вам не нужно минимизировать количество прыжков. В \(i\)-й из следующих \(n\) строк, выведите два целых числа \(0 \le x_i,y_i \le 10^9\), разделённых пробелом, обозначающих координаты \((x_i,y_i)\) Яна после \(i\)-го прыжка. Должно выполняться условие \(x_n = a\), \(y_n = b\). Начальное местоположение Яна и его местоположение после каждого из \(n\) прыжков не обязательно должны быть разными. Если существует несколько решений, выведите любое из них. Примечание В первом наборе входных данных: 
\((0,0) \to (3,4)\) Во втором наборе входных данных: 
\((0,0) \to (3,2) \to (4,4)\) В третьем наборе входных данных: 
\((0,0) \to (5,3) \to (3,6)\)
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите одно целое число — количество магических троек для последовательности \(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\). Выходные данные Для каждого набора входных данных выведите одно целое число — количество магических троек для последовательности \(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)\).
| |
|
|
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\) удовлетворяющего условиям. Выходные данные Для каждого набора входных данных выведите размер \(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\) являются сильно составными числами.
| |
|
|
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}\). Выходные данные Для каждого набора входных данных выведите максимальное число \(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\) вариантов выбора. В каждом раунде каждый программист голосует за один из оставшихся алгоритмов. После раунда остаются только те алгоритмы, за которые проголосовало максимальное число человек. Процесс голосования завершается, когда остается только один алгоритм. Определите, может ли процесс голосования длиться вечно, или вне зависимости от голосов они выберут один вариант за некоторое конечное число раундов? Выходные данные Для каждого набора в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\). В таком случае оба алгоритма получают максимальное число голосов, и остаются доступными на следующий раунд.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите максимальное значение \(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]\)
| |
|
|
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. Например, последовательности (())(), (), (()(())) и пустая строка являются правильными, а )(, (() и (())( — нет. Выходные данные Для каждого набора входных данных выведите количество гиперправильных скобочных последовательностей по модулю \(998\,244\,353\). Примечание - Для первого набора есть \(5\) гиперправильных скобочных последовательностей длины \(6\): ((())), (()()), (())(), ()(()) и ()()().
- Для второго набора нет правильных скобочных последовательностей длины \(5\), а следовательно, нет гиперправильных скобочных последовательностей длины \(5\).
- Для третьего набора нет гиперправильных скобочных последовательностей длины \(8\), для которых подстрока \([1 \ldots 3]\) является правильной скобочной последовательностью.
- Для четвертого набора существует \(4\) гиперправильные скобочные последовательности: ((())(())), ((())()()), ()()((())) и ()()(()()).
| |
|
|
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]\). Выходные данные Для каждого набора входных выведите единственное целое число — наименьшее хорошее число. Примечание В первом наборе входных данных, \(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\).
| |
|
|
D. Гипотеза доктора Брауна
математика
теория чисел
поиск в глубину и подобное
графы
*2900
Повстанцы потерпели поражение в последней битве с имперскими войсками, но появился луч новой надежды. Тем временем на одной из завоеванных планет Люк готовился к нелегальным уличным гонкам (что не должно удивлять, учитывая историю его семьи). Люк прибыл к финишу с 88 милями в час на спидометре. Выйдя из машины, он был встречен новой реальностью. Оказалось, что битва еще не произошла и начнется ровно через \(k\) часов. Повстанцы разместили по одному линкору на каждой из \(n\) планет. \(m\) однонаправленных червоточин соединяют планеты. Прохождение каждой червоточины занимает ровно один час. Генералы Империума точно спланировали битву, но их войска не могут быстро адаптироваться к изменяющимся обстоятельствам. Поэтому повстанцам достаточно переместить несколько кораблей перед битвой, чтобы запутать противника, обеспечить победу и изменить судьбу галактики. В силу многочисленных стратегических соображений, которые мы сейчас опустим, повстанцы хотели бы выбрать два корабля, которые поменяются местами так, чтобы оба они были в движении все время (ровно \(k\) часов). Другими словами, повстанцы ищут две планеты \(x\) и \(y\) такие, что существуют пути длиной \(k\) от \(x\) до \(y\) и от \(y\) до \(x\). Из-за ограниченного запаса топлива выбор одного корабля также будет приемлемым. Этот корабль должен лететь через червоточины в течение \(k\) часов, а затем вернется на исходную планету. Сколько существует способов выбора кораблей для выполнения задания? Выходные данные В первой и единственной строке ваша программа должна вывести количество возможных вариантов выбора пары или одного военного корабля для миссии. Примечание В первом наборе входных данных можно выбрать пары кораблей со следующих планет: \(2\) и \(5\), \(3\) и \(5\), \(1\) и \(4\). Также можно было выбрать отдельные корабли с планет \(6\) и \(7\). Во втором наборе входных данных можно выбрать пару кораблей из следующих планет: \(2\) и \(3\). Также можно было выбрать отдельные корабли с планет \(1\), \(2\), \(3\), \(4\) и \(5\). В третьем наборе входных данных нет пар кораблей, которые мы можем выбрать. Также можно было выбрать отдельные корабли с планет \(2\) и \(3\).
| |
|
|
C. Без простых разностей
Конструктив
математика
теория чисел
*1400
Вам даны целые числа \(n\) и \(m\). Заполните таблицу размером \(n\) на \(m\) целыми числами от \(1\) до \(n\cdot m\) таким образом, чтобы для любых двух соседних клеток сетки модуль разности значений в этих клетках не был простым числом. Две клетки в таблице считаются соседними, если они имеют общую сторону. Можно показать, что при заданных ограничениях решение всегда существует. Выходные данные Для каждого набора входных данных выведите \(n\) строк по \(m\) целых чисел в каждой, представляющих итоговую таблицу. Каждое число от \(1\) до \(n\cdot m\) должно появиться в таблице ровно один раз. Дополнительные пробелы и пустые строки в приведенном ниже примере вывода присутствуют только для удобства чтения и не являются обязательными. Если существует несколько решений, выведите любое из них. Примечание Первый пример соответствует картинке выше. Единственными абсолютными разностями между соседними элементами в этой таблице являются числа \(1\), \(4\), \(6\), \(8\) и \(9\), ни одно из которых не является простым.
| |
|
|
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\). Можно доказать, что строка, удовлетворяющая всем условиям задачи, всегда существует. Выходные данные Для каждого набора входных данных выведите строку с минимальным числом различных символов среди всех подходящих строк длины \(n\). Если существует несколько решений, выведите любое из них. Примечание В первом наборе входных данных есть \(3\) способа, как можно построчно вписать строку \(s\) в матрицу, причём все они не являются плохими: Можно доказать, что меньше чем \(3\) различными символами обойтись нельзя. Во втором наборе входных данных есть \(2\) способа, как можно построчно вписать строку \(s\) в матрицу, причём все они не являются плохими: Можно доказать, что меньше чем \(2\) различными символами обойтись нельзя. В третьем наборе входных данных есть всего \(1\) способ, как можно построчно вписать строку \(s\) в матрицу, причём он не является плохим. В четвёртом наборе входных данных есть \(4\) способа, как можно построчно вписать строку \(s\) в матрицу, причём все они не являются плохими: Можно доказать, что меньше чем \(4\) различными символами обойтись нельзя. Обратите внимание, что, например, строка « orange» не является корректным ответом, поскольку в ней \(6 > 4\) различных символов, строка же « banana» не является корректным ответом, потому что она является построчной склейкой следующей плохой таблицы:
| |
|
|
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\). Выходные данные Если решения не существует, выведите одно целое число \(-1\). В противном случае выведите \(n-1\) строку, содержащую веса \(w_1,\dots,w_{n-1}\). Если существует несколько решений, выведите любое из них. Примечание В первом примере дерево выглядит следующим образом: Во втором примере вес \(w_2\) не может быть равен \(0\), поскольку должен быть целым положительным числом. Поэтому решения нет. В третьем примере дерево выглядит следующим образом:
| |
|
|
A. Запрещенное число
Конструктив
математика
реализация
теория чисел
*800
Дано целое число \(n\), которое вы хотите получить. У вас есть бесконечный запас каждого целого числа от \(1\) до \(k\), кроме числа \(x\) (числа \(x\) нет ни одной штуки). Разрешается взять произвольное количество каждого из этих чисел (возможно, ноль). Можете ли вы сделать так, чтобы сумма взятых чисел была равна \(n\)? Если существует несколько ответов, то выведите любой из них. Выходные данные На каждый набор входных данных в первой строке выведите «YES» или «NO» — можете ли вы взять произвольное количество каждого из чисел от \(1\) до \(k\), кроме \(x\), так, чтобы их сумма была равна \(n\). Если можете, то во второй строке должно быть записано одно целое число \(m\) — суммарное количество взятых чисел. В третьей строке должны быть записаны \(m\) целых чисел — каждое от \(1\) до \(k\), не равно \(x\), а их сумма равна \(n\). Если существует несколько ответов, то выведите любой из них. Примечание Другой возможный ответ на первый набор входных данный — это \([3, 3, 3, 1]\). Обратите внимание, что не требуется минимизировать количество взятых чисел. Существуют и другие ответы. Во втором наборе у вас есть только бесконечный запас чисел \(2\). Невозможно собрать сумму \(5\) только из них. В пятом наборе вообще нет доступных чисел, поэтому невозможно собрать никакую положительную сумму.
| |
|
|
F. Пловцы в бассейне
математика
дп
теория чисел
*2800
бпф
В бассейне длины \(l\) собираются поплавать \(n\) человек. Все люди начинают плавать одновременно (в момент \(0\)), но можно считать, что они плавают по разным дорожками, а потому не создают помех друг другу. Каждый пловец плывет по следующему маршруту: он стартует в точке \(0\) и плывет в точку \(l\) с постоянной скоростью (у \(i\)-го пловца скорость \(v_i\) единиц в секунду). Достигнув точки \(l\), он моментально (за незначительно малое время) разворачивается и плывет назад в точку \(0\) с той же постоянной скоростью. После возвращения в точку \(0\) он моментально разворачивается и плывет в точку \(l\), и так далее. Назовем некоторый действительный момент времени моментом встречи, если хотя бы два пловца оказались в одной и той же точке бассейна в данный момент (точка может быть как \(0\) или \(l\), так и любая другая действительная точка в пределах бассейна). Бассейн будет открыт для плавания на \(t\) секунд. Посчитайте количество моментов встречи, пока бассейн открыт. Так как ответ может быть очень большим, выведите его по модулю \(10^9 + 7\). Выходные данные Выведите одно целое число — количество моментов встреч (включая момент \(t\), если нужно, и исключая момент \(0\)) по модулю \(10^9 + 7\). Примечание В первом примере три момента встречи: - момент \(6\), в который оба пловца в точке \(6\);
- момент \(12\), в который оба пловца в точке \(6\);
- и момент \(18\), в который оба пловца в точке \(0\).
| |
|
|
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» — в противном случае. Выходные данные Для каждого набора входных данных выведите «YES», если пара массивов цен является скучной, «NO» — иначе. Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ. Примечание В первом наборе входных данных массив \(a\) изначально нулевой. Во втором наборе входных данных после первой операции \(a = [1, 2, 3], b = [0, 0, 0]\). После второй операции \(a = [0, 0, 0], b = [1, 2, 3]\). В третьем наборе входных данных можно показать, что массив \(a\) никогда не станет нулевым.
| |
|
|
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\) является простым. Выходные данные Выведите \(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\).
| |
|
|
D. Пришествие
математика
теория чисел
*2600
К гномикам спустился их Великий Грибной король, но не каждый мог увидеть его. Лишь только некоторое количество избранных гномиков могли увидеть короля. Известно, что Великого Грибного короля могут увидеть лишь LCM(k2l + 1, k2l + 1 + 1, ..., k2r + 1) гномиков. Числа k, l, r каким-то непонятным простым гномикам способом выбирает Великий Грибной король. Гномики историки решили задокументировать все пришествия Великого Грибного короля. Для каждого пришествия, гномики историки знают три числа ki, li, ri, которые выбрал Великий Грибной король в это пришествие, и простое число pi. Помогите им посчитать остаток от деления на pi количества гномиков, которые могут увидеть короля, для каждого из пришествий. Выходные данные Для каждого пришествия выведите ответ в отдельной строке — остаток от деления количества гномов, которые смогут увидеть короля, на число pi. Ответы для пришествий выводите в том порядке, в котором заданы описания пришествий во входных данных. Примечание Считается, что LCM(a1, a2, ..., an) обозначает наименьшее общее кратное чисел a1, a2, ..., an. Считается, что x0 = 1, для любых x.
| |
|
|
F. We Were Both Children
Перебор
математика
реализация
теория чисел
*1300
Михай и Славик смотрели на группу из \(n\) лягушек, пронумерованных от \(1\) до \(n\), которые изначально находились в точке \(0\). Лягушка \(i\) может прыгнуть на расстояние \(a_i\). Каждую секунду лягушка \(i\) прыгает на \(a_i\) единиц вперед. Прежде чем лягушки начнут прыгать, Славик и Михай могут поставить ровно одну ловушку в координате, чтобы поймать всех лягушек, которые когда-либо пройдут через эту координату. Однако, дети не могут уйти далеко от своего дома, поэтому они могут поставить ловушку только в одной из первых \(n\) точках (то есть в точке с координатой от \(1\) до \(n\)), и дети не могут поставить ловушку в точке \(0\), так как они боятся лягушек. Можете ли вы помочь Славику и Михаю определить, сколько лягушек они могут поймать, используя ловушку? Выходные данные Для каждого набора входных данных выведите одно целое число — максимальное количество лягушек, которых Славик и Михай могут поймать с помощью ловушки. Примечание В первом примере лягушки будут прыгать следующим образом: - Лягушка 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\) и мгновенно поймать всех трех лягушек.
| |
|
|
A. Набор Ntarsis
Бинарный поиск
математика
теория чисел
*1800
Ntarsis получил набор \(S\), изначально содержащий целые числа \(1, 2, 3, \ldots, 10^{1000}\) в отсортированном порядке. Каждый день он будет одновременно удалять \(a_1\)-е, \(a_2\)-е, \(\ldots\), \(a_n\)-е наименьшие числа в \(S\). Какое наименьшее число останется в \(S\) после \(k\) дней? Выходные данные Для каждого набора входных данных выведите целое число, которое является наименьшим элементом в \(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. Наибольший интервал делителей
Перебор
Комбинаторика
математика
*900
теория чисел
жадные алгоритмы
Дано число \(n\). Найдите максимальный размер интервала \([l, r]\) из целых положительных чисел такого, что для каждого числа \(i\) из этого интервала (т.е. \(l \leq i \leq r\)) \(n\) кратно \(i\). Если вам даны два целых числа \(l\le r\), то размер интервала \([l, r]\) равен \(r-l+1\) (т.е. совпадает с количеством целых чисел, принадлежащих интервалу). Выходные данные Для каждого набора входных данных вывести одно целое число: максимальный размер допустимого интервала. Примечание В первом наборе входных данных допустимым интервалом с максимальным размером является \([1, 1]\) (он допустим, так как \(n = 1\) кратно \(1\)) и его размер равен \(1\). Во втором наборе входных данных допустимым интервалом с максимальным размером является \([4, 5]\) (он допустим, так как \(n = 40\) кратно \(4\) и \(5\)), а его размер равен \(2\). В третьем наборе входных данных допустимым интервалом с максимальным размером является \([9, 11]\). В четвертом наборе входных данных допустимым интервалом с максимальным размером является \([8, 13]\). В седьмом наборе входных данных допустимым интервалом с максимальным размером является \([327869, 327871]\).
| |
|
|
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)\). Тогда Петя возьмёт вафлю из рюкзака и сразу съест её.
Вы можете считать, что Петя не тратит время на то, чтобы съесть вафлю. Петя никогда не будет есть две или более вафли около одной лавочки. Вы хотите минимизировать количество вафель, которые съест Петя в течении прогулки. Для этого вы попросите администрацию ЛКШ убрать ровно одну торговую палатку с Аллеи до того как Петя начнёт движение. Определите минимальное возможное количество вафель, которые съест Петя в течении прогулки. Также найдите количество торговых палаток, таких что если убрать одну из них, Петя съест минимальное возможное число вафель. Выходные данные Для каждого набора входных данных выведите два целых числа — минимальное количество вафель, которые съест Петя, если будет убрана ровно одна торговая палатка, и количество торговых палаток, таких что если убрать одну из них, Петя съест минимальное возможное число вафель. Примечание В первом наборе данных \(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\)). Выходные данные Для каждого набора входных данных выведите \(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\), если их не существует. Выходные данные Для каждого набора входных данных выведите одно целое число \(-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]\).
| |
|
|
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\) операций. Можно доказать, что такая последовательность всегда существует. Выходные данные Для каждого набора входных данных выведите две строки. В первой строке выведите целое число \(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\).
| |
|
|
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\).
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\).
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите целые числа \(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\)
| |
|
|
C. Медуза и зеленое яблоко
математика
теория чисел
*1400
жадные алгоритмы
битмаски
У медузы есть \(n\) кусочков зеленого яблока. Каждый кусочек весит \(1~\text{кг}\). Медуза хочет разделить эти кусочки зеленого яблока поровну между \(m\) людьми. У Медузы есть волшебный нож. Каждый раз Медуза может выбрать один кусок зеленого яблока и разделить его на два меньших куска, причем каждый кусок будет иметь массу, равную половине массы исходного куска. Медуза хочет узнать минимальное количество операций, необходимых для того, чтобы она могла разделить кусочки зеленого яблока так, чтобы общий вес кусочков яблока, полученных каждым человеком, был одинаковым. Выходные данные Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы разделить все зеленые яблоки поровну между \(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{кг}\).
| |
|
|
B. Эффект от крема против прыщей
Комбинаторика
*1500
теория чисел
сортировки
У Чанеки есть массив \([a_1,a_2,\ldots,a_n]\). Изначально все элементы покрашены в белый. Чанека выберет один или несколько различных индексов и покрасит элементы с этими индексами в черный цвет. Затем она выберет все белые элементы, чьи индексы кратны индексу по крайней мере одного черного элемента, и покрасит их в зеленый цвет. После этого ее оценка будет равна максимальному значению \(a_i\) среди всех черных и зеленых элементов. Существует \(2^n-1\) способов выбрать черные индексы. Найдите сумму оценок для всех возможных способов, которыми Чанека может выбрать черные индексы. Поскольку ответ может быть очень большим, выведите его по модулю \(998\,244\,353\). Выходные данные Выведите одно целое число — сумму оценок по всем способам выбрать черные индексы по модулю \(998\,244\,353\). Примечание В первом примере ниже перечислены \(15\) возможных вариантов выбора черных индексов: - Индекс \(1\) - черный. Индексы \(2\), \(3\) и \(4\) - зеленые. Максимальное значение среди них - \(19\).
- Индекс \(2\) - черный. Индекс \(4\) - зеленый. Максимальное значение среди них - \(14\).
- Индекс \(3\) - черный. Максимальное значение среди них - \(19\).
- Индекс \(4\) - черный. Максимальное значение среди них - \(9\).
- Индексы \(1\) и \(2\) - черные. Индексы \(3\) и \(4\) - зеленые. Максимальное значение среди них - \(19\).
- Индексы \(1\) и \(3\) - черные. Индексы \(2\) и \(4\) - зеленые. Максимальное значение среди них - \(19\).
- Индексы \(1\) и \(4\) - черные. Индексы \(2\) и \(3\) - зеленые. Максимальное значение среди них - \(19\).
- Индексы \(2\) и \(3\) - черные. Индекс \(4\) - зеленый. Максимальное значение среди них - \(19\).
- Индексы \(2\) и \(4\) - черные. Максимальное значение среди них - \(14\).
- Индексы \(3\) и \(4\) - черные. Максимальное значение среди них - \(19\).
- Индексы \(1\), \(2\) и \(3\) - черные. Индекс \(4\) - зеленый. Максимальное значение среди них - \(19\).
- Индексы \(1\), \(2\) и \(4\) - черные. Индекс \(3\) - зеленый. Максимальное значение среди них - \(19\).
- Индексы \(1\), \(3\) и \(4\) - черные. Индекс \(2\) - зеленый. Максимальное значение среди них - \(19\).
- Индексы \(2\), \(3\) и \(4\) - черные. Максимальное значение среди них - \(19\).
- Индексы \(1\), \(2\), \(3\) и \(4\) - черные. Максимальное значение среди них - \(19\).
Общая сумма составляет \(19+14+19+9+19+19+19+19+14+19+19+19+19+19+19 = 265\).
| |
|
|
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\)? Выходные данные Для каждого набора входных данных в отдельной строке выведите количество допустимых способов присвоения целого неотрицательного числа в слот \(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\).
| |
|
|
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\), однако, даже с таким ограничением, ему все равно нужна ваша помощь с этой задачей. Выходные данные Для каждого запроса типа 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».
| |
|
|
F. Остаться в живых
Перебор
Структуры данных
теория чисел
*2800
В компьютерной игре есть \(n\) героев. У каждого героя есть здоровье \(h\) и изначальная броня \(a\). Пусть текущее количество брони равно \(a_{\mathit{cur}}\), изначально равное \(a\). Когда герою наносится \(x\) урона, происходит следующее: если \(x < a_{\mathit{cur}}\), то из \(a_{\mathit{cur}}\) вычитается \(x\); иначе из \(h\) вычитается \(1\), а \(a_{\mathit{cur}}\) снова становится равно \(a\). В начале игры вы выбираете значение \(x\) (целое число, строго большее \(0\)). Затем вы атакуете героев, пока все не погибнут: за один раунд вы наносите \(x\) урона каждому живому герою. Герой погибает, когда его здоровье становится равно \(0\). Игра заканчивается, когда все герои погибают. Последний погибший герой получает количество очков, равное количеству раундов, в течение которых он был единственным живым героем. Остальные герои получают \(0\) очков. В частности, если в последнем раунде погибают несколько героев, то все герои получают \(0\) очков. Вы сыграли по одной игре на каждое возможное значение \(x\) (от \(1\) до бесконечности). Между играми очки сбрасывались. Какое наибольшее количество очков было у каждого героя? Выходные данные На каждый набор входных данных выведите \(n\) целых чисел — максимальное количество очков, которое было у героя в течение игр, сыгранных для каждого возможного \(x\). Примечание В первом наборе входных данных игра на \(x = 1\) играется так: - до всех раундов: у героев \(h = [3, 1, 2]\), \(a_{\mathit{cur}} = [3, 11, 5]\);
- раунд \(1\): \(1\) урона наносится всем героям: \(h\) остается \([3, 1, 2]\), \(a_{\mathit{cur}}\) становится \([2, 10, 4]\);
- раунд \(2\): \(h = [3, 1, 2]\), \(a_{\mathit{cur}} = [1, 9, 3]\);
- раунд \(3\): у первого героя заканчивается броня, поэтому он теряет очко здоровья: \(h = [2, 1, 2]\), \(a_{\mathit{cur}} = [3, 8, 2]\);
- ...
- раунд \(9\): первый герой погибает, так как его здоровье становится равно \(0\): \(h = [0, 1, 1]\), \(a_{\mathit{cur}} = [0, 2, 1]\);
- раунд \(10\): третий герой погибает: \(h = [0, 1, 0]\), \(a_{\mathit{cur}} = [0, 1, 0]\);
- раунд \(11\): второй герой погибает: \(h = [0, 0, 0]\), \(a_{\mathit{cur}} = [0, 0, 0]\).
Второй герой погиб последним, и был единственным живым героев в течение одного раунда. Поэтому он получает \(1\) очко за эту игру. Игра на \(x = 4\) играется так: - раунд \(1\): \(h = [2, 1, 2]\), \(a_{\mathit{cur}} = [3, 7, 1]\);
- раунд \(2\): \(h = [1, 1, 1]\), \(a_{\mathit{cur}} = [3, 3, 5]\);
- раунд \(3\): \(h = [0, 0, 1]\), \(a_{\mathit{cur}} = [0, 0, 1]\);
- раунд \(4\): \(h = [0, 0, 0]\), \(a_{\mathit{cur}} = [0, 0, 0]\);
Третий герой погиб последним, и был единственным живым героев в течение одного раунда.
| |
|
|
D. Уравняй делением
математика
теория чисел
*1300
Вам дан массив \(a\), состоящий из \(n\) целых положительных чисел. Вы можете совершать над ним операцию, состоящую из следующей последовательности действий: - выбрать пару элементов \(a_i\) и \(a_j\) (\(1 \le i, j \le n\) и \(i \neq j\));
- выбрать один из делителей числа \(a_i\), то есть число \(x\) такое, что \(a_i \bmod x = 0\);
- заменить \(a_i\) на \(\frac{a_i}{x}\) и \(a_j\) на \(a_j \cdot x\).
Определите, можно ли, применив операцию к массиву некоторое количество раз (возможно, нулевое) сделать все элементы в массиве одинаковыми? Например, пусть дан массив \(a\) = [\(100, 2, 50, 10, 1\)], состоящий из \(5\) элементов. Произведем над ним две операции: - Выберем \(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\)];
- Выберем \(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\). Выходные данные Для каждого набора входных данных в отдельной строке выведите: - «YES», если можно сделать элементы массива равными, применяя операцию некоторое (возможно, нулевое) количество раз;
- «NO» в противном случае.
Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ). Примечание Первый набор входных данных разобран в условии задачи.
| |
|
|
E1. Две перестановки (простая версия)
Перебор
Конструктив
теория чисел
жадные алгоритмы
*2400
Это простая версия задачи. Различие между двумя версиями заключается в том, что в этой версии не нужно минимизировать число выполняемых операций. Делать взломы можно только в том случае, если решены обе версии задачи. Даны две перестановки\(^{\dagger}\) \(p_{1}, p_{2}, \ldots, p_{n}\) (чисел от \(1\) до \(n\)) и \(q_{1}, q_{2}, \ldots, q_{m}\) (чисел от \(1\) до \(m\)). Изначально \(p_{i}=a_{i}\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = b_{j}\) для всех \(j = 1, 2, \ldots, m\). Вы можете применять к перестановкам следующую операцию несколько раз (возможно, ни одного). За одну операцию \(p\) и \(q\) меняются в соответствии с тремя следующими шагами: - Вы выбираете целые числа \(i\), \(j\), такие что \(1 \le i \le n\) and \(1 \le j \le m\).
- Перестановка \(p\) разбивается на три части, получающиеся пр и рассмотрении \(p_i\) в качестве разделителя: левая часть состоит из \(p_1, p_2, \ldots, p_{i-1}\) (эта часть может быть пустой), средняя часть состоит из одного числа \(p_i\), а правая часть состоит из \(p_{i+1}, p_{i+2}, \ldots, p_n\) (эта часть может быть пустой). Далее, нужно переставить местами левую и правую часть в этом разбиении. Формально, после этого шага \(p\) становится равной \(p_{i+1}, p_{i+2}, \ldots, p_{n}, p_{i}, p_{1}, p_{2}, \ldots, p_{i-1}\). Элементы вновь образованной \(p\) нумеруются заново, начиная с \(1\).
- Проделайте то же преобразование над \(q\) с индексом \(j\). Формально, после этого шага \(q\) становится равной \(q_{j+1}, q_{j+2}, \ldots, q_{m}, q_{j}, q_{1}, q_{2}, \ldots, q_{j-1}\). Элементы вновь образованной \(q\) нумеруются заново, начиная с \(1\).
Ваша цель — добиться одновременного выполнения равенств \(p_{i}=i\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = j\) для всех \(j = 1, 2, \ldots, m\). Найдите произвольный способ добиться этого, используя не более \(10\,000\) операций, или сообщите, что это невозможно. Обратите внимание: вам не нужно минимизировать число выполненных операций. Можно показать, что если цель достижима, то существует способ добиться её, используя не более \(10\,000\) операций. \(^{\dagger}\) Перестановкой длины \(k\) является массив, состоящий из \(k\) различных целых чисел от \(1\) до \(k\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(k=3\), но в массиве встречается \(4\)). Выходные данные Если решения не существует, выведите одно целое число \(-1\). Иначе сначала выведите целое число \(k\) (\(0 \le k \le 10\,000\)) — число выполняемых операций, а в каждой из последующих \(k\) строк выведите два числа \(i\) и \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)) — числа, выбранные на очередной итерации. Если существует несколько решений, выведите любое из них. Обратите внимание: вам не нужно минимизировать число выполненных операций. Примечание В первом тесте можно достичь цели за \(2\) операции: - На первой операции выбрать \(i = 3\), \(j = 4\). После этого \(p\) станет \([3, 2, 1]\), а \(q\) станет \([3, 4, 5, 2, 1]\).
- На второй операции выбрать \(i = 2\), \(j = 4\). После этого \(p\) станет \([1, 2, 3]\), а \(q\) станет \([1, 2, 3, 4, 5]\).
В третьем тесте достичь цели невозможно.
| |
|
|
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\). Найдите количество хороших пар. Выходные данные Для каждого набора входных данных выведите количество хороших пар. Примечание В первом наборе входных данных нет хороших пар. Во втором наборе входных данных хорошими являются пары \((1, 2)\), \((2, 3)\) и \((2, 4)\).
| |
|
|
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\). Выходные данные Выведите одно целое число — ответ на задачу по модулю \(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\). Выходные данные Выведите одно целое число — ответ на задачу по модулю \(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}\).
| |
|
|
A. Игра с числами
математика
теория чисел
*800
игры
Ваня и Вова играют в игру. Игрокам дано целое число \(n\). На своём ходу игрок может либо прибавить к текущему числу \(1\), либо вычесть \(1\). Игроки ходят по очереди, начинает Ваня. Если после хода Вани число стало делиться нацело на \(3\), то он побеждает. Если после \(10\) ходов Ваня не выиграл, то побеждает Вова. Напишите программу, которая по целому числу \(n\) определяет, кто победит, если оба игрока играют оптимально. Выходные данные Для каждого набора входных данных выведите «First» без кавычек, если выиграет Ваня, и «Second» без кавычек иначе.
| |
|
|
B. 250 тысяч тонн тротила
Перебор
реализация
теория чисел
*1100
Лёша участвует в съёмке очередного ролика BrMeast, и BrMeast попросил Лёшу подготовить 250 тысяч тонн тротила, но Лёша его не расслышал, поэтому он подготовил \(n\) коробок. Лёша хочет погрузить эти коробки в грузовики, для этого он расставил их в ряд, \(i\)-я слева коробка имеет вес \(a_i\) тонн. Все грузовики, которые собирается использовать Лёша, вмещают в себя одинаковое количество коробок, обозначим это количество \(k\). Тогда погрузка происходит следующим образом: - В первый грузовик помещаются первые \(k\) коробок,
- Во второй грузовик помещаются вторые \(k\) коробок,
- \(\dotsb\)
- В \(\frac{n}{k}\)-й грузовик помещаются последние \(k\) коробок.
По окончании погрузки в каждом грузовике должно быть ровно \(k\) коробок. То есть, если в какой-то момент в грузовик не получится загрузить ровно \(k\) коробок, то вариант погрузки с таким \(k\) невозможен. Лёша ненавидит справедливость, так что он хочет, чтобы максимальная абсолютная разница между суммарным весом каких-либо двух грузовиков была как можно больше. Если грузовик один, эта величина равна \(0\). У Лёши есть достаточно много связей, поэтому для каждого \(1 \leq k \leq n\) он может найти такую компанию, что каждый её грузовик вмещает в себя ровно \(k\) коробок. Выведите максимальную абсолютную разницу между суммарным весом каких-либо двух грузовиков. Выходные данные Для каждого набора данных выведите одно число — ответ на задачу. Примечание В первом случае выгодно взять два грузовика, в первом будет только первая коробка, во втором только вторая. Во втором случае выгодно взять шесть грузовиков, в каждом по одной коробке. Тогда максимум равен \(10\), минимум равен \(1\), ответ равен \(10 - 1 = 9\). В третьем случае при любом возможном \(k\) в грузовиках будет одинаковый суммарный вес коробок, то есть ответ равен \(0\).
| |
|
|
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}\). Помогите ему найти количество таких пар. Выходные данные Для каждого набора входных данных выведите искомое количество пар, удовлетворяющих данному условию.
| |
|
|
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).\(\) Выходные данные Для каждого набора входных данных выведите одно число — сумму из условия. Примечание В первом наборе входных данных значения \(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\).
| |
|
|
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\)? Выходные данные На каждый набор входных данных выведите одно целое число — наименьшее количество операций, которое вам потребуется, чтобы сделать все элементы равными, после выбора целых чисел \(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}\).
| |
|
|
G. Grid Game 2
теория чисел
*2900
игры
You are playing "Grid Game 2" with your friend. There is a grid with \(10^9\) rows (numbered from \(1\) to \(10^9\)) and \(10^9\) columns (numbered from \(1\) to \(10^9\)). The cell at row \(r\) and column \(c\) is denoted as \((r, c)\). Each cell can have a colour of either black or white. Initially, there are exactly \(N\) black cells (numbered from \(1\) to \(N\)). Black cell \(i\) is located at \((R_i, C_i)\). The rest of the cells are white. You and your friend will alternately take turn playing on this grid, and you are playing in the first turn. In one turn, a player will choose a black cell \((r, c)\), then toggle cells \((r - x, c - y)\) for all \(0 \leq x, y < \min(r, c)\). If a cell is toggled, then the cell becomes black if it was a white cell, and the cell becomes white if it was a black cell. For example, the following illustration shows how the grid changes after a player chooses a black cell \((5, 4)\) in their turn. A player who is unable to play on their turn, i.e. no remaining black cells, loses the game, and the opposing player wins the game. If you and your friend are playing optimally, determine who will win the game. Output Output FIRST if you will win the game, or SECOND otherwise. Note Explanation for the sample input/output #1 You can start your move by choosing \((2, 4)\), whose effect was demonstrated in the following illustration. The remaining black cells are \((1, 3)\) and \((1, 4)\), each of which will only toggle itself when chosen. Whichever your friend chooses on the next move, the you can choose the remaining black cell. Explanation for the sample input/output #2 You have only one cell to choose, and will toggle cells \((1, 1)\), \((1, 2)\), \((2, 1)\), and \((2, 2)\). Your friend and you will alternately choose the remaining black cells with your friend choosing the last black cell.
| |
|
|
E. Хорошие тройки
Перебор
Комбинаторика
*1600
теория чисел
Дано неотрицательное целое число \(n\) (\(n \ge 0\)). Будем называть тройку неотрицательных целых чисел \((a, b, c)\) хорошей, если \(a + b + c = n\) и \(digsum(a) + digsum(b) + digsum(c) = digsum(n)\), где \(digsum(x)\) — это сумма цифр числа \(x\). Например, если \(n = 26\), то тройка \((4, 12, 10)\) является хорошей, потому что \(4 + 12 + 10 = 26\), и \((4) + (1 + 2) + (1 + 0) = (2 + 6)\). Ваша задача — найти количество хороших троек для заданного числа \(n\). Порядок чисел в тройке имеет значение. Например, тройки \((4, 12, 10)\) и \((10, 12, 4)\) считаются разными. Выходные данные Для каждого набора входных данных выведите одно целое число — количество хороших троек для заданного числа \(n\). Порядок чисел в тройке имеет значение. Примечание В первом примере хорошие тройки следующие: \((0, 0, 11)\), \((0, 1, 10)\), \((0, 10, 1)\), \((0, 11, 0)\), \((1, 0, 10)\), \((1, 10, 0)\), \((10, 0, 1)\), \((10, 1, 0)\), \((11, 0, 0)\). Во втором примере есть только одна хорошая тройка \((0, 0, 0)\).
| |
|
|
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\)
Выходные данные Для каждого набора входных данных выведите одно целое число: значение \(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}\).
| |
|
|
D. Разделить и плюс K
математика
теория чисел
жадные алгоритмы
*1900
На доске написаны \(n\) целых положительных чисел \(a_1, a_2, \dots, a_n\). Вам также дано целое положительное число \(k\). Вы можете выполнить следующую операцию несколько (возможно, \(0\)) раз: - выбрать на доске число \(x\);
- стереть одно вхождение \(x\);
- написать на доске два положительных целых числа \(y\), \(z\) таких, что \(y+z = x+k\).
Можно ли сделать так, чтобы все числа на доске стали равны? Если да, то какое минимальное количество операций вам потребуется? Выходные данные Для каждого набора входных данных выведите одну строку, содержащую целое число: минимальное количество операций, необходимых для того, чтобы все числа на доске стали равными, или \(-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\), если это невозможно. Выходные данные Для каждого набора входных данных: - Если не существует набора кнопок, после нажатия на которые горят не более \(\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\).
| |
|
|
A. 2023
Конструктив
математика
реализация
теория чисел
*800
В последовательности \(a\), произведение которой было равно \(2023\), удалили \(k\) чисел и осталась последовательность \(b\) длины \(n\). По получившейся последовательности \(b\) найдите любую подходящую последовательность \(a\) и выведите какие \(k\) элементов из нее удалили, либо скажите, что такой последовательности не могло существовать. Обратите внимание, что вам не гарантируется, что такой массив существует. Выходные данные Для каждого набора входных данных выведите «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\). Выходные данные Для каждого набора входных данных выведите число \(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\).
| |
|
|
G. Оптимизации из ЧелГУ
Деревья
дп
теория чисел
разделяй и властвуй
*3500
Вам дано дерево на \(n\) вершинах, вершины которого пронумерованы числами от \(1\) до \(n\). На каждом ребре записано некоторое целое число \(w_i\). Определим \(len(u, v)\) как количество ребер в простом пути между вершинами \(u\) и \(v\), \(gcd(u, v)\) как Наибольший Общий Делитель всех чисел, записанных на ребрах простого пути между вершинами \(u\) и \(v\). Например, \(len(u, u) = 0\) и \(gcd(u, u) = 0\) для любого \(1 \leq u \leq n\). Вам нужно найти наибольшее значение \(len(u, v) \cdot gcd(u, v)\) по всем парам вершин в дереве. Выходные данные Для каждого набора входных данных выведите единственное число равное наибольшему значению \(len(u, v) \cdot gcd(u, v)\) по всем парам вершин в дереве.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите одно число — количество инверсий в массиве \(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]\). В нём нет инверсий.
| |
|
|
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\), тогда все подмассивы будут одинаковыми.
Помогите Аллену найти количество очков, которое он заработает. Выходные данные Для каждого набора входных данных выведите одно целое число — количество очков, которое заработает Аллен. Примечание В первом наборе входных данных \(k=2\) приносит очко, так как Аллен может выбрать \(m = 2\), и оба подмассива будут равны \([1, 0]\). \(k=4\) также приносит очко, так как независимо от выбора \(m\) у Аллена будет только один подмассив, и следовательно, все подмассивы будут равны. Во втором наборе входных данных Аллен зарабатывает \(1\) очко при \(k=3\), и при этом выбор \(m\) не имеет значения.
| |
|
|
B. Сбалансированный набор задач?
Перебор
математика
теория чисел
жадные алгоритмы
*1200
Jay удалось создать задачу сложности \(x\) и он решил сделать ее второй в Codeforces Round #921. Но Yash опасается, что это сделает раунд несбалансированным, и координатор отклонит её. Чтобы избежать этого, он хочет разбить ее на \(n\) подзадач таким образом, чтобы сложность каждой подзадачи была положительным целым числом, а их сумма была равна \(x\). Координатор Aleksey определяет сбалансированность набора задач как НОД всех их сложностей. Найдите максимальную сбалансированность, которую Yash может достичь. Выходные данные Для каждого тестового примера выведите одну строку, содержащую одно целое число, обозначающее максимальную сбалансированность набора задач, которую может достичь Yash. Примечание В первом наборе входных данных один из возможных способов разбить задачу сложности \(10\) на набор из трех подзадач сложности \(4\), \(2\) и \(4\) соответственно, дает сбалансированность \(2\). Во втором наборе входных данных существует единственный способ разбить задачу сложности \(5\) на набор из \(5\) подзадач, взяв все их сложности по \(1\), дает сбалансированность \(1\).
| |
|
|
E. Влад и нечётное упорядочение
Бинарный поиск
Структуры данных
математика
реализация
дп
*1500
теория чисел
битмаски
У Владислава есть \(n\) карт с номерами \(1, 2, \dots, n\). Он хочет выложить их в ряд следующим образом: - Сначала он выкладывает все карты с нечетными номерами от наименьшего к наибольшему.
- Затем он выкладывает все карты, которые являются удвоенными нечетными числами, от наименьшего к наибольшему (т.е., \(2\) умноженное на нечётное число).
- Затем он выкладывает все карты, которые являются нечетными числами, умноженными на \(3\), от наименьшего к наибольшему (т.е., \(3\) умноженное на нечётное число).
- Затем он выкладывает все карты, которые являются нечетными числами, умноженными на \(4\), от наименьшего к наибольшему (т.е., \(4\) умноженное на нечётное число).
- И так далее, пока все карты не будут выложены.
Какая карта будет \(k\)-й, которую он выложит в этом процессе? После того, как Влад положил карту, он не может использовать ее снова. Выходные данные Для каждого набора входных данных выведите одно целое число — \(k\)-ю карту, которую выложит Влад. Примечание В первых семи наборах входных данных примера \(n=7\). Влад выкладывает карты следующим образом: - Сначала — все карты с нечетными номерами в порядке \(1\), \(3\), \(5\), \(7\).
- Затем — все карты, которые являются удвоенными нечетными числами, в порядке \(2\), \(6\).
- Затем нет оставшихся карт, которые являются нечетными числами, умноженными на \(3\). (У Влада есть только по одной карте каждого числа.)
- Затем — все карты, которые являются нечетными числами, умноженными на \(4\), и есть только одна такая карта: \(4\).
- Больше карт не осталось, поэтому Влад останавливается.
Таким образом, порядок карт будет \(1\), \(3\), \(5\), \(7\), \(2\), \(6\), \(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\). Выходные данные Для каждого набора входных данных выведите единственное целое число — количество различных \(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\).
| |
|
|
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\), и если существует, то найдите любую такую последовательность. Выходные данные Для каждого набора входных данных, если искомая последовательность существует, выведите в первой строке «Yes» (без кавычек). Далее, во второй строке выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) через пробел — элементы последовательности \(a\). Если подходящих последовательностей несколько, выведите любую из них. Если же последовательность не существует, выведите в единственной строке «No». Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ. Примечание В первом наборе входных данных условиям удовлетворяет последовательность \([8, 11, 2, 5, 2]\). Таким образом, \(a_1 = 8 = x\), \(a_2 = 11 = a_1 + 3\), \(a_3 = 2 = a_2 \bmod 3\), \(a_4 = 5 = a_3 + 3\), \(a_5 = 2 = a_4 \bmod 3\). Во втором наборе входных данных первый элемент последовательности должен равняться \(5\), поэтому последовательность \([2, 2, 2]\) не подходит.
| |
|
|
D. Делимые пары
Комбинаторика
математика
теория чисел
*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\). Выходные данные Для каждого набора входных данных выведите единственное число — количество красивых пар в массиве \(a\).
| |
|
|
G. Одномерный пазл
Комбинаторика
математика
теория чисел
*2000
У вас есть одномерный пазл, все элементы которого нужно сложить в один ряд, соединяя друг с другом. Все элементы пазла полностью белые и отличимы друг от друга, только если имеют разную форму. Каждый элемент имеет прямые границы сверху и снизу, а слева и справа имеет соединения, каждое из которых может быть выступом или углублением. Вращать элементы нельзя. Можно заметить, что существует ровно \(4\) типа элементов. Два элемента можно соединить, если правое соединение левого элемента противоположно левому соединению правого элемента. Все возможные типы элементов. Пазл содержит \(c_1, c_2, c_3, c_4\) элементов каждого типа. Пазл считается собранным, если вам удалось объединить все элементы в одну длинную цепочку. Вы хотите узнать, сколькими способами это можно сделать. Выходные данные Для каждого набора входных данных выведите одно целое число — количество возможных способов собрать пазл. Два способа считаются различными, если существует \(i\), такое, что типы элементов на \(i\)-й позиции в этих способах различаются. Так как ответ может быть очень большим, выведите его по модулю \(998244353\). Если пазл собрать невозможно, выведите \(0\).
| |
|
|
B. Календарь Чая
теория чисел
*1100
Племя Чая считает, что существует \(n\) знамений апокалипсиса. Со временем выяснилось, что \(i\)-е знамение происходит каждые \(a_i\) лет (в года \(a_i\), \(2 \cdot a_i\), \(3 \cdot a_i\), \(\dots\)). Согласно преданиям, чтобы наступил апокалипсис, знамения должны произойти последовательно. То есть сначала они дожидаются, когда впервые произойдёт первое знамение, потом строго после него произойдёт второе и так далее. То есть, если \(i\)-е знамение произошло в год \(x\), то племя начинает ждать наступления \((i+1)\)-го, начиная с года \(x+1\). В каком году произойдёт \(n\)-е знамение и наступит апокалипсис? Выходные данные Для каждого набора входных данных выведите одно целое число — год, в котором произойдут все \(n\) знамений. Примечание В первом наборе входных данных примера: - Племя дождётся первого знамения в \(3\) году;
- племя дождётся второго знамения в \(4\) году (так как \(2\) год уже прошёл);
- племя дождётся третьего знамения в \(8\) году (так как в \(4\) году уже произошло второе знамение);
- племя дождётся четвёртого знамения в \(10\) году (так как \(5\) год уже прошёл);
- племя дождётся пятого знамения в \(18\) году (так как \(9\) год уже прошёл);
- племя дождётся шестого знамения в \(36\) году (так как в \(18\) году уже произошло пятое знамение).
| |
|
|
E. Финальный отсчёт
математика
реализация
*1600
теория чисел
Вы находитесь в ядерной лаборатории, которая готовится взорваться и уничтожить Землю. Вы должны спасти Землю, прежде чем финальный отсчёт достигнет нуля. Отсчёт состоит из \(n\) (\(1 \le n \le 4 \cdot 10^5\)) механических индикаторов, каждый из которых показывает одну десятичную цифру. Вы заметили, что когда отсчёт меняет своё состояние с \(x\) на \(x-1\), это не происходит сразу. Вместо этого каждое изменение одной цифры занимает одну секунду. Так, например, если отсчёт показывает 42, то он изменится на 41 за одну секунду, потому что изменяется только одна цифра, но если отсчёт показывает 2300, то он изменится на 2299 за три секунды, потому что изменяются три последние цифры. Узнайте, сколько времени осталось до того, как отсчёт достигнет нуля. Выходные данные Для каждого набора входных данных выведите одно целое число без ведущих нулей, количество секунд, оставшихся до того, как отсчёт достигнет нуля. Обратите внимание, что это число может быть огромным. Примечание В первом примере есть четыре изменения, которые занимают 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\). Выходные данные Для каждого теста выведите одно целое число, минимальное количество шагов, необходимых, чтобы добраться с платформы \(1\) до платформы \(n\). Если невозможно добраться до платформы \(n\), выведите \(-1\). Примечание Вот как меняются уровни платформ и какие действия нам нужно выполнить в первом примере. | Платформа 1 | Платформа 2 | Платформа 3 | Действие | | Шаг 1 | 1 | 9 | 4 | Остаться на платформе 1 | | Шаг 2 | 3 | 2 | 4 | Остаться на платформе 1 | | Шаг 3 | 5 | 5 | 4 | Перейти на платформу 2 | | Шаг 4 | 7 | 8 | 4 | Остаться на платформе 2 | | Шаг 5 | 9 | 1 | 4 | Остаться на платформе 2 | | Шаг 6 | 1 | 4 | 4 | Перейти на платформу 3 |
| |
|
|
B. Сделай сумму кратной 3
математика
реализация
теория чисел
*800
Вам дан массив \(a_1, a_2, \ldots, a_n\). За один ход можно выполнить любую из двух операций: - Выбрать элемент из массива и удалить его из массива. В результате длина массива уменьшается на \(1\);
- Выбрать элемент из массива и увеличить его значение на \(1\).
Вы можете выполнять произвольное количество ходов. Если текущий массив оказался пустым, то больше ходов выполнять нельзя. Ваша задача — найти минимальное количество ходов, которые необходимо выполнить, чтобы сумма элементов массива \(a\) стала делиться на \(3\). Возможно, вам понадобится \(0\) ходов. Обратите внимание, что сумма элементов пустого массива (массива длины \(0\)) равна \(0\). Выходные данные Для каждого набора входных данных выведите одно целое число: минимальное количество ходов. Примечание В первом наборе входных данных, изначально \(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\) строк, где \(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\). Выходные данные Для каждого теста выведите «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. Странные НОК операции
Перебор
Конструктив
теория чисел
*3000
Дано целое число \(n\), вы создаете массив \(a\) из \(n\) целых чисел, где \(a_i = i\) для всех целых чисел \(i\) в диапазоне \([1, n]\). Операция над этим массивом определена следующим образом: - Выберите в массиве три различных индекса \(i\), \(j\) и \(k\) и присвойте \(x = a_i\), \(y = a_j\) и \(z = a_k\).
- Обновите массив следующим образом: \(a_i = \operatorname{lcm}(y, z)\), \(a_j = \operatorname{lcm}(x, z)\) и \(a_k = \operatorname{lcm}(x, y)\), где \(\operatorname{lcm}\) обозначает наименьшее общее кратное.
Ваша задача предоставить последовательность из не более чем \(\lfloor \frac{n}{6} \rfloor + 5\) операций таких, что после применения этих операций, если вы возьмете множество, содержащее наибольший общий делитель (НОД) всех подпоследовательностей размера больше \(1\), то каждое число от \(1\) до \(n\) должно принадлежать этому множеству. После операций должно выполняться \(a_i \le 10^{18}\) для всех \(1 \le i \le n\). Можно показать, что ответ всегда существует. Выходные данные Первая строка должна содержать целое число \(k\) (\(0 \leq k \leq \lfloor \frac{n}{6} \rfloor + 5\)) — где \(k\) обозначает число операций. Следующие \(k\) строк должны содержать описание операций, то есть \(3\) различных целых числа \(i\), \(j\) и \(k\), где \(1 \leq i, j, k \leq n\). Примечание В третьем наборе входных данных \(a = [1, 2, 3, 4, 5, 6, 7]\). Первая операция: \(i = 3\), \(j = 5\), \(k = 7\) \(x = 3\), \(y = 5\), \(z = 7\). \(a = [1, 2, \operatorname{lcm}(y,z), 4, \operatorname{lcm}(x,z), 6, \operatorname{lcm}(x,y)]\) = \([1, 2, \color{red}{35}, 4, \color{red}{21}, 6, \color{red}{15}]\). Вторая операция: \(i = 5\), \(j = 6\), \(k = 7\) \(x = 21\), \(y = 6\), \(z = 15\). \(a = [1, 2, 35, 4, \operatorname{lcm}(y,z), \operatorname{lcm}(x,z), \operatorname{lcm}(x,y)]\) = \([1, 2, 35, 4, \color{red}{30}, \color{red}{105}, \color{red}{42}]\). Третья операция: \(i = 2\), \(j = 3\), \(k = 4\) \(x = 2\), \(y = 35\), \(z = 4\). \(a = [1, \operatorname{lcm}(y,z), \operatorname{lcm}(x,z), \operatorname{lcm}(x,y), 30, 105, 42]\) = \([1, \color{red}{140}, \color{red}{4}, \color{red}{70}, 30, 105, 42]\). GCD равное \(i\) может быть получено используя следующие подпоследовательности: \(\gcd(a_1, a_2) = \gcd(1, 140) = 1\) \(\gcd(a_3, a_4) = \gcd(4, 70) = 2\) \(\gcd(a_5, a_6, a_7) = \gcd(30, 105, 42) = 3\) \(\gcd(a_2, a_3) = \gcd(140, 4) = 4\) \(\gcd(a_2, a_4, a_5, a_6) = \gcd(140, 70, 30, 105) = 5\) \(\gcd(a_5, a_7) = \gcd(30, 42) = 6\) \(\gcd(a_2, a_4, a_6, a_7) = \gcd(140, 70, 105, 42) = 7\)
| |
|
|
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\) минут после другого, то в течение одной минуты будут видны оба салюта. Какое максимальное количество салютов одновременно можно увидеть в небе? Выходные данные Для каждого набора входных данных выведите единственное число — максимальное число салютов, которые можно увидеть одновременно. Примечание В первом наборе входных данных салюты видны в небе в течение \(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\) и сыграть с ним в игру. Правила заключаются в следующем: - Кирилл выбирает себе от \(2\)-х до \((n-2)\)-х чисел и обводит их красным цветом.
- Антон обводит синим цветом все остальные числа.
- Кирилл считает наибольший общий делитель (НОД) всех красных чисел.
- Антон считает побитовое И всех синих чисел и прибавляет к результату число \(x\).
- Если НОД всех красных чисел строго больше, чем сумма побитового И всех синих чисел и числа \(x\), то Кирилл выигрывает, иначе выигрывает Антон.
Помогите Кириллу обыграть Антона или скажите, что это невозможно. Выходные данные Для каждого набора входных данных выведите в первой строке «YES», если выполнить условие возможно, во второй — количество чисел, которые выбирает Кирилл, а также сами числа в любом порядке через пробел, а в третьей — размер второго множества и числа, попавшие в него. Иначе выведите «NO». Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.
| |
|
|
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\). Выходные данные Для каждого набора входных данных в отдельной строке выведите одно целое число — количество подходящих перестановок по модулю \(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]\)
| |
|
|
D. Произведение двоичных десятичных чисел
Перебор
реализация
дп
теория чисел
*1100
Давайте назовем число двоичным десятичным, если это положительное целое число, и все цифры в его десятичной записи равны \(0\) или \(1\). Например, \(1\,010\,111\) является двоичным десятичным числом, в то время как \(10\,201\) и \(787\,788\) не являются таковыми. Дано число \(n\), вам нужно определить, возможно ли представить \(n\) в виде произведения некоторых (не обязательно различных) двоичных десятичных чисел. Выходные данные Для каждого набора входных данных выведите «YES» (без кавычек), если \(n\) можно представить в виде произведения двоичных десятичных чисел, и «NO» (без кавычек) в противном случае. Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как положительный ответ). Примечание Первые пять примеров можно представить в виде произведения двоичных десятичных чисел следующим образом: - \(121 = 11 \times 11\).
- \(1 = 1\) уже является двоичным десятичным числом.
- \(14\,641 = 11 \times 11 \times 11 \times 11\).
- \(12\,221 = 11 \times 11 \times 101\).
- \(10\,110 = 10\,110\) уже является двоичным десятичным числом.
| |
|
|
E. Почти самая короткая повторяющаяся подстрока
Строки
Перебор
реализация
*1500
теория чисел
Вам дана строка \(s\) длиной \(n\), состоящая из строчных латинских символов. Найдите длину самой короткой строки \(k\), такой что несколько (возможно одна) копий \(k\) могут быть сконкатенированы вместе, чтобы образовать строку той же длины, что и \(s\), и при этом имеется не более одного отличающегося символа. Формально, найдите длину самой короткой строки \(k\), такой что \(c = \underbrace{k + \cdots + k}_{x\rm\ \text{раз}}\) для некоторого положительного целого \(x\), строки \(s\) и \(c\) имеют одинаковую длину и \(c_i \neq s_i\) для не более чем одного \(i\) (т.е. существует \(0\) или \(1\) такая позиция). Выходные данные Для каждого теста выведите длину самой короткой строки \(k\), удовлетворяющей условиям в условии. Примечание В первом примере вы можете выбрать \(k = \texttt{a}\) и \(k+k+k+k = \texttt{aaaa}\), которая отличается от \(s\) только во второй позиции. Во втором примере вы не можете выбрать \(k\) длиной один или два. Мы можем взять \(k = \texttt{abba}\), которая равна \(s\).
| |
|
|
C. Длинное умножение
математика
теория чисел
жадные алгоритмы
*1200
Вам даны два целых числа \(x\) и \(y\) одинаковой длины, состоящие из цифр от \(1\) до \(9\). Вы можете выполнять следующую операцию любое количество раз (возможно, ни разу): менять местами \(i\)-ю цифру в \(x\) и \(i\)-ю цифру в \(y\). Например, если \(x=73\) и \(y=31\), вы можете поменять местами \(2\)-е цифры и получить \(x=71\) и \(y=33\). Ваша задача — максимизировать произведение \(x\) и \(y\), используя вышеописанную операцию. Если есть несколько ответов, выведите любой из них. Выходные данные Для каждого набора входных данных выведите две строки — первая строка должна содержать число \(x\) после применения операций; аналогично, вторая строка должна содержать число \(y\) после применения операций. Если ответов несколько, выведите любой из них.
| |
|
|
E. Цепная реакция
Бинарный поиск
Структуры данных
математика
реализация
теория чисел
жадные алгоритмы
*2200
снм
В ряд стоят \(n\) монстров, у \(i\)-го монстра \(a_i\) очков здоровья. В каждую секунду вы можете выбрать одного живого монстра и запустить в него цепную молнию. Молния наносит ему \(k\) урона, а также распространяется налево (в сторону уменьшения \(i\)) и направо (в сторону увеличения \(i\)) по живым монстрам, нанося каждому по \(k\) урона. Когда молния доходит до мертвого монстра или до начала/конца ряда, она останавливается. Монстр считается живым, если количество его очков здоровья строго больше \(0\). Например, рассмотрим следующий сценарий: три монстра с уровнями здоровья \([5, 2, 7]\), \(k = 3\). Можно убить всех монстров за \(4\) секунды: - запустить цепную молнию в \(3\)-го монстра, тогда уровни здоровья будут равны \([2, -1, 4]\);
- запустить цепную молнию в \(1\)-го монстра, тогда уровни здоровья будут равны \([-1, -1, 4]\);
- запустить цепную молнию в \(3\)-го монстра, тогда уровни здоровья будут равны \([-1, -1, 1]\);
- запустить цепную молнию в \(3\)-го монстра, тогда уровни здоровья будут равны \([-1, -1, -2]\).
Для каждого \(k\) от \(1\) до \(\max(a_1, a_2, \dots, a_n)\) посчитайте минимальное количество секунд, за которое можно убить всех монстров. Выходные данные Для каждого \(k\) от \(1\) до \(\max(a_1, a_2, \dots, a_n)\) выведите минимальное количество секунд, за которое можно убить всех монстров.
| |
|
|
G. НОД на клетчатом поле
Перебор
математика
реализация
дп
теория чисел
поиск в глубину и подобное
*1900
Совсем недавно Егор узнал про алгоритм Евклида нахождения наибольшего общего делителя двух чисел. Наибольшим общим делителем двух чисел \(a\) и \(b\) называется наибольшее число, на которое \(a\) и \(b\) делятся без остатка. С помощью этих знаний Егор может решить задачу, которую он когда-то не решил. У Василия есть клетчатое поле \(n\) строк на \(m\) столбцов, на пересечении \(i\)-й строки и \(j\)-го столбца находится число \({a_i}_j\). Егор хочет попасть из левого верхнего угла (на пересечении первой строки и первого столбца) в правый нижний угол (на пересечении последней строки и последнего столбца) и узнать, какой НОД у всех чисел на пути. Разрешается двигаться только вниз и вправо. Егор выписал несколько путей и получил разные значения НОД, ему стало интересно, какой максимальный НОД можно получить. К сожалению, Егор устал считать НОД чисел и поэтому просит Вас помочь ему найти максимальный НОД чисел на пути из левого верхнего угла в правый нижний угол клетчатого поля. Выходные данные Для каждого набора входных данных в отдельной строке выведите максимальное возможный НОД на пути из клетки левой верхней клетки в правую нижнюю клетку.
| |
|
|
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]\) являются одинаковыми расстановками по кругу. Выходные данные Для каждого набора входных данных выведите на отдельной строке одно число — значение вычисляемого выражения по модулю \(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. Отсутствующая сумма подпоследовательности
Конструктив
теория чисел
*1800
жадные алгоритмы
битмаски
Даны два целых числа \(n\) и \(k\). Найдите последовательность \(a\) неотрицательных целых чисел размером не более \(25\), такую, что выполняются следующие условия. - Нет подпоследовательности \(a\) с суммой \(k\).
- Для всех \(1 \le v \le n\), где \(v \ne k\), существует подпоследовательность \(a\) с суммой \(v\).
Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов, не изменяя порядок оставшихся элементов. Например, \([5, 2, 3]\) является подпоследовательностью \([1, 5, 7, 8, 2, 4, 3]\). Можно показать, что при заданных ограничениях всегда существует решение. Выходные данные Первая строка вывода для каждого теста должна содержать одно целое число \(m\) (\(1 \le m \le 25\)) — размер выбранной вами последовательности. Вторая строка вывода для каждого теста должна содержать \(m\) целых чисел \(a_i\) (\(0 \le a_i \le 10^9\)) — элементы вашей выбранной последовательности. Если существует несколько решений, выведите любое из них. Примечание В первом примере нам просто нужна подпоследовательность, дающая в сумме \(1\), но не дающая в сумме \(2\). Таким образом, массив \(a=[1]\) подходит. Во втором примере все элементы больше \(k=1\), поэтому ни одна подпоследовательность не дает в сумме \(1\). Каждое другое целое число между \(1\) и \(n\) присутствует в массиве, поэтому существует подпоследовательность размера \(1\), дающая в сумме каждое из этих чисел.
| |
|
|
B1. Переворотная карта (простая версия)
Перебор
математика
теория чисел
*1400
Две версии задачи — это разные задачи. Возможно, вы захотите прочитать обе версии. Вы можете делать взломы, только если обе версии задачи решены. Вам даны два целых положительных числа \(n\) и \(m\). Посчитайте количество упорядоченных пар \((a, b)\), удовлетворяющих следующим условиям: - \(1\le a\le n\), \(1\le b\le m\);
- \(a+b\) кратно \(b \cdot \gcd(a,b)\).
Выходные данные Для каждого набора входных данных выведите одно целое число — количество подходящих пар. Примечание В первом наборе входных данных только \((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\).
Выходные данные Для каждого набора входных данных выведите одно целое число — количество подходящих пар. Примечание В первом наборе входных данных ни одна пара не удовлетворяет условиям. В четвертом наборе входных данных пары \((2,2),(3,6),(4,4),(6,3),(6,6),(8,8)\) удовлетворяют условиям.
| |
|
|
A. Максимизировать?
Перебор
математика
теория чисел
*800
Вам дано целое число \(x\). Ваша задача — найти любое целое число \(y\) \((1\le y<x)\) такое, что \(\gcd(x,y)+y\) максимально возможное. Обратите внимание, что если существует несколько значений \(y\), удовлетворяющих условию, вы можете выбрать любое из них. \(\gcd(a,b)\) — наибольший общий делитель чисел \(a\) и \(b\). Например, \(\gcd(6,4)=2\). Выходные данные Для каждого набора входных данных выведите любое значение \(y\) (\(1 \le y < x\)), удовлетворяющее условию.
| |
|
|
C. Восстановление по остаткам
Конструктив
*1000
теория чисел
Вам дан массив \(x_2,x_3,\dots,x_n\). Ваша задача — найти любой массив \(a_1,\dots,a_n\), для которого: - \(1\le a_i\le 10^9\) для всех \(1\le i\le n\).
- \(x_i=a_i \bmod a_{i-1}\) для всех \(2\le i\le n\).
Здесь \(c\bmod d\) обозначает остаток от целочисленного деления числа \(c\) на число \(d\). Например \(5 \bmod 2 = 1\), \(72 \bmod 3 = 0\), \(143 \bmod 14 = 3\). Обратите внимание, что если существует несколько массивов \(a\), удовлетворяющих условию, вы можете найти любой. Выходные данные Для каждого набора входных данных выведите любой массив \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^9\)), удовлетворяющий условию. Примечание В первом наборе входных данных \(a=[3,5,4,9]\) удовлетворяет условиям, потому что: - \(a_2\bmod a_1=5\bmod 3=2=x_2\);
- \(a_3\bmod a_2=4\bmod 5=4=x_3\);
- \(a_4\bmod a_3=9\bmod 4=1=x_4\);
| |
|
|
F. Запросы максимальной суммы НОД
Перебор
реализация
дп
теория чисел
битмаски
*3100
Для \(k\) целых положительных чисел \(x_1, x_2, \ldots, x_k\) значение \(\gcd(x_1, x_2, \ldots, x_k)\) является наибольшим общим делителем чисел \(x_1, x_2, \ldots, x_k\) — наибольшим целым числом \(z\) таким, что все числа \(x_1, x_2, \ldots, x_k\) делятся на \(z\). Вам даны три массива \(a_1, a_2, \ldots, a_n\), \(b_1, b_2, \ldots, b_n\) и \(c_1, c_2, \ldots, c_n\) длины \(n\), содержащие положительные целые числа. У вас также есть автомат, который позволяет вам менять местами \(a_i\) и \(b_i\) для любого \(i\) (\(1 \le i \le n\)). Каждый обмен стоит вам \(c_i\) монет. Найдите максимальное возможное значение \(\)\gcd(a_1, a_2, \ldots, a_n) + \gcd(b_1, b_2, \ldots, b_n)\text{,}\(\) которое вы можете получить, поменяв местами несколько элементов, и заплатив при этом не более \(d\) монет в сумме. Количество монет у вас меняется, поэтому найдите ответ на этот вопрос для каждого из \(q\) возможных значений \(d_1, d_2, \ldots, d_q\). Выходные данные Выведите \(q\) целых чисел — максимальное значение, которое можно получить для каждого из \(q\) возможных значений \(d\). Примечание В первом запросе из первого примера нам вообще не разрешается делать никаких обменов, поэтому ответом будет \(\gcd(1, 2, 3) + \gcd(4, 5, 6) = 2\). Во втором запросе одним из способов достижения оптимального значения является обмен \(a_2\) и \(b_2\), тогда ответом будет \(\gcd(1, 5, 3) + \gcd(4, 2, 6) = 3\). Во втором запросе из второго примера оптимально сделать обмены на позициях \(1\) и \(3\), тогда ответом будет \(\gcd(3, 3, 6, 9, 3) + \gcd(8, 4, 4, 8, 4) = 7\), и нам суммарно придется заплатить \(40\) монет.
| |
|
|
C. Никита и ТЧ
Перебор
Структуры данных
математика
дп
теория чисел
жадные алгоритмы
сортировки
*1900
Никита — студент, увлеченный теорией чисел и алгоритмами. Он столкнулся с интересной задачей, связанной с массивом чисел. Допустим, у Никиты есть массив целых чисел \(a\) длины \(n\). Назовём подпоследовательность\(^\dagger\) массива особенной, если её наименьшее общее кратное (НОК) не содержится в \(a\). НОК пустой подпоследовательности равен \(0\). Никита задался вопросом: какова длина самой длинной особенной подпоследовательности массива \(a\)? Помогите ему ответить на этот важный вопрос! \(^\dagger\) Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов, не изменяя порядок оставшихся элементов. Например, \([5,2,3]\) является подпоследовательностью \([1,5,7,8,2,4,3]\). Выходные данные Для каждого набора выведите одно целое число — максимальную длину особенной подпоследовательности \(a\). Примечание В первом наборе входных данных НОК любой непустой подпоследовательности будет содержаться в \(a\), поэтому ответ \(0\). Во втором наборе входных данных можно взять подпоследовательность \([3, 2, 10, 1]\), ее НОК — число \(30\), которое не содержится в \(a\). В третьем наборе входных данных можно взять подпоследовательность \([2, 3, 6, 100\,003]\), ее НОК — число \(600\,018\), которое не содержится в \(a\).
| |
|
|
F. Большой граф
Структуры данных
теория чисел
поиск в глубину и подобное
*2400
графы
снм
Дан массив \(a\) длины \(n\). Построим квадратную матрицу \(b\) размера \(n \times n\), где в \(i\)-й строке записан массив \(a\), циклически сдвинутый на \((i - 1)\) вправо. Например, для массива \(a = [3, 4, 5]\) получается матрица \(\)b = \begin{bmatrix} 3 & 4 & 5 \\ 5 & 3 & 4 \\ 4 & 5 & 3 \end{bmatrix}\(\) Построим следующий граф: - Граф содержит \(n^2\) вершин, каждая из которых соответствует одному из элементов матрицы. Обозначим вершину, соответствующую элементу \(b_{i, j}\), как \((i, j)\).
- Между вершинами \((i_1, j_1)\) и \((i_2, j_2)\) проведём ребро, если \(|i_1 - i_2| + |j_1 - j_2| \le k\) и \(\gcd(b_{i_1, j_1}, b_{i_2, j_2}) > 1\), где \(\gcd(x, y)\) обозначает наибольший общий делитель чисел \(x\) и \(y\).
Ваша задача — посчитать количество компонент связности\(^{\dagger}\) в полученном графе. \(^{\dagger}\)Компонента связности графа — это множество некоторых вершин графа, в котором любая вершина достижима из любой по рёбрам, и добавление любой другой вершины в множество нарушает это правило. Выходные данные Для каждого набора входных данных выведите одно целое число — количество компонент связности в полученном графе. Примечание В первом наборе входных данных матрица \(b\) приведена в условии. Первая компонента связности содержит вершины \((1, 1)\), \((2, 2)\) и \((3, 3)\). Вторая компонента связности содержит вершины \((1, 2)\), \((2, 3)\) и \((3, 1)\). Третья компонента связности содержит вершины \((1, 3)\), \((2, 1)\) и \((3, 2)\). Таким образом, в графе есть \(3\) компоненты связности. Во втором наборе входных данных получается следующая матрица: \(\)b = \begin{bmatrix} 3 & 4 & 9 \\ 9 & 3 & 4 \\ 4 & 9 & 3 \end{bmatrix}\(\) Первая компонента связности содержит все вершины, соответствующие элементам со значениями \(3\) и \(9\). Вторая компонента связности содержит все вершины, соответствующие элементам со значением \(4\). В четвёртом наборе входных данных все вершины находятся в одной компоненте связности.
| |
|
|
C. Заработать на ставках
Бинарный поиск
Конструктив
Комбинаторика
теория чисел
*1200
Вам было предложено сыграть в игру. В данной игре возможно \(n\) исходов, на каждый из которых вы должны поставить некоторое целое количество монет. В случае, если \(i\)-й исход окажется выигрышным, вы получите обратно количество монет в размере вашей ставки на этот исход, умноженной на \(k_i\). Обратите внимание, что ровно один из \(n\) исходов окажется выигрышным. Ваша задача — сказать, как распределить монеты так, чтобы при любом выигрышном исходе выйти в плюс. Более формально, суммарное количество монет, которое вы поставили на все исходы, должно быть строго меньше числа монет, полученных обратно при каждом возможном выигрышном исходе. Выходные данные Для каждого набора входных данных выведите \(-1\), если требуемого способа распределить монеты не существует. Иначе выведите \(n\) целых чисел \(x_1, x_2,\ldots, x_n\) (\(1 \le x_i \le 10^{9}\)) — ваши ставки на исходы. Можно показать, что если какой-то ответ существует, то всегда существует ответ, удовлетворяющий данным ограничениям. Если существует несколько подходящих решений, выведите любое из них. Примечание В первом наборе входных данных можно распределить монеты следующим образом: \(27\) монет на первый исход, \(41\) монета на второй исход, \(12\) монет на третий исход. Тогда суммарное количество монет, которое будет поставлено на все исходы, равно \(27 + 41 + 12 = 80\) монет. Если первый исход окажется выигрышным, то вы получите обратно \(3 \cdot 27 = 81\) монету, если второй исход окажется выигрышным, то вы получите обратно \(2 \cdot 41 = 82\) монеты, если третий исход окажется выигрышным, то вы получите обратно \(7 \cdot 12 = 84\) монеты. Все эти значения строго больше \(80\). Во втором наборе входных данных одним из способов является поставить по одной монете на каждый из исходов.
| |
|
|
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\). Выходные данные Выведите: - «YES», если можно удалить из массива \(a\) ровно одно число так, чтобы НОД-последовательность \(b\) получилась неубывающей;
- «NO» в противном случае.
Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ). Примечание Первый набор входных данных разобран в условии задачи.
| |
|
|
D. Черепаха и умножение
Конструктив
теория чисел
поиск в глубину и подобное
*2400
графы
Черепаха только что научилась умножать два целых числа на уроке математики и была очень взволнована. Затем Свинка дала ей целое число \(n\) и попросила построить последовательность \(a_1, a_2, \ldots, a_n\), состоящую из целых чисел, которые удовлетворяли бы следующим условиям: - Для всех \(1 \le i \le n\), \(1 \le a_i \le 3 \cdot 10^5\).
- Для всех \(1 \le i < j \le n - 1\), \(a_i \cdot a_{i + 1} \ne a_j \cdot a_{j + 1}\).
Из всех таких последовательностей Пятачок попросил Черепаху найти ту, в которой будет минимальное количество различных элементов. Черепаха определенно не смогла бы решить задачу, поэтому пожалуйста, помогите ей! Выходные данные Для каждого тестового случая выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — элементы последовательности \(a\). Если существует несколько ответов, выведите любой из них. Примечание В третьем тестовом случае \(a = [3, 4, 2, 6]\) нарушает второе условие, так как \(a_1 \cdot a_2 = a_3 \cdot a_4\). \(a = [2, 3, 4, 4]\) удовлетворяет условиям, но количество различных элементов в нем не минимально.
| |
|
|
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\) в итоге получится. Выходные данные Для каждого набора входных данных выведите одно целое число — число, которое получится после применения \(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\) может быть отрицательной. Прежде чем производить трансформации, Никита просит у вас узнать, возможно ли добиться равенства сумм, или это сделать невозможно. Неважно, какой ценой, даже если горы превратятся в каньоны и будут иметь отрицательную высоту. Если на карте представлен только один тип гор, то сумма высот другого типа гор принимается равной нулю. Выходные данные Для каждого набора входных данных выведите «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.
| |
|
|
B. Максимальная сумма кратных чисел
Перебор
математика
теория чисел
*800
Дано целое число \(n\), найдите целое число \(x\) такое, что: - \(2 \leq x \leq n\).
- Сумма чисел, кратных \(x\), которые меньше или равны \(n\), максимальна. Формально, \(x + 2x + 3x + \dots + kx\), где \(kx \leq n\), максимальна среди всех возможных значений \(x\).
Выходные данные Для каждого набора входных данных выведите целое число, оптимальное значение \(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\).
| |
|
|
G. D-Функция
Комбинаторика
математика
*1600
теория чисел
Пусть \(D(n)\) представляет собой сумму цифр числа \(n\). Для скольких целых чисел \(n\), \(10^{l} \leq n < 10^{r}\), выполняется условие \(D(k \cdot n) = k \cdot D(n)\)? Выведите ответ по модулю \(10^9+7\). Выходные данные Для каждого набора входных данных выведите целое число — ответ, по модулю \(10^9 + 7\). Примечание Для первого примера единственные значения \(n\), удовлетворяющие условию, — это \(1\) и \(2\). Для второго примера единственные значения \(n\), удовлетворяющие условию, — это \(1\), \(10\) и \(11\). Для третьего примера все значения \(n\) от \(10\) включительно до \(100\) исключительно удовлетворяют условию.
| |
|
|
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\). Найдите наименьшее количество операций, за которое можно сделать массив красивым, или сообщите, что это невозможно. Выходные данные Для каждого набора входных данных выведите наименьшее количество операций, которое нужно сделать, чтобы массив стал красивым, или \(-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]\) — нет. Выходные данные Для каждого набора входных данных выведите количество пар индексов \(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]\) — нет. Выходные данные Для каждого набора входных данных выведите количество пар индексов \(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. Теорема Хексадесимал
Перебор
Конструктив
реализация
*900
теория чисел
Недавно вирус Хексадесимал выдвинула теорему о том, что любое число Фибоначчи представимо в виде суммы трёх не обязательно различных чисел Фибоначчи. Эта теорема должна потрясти Вселенную! Напомним, что числа Фибоначчи определяются следующим образом: F0 = 0, F1 = 1, а все остальные вычисляются по формуле Fi = Fi - 2 + Fi - 1. Таким образом, числа Фибоначчи образуют последовательность: 0, 1, 1, 2, 3, 5, 8, 13, ... Если вы ещё не убежали в ужасе от компьютера, то помогите вирусу подтвердить или опровергнуть её теорему. Разложите заданное число Фибоначчи n на сумму трёх не обязательно различных чисел Фибоначчи, или сообщите, что это невозможно. Выходные данные Выведите три числа: a, b и c — искомое разложение, если оно существует. В противном случае выведите «I'm too stupid to solve this problem» без кавычек. Если решений несколько разрешается выводить любое.
| |
|
|
D. Простая XOR раскраска
Конструктив
математика
теория чисел
жадные алгоритмы
*1900
графы
битмаски
Вам дан неориентированный граф с \(n\) вершинами, пронумерованными от \(1\) до \(n\). Между вершинами \(u\) и \(v\) существует ребро тогда и только тогда, когда \(u \oplus v\) является простым числом, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Раскрасьте все вершины графа в минимальное количество цветов так, чтобы ни одна пара вершин, непосредственно соединенных ребром, не была покрашена в один цвет. Выходные данные Для каждого набора входных данных выведите две строки. Первая строка должна содержать одно целое число \(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\).
| |
|
|
H. Игра в простые разделения
математика
дп
теория чисел
битмаски
бпф
*3300
игры
Алиса и Боб играют в игру с \(n\) кучками камней, где \(i\)-я кучка содержит \(a_i\) камней. Игроки делают ходы по очереди, причем Алиса ходит первой. На каждом ходу игрок выполняет следующие три шага: - Выбирает целое число \(k\) (\(1 \leq k \leq \frac n 2\)). Обратите внимание, что значение \(k\) может быть разным для разных ходов.
- Удаляет \(k\) куч камней.
- Выбирает еще \(k\) кучек камней и разделяет каждую кучку на две кучки. Количество камней в каждой новой куче должно быть простым числом.
Игрок, который не сможет сделать ход, проигрывает. Определите, кто выиграет, если оба игрока играют оптимально. Выходные данные Для каждого набора входных данных выведите «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\) камней. Можно показать, что если оба игрока играют оптимально, то победит Боб.
| |
|
|
F. Ценные карточки
Перебор
дп
теория чисел
жадные алгоритмы
*1900
В своём любимом кафе Kmes захотел в очередной раз отведать селёдку под шубой. Раньше ему бы не доставило труда сделать это, однако кафе недавно выдвинуло новую политику покупки. Теперь для её совершения Kmes надо решить следующую задачу: перед ним на стол выкладывают \(n\) карточек с ценами на разные позиции, на \(i\)-й карточке написано число \(a_i\), среди этих цен нет целого положительного числа \(x\). Kmes просят разбить эти карточки на минимальное количество плохих отрезков (так, чтобы каждая карточка принадлежала ровно одному отрезку). Плохим считается такой отрезок, что в нём нельзя выбрать подмножество карточек с произведением, равным \(x\). Все отрезки, на которые Kmes разобьёт карточки, должны быть плохими. Формально, отрезок \((l, r)\) плохой, если не существует индексов \(i_1 < i_2 < \ldots < i_k\), что \(l \le i_1, i_k \le r\), и \(a_{i_1} \cdot a_{i_2} \ldots \cdot a_{i_k} = x\). Помогите Kmes определить минимальное количество плохих отрезков, чтобы насладиться любимым блюдом. Выходные данные Для каждого набора входных данных выведите минимальное количество плохих отрезков.
| |
|
|
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)\)? Обратите внимание, что начальная позиция не учитывается. Выходные данные Для каждого набора входных данных выведите одно целое число — количество раз, когда робот переместится в \((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)\)? Обратите внимание, что начальная позиция не учитывается. Выходные данные Для каждого набора входных данных выведите одно целое число — количество раз, когда робот переместится в \((0, 0)\) при выполнении сценария \(s\) \(k\) раз подряд. Примечание В первом наборе входных данных робот движется только вверх и вправо при первых двух исполнениях сценария. После этого он занимает позицию \((2, 2)\). При следующих двух исполнениях он двигается вниз и влево и заканчивает в \((0, 0)\). Поэтому ответ равен \(1\). Во втором наборе входных данных каждый раз при выполнении сценария робот посещает начало координат дважды. И поскольку \(k=2\), он посещает начало координат \(2 \cdot 2 = 4\) раза в общей сложности. В третьем наборе входных данных визуализация показана ниже:
| |
|
|
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{∗}}\) граф, или скажите, что это невозможно. Выходные данные Для каждого набора входных данных, если решения не существует, то выведите «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\).
 Из картинки видно, что получился связный граф.
| |
|
|
H. Fortnite
Строки
Конструктив
Комбинаторика
математика
теория чисел
жадные алгоритмы
хэши
интерактив
игры
*3500
Это интерактивная задача! Тимофей пишет соревнование, которое называется Capture the flag (или сокращённо CTF). Ему осталась одна задача, в которой нужно взломать систему безопасности. Вся система основана на полиномиальных хеш-функциях\(^{\text{∗}}\). Тимофей может ввести в систему строку, состоящую из строчных латинских букв, и система выдаст её полиномиальный хеш. Чтобы взломать систему, Тимофею нужно узнать параметры полиномиального хеша, которые использует система (\(p\) и \(m\)). У Тимофея осталось очень мало времени, поэтому он успеет сделать только \(3\) запроса. Помогите ему решить задачу. Протокол взаимодействия Чтобы сделать запрос в систему выведите ? \(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\).
| |
|
|
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]\). Каково минимальное количество актов справедливости, необходимых для того, чтобы сделать массив неубывающим? Выходные данные Для каждого набора входных данных выведите целое число — минимальное количество актов справедливости, необходимых для того, чтобы сделать массив \(a\) неубывающим. Если это невозможно, выведите \(-1\). Примечание В первом наборе входных данных нет необходимости выполнять акты справедливости. Массив сам по себе честен! В третьем наборе входных данных можно доказать, что массив не может стать неубывающим. В пятом наборе входных данных ikrpprppp может выполнить акт справедливости на индексе 3, затем акт справедливости на индексе 2 и, наконец, еще один акт справедливости на индексе 3. После этого \(a\) станет \([4, 9, 16]\).
| |
|
|
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\). Выходные данные Выведите одно целое число — количество троек (\(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\)).
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите одну строку, содержащую любую перестановку \(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\), для которой не существует пар.
| |
|
|
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, от Вас требуется найти оптимальное распределение стипендии. Выходные данные В единственной строке выведите три целых числа k3, k4 и k5 — искомые величины, обозначающие оптимальное распределение размеров стипендии. Если оптимальных ответов несколько, выведите любой из них. Если ответа не существует, выведите -1.
| |
|
|
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\). Пожалуйста, помогите Лелле и Фламму скоординировать свои победы и поражения так, чтобы матч был успешным, а итоговый счет за матч был максимальным. Выходные данные Для каждого набора входных данных выведите одно целое число — максимальный итоговый счет успешного матча. Примечание В первом наборе входных данных возможный матч выглядит так: - Фламм выигрывает, \(\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\). Пожалуйста, помогите Лелле и Фламму скоординировать свои победы и поражения так, чтобы матч был успешным, а итоговый счет за матч был максимальным. Выходные данные Для каждого набора входных данных, выведите одно целое число — максимальный итоговый счет успешного матча. Примечание В первом наборе входных данных возможный матч выглядит так: - Фламм выигрывает, \(\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\).
| |
|
|
E. Это не задача про ним
Перебор
математика
*2100
теория чисел
игры
Два игрока, Алиса и Боб, играют в игру. У них есть \(n\) куч камней, в \(i\)-й куче изначально \(a_i\) камней. За один ход игрок может выбрать любую кучу камней и забрать из нее любое положительное число камней, с одним условием: - пусть текущее количество камней в куче равно \(x\). Нельзя забрать из кучи такое число камней \(y\), что наибольший общий делитель \(x\) и \(y\) не равен \(1\).
Тот игрок, который не может сделать ход, проигрывает. Оба игрока играют оптимально (то есть если у игрока есть стратегия, которая позволяет ему выиграть, как бы оппонент ни сопротивлялся, он выигрывает). Алиса ходит первой. Определите, кто выиграет. Выходные данные Для каждого набора входных данных выведите Alice, если выигрывает Алиса, или Bob, если выигрывает Боб.
| |
|
|
D. Измените НОД
Бинарный поиск
Перебор
Структуры данных
реализация
теория чисел
*2400
разделяй и властвуй
Вам даны два массива \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\). Вы должны выполнить следующую операцию ровно один раз: - выбрать любые индексы \(l\) и \(r\) такие, что \(1 \le l \le r \le n\);
- поменять местами \(a_i\) и \(b_i\) для всех \(i\) таких, что \(l \leq i \leq r\).
Найдите максимально возможное значение \(\text{gcd}(a_1, a_2, \ldots, a_n) + \text{gcd}(b_1, b_2, \ldots, b_n)\) после выполнения операции ровно один раз. Также найдите количество различных пар \((l, r)\), для которых достигается максимальное значение. Выходные данные Для каждого набора входных данных выведите два целых числа: максимальное значение \(\text{gcd}(a_1, a_2, \ldots, a_n) + \text{gcd}(b_1, b_2, \ldots, b_n)\) после выполнения операции ровно один раз, и количество подходящих пар. Примечание В первом, третьем и четвертом наборах входных данных ни в одном из массивов нельзя получить НОД больше \(1\), поэтому ответ — \(1 + 1 = 2\). Любая пара \((l, r)\) достигает одинаковый результат, например, в первом примере \(36\) такиз пар. В последнем наборе входных данных нужно выбрать \(l = 1\), \(r = 2\) для максимизации ответа. В этом случае НОД в первом массиве будет\(5\), а во втором — \(1\), поэтому ответ равен \(5 + 1 = 6\), а количество пар равно \(1\).
| |
|
|
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\) является великолепным. Выходные данные Для каждого набора входных данных выведите одно целое число — количество великолепных подмассивов. Примечание В первом наборе входных данных массив \(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]\) является великолепным.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите одно целое число — максимальное количество операций, которые вы можете выполнить. Примечание В первом наборе входных данных вы можете выбрать \(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\)) Дора вычисляет диапазон нового массива. Вам нужно помочь Доре минимизировать это значение, но поскольку Дора любит исследовать всё самостоятельно, вам нужно сказать ей только само минимальное значение. Выходные данные Для каждого набора входных данных выведите одно целое число — минимально возможный диапазон массива после какого-то количества операций. Примечание В первом наборе входных данных мы можем увеличить \(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\).
| |
|
|
F. Коробка Сакурако
Комбинаторика
математика
теория чисел
*1400
У Сакурако есть коробка, в которой \(n\) мячей. Каждый мяч имеет свою стоимость. Она хочет поспорить со своим другом, что если он наугад выберет из коробки два мяча (это могут быть два разных мяча, но они могут иметь одинаковое значение), то произведение их значений будет равно числу, которое загадала Сакурако. Так как Сакурако имеет докторскую степень по теории вероятностей, она знает, что наилучшее число для выбора — это математическое ожидание, но она забыла, как его вычислить. Помогите Сакурако и найдите математическое ожидание произведения двух элементов из массива. Можно показать, что математическое ожидание имеет вид \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа, а \(Q \ne 0\). Сообщите значение \(P \cdot Q^{-1}(\bmod 10^9+7)\). Выходные данные Для каждого набора входных данных выведите значение \(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{∗}}\) массива после любого количества операций. Выходные данные Для каждого набора входных данных выведите максимальный \(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\). Выходные данные Для каждого набора входных данных выведите \(q\) целых чисел — ответ для каждого запроса.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите единственное число в отдельной строке — ответ на задачу. Примечание В первом наборе входных данных можно переставить элементы следующим образом: \([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\).
| |
|
|
A. Минимальное число операций
Перебор
математика
теория чисел
жадные алгоритмы
*800
битмаски
Даны два целых числа \(n\) и \(k\). За одну операцию вы можете вычесть из \(n\) любую степень \(k\). Формально, за одну операцию вы можете заменить \(n\) на \((n-k^x)\) для любого неотрицательного целого числа \(x\). Найдите минимальное число операций, необходимое, чтобы сделать \(n\) равным \(0\). Выходные данные Для каждого набора входных данных выведите минимальное число операций на отдельной строке. Примечание В первом наборе входных данных \(n = 5\) и \(k = 2\). Можно выполнить следующую последовательность операций: - Вычесть \(2^0 = 1\) из \(5\). После этого \(n\) принимает значение \(5 - 1 = 4\).
- Вычесть \(2^2 = 4\) из \(4\). После этого \(n\) принимает значение \(4 - 4 = 0\).
Можно доказать, что невозможно сделать \(n\) равным \(0\) меньше чем за \(2\) операции. Значит, \(2\) и есть ответ на задачу. Во втором наборе входных данных \(n = 3\) и \(k = 5\). Можно выполнить следующую последовательность операций: - Вычесть \(5^0 = 1\) из \(3\). После этого \(n\) принимает значение \(3 - 1 = 2\).
- Вычесть \(5^0 = 1\) из \(2\). После этого \(n\) принимает значение \(2 - 1 = 1\).
- Вычесть \(5^0 = 1\) из \(1\). После этого \(n\) принимает значение \(1 - 1 = 0\).
Можно доказать, что невозможно сделать \(n\) равным \(0\) меньше чем за \(3\) операции. Значит, \(3\) и есть ответ на задачу.
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите \(\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\).
| |
|
|
B. Максимизируйте MEX
Перебор
математика
теория чисел
жадные алгоритмы
*1200
Вам дан массив \(a\) из \(n\) целых положительных чисел и целое число \(x\). Вы можете выполнить следующую двухшаговую операцию любое число раз (возможно, ноль): - Выбрать индекс \(i\) (\(1 \leq i \leq n\)).
- Увеличить \(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\) — нет.
Выходные данные Для каждого набора входных данных выведите одно целое число: максимальный \(\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\), что является максимумом.
| |
|
|
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\), или определить, что такое число не существует. Выходные данные Для каждого набора входных данных выведите одно целое число \(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\).
Во втором наборе входных данных можно доказать, что невозможно найти общий генератор данных четырёх целых чисел.
| |
|
|
C. Пенчик и булочки барбекю
Конструктив
математика
теория чисел
*1300
Пенчик любит две вещи: полные квадраты и булочки барбекю в гонконгском стиле! На его день рождения Коханэ хочет объединить их в один подарок: \(n\) булочек барбекю, расположенных слева направо. Существует \(10^6\) доступных начинок для булочек барбекю, пронумерованных от \(1\) до \(10^6\). Чтобы убедиться, что Пенчику понравится этот подарок, Кохане хочет, чтобы выполнялись следующие условия: - Ни одна начинка не используется ровно один раз; то есть каждая начинка должна либо не появляться вовсе, либо появляться как минимум дважды.
- Для любых двух булочек \(i\) и \(j\) с одинаковой начинкой расстояние между ними, равное \(|i-j|\), должно быть полным квадратом\(^{\text{∗}}\).
Помогите Кохане найти подходящий способ выбора начинки для булочек или определите, что выполнить все условия невозможно. Если существует несколько решений, выведите любое из них. Выходные данные Для каждого набора входных данных, если не существует правильного выбора начинок, выведите \(-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\).
| |
|
|
A. Схема
математика
реализация
теория чисел
жадные алгоритмы
*800
Алиса только что создала схему с \(n\) лампочками и \(2n\) переключателями. Каждый компонент (лампочка или переключатель) имеет два состояния: включен или выключен. Лампочки и переключатели расположены таким образом: - Каждая лампочка подключена к ровно двум переключателям.
- Каждый переключатель подключен к ровно одной лампочке. Неизвестно, к какой лампочке подключен каждый переключатель.
- Когда все переключатели выключены, все лампочки также выключены.
- Если переключатель переключается (с включенного на выключенный или наоборот), состояние лампочки, к которой он подключен, также переключается.
Алиса принесла схему, которая показывает только состояния \(2n\) переключателей, своей сестре Ирис и задала ей загадку: каково минимальное и максимальное количество лампочек, которые могут быть включены? Зная проделки своей младшей сестры слишком хорошо, Ирис не тратит больше секунды, чтобы дать Алисе правильный ответ. Можете ли вы сделать также? Выходные данные Для каждого набора входных данных выведите два целых числа — минимальное и максимальное количество лампочек, которые могут быть включены, соответственно. Примечание В первом наборе входных данных в схеме только одна лампочка, и ни один переключатель не включен, поэтому лампочка точно выключена. Во втором наборе входных данных в схеме только одна лампочка, но один переключатель, подключенный к ней, включен, поэтому лампочка включена. В третьем наборе входных данных в схеме только одна лампочка, оба переключателя включены, поэтому лампочка выключена, так как переключается дважды. В четвёртом наборе входных данных, чтобы не было включенных лампочек, переключатели могут быть расположены следующим образом: - Переключатель \(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\) переключается один раз из своего первоначального выключенного состояния, поэтому она включена.
| |
|
|
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}]\). Выходные данные Для каждого набора входных данных выведите единственное число: значение \(G(n,k)\), взятое по модулю \(10^9+7\).
| |
|
|
A. Тайна короля Кей-Хосрова
Перебор
математика
теория чисел
*800
китайская теорема об остатках
Ходит легенда о мудром царе Кей-Хосрове, который владел огромной сокровищницей, наполненной сокровищами со всей Персидской империи. Однако, чтобы предотвратить кражу и обеспечить сохранность его богатств, хранилище короля Кей-Хосрова было запечатано магическим замком, который можно было открыть, только разгадав загадку. Загадка состоит из двух чисел \(a\) и \(b\). Чтобы открыть хранилище, претендент должен определить наименьший ключ \(m\), удовлетворяющий двум условиям: - \(m\) должно быть больше или равно, по крайней мере, одному из чисел \(a\) и \(b\).
- Остаток от деления \(m\) на \(a\) должен быть равен остатку от деления \(m\) на \(b\).
Только найдя наименьшее подходящее значение \(m\), можно открыть хранилище и получить доступ к легендарным сокровищам! Выходные данные Для каждого набора входных данных выведите наименьшее целое число \(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\) не удовлетворяет условиям.
| |
|
|
H. Райан против Райанех
Перебор
дп
теория чисел
поиск в глубину и подобное
*3300
Райан прилагает последние усилия, чтобы завоевать сердце Рейхане, утверждая, что он сильнее Райанех (то есть компьютера на персидском). Чтобы проверить это, Рейхане обращается за помощью к Хорезми. Хорезми объясняет, что множество является целочисленно линейно независимым, если ни один элемент в наборе не может быть получен как целочисленная линейная комбинация остальных. Райану задается набор целых чисел, и он должен найти одно из максимально возможных целочисленных линейно независимых подмножеств. Обратите внимание, что один элемент всегда является целочисленным линейно независимым подмножеством. Целочисленная линейная комбинация чисел \(a_1, \ldots, a_k\) — это любая сумма вида \(c_1 \cdot a_1 + c_2 \cdot a_2 + \ldots + c_k \cdot a_k\) где \(c_1, c_2, \ldots, c_k\) — целые числа (которые могут быть нулевыми, положительными или отрицательными). Выходные данные В первой строке каждого набора входных данных выведите размер наибольшего целочисленного линейно независимого подмножества. В следующей строке выведите одно такое подмножество. Если существует несколько ответов, выведите любой из них. Примечание В 1 наборе входных данных: \(\{4, 6\}\) — это целочисленное линейно независимое подмножество. Можно доказать, что не существует целочисленного линейно независимого подмножества, состоящего по крайней мере \(3\) из элементов. Во 2 наборе входных данных: \(\{35, 21, 30\}\) — это целочисленное линейно независимое подмножество, поскольку никакая целочисленная линейная комбинация любых двух элементов не может создать третий. Не существует целочисленного линейно независимого подмножества, содержащего по крайней мере \(4\) элемента. В 3 наборе входных данных: \(\{2, 3, 6\}\) не является целочисленным линейно независимым подмножеством, поскольку \(6\) может быть записано как \(6 \cdot 2 + (-2) \cdot 3\), что является целочисленной линейной комбинацией из \(\{2, 3\}\).
| |
|
|
B. Все любят тройки
Конструктив
математика
*900
теория чисел
жадные алгоритмы
Есть 3 героя и 3 злодея, то есть всего 6 человек. Дано целое положительное число \(n\). Найдите наименьшее целое число, такое, что его десятичное представление имеет длину \(n\), оно состоит только из цифр \(3\) и \(6\), и оно делится и на \(33\), и на \(66\). Если такого числа не существует, выведите \(-1\). Выходные данные Для каждого набора входных данных выведите наименьшее подходящее целое число, если оно существует, и \(-1\) в противном случае. Примечание Для \(n=1\) такого целого числа не существует, так как ни \(3\), ни \(6\) не делится на \(33\). Для \(n=2\) число \(66\) состоит только из \(6\) и делится как на \(33\), так и на \(66\). Для \(n=3\) такого целого числа не существует. Только \(363\) делится на \(33\), но оно не делится на \(66\). Для \(n=4\) числа \(3366\) и \(6666\) делятся и на \(33\), и на \(66\), причем \(3366\) — наименьшее.
| |
|
|
F. XORофикатор 3000
дп
теория чисел
*1900
битмаски
Алиса уже много лет дарит подарки Бобу, а потому знает, что больше всего ему нравится делать побитовый XOR интересных чисел, при этом интересными Боб считает такие целые положительные числа \(x\), для которых выполнено \(x \not\equiv k (\bmod 2^i)\). Поэтому в этом году на его очередной день рождения она подарила ему сверхмощный «XORофикатор 3000», самую последнюю модель. Бобу подарок очень понравился, ведь благодаря нему он мог мгновенно делать XOR всех интересных чисел на любом отрезке от \(l\) до \(r\) включительно, а что, в самом деле, ещё нужно человеку для счастья? Но, к сожалению, прибор оказался настолько мощным, что в какой-то момент сделал XOR с самим собой и исчез. Боб был очень расстроен, и Алиса, чтобы хоть как-то подбодрить его, попросила вас написать свою версию «XORофикатора». Выходные данные Для каждого запроса выведите одно число — XOR всех чисел \(x\) на отрезке \([l, r]\) таких, что \(x \not\equiv k \mod 2^i\). Примечание В первом запросе на отрезке \([1, 3]\) интересными являются числа \(1\) и \(3\), поэтому ответом будет число \(1 \oplus 3 = 2\).
| |
|
|
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\) запросов. Протокол взаимодействия Взаимодействие для каждого набора входных данных начинается с чтения целого числа \(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\). Выходные данные Для каждого набора входных данных, если невозможно построить \(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\) все составные. Могут быть и другие правильные конструкции.
| |
|
|
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\), по модулю \(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\)
| |
|
|
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. 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.
| |
|
|
A. Shohag любит модули
Конструктив
теория чисел
*800
У Shohag есть целое число \(n\). Помогите ему найти возрастающую последовательность целых чисел \(1 \le a_1 \lt a_2 \lt \ldots \lt a_n \le 100\) такую, что для всех пар \(1 \le i \lt j \le n\) выполняется \(a_i \bmod i \neq a_j \bmod j\)\(^{\text{∗}}\). Можно показать, что такая последовательность всегда существует при заданных ограничениях. Выходные данные Для каждого набора входных данных выведите \(n\) целых чисел — последовательность, удовлетворяющую данным условиям. Если таких последовательностей несколько, выведите любую. Примечание В первом наборе входных данных последовательность возрастающая, значения от \(1\) до \(100\), и каждая пара индексов удовлетворяет условию: - Для пары \((1, 2)\): \(a_1 \bmod 1 = 2 \bmod 1 = 0\), и \(a_2 \bmod 2 = 7 \bmod 2 = 1\). Поэтому они различны.
- Для пары \((1, 3)\): \(a_1 \bmod 1 = 2 \bmod 1 = 0\), и \(a_3 \bmod 3 = 8 \bmod 3 = 2\). Поэтому они различны.
- Для пары \((2, 3)\): \(a_2 \bmod 2 = 7 \bmod 2 = 1\), и \(a_3 \bmod 3 = 8 \bmod 3 = 2\). Поэтому они отличаются.
Обратите внимание, что не обязательно выводить точно такую же последовательность, вы можете вывести любую другую последовательность, если она удовлетворяет необходимым условиям.
| |
|
|
C1. Shohag любит XOR (простая версия)
Перебор
математика
теория чисел
*1200
битмаски
Это простая версия задачи. Различия между двумя версиями выделены жирным шрифтом. Вы можете совершать взломы только в том случае, если решены обе версии задачи. У Shohag есть два целых числа \(x\) и \(m\). Помогите ему подсчитать количество целых чисел \(1 \le y \le m\) таких, что \(\mathbf{x \neq y}\) и \(x \oplus y\) является делителем\(^{\text{∗}}\) либо \(x\), либо \(y\), либо сразу обоих чисел. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Выходные данные Для каждого набора входных данных выведите одно целое число — количество подходящих \(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\) обозначает операцию побитового исключающего ИЛИ. Выходные данные Для каждого набора входных данных выведите одно целое число — количество подходящих \(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{†}}\). Или скажите, что таких массивов не существует. Выходные данные Для каждого набора входных данных, если нет решения, выведите \(-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\), то есть они равны, что недопустимо!
| |
|
|
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\). Выходные данные Для каждого набора входных данных выведите целое число — количество подходящих массивов по модулю \(998\,244\,353\). Примечание В первом наборе входных данных подходящими массивами являются \([1]\), \([1, 2]\), \([2]\) и \([2, 1]\). Во втором наборе входных данных всего \(29\) подходящих массивов. В частности, массив \([2, 1, 4]\) длины \(n = 3\) подходит, так как все его элементы принадлежат отрезку от \(1\) до \(m = 5\) и \(f(1)\), \(f(2)\) и \(f(n = 3)\) различны: - \(f(1) = \operatorname{gcd}(\operatorname{max}([2]), \operatorname{max}([1]), \operatorname{max}([4])) = \operatorname{gcd}(2, 1, 4) = 1.\)
- \(f(2) = \operatorname{gcd}(\operatorname{max}([2, 1]), \operatorname{max}([1, 4])) = \operatorname{gcd}(2, 4) = 2.\)
- \(f(3) = \operatorname{gcd}(\operatorname{max}([2, 1, 4])) = \operatorname{gcd}(4) = 4.\)
| |
|
|
F2. Shohag любит считать (сложная версия)
дп
теория чисел
*3200
Это сложная версия задачи. Единственные различия между двумя версиями этой задачи — ограничения на \(t\), \(m\) и сумму \(m\). Вы можете совершать взломы только в том случае, если решены обе версии задачи. Для массива целых чисел \(a\) длины \(n\) определим \(f(k)\) как наибольший общий делитель (НОД) максимальных значений всех подмассивов\(^{\text{∗}}\) длины \(k\). Например, если массив равен \([2, 1, 4, 6, 2]\), то \(f(3) = \operatorname{gcd}(\operatorname{max}([2, 1, 4]), \operatorname{max}([1, 4, 6]), \operatorname{max}([4, 6, 2])) = \operatorname{gcd}(4, 6, 6) = 2\). Массив является хорошим, если для всех пар \(1 \le i \lt j \le n\) выполняется \(f(i) \neq f(j)\). У Shohag есть целое число \(m\). Помогите ему подсчитать количество непустых хороших массивов произвольной длины, каждый элемент которых является целым числом от \(1\) до \(m\), по модулю \(998\,244\,353\). Выходные данные Для каждого набора входных данных выведите целое число — количество подходящих массивов по модулю \(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! Выходные данные Выведите одно целое число — количество допустимых способов назначить каждой вершине значение по модулю \(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]\).
| |
|
|
D. Непростое дерево
Деревья
Перебор
Конструктив
теория чисел
поиск в глубину и подобное
жадные алгоритмы
*1900
Дано дерево с \(n\) вершинами. Вам необходимо создать массив \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящий из различных целых чисел от \(1\) до \(2 \cdot n\). При этом для каждого ребра \(u_i \leftrightarrow v_i\) дерева значение \(|a_{u_i} - a_{v_i}|\) не должно быть простым числом. Найдите любой массив, удовлетворяющий этим условиям, либо сообщите, что такого массива нет. Выходные данные Для каждого набора входных данных, если массив, удовлетворяющий условиям, существует, выведите его элементы \(a_1, a_2, \ldots, a_n\). Иначе, выведите единственное число \(-1\). Примечание Ниже представлены возможные ответы. Вместо номеров вершин в них записаны соответствующие элементы массива \(a\). Изображение дерева в первом наборе Изображение дерева во втором наборе
| |
|
|
F. Количество кубов
Комбинаторика
математика
дп
теория чисел
*2700
Рассмотрим прямой параллелепипед с размерами сторон \(a\), \(b\) и \(c\), состоящий из единичных кубиков \(k\) различных цветов. Мы можем делать циклические сдвиги параллелепипеда в любом измерении и в любой комбинации\(^{\text{∗}}\). Имеется \(d_i\) кубиков \(i\)-го цвета (\(1 \le i \le k\)). Сколько можно составить из этих кубиков различных параллелепипедов с данными размерами сторон, никакие два из которых нельзя совместить комбинацией сдвигов? Выходные данные Для каждого набора входных данных выведите одно целое число — количество различных параллелепипедов по модулю \(998\,244\,353\). Примечание В первом наборе существует только один параллелепипед, состоящий из одного единичного куба. Возможные параллелепипеды во втором наборе
| |
|
|
F. Segmentation Folds
Перебор
теория чисел
поиск в глубину и подобное
*2400
Peter loves folding segments. There is a segment on a number line occupying the interval \([\ell, r]\). Since it is the prime time for folding the segments, Peter decides to fold the segment carefully. In each step, he chooses one of the two following operations whenever possible: - Operation \(\tt{LTR}\): he folds the segment from left to right, where \(\ell\) coincides with a point \(x\) (\(\ell < x \le r\)) such that \(\ell+x\) is a prime number\(^{\text{∗}}\). When Peter chooses this operation, he always chooses the largest possible value \(x\). Note that the segment occupies the interval \([\frac{1}{2}(\ell+x), r]\) afterwards.
- Operation \(\tt{RTL}\): he folds the segment from right to left, where \(r\) coincides with a point \(x\) (\(\ell \le x < r\)) such that \(r+x\) is a prime number. When Peter chooses this operation, he always chooses the smallest possible value \(x\). Note that the segment occupies the interval \([\ell, \frac{1}{2}(r+x)]\) afterwards.
A folding sequence refers to a sequence of operations specified above. Peter wants to fold the segment several times, resulting in the shortest possible interval whose length that cannot be further reduced. The length of an interval \([\ell, r]\) is defined naturally to be \(r-\ell\). Let's consider the following example. Suppose that we are folding a segment initially occupying the interval \([1, 30]\). There are three folding sequences that lead to the shortest possible resulting interval, as shown in the following figure. Please help Peter determine the number of folding sequences such that the resulting interval has a shortest possible length. Output the number modulo \(998244353\). Output For each test case, please output a line denoting the number of ways to fold the given segment such that the resulting segment has the shortest possible length, modulo \(998244353\).
| |
|
|
B. Цифры
математика
теория чисел
*1100
Артем записал на доске цифру \(d\) ровно \(n!\) раз подряд. То есть у него получилось число \(dddddd \dots ddd\) (ровно \(n!\) цифр). Теперь ему интересно, на какие нечетные цифры от \(1\) до \(9\) делится записанное число. Выходные данные Для каждого набора входных данных выведите искомые цифры в возрастающем порядке. Примечание Факториал целого неотрицательного числа \(n\) (\(n!\)) — это произведение всех целых чисел от \(1\) до \(n\). Например, факториал числа \(5\) будет равен \(1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 = 120\).
| |
|
|
D. Задача про НОД
Потоки
Перебор
математика
теория чисел
*1800
Даны три числа \(l\), \(r\) и \(G\). Найдите два числа \(A\) и \(B\) (\(l \le A \le B \le r\)), такие, что их наибольший общий делитель равен \(G\), а расстояние \(|A - B|\) максимально. Если существует несколько таких пар, выберите ту, где \(A\) минимально. Если подходящих пар нет, выведите «-1 -1». Выходные данные Для каждого набора входных данных выведите два целых числа \(A\) и \(B\) — ответ на задачу, либо «-1 -1», если подходящей пары чисел не существует.
| |
|
|
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\).
Выходные данные Для каждого набора входных данных выведите количество подходящих упорядоченных пар \((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\): - Выберите целые числа \(r\) и \(c\) такие, что \(1 \leq r \leq n\) и \(1 \leq c \leq m\).
- Установите \(M_{i,j}\) в \(0\) для всех упорядоченных пар \((i,j)\) таких, что \(i=r\), \(j=c\) или оба.
Обратите внимание, что запросы не являются постоянными, что означает, что вы на самом деле не устанавливаете никакие элементы в \(0\) в процессе — вам только нужно вывести, возможно ли найти \(r\) и \(c\) так, чтобы, если вышеуказанная операция будет выполнена, красота матрицы будет равна \(x\). Также обратите внимание, что вы должны выполнять операцию для каждого запроса, даже если красота исходной матрицыуже равна \(x\). Выходные данные Для каждого набора входных данных выведите «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\).
| |
|
|
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. 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\).
| |
|
|
A. Кевин и кодовый замок
Перебор
математика
реализация
теория чисел
жадные алгоритмы
*800
Кевин попал из-за Грейс в ловушку в Прибрежной деревне. На выходе из деревни находится кодовый замок, который можно открыть только в том случае, если Кевин его разгадает. В начале на кодовом замке написано целое число \( x \), и Кевин может ноль или больше раз выполнить любую из следующих двух операций: - Если \( x \neq 33 \), он может выбрать две последовательные цифры \( 3 \) из \( x \) и удалить их одновременно. Например, если \( x = 13\,323 \), он может удалить вторую и третью \( 3 \), изменив \( x \) на \( 123 \).
- Если \( x \geq 33 \), он может изменить \( x \) на \( x - 33 \). Например, если \( x = 99 \), он может выбрать эту операцию, чтобы изменить \( x \) на \( 99 - 33 = 66 \).
Когда значение \( x \) на кодовом замке становится \( 0 \), Кевин может открыть замок и сбежать из деревни. Пожалуйста, определите, возможно ли Кевин открыть кодовый замок и сбежать. Выходные данные Для каждого набора входных данных выведите «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. Максимальное модульное равенство
Структуры данных
математика
теория чисел
*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\). Выходные данные Для каждого запроса выведите максимальное значение \(m\), описанное в условии. Примечание В первом запросе первого примера \(6 \bmod 3 = 3 \bmod 3 = 0\), можно показать, что для больших \(m\) нужное условие выполняться не будет. В третьем запросе первого примера \(14 \bmod 4 = 2 \bmod 4 = 6 \bmod 4 = 2\), можно показать, что для больших \(m\) нужное условие выполняться не будет.
| |
|
|
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. У Коколи есть строка \(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); }
Выходные данные Для каждого набора входных данных выведите бинарную строку \(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}\).
| |
|
|
F. Умножительные массивы
Комбинаторика
дп
теория чисел
*2200
Даны целые числа \(k\) и \(n\). Для каждого целого числа \(x\) от \(1\) до \(k\) посчитайте количество целых массивов \(a\), таких что выполняются все следующие условия: - \(1 \leq |a| \leq n\), где \(|a|\) обозначает длину массива \(a\).
- \(1 \leq a_i \leq k\) для всех \(1 \leq i \leq |a|\).
- \(a_1 \times a_2 \times \dots \times a_{|a|}=x\) (т.е. произведение всех элементов равно \(x\)).
Обратите внимание, что два массива \(b\) и \(c\) различны, если либо их длины различны, либо существует индекс \(1 \leq i \leq |b|\), такой что \(b_i\neq c_i\). Выведите ответ по модулю \(998\,244\,353\). Выходные данные Для каждого набора входных данных выведите \(k\) целых чисел, разделенных пробелом, на новой строке: количество массивов для \(x=1,2,\ldots,k\), по модулю \(998\,244\,353\). Примечание В первом наборе входных данных существует \(2\) массива \(a\) с \(|a|\leq 2\) и произведением элементов, равным \(1\): Существует \(3\) массива \(a\) с \(|a|\leq 2\) и произведением элементов, равным \(2\): - \([2]\)
- \([1,2]\)
- \([2,1]\)
| |
|
|
A. Минимальная взаимная простота
математика
теория чисел
*800
Сегодня Маленький Джон потратил все свои сбережения, чтобы купить отрезок. Теперь он хочет построить на нём дом. Отрезок положительных целых чисел \([l,r]\) называется взаимно простым, если числа \(l\) и \(r\) взаимно простые\(^{\text{∗}}\). Взаимно простой отрезок \([l,r]\) называется минимальным взаимно простым, если он не содержит\(^{\text{†}}\) никаких взаимно простых отрезков, не равных самому себе. Ниже в разделе примечаний приведены примеры минимальных и не минимальных взаимно простых отрезков. Дан отрезок \([l,r]\) положительных целых чисел, найдите количество минимальных взаимно простых отрезков, содержащихся в \([l,r]\). Выходные данные Для каждого набора входных данных выведите количество минимальных взаимно простых отрезков, содержащихся в \([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\) минимальный взаимно простой отрезок.
| |
|
|
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{∗}}\) является полупростым. Выходные данные Для каждого набора входных данных выведите количество упорядоченных пар индексов на новой строке. Примечание В первом наборе входных данных \(5\) пар индексов: \((1, 3)\), \((1, 4)\), \((2, 3)\), \((2, 4)\) и \((4, 4)\).
| |
|
|
E. Периодические числа
Комбинаторика
*2100
дп
теория чисел
Непустая строка s называется бинарной, если она состоит только из символов «0» и «1». Пронумеруем символы бинарной строки s от 1 до длины строки и обозначим i-й символ строки s как si. Бинарную строку s длины n будем называть периодической, если существует целое число 1 ≤ k < n такое, что: - k — делитель числа n
- для всех 1 ≤ i ≤ n - k выполняется si = si + k
Например, бинарные строки «101010» и «11» являются периодическими, а «10» и «10010» — нет. Целое положительное число x будем называть периодическим, если бинарная строка, являющаяся записью числа x в двоичной системе счисления (без лидирующих нулей), — периодическая. Ваша задача — найти количество периодических чисел в отрезке от l до r (оба конца включены). Выходные данные Выведите единственное целое число — количество периодических чисел в отрезке от l до r (оба конца включены). Примечание В первом примере периодическими числами являются 3, 7 и 10. Во втором примере периодическими числами являются 31 и 36.
| |
|
|
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. Выходные данные Выведите единственное целое число — количество подстрок, которые являются счастливыми числами. Пожалуйста, не используйте спецификатор %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».
| |
|
|
C. Сокращение дробей
математика
реализация
теория чисел
*1800
сортировки
Для запутывания противников Галактическая Империя использует особый формат представления дробей. Дроби представлены как два набора целых чисел. Произведение чисел из первого набора дает числитель дроби, из второго — знаменатель дроби. Однако, обнаружилось, что программы для работы с дробями в таком представлении неполны, в них отсутствует поддержка операции сокращения дробей. Реализуйте эту операцию, и Империя не забудет вас. Выходные данные Выведите ответ на задачу в формате аналогичном формату входных данных. Количества чисел в выводимых наборах 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. Определим операцию, которая состоит из двух шагов, следующим образом: - Сначала по массиву a строится массив s частичных сумм, состоящий из n элементов. Элемент номер i (1 ≤ i ≤ n) массива s равен
. Операция x mod y обозначает взятие остатка от деления числа x на число y. - Затем содержимое массива s записывается в массив a. Элемент номер i (1 ≤ i ≤ n) массива s становится i-ым элементом массива a (ai = si).
Вам же нужно найти массив a после применения ровно k описанных операций. Выходные данные Выведите n целых чисел — элементы массива a после проделанных операций. Элементы выводите в порядке увеличения их индексов в массиве a. Выведенные числа разделяйте пробельными символами.
| |
|
|
B. Всем известные числа
Бинарный поиск
*1600
теория чисел
жадные алгоритмы
Числа k-боначчи (k целое, k > 1) являются обобщением чисел Фибоначчи и определяются следующим образом: - F(k, n) = 0, для целых n, 1 ≤ n < k;
- F(k, k) = 1;
- F(k, n) = F(k, n - 1) + F(k, n - 2) + ... + F(k, n - k), для целых n, n > k.
Обратите внимание, мы определяем числа k-боначчи, F(k, n), только для целых значений n и k. Вам задано число s, представьте его в виде суммы нескольких (хотя бы двух) различных чисел k-боначчи. Выходные данные В первую строку выведите целое число m (m ≥ 2) — количество чисел в найденном представлении. Во вторую строку выведите m различных целых чисел a1, a2, ..., am. Каждое выведенное число должно быть числом k-боначчи. Сумма выведенных чисел должна быть равна s. Гарантируется, что ответ существует. Если существует несколько ответов, разрешается вывести любой.
| |
|
|
E. Неразрешимость
математика
*2100
теория чисел
Рассмотрим уравнение  где записью [a] обозначается целая часть числа a. Найдем все целые z (z > 0), при которых это уравнение неразрешимо в целых положительных числах. Выражение «неразрешимо в целых положительных числах» означает, что не существует таких целых положительных чисел x и y (x, y > 0), при которых выполняется описанное выше равенство. Выпишем все такие z в порядке возрастания: z1, z2, z3, и так далее (zi < zi + 1). От вас требуется по числу n найти число zn. Выходные данные Выведите единственное целое число — остаток от деления числа zn на 1000000007 (109 + 7). Гарантируется, что ответ существует.
| |
|
|
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.
| |
|
|
B. Т-простые числа
Бинарный поиск
математика
реализация
теория чисел
*1300
Известно, что простыми называются целые положительные числа, у которых ровно два различных положительных делителя. По аналогии назовем целое положительное число t Т-простым, если у t ровно три различных положительных делителя. Вам дан массив, состоящий из n целых положительных чисел. Для каждого из них определите, является ли оно Т-простым или нет. Выходные данные Выведите n строк: i-тая строка должна содержать «YES» (без кавычек), если число xi является Т-простым, и «NO» (без кавычек), если не является. Примечание В приведенном тесте даны три числа. Первое число 4 имеет ровно три делителя — 1, 2 и 4, поэтому ответ для этого числа — «YES». Второе число 5 имеет два делителя (1 и 5), а третье число 6 — четыре делителя (1, 2, 3, 6), поэтому ответ для них — «NO».
| |
|
|
A. Задача на НОК
*1600
теория чисел
Несколько дней назад я узнал, что существует такая штука как наименьшее общее кратное (НОК). Теперь я часто играю с этим понятием — хочу сделать большое число с помощью НОК. Но я не хочу использовать слишком много чисел, поэтому я выберу три целых положительных числа (необязательно различных), каждое из которых не превышает n. Помогите мне найти максимально возможное наименьшее общее кратное этих трех целых чисел. Выходные данные Выведите единственное целое число — максимально возможное наименьшее общее кратное трех необязательно различных целых чисел, которые не превышают n. Примечание Наименьшее общее кратное нескольких положительных целых чисел — это наименьшее положительное целое число, кратное им всем. Результат может получиться достаточно большим. Возможно, 32-битного целого числа не будет достаточно для его хранения. Поэтому рекомендуется использовать 64-битные целые числа. В последнем примере мы можем выбрать числа 7, 6, 5, их НОК равен 7·6·5 = 210. Это — максимальный НОК, который мы можем получить.
| |
|
|
E. Задача с Числами
Комбинаторика
математика
реализация
дп
теория чисел
*2600
Обозначим количество делителей положительного целого числа n как d(n). Вам дано три числа a, b и c. Ваша задача — вычислить следующую сумму:  Найдите остаток от деления этой суммы на 1073741824 (230). Выходные данные Выведите единственное целое число — остаток от деления искомой суммы на 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.
| |
|
|
B. Простая Задача с Числами
реализация
теория чисел
*1300
Обозначим количество делителей положительного целого числа n как d(n). Вам дано три числа a, b и c. Ваша задача — вычислить следующую сумму:  Найдите остаток от деления этой суммы на 1073741824 (230). Выходные данные Выведите единственное целое число — остаток от деления искомой суммы на 1073741824 (230). Примечание Пояснение к первому примеру. - d(1·1·1) = d(1) = 1;
- d(1·1·2) = d(2) = 2;
- d(1·2·1) = d(2) = 2;
- d(1·2·2) = d(4) = 3;
- d(2·1·1) = d(2) = 2;
- d(2·1·2) = d(4) = 3;
- d(2·2·1) = d(4) = 3;
- d(2·2·2) = d(8) = 4.
Следовательно, ответ — 1 + 2 + 2 + 3 + 2 + 3 + 3 + 4 = 20.
| |
|
|
C. Простые на отрезке
Бинарный поиск
*1600
теория чисел
Вы решили провести небольшое исследование в области теории простых чисел. Напомним, что простое число — это целое положительное число, имеющее ровно два различных целых положительных делителя. Рассмотрим целые положительные числа a, a + 1, ..., b (a ≤ b). Вы хотите найти наименьшее целое число l (1 ≤ l ≤ b - a + 1) такое, что для любого целого x (a ≤ x ≤ b - l + 1) среди l целых чисел x, x + 1, ..., x + l - 1 найдется не менее k простых чисел. Найдите и выведите искомое наименьшее l. Если никакое значение l не подходит под описанные ограничения, выведите -1. Выходные данные В единственной строке выведите единственное целое число — искомое наименьшее l. Если решения не существует, выведите -1.
| |
|
|
B. Котенок Гав
математика
теория чисел
*1400
Котенок Гав очень любит играть с числами. Пока он знает только простые числа, которые являются цифрами. Такими числами являются 2, 3, 5 и 7. Но такие числа котенку порядком поднадоели, потому что он придумал не очень много игр, связанных с ними. Котенок Гав хочет найти минимальное число длины n, такое, что оно одновременно делится на все числа, которые котенок уже знает (2, 3, 5 и 7). Помогите ему в этом. Длиной числа называется количество разрядов его представления в десятичной записи без лидирующих нулей. Выходные данные Выведите единственное целое число — ответ на поставленную задачу без лидирующих нулей, или «-1» (без кавычек), если чисел, удовлетворяющих условию задачи не существует.
| |
|
|
C. Превращение числа
дп
теория чисел
*2000
жадные алгоритмы
Маленький Петя очень любит целые положительные числа. Недавно мама подарила ему целое положительное число a. Больше чем числа Петя любит только играть с маленькой Машей. Оказалось, что у Маши уже есть целое положительное число b. Петя решил превратить свое число a в число b, последовательно выполняя операции следующих двух типов: - Вычесть из своего числа 1.
- Выбрать любое целое число x от 2 до k, включительно. Затем вычесть из своего числа a число (a mod x). Операция a mod x обозначает взятие остатка от деления числа a на число x.
Одну операцию Петя выполняет за одну секунду. Каждый раз он выбирает, какую операцию он будет выполнять на текущем ходу, независимо от того, какие операции он делал до этого. В частности, из этого следует, что он может выполнять одну и ту же операцию сколько угодно раз подряд. Сейчас ему интересно, за какое наименьшее количество секунд он сможет превратить свое число a в число b. Обратите внимание, что числа x в операциях второго типа выбираются каждый раз заново, независимо друг от друга. Выходные данные Выведите единственное целое число — искомое наименьшее количество секунд, необходимое для превращения числа a в число b. Примечание В первом примере последовательность чисел, получающихся у Пети в процессе получения числа b, такая: 10 → 8 → 6 → 4 → 3 → 2 → 1. Во втором примере одна из возможных последовательностей такая: 6 → 4 → 3.
| |
|
|
A. Почти простые числа
*900
теория чисел
Число называется почти простым, если оно имеет ровно два различных простых делителя. Например, числа 6, 18, 24 являются почти простыми, а 4, 8, 9, 42 — не являются. Найдите количество почти простых чисел от 1 до n включительно. Выходные данные Выведите количество почти простых чисел от 1 до n включительно.
| |
|
|
B. Хорошие последовательности
дп
*1500
теория чисел
Белка Лисска интересуется последовательностями. Также у нее есть предпочтения в целых числах. Она думает, что n целых чисел a1, a2, ..., an хорошие. Теперь ей интересны хорошие последовательности. Последовательность x1, x2, ..., xk называется хорошей, если она удовлетворяет следующим трем условиям: - Последовательность строго возрастает, то есть xi < xi + 1 для всех i (1 ≤ i ≤ k - 1).
- Никакие два соседних элемента не являются взаимно простыми, то есть gcd(xi, xi + 1) > 1 для всех i (1 ≤ i ≤ k - 1) (где gcd(p, q) обозначает наибольший общий делитель чисел p и q).
- Все элементы данной последовательности являются хорошими целыми числами.
Найдите длину самой длинной хорошей последовательности. Выходные данные Выведите единственное целое число — длину самой длинной хорошей последовательности. Примечание В первом примере следующие последовательности являются примерами хороших последовательностей: [2; 4; 6; 9], [2; 4; 6], [3; 9], [6]. Длина самой длинной хорошей последовательности — 4.
| |
|
|
A. Вычитания
математика
*900
теория чисел
Заданы два числа. До тех пор, пока оба они больше нуля, с ними производят одну и ту же операцию: из большего числа вычитают меньшее. Если числа равны, то из одного вычитают другое. Например, из пары (4,17) за одну операцию получается пара (4,13), а из пары (5,5) пара (0,5). Вам задано некоторое количество пар (ai, bi). Сколько операций будет выполнено для каждой из них? Выходные данные Выведите искомое количество операций для каждой пары на отдельной строке.
| |
|
|
E. Число с заданным количеством делителей
Перебор
дп
теория чисел
*2000
Найдите наименьшее натуральное число, имеющее заданное количество делителей. Гарантируется, что ответ не превосходит 1018. Выходные данные Выведите наименьшее число, имеющее ровно n делителей.
| |
|
|
B. Простая матрица
Бинарный поиск
Перебор
математика
теория чисел
*1300
Перед Вами матрица размера n × m, состоящая из целых чисел. За один ход разрешается применить к матрице единственное преобразование: выбрать произвольный элемент матрицы и увеличить его на 1. Каждый элемент можно увеличивать произвольное количество раз. Вас очень интересуют простые числа. Напомним, что простым числом называется целое положительное число, которое имеет ровно два различных целых положительных делителя: единицу и само себя. Например, числа 2, 3, 5 — простые, а числа 1, 4, 6 — нет. Вы считаете матрицу простой, если выполняется хотя бы одно из следующих двух условий: - существует строка матрицы, в которой все числа простые;
- существует столбец матрицы, в котором все числа простые;
Ваша задача — посчитайте, за какое минимальное количество ходов можно получить из имеющейся матрицы простую матрицу. Выходные данные Выведите единственное целое число — минимальное количество ходов, которое потребуется, чтобы из заданной матрицы получить простую матрицу. Если заданная матрица — простая, выведите 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. Сколькими способами он может выбрать эту карточку, чтобы в результате некоторых действий в стране коней он смог получить требуемые карточки? Поликарп может получать карточки только от коней в результате действий описанных выше. Кроме требуемых карточек, Поликарпу разрешается получить некоторые дополнительные карточки. Выходные данные Выведите единственное целое число — ответ на задачу. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.
| |
|
|
E. Красивая декомпозиция
дп
теория чисел
жадные алгоритмы
*1900
игры
Валера считает, что число красивое, если оно равно 2k или -2k для некоторого целого k (k ≥ 0). Недавно учитель математики попросил Валеру представить число n в виде суммы красивых чисел. Так как Валера очень жадный, он хочет использовать для выполнения этого задания минимально возможное количество красивых чисел. Помогите Валере, найдите это количество. Другими словами, если мы рассмотрим все разложения числа n на красивые слагаемые, то нужно найти размер разложения, в котором меньше всего слагаемых. Выходные данные Выведите единственное целое число — минимальное количество красивых чисел, сумма которых равна n. Примечание В первом примере n = 2 является красивым числом. Во втором примере n = 7, и Валера может разложить его в сумму 23 + ( - 20). В третьем примере n = 109 раскладывается в сумму четырех слагаемых следующим образом: 27 + ( - 24) + ( - 22) + 20.
| |
|
|
D. Коровки и классные последовательности
математика
дп
теория чисел
*2400
Бесси с коровками недавно играли с «классными» последовательностями и пытались построить некоторые из них. К сожалению, они плохо считают, так что им нужна Ваша помощь! Пара положительных целых чисел (x, y) называется «классной», если x можно представить как сумму y последовательных целых чисел (не обязательно положительных). Последовательность (a1, a2, ..., an) называется «классной», если пары (a1, a2), (a2, a3), ..., (an - 1, an) все являются классными. У коровок есть последовательность из n положительных целых чисел, a1, a2, ..., an. За один ход можно заменить некоторое ai любым другим положительным целым числом (других ограничений на новое значение ai нет). Определите наименьшее количество ходов, необходимое для того, чтобы итоговая последовательность стала «классной». Выходные данные Выведите единственное целое число, минимальное количество ai, которое надо поменять, чтобы последовательность стала классной. Примечание В первом примере последовательность уже «классная», так что никаких элементов менять не надо. Во втором примере можно изменить a2 на 5, а a3 — на 10, чтобы получить (20, 5, 10, 4), являющуюся «классной». Итого, меняются 2 элемента.
| |
|
|
A. Коровки и первообразные корни
математика
реализация
теория чисел
*1400
Коровки только что узнали, что такое первообразный корень! Вам дано простое число p, первообразный корень — целое число x (1 ≤ x < p), такое, что ни одно из целых чисел x - 1, x2 - 1, ..., xp - 2 - 1 не делится на p, при этом число xp - 1 - 1 делится на p. К сожалению, на вычисление первообразных корней уходит много времени, так что коровкам нужна Ваша помощь. Вам дано простое число p, помогите коровкам найти количество первообразных корней . Выходные данные В единственной строке выведите количество первообразных корней . Примечание Единственный первообразный корень — 2. Первообразные корни — 2 и 3.
| |
|
|
C. Кубическая задача
Перебор
математика
теория чисел
*2400
Ярослав, Андрей и Роман любят играть в кубики. Иногда они собираются вместе и могут играть часами напролет! Сегодня они снова вместе и снова играют. Ярослав собрал из единичных кубиков куб размера a × a × a, Андрей — b × b × b, Роман — c × c × c. После этого игра закончилась, и ребята разошлись. Теперь в комнату зашел Виталий, увидел кубы, и ему тоже захотелось собрать какой-то куб. Но какого размера должен быть этот куб? Конечно, это должен быть большой куб со стороной длины a + b + c. При этом Виталий хотел разобрать уже имеющиеся кубы Ярослава, Андрея и Романа и собрать из них свой. Однако, кубиков, из которых были построены имеющиеся кубы, было недостаточно, чтобы собрать большой куб. Известно, что Виталию не хватило ровно n кубиков. Виталий расстроился, разобрал все и ушел. Выходя из комнаты, он встретил Петю и сообщил ему, что в комнате было три куба, и что Виталию не хватило n кубиков, чтобы собрать свой. Зайдя в комнату, Петя увидел разбросанные кубики. Ему захотелось восстановить порядок, но ведь все, что он знает о порядке — это то, что здесь было три куба из маленьких кубиков и то, что на большой куб не хватило ровно n маленьких кубиков! Помогите Пете понять, сколько существует вариантов размеров a, b, c кубов Ярослава, Андрея и Романа. Выходные данные В единственную строку выходных данных выведите искомое количество вариантов. Если вдруг окажется, что не существует ни одного варианта подходящих размеров a, b, c — выводите 0.
| |
|
|
C. Шаасс и лампочки
Комбинаторика
теория чисел
*1900
В ряд выстроено n лампочек. Лампочки пронумерованы от 1 до n слева направо. Изначально некоторые лампочки включены. Шаасс хочет включить все лампочки. За один ход он может включить лампочку (которая на тот момент должна быть выключенной), если у нее есть хотя бы одна соседняя включенная лампочка. Юноша знает изначальное состояние лампочек и ему интересно, сколько есть различных способов включить все лампочки. Пожалуйста, посчитайте искомое количество способов по модулю 1000000007 (109 + 7). Выходные данные В единственной строке выведите количество различных возможных способов включить все лампочки по модулю 1000000007 (109 + 7).
| |
|
|
D. Шаасс и робот-маляр
Перебор
реализация
теория чисел
*2500
Шаассу кажется, что на кухне скучно, когда там вся плитка на полу белая. Пол на его кухне вымощен n·m квадратными плитками в форме прямоугольника размера n × m. И вот юноша решил покрасить некоторые плитки черным, так чтобы получилась «шахматная раскраска». То есть, никакие две соседние плитки не должны быть одного цвета. Для покраски Шаасс хочет задействовать робота-маляра. Вначале робот стоит на плитке (xs, ys) на границе кухни и направлен диагонально (то есть, смотрит влево-вверх, влево-вниз, вправо-вверх или вправо-вниз). Гуляя по кухне, робот закрашивает любую плитку, на которую он ступает, даже если эта плитка уже была закрашена. На покраску плитки требуется одна единица черной краски. Если в любой момент робот натолкнется на кухонную стену, он оттолкнется от нее по законам отражения. Обратите внимание, плитка закрашивается в тот момент, когда робот наступает на нее, шагая из другой плитки, то есть при изменении направления на одной и той же плитке закрашивания этой плитки не происходит. Плитка, на которой стоит робот в самом начале тоже закрашивается. Робот прекращает покраску, как только пол становится стилизован под шахматную доску. Вам даны размеры кухни и позиция робота. Посчитайте, сколько краски потребит робот, пока не закрасит пол. Рассмотрим изображенный ниже пример. Если робот начинает движение с плитки номер 1 (плитки с координатами (1, 1)) таблицы слева, направляясь вниз-вправо, то он пройдет по плиткам 1354236 и потратит на этом пути 7 единиц черной краски, пока не остановится на плитке номер 6. Но если он начнет с плитки номер 1, как в таблице справа, направляясь вниз-вправо, то он застрянет в цикле плиток 1, 2, и 3. Выходные данные Выведите количество краски, которое затратит робот на окраску кухонного пола на манер шахматной доски. Или, если эта цель не будет достигнута, выведите -1. Пожалуйста, не используйте спецификатор %lld для чтения и записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.
| |
|
|
A. Ксюша и массив
Перебор
*1000
теория чисел
сортировки
Ксюша — начинающий программист. Сегодня она знакомится с массивами. У нее есть массив a1, a2, ..., an, состоящий из n целых положительных чисел. Преподаватель в университете задал ей задачу. Найти такое число в массиве, на которое делятся все элементы массива. Помогите ей, найдите это число! Выходные данные Выведите единственное целое число — число из массива, на которое делятся все числа из массива. Если такого числа нет, выведите -1. Если существует несколько ответов, разрешается вывести любой.
| |
|
|
E. Империя наносит ответный удар
Бинарный поиск
математика
теория чисел
*2300
В далекой-далекой галактике снова война. Коварная Республика нанесла k точечных ударов силы ai по владениям Империи. Чтобы справиться с республиканской угрозой верховный совет постановил нанести решающий удар по силам противника. Для успешного завершения конфликта баланс противостояния после нанесения этого удара должен быть целым положительным числом. Балансом противостояния называется число, вида , где p = n! (n — сила удара Империи), . После многих лет войны ресурсы Империи истощены, поэтому для уменьшения затрат n должно быть минимальным целым положительным числом, удовлетворяющим командование. Помогите Империи, найдите минимальное целое положительное n, при котором описанная дробь является целым положительным числом. Выходные данные Выведите минимальное целое положительное число n, необходимое для победы Империи. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.
| |
|
|
C. Наименьший модуль
Перебор
математика
теория чисел
*2400
графы
Дано n различных целых чисел a1, a2, ..., an. Из них Вы можете удалить не более k. Найдите минимальный модуль m (m > 0), такой, что для каждой пары оставшихся чисел (ai, aj) выполняется следующее неравенство: . Выходные данные Выведите единственное целое положительное число — минимальный модуль 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 до длины этого числа, вы должны получать циклический сдвиг этого числа. Выходные данные Выведите единственное целое число — максимальное b. Если такого b не существует, выведите вместо этого -1.
| |
|
|
C. Белое, черное и снова белое
Комбинаторика
*2100
теория чисел
Поликарп уверен, что жизнь его поддается описанию: «сначала идет белая полоса, потом черная, потом снова белая». Вот и в ближайшие n дней он уверен — это правило будет выполняться. Поликарп знает, что его ожидает w хороших событий и b не очень. Каждый день будет происходить хотя бы одно событие. Так как каждый из дней однозначно характеризуется как часть белой или черной полосы, в каждый из дней будут случаться события только одного типа (либо хорошие, либо не очень). Какое количество различных вариантов развития истории может быть в ближайшие n дней, если Поликарпа ждет сначала белая полоса (полоса из исключительно хороших событий, длина полосы не менее 1 дня), потом черная полоса (полоса из исключительно событий «не очень», длина полосы не менее 1 дня) и снова белая полоса (полоса из исключительно хороших событий, длина полосы не менее 1 дня). Каждый из n дней будет принадлежать ровно к одной из трех полос. Учтите, что события даже одного типа различимы между собой. Даже если события происходят в один день, они происходят в некотором порядке (одновременных событий не бывает). Напишите программу, которая выводит количество возможных конфигураций распределения событий по дням по модулю 1000000009 (109 + 9). Ознакомьтесь с примерами для уточнения того, какие способы следует различать. Выходные данные Выведите искомое количество способов по модулю 1000000009 (109 + 9). Примечание Будем обозначать хорошие события цифрами от 1, а события «не очень» буквами от 'a'. Вертикальными чертами будем разделять дни. В первом примере возможные варианты: «1|a|2» и «2|a|1». Во втором примере возможные варианты: «1|a|b|2», «2|a|b|1», «1|b|a|2» и «2|b|a|1». Во третьем примере возможные варианты: «1|ab|2», «2|ab|1», «1|ba|2» и «2|ba|1».
| |
|
|
A. Илья и банковский счет
реализация
*900
теория чисел
Илья — очень умный лев, который живет в необычном городе ZooVille. В этом городе у всех зверей есть свои права и обязательства. Более того, у них даже есть свой банковский счет. Состояние банковского счета — это целое число. Состояние банковского счета может быть отрицательным числом. Это значит, что владелец счета должен банку. У льва Ильи скоро день рождения, поэтому ему подарили много подарков. Один из них (подарок главного банка ZooVille) — это возможность не более одного раза удалить последнюю или предпоследнюю цифру состояния его банковского счета. Например, если состояние банковского счета Ильи равно -123, то Илья может удалить последнюю его цифру и получить состояние счета равное -12, также он может удалить предпоследнюю его цифру и получить состояние счета равное -13. Конечно, Илье разрешается не пользоваться возможностью удалить цифру из счета. Илья не очень силен в математике и именно поэтому он просит Вас помочь максимизировать свой банковский счет. Найдите, какое максимальное состояние банковского счета можно получить, используя подарок банка. Выходные данные В единственной строке выведите целое число — максимальное состояние банковского счета, которое может получить Илья. Примечание В первом тестовом примере Илье не выгодно использовать подарок. Во втором тестовом примере можно удалить цифру 1 и получить состояние счета равное 0.
| |
|
|
C. Медведь Василий и последовательность
Перебор
реализация
теория чисел
*1800
жадные алгоритмы
У медведя Василия есть последовательность целых положительных чисел a1, a2, ..., an. Медведь Василий хочет выписать из них несколько чисел себе на листок так, чтобы красота выписанных чисел была максимальна. Красотой выписанных чисел b1, b2, ..., bk медведь называет такое максимальное целое неотрицательное число v, что число b1 and b2 and ... and bk делится без остатка на число 2v. Если же такого числа v не существует (то есть для любого целого неотрицательного v число b1 and b2 and ... and bk делится без остатка на 2v), красота выписанных чисел равна -1. Подскажите медведю, какие числа ему нужно выписать, чтобы красота выписанных чисел была максимальна. Если же существует несколько способов выписать числа, следует выбрать тот, при котором медведь выпишет наибольшее количество чисел. Здесь выражение x and y означает применение к числам x и y операции побитового И. В языках программирования C++ и Java эта операция обозначается как «&», на Pascal она обозначается как «and». Выходные данные В первой строке выведите единственное число k (k > 0) — количество чисел, которые надо выписать. Во второй строке выведите k целых чисел b1, b2, ..., bk — числа, которые нужно выписать. Числа b1, b2, ..., bk разрешается выводить в любом порядке, однако все они должны быть различными. Если существует несколько способов выписать числа, следует выбрать тот, при котором количество выписанных чисел максимально. Если все равно существует несколько способов, разрешается вывести любой.
| |
|
|
D. Медведь Василий и красивые строки
Комбинаторика
математика
*2100
теория чисел
Медведь Василий любит красивые строки. Будем называть строку s красивой, если выполнены следующие условия: - Строка s состоит только из символов 0 и 1, причем символ 0 должен встречаться в строке s ровно n раз, а символ 1 — ровно m раз.
- За некоторое (возможно нулевое) количество модификаций из строки s можно получить любимый символ g, который равен либо нулю, либо единице.
Модификацией строки, длина которой не меньше двух, будем называть следующую операцию: из строки удаляются два последних символа, а на их место ставится ровно один другой символ, который будет равен единице, если оба удаленных символа были равны нулю, и нулю иначе. Например, в результате одной модификации из строки «01010» получится строка «0100», в результате двух — «011». Применять модификацию к строке длины меньше чем два запрещено. Помогите Медведю, посчитайте количество красивых строк. Так как количество красивых строк может быть очень большим, выведите остаток от деления этого количества на 1000000007 (109 + 7). Выходные данные Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7). Примечание В первом примере красивыми являются строки «01», «10». Во втором примере красивыми являются строки «0011», «1001», «1010», «1100». В третьем примере красивых строк нет.
| |
|
|
B. Бытовая задача
математика
теория чисел
*1400
жадные алгоритмы
У Манао есть монитор, у которого отношение длины горизонтали к длине вертикали a:b. Сейчас он собирается смотреть фильм, картинка которого имеет соотношение длин по горизонтали и по вертикали c:d. Манао настроит просмотр так, чтобы картинка фильма сохранила оригинальное соотношение, но при этом занимала максимально много места на экране и умещалась на нем полностью. Соответственно, ему возможно придется увеличить или уменьшить картинку фильма, но Манао обязательно изменит картинку пропорционально по обоим измерениям. Вычислите, какая часть экрана останется незанятой во премя просмотра. Выведите ответ в виде несократимой дроби p / q. Выходные данные Выведите ответ задачи в виде "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). Выходные данные Выведите единственное число — остаток от деления минимального возможного счета Манао в викторине на 1000000009 (109 + 9). Примечание Пример 1. Манао ответил на 3 вопроса из 5, и за каждые два последовательных правильных ответа его счет удваивался. Если бы Манао ответил на первый, третий и пятый вопросы, то он в сумме набрал бы 3 очка. Пример 2. Теперь Манао ответил уже на 4 вопроса. Минимальный счет достигается в случае, если его единственный неправильный ответ был на четвертый вопрос. Заметим, что вас просят минимизировать счет, а не остаток от деления счета на 1000000009. Например, если во время игры Манао мог набрать или 2000000000, или 2000000020 очков, ответом задачи будет 2000000000 mod 1000000009, даже хотя 2000000020 mod 1000000009 представляет собой меньшее число.
| |
|
|
E. Дерево делителей
Деревья
Перебор
теория чисел
*2200
Дерево делителей — это корневое дерево, для которого выполняются следующие условия: - В каждой из вершин дерева записано целое положительное число.
- В листьях дерева записаны простые числа.
- Для любой внутренней вершины произведение чисел, записанных в ее сыновьях, равно числу, записанному в этой вершине.
У Манао есть n различных чисел a1, a2, ..., an. Он пытается построить такое дерево делителей, в вершинах которого каждое из ai будет встречаться хотя бы по одному разу. Манао любит компактность, но деревья у него получаются уж слишком большие. Помогите Манао определить минимальное возможное количество вершин в искомом дереве делителей. Выходные данные Выведите единственное число — минимальное количество вершин в дереве делителей, содержащем каждое из чисел ai. Примечание Пример 1. Самое маленькое дерево делителей выглядит так:  Пример 2. В этом случае можно построить следующее дерево делителей:  Пример 3. Дерево может состоять из единственной вершины.
| |
|
|
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. Выходные данные Выведите единственное слово «YES», если данная последовательность встречается в таблице G, и «NO» в противном случае. Примечание Пример 1. Десятая строка таблицы G начинается с последовательности {1, 2, 1, 2, 5, 2, 1, 2, 1, 10}. Как вы можете видеть, элементы с пятого по девятый совпадают с последовательностью a. Пример 2. На этот раз ширина таблицы G равна 8-ми. Последовательность a в ней не встречается.
| |
|
|
A. Рациональное сопротивление
математика
*1600
теория чисел
Безумный ученый Майк в свободное время строит машину времени. Для окончания проекта ему понадобился резистор с определенным значением сопротивления. Однако у Майка в запасе есть только большое количество одинаковых резисторов с единичным сопротивлением R0 = 1. Элементы с другим сопротивлением можно собирать из данных резисторов. В данной задаче элементами будем считать: - один резистор;
- элемент и один резистор, подключенные последовательно;
- элемент и один резистор, подключенные параллельно.
При последовательном подключении сопротивление нового элемента равно R = Re + R0. При параллельном подключении сопротивление нового элемента равно . В данном случае Re равняется сопротивлению подключаемого элемента. Майку нужно собрать элемент с сопротивлением, равным дроби . Определите наименьшее количество резисторов, с помощью которых можно собрать такой элемент. Выходные данные Выведите единственное число — ответ на задачу. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d. Примечание В первом примере хватает одного резистора. Во втором примере можно соединить два резистора параллельно, а полученный элемент соединить последовательно с третьим резистором. Таким образом получаем элемент с сопротивлением . С помощью двух резисторов такой элемент построить невозможно.
| |
|
|
A. Алиса и Боб
математика
*1600
теория чисел
игры
Ах, какая же скукота на летних каникулах! И вот, Алиса и Боб придумали новую игру. Правила у игры следующие: у игроков имеется множество из n различных целых чисел. Игроки ходят по очереди. Во время каждого хода либо Алиса, либо Боб (игрок, чья очередь подошла) может выбрать из множества два различных целых числа, x и y, такие, что в множестве не содержится число |x - y|. Затем игрок, который ходит, добавляет число |x - y| ко множеству (таким образом, размер множества увеличивается на один). Если игрок не может сделать ход, то он (или она) проигрывает. Вопрос вот в чем: кто в итоге выиграет при оптимальной игре обоих игроков? Помните, что Алиса всегда ходит первой. Выходные данные В единственной строке выведите имя победителя. Если победит Алиса, выведите «Alice», а если победит Боб, то «Bob» (без кавычек). Примечание Рассмотрим первый пример. Сперва ходит Алиса. Она может сделать только один ход: выбрать 2 и 3, а затем добавить ко множеству 1. Затем ходит Боб, допустимых ходов не остается и побеждает Алиса.
| |
|
|
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 долго думала над этой задачей, но не решила ее. И вот она попросила Вас о помощи. У девушки есть много частных случаев задачи. Ваша задача — решить все частные случаи. Выходные данные Для каждого частного случая задачи выведите «YES», если Дудлер может добраться до самой высокой платформы, и «NO» в противном случае.
| |
|
|
B. Яблоня
Деревья
*2100
теория чисел
поиск в глубину и подобное
Дано корневое дерево, состоящее из n вершин. В каждом листе дерева записано ровно одно число — количество яблок в этом листе. Весом поддерева назовем сумму чисел в листьях этого поддерева. В частности, вес поддерева, соответствующего некоторому листу — это число, которое записано в этом листе. Дерево называется сбалансированным, если для каждой вершины дерева v все поддеревья, соответствующие сыновьям вершины v, имеют одинаковый вес. Какое минимальное количество яблок нужно удалить из дерева (точнее из некоторых его листьев), чтобы сделать дерево сбалансированным? Обратите внимание, что цель всегда можно достигнуть, удалив все яблоки. Выходные данные Выведите единственное целое число — минимальное количество яблок, которое нужно удалить, чтобы сбалансировать дерево. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.
| |
|
|
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. Выходные данные Выведите единственное целое число — максимальное значение функции f(x) среди всех . Примечание В первом тестовом примере m = 20 = 1, f(0) = 0, f(1) = a0 = 3. Во втором примере m = 20 + 21 + 23 = 11, а максимальное значение функции равно f(5) = a0 + a2 = 17 + 10 = 27.
| |
|
|
C. Вася и красивые массивы
Перебор
*2100
дп
теория чисел
У Васи скоро день рождения и мама решила подарить ему массив, состоящий из целых положительных чисел, a длины n. Вася считает красотой массива наибольший общий делитель всех его элементов. Мама, конечно, хочет подарить ему максимально красивый массив (с наибольшей красотой). К сожалению, в магазине остался всего один массив a, но продавец сказал, что может уменьшить в нем некоторые числа, каждое число не более чем на k. Продавец может из массива a получить массив b, если выполняются условия: bi > 0; 0 ≤ ai - bi ≤ k для всех 1 ≤ i ≤ n. Помогите маме найти максимально возможную красоту массива, который она сможет подарить Васе (продавец сможет его получить). Выходные данные В единственной строке выведите целое число — максимально возможную красоту полученного массива. Примечание В первом примере можно получить массив: 3 6 9 12 12 15 Во втором примере можно получить следующий массив: 7 21 49 14 77
| |
|
|
C. Простое число
математика
теория чисел
*1900
У Семена есть простое число x и массив целых неотрицательных чисел a1, a2, ..., an. Семен очень любит дроби. Сегодня он записал на листок число . После того, как Семен привел все дроби к общему знаменателю и сложил их, он получил дробь: , где число t равно xa1 + a2 + ... + an. Теперь Семен хочет сократить полученную дробь. Помогите ему, найдите наибольший общий делитель s и t. Так как НОД может быть довольно большим, требуется найти лишь его остаток от деления на число 1000000007 (109 + 7). Выходные данные Выведите единственное число — ответ на задачу по модулю 1000000007 (109 + 7). Примечание В первом примере . Таким образом, ответ на задачу 8. В втором примере . Ответ на задачу 27, так как 351 = 13·27, 729 = 27·27. В третьем примере ответ на задачу 1073741824 mod 1000000007 = 73741817. В четвертом примере . Таким образом, ответ на задачу 1.
| |
|
|
D. Левко и множества
теория чисел
*2600
Левко очень любит различные множества. У Левко есть два массива целых чисел a1, a2, ... , an и b1, b2, ... , bm и простое число p. Сегодня он генерирует n множеств. Опишем процесс генерации i-ого множества: - Сначала в нем находится единственное число 1.
- Возьмем любой элемент c из этого множества. Для всех j (1 ≤ j ≤ m), если числа (c·aibj) mod p нет в этом множестве, то добавим его туда.
- Повторяем пункт 2 пока можем добавить хотя бы один элемент в наше множество.
Левко очень интересно сколько чисел принадлежат хотя бы одному множеству. Другими словами он хочет найти размер объединения n сгенерированных множеств. Выходные данные Единственное число — размер объединения множеств.
| |
|
|
B. Левко и перестановка
Конструктив
математика
теория чисел
*1200
Левко очень любит перестановки чисел. Перестановкой длины n называется последовательность различных положительных целых чисел, каждое из которых не больше n. Пусть запись gcd(a, b) обозначает наибольший общий делитель чисел a и b. Левко называет элемент pi перестановки p1, p2, ... , pn хорошим, если gcd(i, pi) > 1. Левко считает перестановку красивой, если у нее есть ровно k хороших элементов. К сожалению, он не знает ни одной красивой перестановки. Вам нужно помочь ему найти хотя бы одну. Выходные данные В единственной строке выведите любую красивую перестановку или -1, если такой не существует. Если существует несколько подходящих перестановок, разрешается вывести любую. Примечание В первом примере элементы 4 и 3 являются хорошими, потому что gcd(2, 4) = 2 > 1 и gcd(3, 3) = 3 > 1, а элементы 2 и 1 — нет, потому что gcd(1, 2) = 1 и gcd(4, 1) = 1. Так как хороших элементов ровно 2, перестановка является красивой. Во втором примере не существует красивой перестановки.
| |
|
|
C. Красивое множество
Перебор
теория чисел
*2300
Назовем множество целых положительных чисел a красивым, если выполняется следующее: для любого простого p, если , то . Другими словами, если одно число из множества делится на простое p, то не менее половины чисел из множества делятся на p. Нужно найти любое красивое множество, количество элементов в котором равно k и каждый элемент не превосходит 2k2. Выходные данные В первой строке через пробел выведите k целых положительных целых чисел, являющихся красивым множеством. Если существует несколько ответов, разрешается вывести любой.
| |
|
|
B. Как лисица сыр делила
математика
теория чисел
*1300
Два жадных медвежонка нашли в лесу два куска сыра массами a и b грамм, соответственно. Медвежата настолько жадные, что готовы набить друг другу шишек за право обладания куском побольше. Подскакивает к ним лисица и говорит: «Погодите, медвежата, я могу помочь вам уравнять куски!» «Да ладно, как же ты это сделаешь?», — поинтересовались медвежата. «Очень просто — сказала лисица. — Если масса какого-то куска делится на два, то я могу откусить от него ровно половину и съесть. Если масса какого-то куска делится на три, то я могу откусить от него ровно две трети, а если масса делится на пять — то могу откусить и съесть четыре пятых. Вот немного пооткусываю, и уравняю куски». Медвежата догадываются, что в предложении лисицы содержится какой-то подвох. Но в то же время они понимают, что самостоятельно не смогут сделать два куска одинаковыми. Поэтому медвежата согласились на ее предложение, но с одним условием: лисица должна уравнять куски как можно быстрее. Найдите минимальное количество описанных операций, которое потребуется лисице, чтобы уравнять куски. Выходные данные В том случае, если лисица обманывает медвежат и никаким образом не сможет уравнять куски, то выведите -1. Иначе выведите искомое наименьшее количество операций. В случае, если куски сыра изначально равны, искомое количество равно 0.
| |
|
|
A. Делимое на семь
математика
*1600
теория чисел
Вам задано число a, которое по счастливой случайности содержит в своей десятичной записи цифры 1, 6, 8, 9. Переставьте цифры его десятичной записи таким образом, чтобы полученное число делилось на 7. Число a не содержит лидирующих нулей и обязательно содержит цифры 1, 6, 8, 9 (также оно может содержать и другие цифры). Получаемое число также не должно содержать лидирующих нулей. Выходные данные Выведите число в десятичной системе счисления без лидирующих нулей — результат перестановки. Если невозможно переставить цифры числа a требуемым образом, выведите 0.
| |
|
|
C. Медведь и простые числа
Бинарный поиск
Перебор
Структуры данных
математика
реализация
дп
теория чисел
*1700
Недавно медведь начал изучать структуры данных и столкнулся со следующей задачей. Задана последовательность целых чисел x1, x2, ..., xn длины n и m запросов, каждый из которых характеризуется двумя целыми числами li, ri. Обозначим за f(p) — количество таких индексов k, что xk делится на p. Ответом на запрос li, ri является сумма: , где S(li, ri) — множество простых чисел из отрезка [li, ri] (обе границы включаются в отрезок). Помогите медведю справиться с этой задачей. Выходные данные Выведите m целых чисел — ответы на запросы в порядке появления запросов во входных данных. Примечание Рассмотрим первый тестовый пример. Всего в первом примере 3 запроса. - Поступает первый запрос l = 2, r = 11. Нужно посчитать f(2) + f(3) + f(5) + f(7) + f(11) = 2 + 1 + 4 + 2 + 0 = 9.
- Поступает второй запрос l = 3, r = 12. Нужно посчитать f(3) + f(5) + f(7) + f(11) = 1 + 4 + 2 + 0 = 7.
- Поступает третий запрос l = 4, r = 4. Так как на этом промежутке нет простых чисел, то сумма равна 0.
| |
|
|
A. О количестве разложений на множители
Комбинаторика
математика
теория чисел
Задано целое число m в виде произведения целых чисел a1, a2, ... an . Требуется узнать, сколько существует различных разложений числа m в произведение n упорядоченных целых положительных чисел. Разложение на n множителей, заданное во входных данных, также должно считаться в ответе. Поскольку ответ может быть очень большим, выведите его по модулю 1000000007 (109 + 7). Выходные данные В единственной строке выведите целое число 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 строк: в i-й из них должен содержатся ответ на i-й тест в виде несократимой дроби «p/q», где p, q — целые числа, q > 0.
| |
|
|
D. Роман и числа
Перебор
Комбинаторика
дп
теория чисел
*2000
битмаски
Роман — юный, но уже довольно известный в Ужляндии, математик. К сожалению, Сережа так не считает. Чтобы переубедить Сережу, Роман готов решить любую математическую задачу. Сережа, не долго думая, попросил Рому найти количество близких чисел к числу n по модулю m. Число x называется близким к числу n по модулю m, если: - его можно получить перестановкой цифр числа n,
- оно не имеет лидирующих нулей,
- остаток от деления числа x на m равен 0.
Роман — хороший математик, но поскольку различных вариантов ответа может быть очень много, ему будет трудно найти ответ. Поэтому он просит помощи у вас. Выходные данные В единственной строке выведите целое число — количество близких чисел к числу n по модулю m. Примечание В первом примере нам подходят числа: 104, 140, 410. Во втором примере подходит единственное число 232.
| |
|
|
D. Улучшаем массив
математика
дп
теория чисел
*1800
жадные алгоритмы
У вас есть массив целых положительных чисел a[1], a[2], ..., a[n], а также множество плохих простых чисел b1, b2, ..., bm. Простые числа, которые не встречаются в множестве b считаются хорошими. Красотой массива a назовем сумму , где функция f(s) определяется следующим образом: - f(1) = 0;
- Пусть p — минимальный простой делитель числа s. Если p — хорошее простое число, то
, иначе . Вам разрешено последовательно провести произвольное (возможно, ноль) количество операций улучшения массива a. Операцией улучшения назовем следующую последовательность действий: - Выбрать некоторое число r (1 ≤ r ≤ n) и подсчитать значение g = НОД(a[1], a[2], ..., a[r]).
- Выполнить присвоения:
, , ..., . Какую максимальную красоту массива вы сможете получить? Выходные данные Выведите единственное целое число — ответ на задачу. Примечание Обратите внимание, что ответ на задачу может быть отрицательным числом. НОД(x1, x2, ..., xk) обозначает наибольшее целое положительное число, которое делит каждое xi без остатка.
| |
|
|
A. Машмох и числа
Конструктив
*1500
теория чисел
Начались выходные. Машмох и его начальник Бимох играют в придуманную Машмохом игру. В этой игре Машмох записывает последовательность из n различных целых чисел на доске. Затем Бимох выполняет некоторое (возможно, нулевое) количество ходов. На первом ходу он стирает с доски первое и второе число, на втором ходу он стирает первое и второе число оставшейся последовательности и так далее. Бимох останавливается, когда на доске остается менее двух чисел. Когда Бимох стирает с доски числа x и y, он получает gcd(x, y) очков. В начале игры у Бимоха ноль очков. Машмох хочет выиграть. Поэтому он хочет, чтобы в сумме Бимох набрал ровно k очков. К сожалению, Машмох не знает, как ему выбрать начальную последовательность, чтобы победить. Пожалуйста, помогите ему. Найдите n различных целых чисел a1, a2, ..., an, таких что Бимох наберет ровно k очков, играя на них. К тому же, Машмох не запоминает очень длинные числа, поэтому каждое из выведенных вами чисел должно быть не больше 109. Выходные данные Если требуемая последовательность не существует, выведите -1. В противном случае, выведите n различных целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 109). Примечание gcd(x, y) — это наибольший общий делитель чисел x и y.
| |
|
|
B. Машмох и ACM
Комбинаторика
дп
теория чисел
*1400
Бимоху, начальнику Машмоха, Машмох не нравился. Вот он его и уволил. Решил тогда Машмох новую работу не искать, а поступить в университет и поучаствовать в ACM. Машмох хочет попасть в команду Бамоха. Для этого ему дали (в качестве испытания) несколько задач по программированию и неделю на их решение. Машмох не шибко умудренный программист. В общем-то, он и не программист вовсе. Так что ничего он не решил, а попросил вас помочь ему с этими заданиями. Одно из них такое: Последовательность из l целых чисел b1, b2, ..., bl (1 ≤ b1 ≤ b2 ≤ ... ≤ bl ≤ n) называется хорошей, если каждое число делит без остатка следующее число в последовательности. Более формально, для всех i (1 ≤ i ≤ l - 1). Вам даны n и k, найдите количество хороших последовательностей длины k. Так как ответ может быть достаточно большим, выведите его по модулю 1000000007 (109 + 7). Выходные данные Выведите единственное целое число — количество хороших последовательностей длины k по модулю 1000000007 (109 + 7). Примечание В первом примере хорошие последовательности такие: [1, 1], [2, 2], [3, 3], [1, 2], [1, 3].
| |
|
|
E. Ребенок и двоичное дерево
Комбинаторика
теория чисел
разделяй и властвуй
бпф
*3100
Наш ребенок обожает информатику, особенно двоичные деревья. Рассмотрим последовательность из n различных целых чисел: c1, c2, ..., cn. Ребенок называет двоичное корневое дерево со взвешенными вершинами хорошим тогда и только тогда, когда для каждой вершины v, вес v — это элемент множества {c1, c2, ..., cn}. Также наш ребенок считает, что вес дерева со взвешенными вершинами равняется сумме весов всех вершин. Задано число m, сможете ли вы для всех s (1 ≤ s ≤ m) посчитать количество хороших двоичных корневых деревьев со взвешенными вершинами с весом s? Для более глубокого понимания того, какие деревья считаются различными, пожалуйста, посмотрите примеры тестовых данных. Выведите ответ по модулю 998244353 (7 × 17 × 223 + 1, простое число). Выходные данные Выведите m строк, каждая строка должна содержать единственное целое число. В i-й строке должно быть записано количество хороших двоичных корневых деревьев со взвешенными вершинами с весом i. Выведите ответ по модулю 998244353 (7 × 17 × 223 + 1, простое число). Примечание В первом примере существует 9 хороших двоичных корневых деревьев со взвешенными вершинами, чей вес равняется ровно 3:
| |
|
|
C. Деву и разбиение массива
Перебор
Конструктив
реализация
теория чисел
*1700
Деву еще маленький, поэтому он очень любит играть. Весьма удивительно, но играть он предпочитает только с массивами. Однажды во время игры ему в голову пришел интересный вопрос, который Деву сам для себя разрешить не мог. Сможете ли вы найти ответ на этот вопрос? Дан массив, состоящий из различных целых чисел. Возможно ли так разбить весь массив на k непересекающихся непустых частей, чтобы ровно p частей имели четную сумму элементов (каждая из этих p частей должна иметь четную сумму), а оставшиеся k - p частей имели нечетную сумму элементов? (обратите внимание, что элементы какой-то части не обязаны идти в массиве подряд). Если существует способ разбить массив описанным образом, требуется вывести также и само разбиение. Выходные данные В первой строке выведите «YES» (без кавычек), если можно разбить массив требуемым способом. В противном случае выведите «NO» (без кавычек). Если требуемое разбиение существует, выведите k строк вслед за первой. В i-й из них должно быть записано содержимое i-й части. Выводите содержимое части в строке следующим образом: сперва выведите количество элементов в этой части, затем выведите все элементы части в произвольном порядке. Сумма элементов у ровно p из всех выведенных частей должна быть четной. В каждой из оставшихся k - p частей сумма должна быть нечетная. Так как может быть несколько способов разбиения, разрешается вывести любое корректное разбиение.
| |
|
|
C. DZY любит числа Фибоначчи
Структуры данных
математика
теория чисел
*2400
Как известно, ряд чисел Фибоначчи Fn определяется рекуррентным соотношением F1 = 1; F2 = 1; Fn = Fn - 1 + Fn - 2 (n > 2).DZY очень любит числа Фибоначчи. Сегодня он дал вам массив, состоящий из n целых чисел: a1, a2, ..., an. Кроме того, он дал вам m запросов. Каждый запрос имеет один из двух следующих типов: - Формат запроса: «1 l r». В ответ на запрос надо добавить Fi - l + 1 к каждому элементу ai, где l ≤ i ≤ r.
- Формат запроса: «2 l r». В ответ на запрос надо вывести значение
по модулю 1000000009 (109 + 9). Помогите DZY ответить на все запросы. Выходные данные Для каждого запроса второго типа выведите значение суммы в отдельной строке. Примечание После первого запроса a = [2, 3, 5, 7]. Для второго запроса sum = 2 + 3 + 5 + 7 = 17. После третьего запроса a = [2, 4, 6, 9]. Для четвертого запроса sum = 2 + 4 + 6 = 12.
| |
|
|
E. Про делители
Перебор
реализация
теория чисел
поиск в глубину и подобное
*2200
Бизон-Чемпион не только дружелюбный, но и любит программировать. Определим функцию f(a), где a последовательность целых положительных чисел. Функция f(a) возвращает следующую последовательность: сначала идут все делители a1 в порядке возрастания, затем идут все делители a2 в порядке возрастания, и так далее до последнего элемента последовательности a. Например f([2, 9, 1]) = [1, 2, 1, 3, 9, 1]. Определим последовательность Xi, для целых i (i ≥ 0): X0 = [X] ([X] — это последовательность, состоящая из одного числа X), Xi = f(Xi - 1) (i > 0). Например, при X = 6 получится X0 = [6], X1 = [1, 2, 3, 6], X2 = [1, 1, 2, 1, 3, 1, 2, 3, 6]. Для заданных чисел X и k найдите последовательность Xk. Так как ответ может быть слишком большим, найдите только первые 105 элементов этой последовательности. Выходные данные Выведите элементы последовательности Xk в одной строке через пробел. Если количество элементов превосходит 105, то выведите только первые 105 элементов.
| |
|
|
C. Jzzhu и яблоки
Конструктив
теория чисел
*2500
Jzzhu собрал n яблок с большого яблочного дерева. Он пронумеровал яблоки от 1 до n и теперь хочет продать их яблочному магазину. Jzzhu собирается продавать уже упакованные яблоки. В каждой пачке должно быть по два яблока, а наибольший общий делитель номеров яблок в пачке должен быть больше 1. Какое максимальное количество пачек сможет получить Jzzhu, если будет следовать описанным условиям? Также он должен знать, как именно упаковать яблоки оптимальным способом. Помогите ему найти оптимальное распределение яблок по упаковкам. Выходные данные В первой строке выведите целое число m, обозначающее максимальное количество пачек, которые юноша сможет получить. В каждой из следующих m строк должно быть записано два целых числа — номера яблок в текущей пачке. Естественно, что одно яблоко может находиться не более чем в одной пачке. Если существует несколько оптимальных ответов, разрешается вывести любой из них.
| |
|
|
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). Выходные данные Для каждого теста выведите суммарное количество точек, которое нарисует Jzzhu.
| |
|
|
G. Простая задача
теория чисел
*2200
В Берляндии в моде простые числа — респектабельные горожане селятся только на этажах с номерами, которые являются простыми числами. Нумизматы особо ценят монеты с простыми номиналами. Все простые дни объявлены праздничными! Но и этого мало, чтобы сделать жителей Берляндии счастливыми. На главной улице столицы стоит n домов, пронумерованных от 1 до n. Правительство решило покрасить каждый дом в некоторый цвет так, что сумма номеров домов покрашенных в каждый из цветов является простым числом. Однако, оказалось, что не все жители поддерживают это решение — многие против по причине того, что не хотят большого количества разноцветных домов на главной улице столицы. Поэтому решено использовать минимальное количество цветов. Дома не обязательно красить подряд, но каждый из n домов должен быть покрашен в некоторый цвет. Одноцветные дома не обязательно должны идти подряд, допускается любая раскраска. До начала покраски осталось не более 5-ти часов, помогите правительству найти такой способ, чтобы сумма номеров домов для каждого цвета была простым числом, а количество использованных красок было минимальным. Выходные данные Выведите последовательность n чисел, где i-ое число обозначает номер цвета для дома номер i. Цвета нумеруйте последовательно, начиная с 1. Разрешается любой порядок покраски. Если решений несколько, выведите любое. Если такой покраски не существует, то выведите единственное число -1.
| |
|
|
E. Devu и цветы
Комбинаторика
теория чисел
*2300
битмаски
Devu хочет декорировать свой сад. Он приобрел n коробок с цветами, i-я коробка содержит fi цветов. Все цветы в одной коробке одного цвета (поэтому они неразличимы). Также среди коробок нет двух с одинаковыми цветами. Devu хочет выбрать ровно s цветов из коробок, чтобы украсить свой сад. Сколькими способами он может это сделать? Так как это число может быть очень большим, найдите его по модулю 1000000007 (109 + 7). Devu считает, что два способа различные, если в этих способах хотя бы из одной коробки выбрано разное количество цветов. Выходные данные Выведите целое число — количество способов выбрать s цветов по модулю 1000000007 (109 + 7). Примечание Пример 1. Есть два способа выбрать 3 цветка: {1, 2} и {0, 3}. Пример 2. Есть только один способ выбора 4 цветков: {2, 2}. Пример 3. Есть три способа выбора 5 цветков: {1, 2, 2}; {0, 3, 2}; {1, 3, 1}.
| |
|
|
B. Федя и математика
математика
теория чисел
*1200
Федя учится в гимназии. Домашнее задание по математике у Феди состоит в вычислении следующего выражения: (1n + 2n + 3n + 4n) mod 5для заданного числа n. Федя смог выполнить это задание. А сможете ли вы? Обратите внимание, что заданное число n может быть очень большим (например, оно может не помещаться в целочисленные типы вашего языка программирования). Выходные данные Выведите значение выражения без лидирующих нулей. Примечание Операция x mod y обозначает взятие остатка от деления числа x на число y. Пояснение к первому тестовому примеру: 
| |
|
|
B. Димка и уравнение
Перебор
математика
реализация
*1500
теория чисел
Маленький Дима много баловался на уроке математики, и злой учитель Леонид Иванович в наказание ему придумал следующую задачу. Найти все целочисленные решения уравнения x (0 < x < 109): x = b·s(x)a + c, где a, b, c — некоторые заранее определенные константы, а функция s(x) обозначает сумму всех цифр в десятичном представлении числа x. Учитель дает эту задачу Диме на каждом уроке, меняя только параметры уравнения: a, b, c. Диме надоело получать двойки, и он просит вас помочь ему решить эту нелегкую задачу. Выходные данные Выведите целое число n — количество найденных решений. Затем выведите n целых чисел в порядке возрастания — найденные решения заданного уравнения. Выводить нужно только целочисленные решения, большие нуля и строго меньшие, чем 109.
| |
|
|
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 справиться с этой задачей. Выходные данные Для каждого запроса первого типа выведите ответ на него. Примечание Запись gcd(x, y) обозначает наибольший общий делитель целых чисел x и y.
| |
|
|
A. Уроки дизайна задач: учимся у математики
математика
теория чисел
*800
Один из способов придумать новую задачу: использовать математику. Например, можно придумать какое-нибудь рандомное математическое утверждение или модифицировать некоторые теоремы, чтобы получить что-то новое. Используя такие методы, можно придумать новую задачу. Например, есть утверждение под названием «Гипотеза Гольдбаха». Оно гласит: «каждое четное число не менее четырех можно представить в виде суммы двух простых чисел». Давайте модифицируем его следующим образом: «каждое целое число не менее 12 можно представить в виде суммы двух составных чисел». В отличие от гипотезы Гольдбаха, я могу доказать эту гипотезу. Вам дано целое число n не менее 12, представьте его в виде суммы двух составных чисел. Выходные данные Выведите два таких составных целых числа 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. Муравьиная колония
Структуры данных
математика
*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] и спрашивает для каждого отрезка: сколько муравьев он съест, если эти муравьи будут биться? Выходные данные Выведите 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.
| |
|
|
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) не является взаимно простой. Выходные данные В единственной строке выведите три целых положительных числа через пробел a, b, c — искомую тройку различных чисел (a, b, c). Если существует несколько решений, разрешается вывести любое. Числа в тройке необходимо выводить в порядке возрастания. Если искомой тройки не существует, выведите единственное число -1. Примечание В первом примере пара (2, 4) не является взаимно простой, а пары (2, 3) и (3, 4) — взаимно простые. В втором примере нельзя составить тройку из трех различных чисел, поэтому ответ -1. В третьем примере нетрудно заметить, что числа 900000000000000009 и 900000000000000021 делятся на 3.
| |
|
|
C. Последовательность частичных произведений
Конструктив
математика
теория чисел
*2300
Рассмотрим последовательность [a1, a2, ... , an]. Определим последовательность частичных произведений как . Вам дано число n. Найдите такую перестановку последовательности [1, 2, ..., n], что её последовательность частичных произведений это некоторая перестановка чисел [0, 1, ..., n - 1]. Выходные данные В первой строке выведите «YES», если такая последовательность существует, или «NO», если такой последовательности не существует. Если решение существует, то выведите вывести ещё n строк. В i-ой строке надо вывести только число ai. Элементы последовательности должны быть различными целыми положительными числами, не превышающими n. Если решений несколько, можно вывести любое из них. Примечание Во втором примере корректной последовательности не существует.
| |
|
|
C. Взлом шифра
Строки
Перебор
математика
теория чисел
*1700
Поликарп участвует в соревновании по взлому нового защищенного мессенджера. Для победы в конкурсе осталось совсем немного. Тщательно изучив протокол взаимодействия, Поликарп пришел к выводу, что секретный ключ можно получить, если правильным образом порезать на две части публичный ключ приложения. Публичным ключом является длинное целое число, которое может состоять даже из миллиона цифр! Поликарпу надо найти такой способ порезать публичный ключ на две непустые части, что первая (левая) часть как отдельное число делится на a, а вторая (правая) часть как отдельное число делится на b. Обе части должны быть положительными числами, не имеющими лидирующих нулей. Значения a и b Поликарпу известны. Помогите Поликарпу и найдите любой из подходящих способов порезать публичный ключ. Выходные данные В первую строку выведите «YES» (без кавычек), если искомый способ существует. Далее в этом случае выведите две строки — левую и правую части после разреза. Записанные подряд (сначала левая, потом правая) эти части должны в точности составлять публичный ключ. Левая часть должна делиться на a, а правая — на b. Обе части должны быть целыми положительными числами, не имеющими ведущих нулей. Если ответов несколько, выведите любой из них. Если ответа не существует, то выведите в единственной строке «NO» (без кавычек).
| |
|
|
D. Шоколадки
Перебор
математика
теория чисел
поиск в глубину и подобное
*1900
meet-in-the-middle
Поликарпу нравится делать подарки Прасковье. Вот и сейчас он купил две плитки шоколада, каждая из них имеет форму прямоугольника из долек. Первая плитка имеет размеры a1 × b1 долек, а вторая — a2 × b2 долек. Поликарп хочет угостить на большой перемене Прасковью одной плиткой, а вторую съесть сам. Кроме того, он хочет подчеркнуть одинаковую значимость ума Поликарпа и красоты Прасковьи, поэтому плитки должны содержать одинаковое количество долек. Чтобы сделать плитки равными по количеству долек, Поликарп каждую минуту съедает немного шоколада. Каждую минуту он: - либо разламывает одну плитку ровно пополам (вертикально или горизонтально) и съедает ровно половину шоколадки,
- либо отламывает от плитки ровно одну треть (вертикально или горизонтально) и съедает ровно треть шоколадки.
В первом случае от плитки останется половина, а во втором — две трети. Не всегда возможны оба развития событий, а иногда бывает, что Поликарп вообще не может отломить половину или треть. Например, если плитка имеет размер 16 × 23, то от нее можно отломить половину, но нельзя одну треть. Если плитка имеет размер 20 × 18, то от нее можно отломить как половину, так и треть. Если плитка имеет размер 5 × 7, то отломить как половину так и треть невозможно. Какое минимальное количество минут понадобится Поликарпу, чтобы сделать обе плитки одинаковыми по количеству долек в них? Найдите не только искомое минимальное количество минут, но и возможные размеры плиток после их вынужденного «уравнивания». Выходные данные В первую строку выведите m — искомое минимальное количество минут. Во вторую и третью строки выведите возможные размеры плиток после их уравнивания за m минут. Выводите размеры, используя формат, аналогичный формату входных данных. Размеры (числа в выводимых парах) выводите в любом порядке. Вторая строка должна соответствовать первой шоколадке, а третья — второй. Если решений несколько, выведите любое из них. Если решения не существует, то выведите единственную строку с числом -1.
| |
|
|
B. Модулярные уравнения
математика
*1600
теория чисел
На прошлой неделе Хамед узнал новый тип уравнения на уроке математики — модулярное уравнение. Определим i по модулю j как остаток от деления i на j и обозначим его как . Модулярное уравнение, как рассказал учитель Хамеда, это уравнение вида , в котором a и b — два неотрицательных целых числа, а x — переменная. Назовем положительное целое число x, для которого , решением нашего уравнения. Хамед смотрел фильм во время урока и много отвлекался. Он смог понять только определение уравнения. Ему нужно сделать упражнения по математике, да вот беда — он совершенно не имеет представления, как решать модулярные уравнения. Потому он обратился к вам за помощью. Он рассказал вам всё, что знает о модулярных уравнениях, и попросил написать программу, которая по двум числам a и b, вычисляет количество решений модулярного уравнения . Выходные данные Если существует бесконечное количество решений данного уравнения, выведите «infinity» (без кавычек). В противном случае, выведите количество решений модулярного уравнения . Примечание В первом примере решения модулярного уравнения — 8 и 16, так как 
| |
|
|
C. Массив и операции
Потоки
Паросочетания
*2100
теория чисел
Вы выписали на листок массив из n целых положительных чисел a[1], a[2], ..., a[n] и m хороших пар целых чисел (i1, j1), (i2, j2), ..., (im, jm). Каждая хорошая пара (ik, jk) удовлетворяет условиям: ik + jk — нечетное число и 1 ≤ ik < jk ≤ n. За одну операцию вы можете выполнить последовательность действий: - взять одну из хороших пар (ik, jk) и некоторое целое число v (v > 1), которое делит оба числа a[ik] и a[jk];
- разделить оба числа на v, т. е. выполнить присваивания:
и . Определите, какое максимальное количество операций можно последовательно совершить над данным массивом. Обратите внимание, что одну пару можно использовать несколько раз в описанных операциях. Выходные данные Выведите единственное целое число — ответ на задачу.
| |
|
|
D. Пробки в стране
Структуры данных
дп
теория чисел
*2400
Некоторая страна состоит из (n + 1) городов, расположенных вдоль прямолинейного шоссе. Пронумеруем города последовательно числами от 1 до n + 1 в порядке их следования вдоль шоссе. Таким образом, города соединены с помощью n участков шоссе, причём i-й участок соединяет города с номерами i и i + 1. Каждый участок шоссе характеризуется целым положительным числом ai > 1 — периодом появления пробок на нём. Чтобы добраться из города x до города y (x < y) некоторые автомобилисты используют следующую тактику. Изначально автомобилист находится в городе x и текущее время t равно нулю. До тех пор, пока автомобилист не прибыл в город y, он выполняет последовательность действий: - если текущее время t кратно ax, то на участке шоссе с номером x сейчас затруднено движение, и поэтому автомобилист остается в текущем городе на одну единицу времени (формально говоря, выполняется присваивание t = t + 1);
- если текущее время t не кратно ax, то на участке шоссе с номером x сейчас свободно и поэтому за одну единицу времени автомобилист перемещается в город x + 1 (формально говоря, выполняются присваивания t = t + 1 и x = x + 1).
Вы разрабатываете новую систему контроля пробок. Вы хотите последовательно обработать q запросов двух видов: - определить конечное значение времени t после поездки из города x в город y (x < y) при использовании описанной выше тактики. Обратите внимание, что перед каждым подобным запросом t устанавливается равным нулю;
- изменить период появления пробок на участке с номером x на значение y (формально, выполнить присвоение ax = y).
Напишите программу, которая будет эффективно обрабатывать описанные выше запросы. Выходные данные На каждый запрос первого типа выведите одно число — конечное значение времени t после поездки из города x в город y. Запросы необходимо обрабатывать в том порядке, в котором они заданы во входных данных.
| |
|
|
G. Новогодний забег
Деревья
теория чисел
*3200
На Древесном острове наступает Новый год! На этом острове, как понятно из названия, есть n городов, соединенных n - 1 дорогами, причём между каждыми двумя различными городами всегда существует путь. Каждому человеку на Древесном острове требуется ровно минута на прохождение одной дороги. Есть на Древесном острове причудливая новогодняя традиция под названием «экстремальный забег». Традицию эту можно описать следующим образом. Некоторый бегун выбирает два различных города, a и b. Для простоты, обозначим кратчайший путь из города a в город b как p1, p2, ..., pl (в частности, p1 = a и pl = b). Затем происходит следующее: - бегун стартует из города a;
- он следует из города a в город b по кратчайшему пути;
- когда бегун прибывает в город b, он немедленно разворачивается (на это времени не требуется) и бежит в город a по кратчайшему пути;
- когда бегун прибывает в город a, он немедленно разворачивается (на это времени не требуется) и бежит в город b по кратчайшему пути;
- шаги 3 и 4 повторяются до бесконечности.
Иными словами, маршрут бегуна выглядит так:  Два бегуна, JH и JY, решили совершить «экстремальный забег» в честь Нового года. JH выбрал два города u и v, а JY выбрал два города x и y. Ребята решили начать бежать в одно и то же время и бежать до тех пор, пока они впервые не встретятся в одном городе. Встреча посреди дороги не считается. Они хотят знать, сколько времени им предстоит бегать. JH и JY не смогли это определить, так что они просят вас помочь им. Выходные данные Для каждого тестового примера выведите целое число, описывающее количество времени, необходимое для пробега в минутах. Если ребятам придётся бежать бесконечно долго (иными словами, если бегуны никогда не встретятся в одном городе), выведите -1. Если ребята встретятся в момент начала забега, выведите 0. Примечание Пример выглядит так:
| |
|
|
B. Drazil и его счастливые друзья
Перебор
теория чисел
*1300
meet-in-the-middle
снм
У Drazil много друзей. Некоторые из них счастливы, а некоторые несчастны. Drazil хочет, чтобы все его друзья были счастливы. Поэтому он придумал такой план. Среди его друзей n юношей и m девушек. Пронумеруем их от 0 до n - 1 и 0 до m - 1 соответственно. В i-й день Drazil приглашает -го юношу и -ю девушку поужинать (Drazil программист, поэтому i принимает значения с нуля). Если один из этих двух людей счастлив, то и другой становится счастливым. В противном случае оба человека останутся в том состоянии, в котором они были изначально. Как только человек становится счастливым (или же если он был счастлив с самого начала), он остается счастливым навсегда. Drazil интересно, приведёт ли этот план к тому, что его друзья рано или поздно все станут счастливыми. Помогите ему найти ответ на этот вопрос. Выходные данные Если Drazil может осчастливить всех своих друзей, воспользовавшись этим планом, выведите "Yes". В противном случае выведите "No". Примечание Определим как остаток от целочисленного деления 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 становятся счастливыми.
| |
|
|
E. Drazil и его счастливые друзья
математика
теория чисел
*3100
У Drazil много друзей. Некоторые из них счастливы, а некоторые несчастны. Drazil хочет, чтобы все его друзья были счастливы. Поэтому он придумал такой план. Среди его друзей n юношей и m девушек. Пронумеруем их от 0 до n - 1 и 0 до m - 1 соответственно. В i-й день Drazil приглашает -го юношу и -ю девушку поужинать (Drazil программист, поэтому i принимает значения с нуля). Если один из этих двух людей счастлив, то и другой становится счастливым. В противном случае оба человека останутся в том состоянии, в котором они были изначально. Как только человек становится счастливым (или же если он был счастлив с самого начала), он остается счастливым навсегда. 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 становятся счастливыми.
| |
|
|
C. A и B и командная тренировка
математика
реализация
теория чисел
жадные алгоритмы
*1300
A и B готовятся к олимпиадам про программированию. Важная часть подготовки к соревнованиям по программированию — передача знаний опытных участников тем, кто только начинает заниматься олимпиадами. Поэтому на очередной командной тренировке A решил составить команды так, чтобы новички решали задачи вместе с опытными участниками. A считает, что оптимальный состав команды из трех человек должен состоять из одного опытного участника и двух новичков. Таким образом, каждый опытный участник сможет поделиться опытом с большим количеством людей. Однако, B считает, что оптимальным будет состав из двух опытных участников и одного новичка. Таким образом, каждый новичок сможет получить больше знаний и опыта. В результате, A и B решили, что все команды на тренировке должны быть одного из двух вышеописанных типов. Кроме того, они оба считают, что общее количество команд должно быть как можно больше. На тренировке присутствуют n опытных участников и m новичков. Сможете ли вы посчитать, какое максимальное количество команд может быть сформировано? Выходные данные Выведите максимальное количество команд одного из двух описанных в условии типов, которое может быть сформировано. Примечание Обозначим опытных участников как О, новичков как Н. В первом тестовом примере команды выглядят так: (О, Н, Н), (О, Н, Н). Во втором тестовом примере команды выглядят так: (О, Н, Н), (О, Н, Н), (О, О, Н).
| |
|
|
E. Сплошные плюсы
Комбинаторика
математика
дп
теория чисел
*2200
Вася сидит на невыносимо скучном уроке математики. Чтобы развлечься, он выписал на листок бумаги n цифр в одну строку. После этого Вася стал выписывать разные способы поставить в строке между некоторыми цифрами плюсы («+») таким образом, чтобы получалось корректное арифметическое выражение; формально, никакие два плюса в таком разбиении не должны стоять рядом (между любыми двумя соседними плюсами должна стоять хотя бы одна цифра), и никакой плюс не может стоять в начале или в конце строки. Например, в строке 100500, способы 100500 (не ставить плюсов совсем), 1+00+500 или 10050+0 являются корректными, а способы 100++500, +1+0+0+5+0+0 или 100500+ являются некорректными. Урок был длинным, и Вася выписал все корректные способы расставить в своей строке из цифр ровно k плюсов. В этот момент его развлечение было замечено, и Вася получил задание до конца урока вычислить сумму значений всех получившихся арифметических выражений (при вычислении значения выражения ведущие нули в слагаемых следует игнорировать). Поскольку ответ может быть большим, Васе разрешили всего лишь получить остаток от деления ответа на 109 + 7. Выходные данные Выведите ответ на задачу по модулю 109 + 7. Примечание В первом примере результат равен (1 + 08) + (10 + 8) = 27. Во втором примере результат равен 1 + 0 + 8 = 9.
| |
|
|
D. Солдат и игра с числами
Конструктив
математика
дп
теория чисел
*1700
Два солдата играют в игру. Сначала один солдат выбирает целое положительное число n и называет его второму солдату. Затем второй солдат пытается совершить наибольшее количество ходов. На каждом ходу солдат выбирает положительное целое число x > 1, такое, что n делится на x, и заменяет число n числом n / x. Когда n становится равно 1 и больше нет возможных ходов, тогда игра завершается и счет второго солдата равен количеству совершённых им ходов. Чтобы сделать игру поинтереснее, в качестве n солдат выбирает число вида a! / b! для некоторых положительных целых чисел a и b (a ≥ b). Здесь под k! имеется в виду факториал числа k, который определяется как произведение всех положительных целых чисел, не превосходящих k. Определите максимально возможный счет второго солдата. Выходные данные Для каждой игры выведите максимальный счет, которого может достичь второй солдат.
| |
|
|
C. Майк и пена
Комбинаторика
математика
дп
теория чисел
*2300
битмаски
Майк — бармен в баре Рико. В заведении Рико пивные стаканы кладутся на особую полку. Всего в баре n сортов пива, пронумерованных от 1 до n. Бокал с i-м сортом пива содержит ai миллилитров пены. Максим — босс Майка. Сегодня он сказал Майку выполнить q запросов. Изначально полка пустая. Каждый запрос представляет собой целое число x. Если пиво номер x уже есть на полке, то Майк должен забрать его с полки, в противном случае — положить его на полку. После каждого запроса Майк должен определить качество полки. Медведи — те ещё гики, так что они считают, что качество полки — это количество пар (i, j) стаканов на полке, таких, что i < j и , где — наибольший общий делитель чисел a и b. Майк устал. Поэтому он попросил вам помочь ему выполнить эти запросы. Выходные данные Для каждого запроса выведите ответ в отдельной строке.
| |
|
|
D. Красивые числа
дп
теория чисел
*2500
Володя странноват, как, впрочем, и его вкусы. Он считает натуральное число красивым в том и только в том случае, когда оно делится на любую свою ненулевую цифру. Мы не будем спорить с Володей, лучше посчитаем количество красивых чисел в заданном интервале. Выходные данные Выведите t чисел, каждое на своей строке, — ответы на запросы, то есть в i-й строке — количество красивых чисел от li до ri включительно.
| |
|
|
D. GukiZ и двоичные операции
Комбинаторика
математика
реализация
*2100
теория чисел
матрицы
Все мы знаем, что GukiZ часто играет с массивами. Сейчас она размышляет над следующим вопросом: сколько существует массивов a длины n, состоящих из неотрицательных целых чисел строго меньше 2l, удовлетворяющих условию ? Здесь операция означает побитовое И (в языке Pascal она обозначается как and, на языке C/C++/Java/Python она обозначается как &), операция означает побитовое ИЛИ (на языке Pascal она обозначается как , наC/C++/Java/Python она обозначается |). Так как ответ может быть достаточно большим, посчитайте его по модулю m. В этот раз GukiZ не придумал решения и ему нужно, чтобы вы помогли ему! Выходные данные В единственной строке выведите количество массивов, удовлетворяющих данному выше условию, по модулю 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}.
| |
|
|
C. Ваня и весы
Перебор
математика
дп
теория чисел
жадные алгоритмы
*1900
meet-in-the-middle
У Вани есть чашечные весы и гири массами w0, w1, w2, ..., w100 грамм, где w — некоторое целое число не меньше 2 (ровно по одной гире каждого номинала). Ваня хочет узнать, может ли он взвесить вещь с массой m с помощью данных гирь, если гири можно класть на обе чаши весов. Формально говоря, требуется определить, можно ли положить вещь массой m и некоторые гири на левую чашу весов, а некоторые гири на правую чашу весов таким образом, чтобы чаши весов были уравновешены. Выходные данные Выведите слово 'YES', если вещь можно взвесить и 'NO', если нельзя. Примечание Пояснение к первому тесту из условия. На одной чаше может быть вещь массой 7 и гиря массой 3, а на второй чаше две гири массами 9 и 1 соответственно. Тогда 7 + 3 = 9 + 1. Пояснение ко второму тесту из условия. На одной чаше может быть вещь массой 99 и гиря массой 1, а на второй гиря массой 100. Пояснение к третьему тесту из условия. Взвесить вещь, как описано в условии, невозможно.
| |
|
|
C. Геральд и гигантские шахматы
Комбинаторика
математика
дп
теория чисел
*2200
На Геральдионе очень распространены гигантские шахматы. Не будем углубляться в правила этой игры, скажем лишь, что игра происходит на поле размера h × w, и оно тоже раскрашено в два цвета, но не как в шахматах. Почти все клетки поля белые и только некоторые — чёрные. В данный момент Геральд заканчивает партию в гигантские шахматы против своего друга Полларда. Геральд почти выиграл, и для победы ему осталось только провести свою пешку из верхнего левого угла доски, где она сейчас стоит, в нижний правый. Геральд настолько уверен в победе, что ему стало интересно, сколькими способами он может выиграть? Пешка, которая осталась у Геральда, может ходить двумя способами: на одну клетку вниз или на одну клетку вправо. Кроме того, она не может ходить на чёрные клетки, иначе Геральд всё-таки проиграет. Никаких других пешек или фигур на поле не осталось, так что, согласно правилам гигантских шахмат, Геральд ходит своей пешкой, пока игра не закончится, а Поллард просто наблюдает за этим процессом. Выходные данные Выведите единственное число — остаток от деления количества способов провести пешку Геральда от верхней левой клетки до нижней правой на число 109 + 7.
| |
|
|
A. Простые или палиндромы?
Перебор
математика
реализация
*1600
теория чисел
Рихаил Мубинчик считает, что нынешнее определение простых чисел несостоятельно — они слишком сложны и непредсказуемы. Вот другое дело — палиндромные числа. И глазу приятны, и обладают рядом замечательных свойств. Помогите Рихаилу убедить научное сообщество в этом! Напомним, что число называется простым, если оно целое, не меньше двух, и не делится ни на какое целое положительное число кроме себя и единицы. Рихаил называет число палиндромным, если оно целое, положительное и его запись в десятичной системе счисления без ведущих нулей является палиндромом, то есть одинаково читается слева направо и справа налево. Одна из проблем с простыми числами заключается в том, что их слишком много. Введём следующие обозначения: π(n) — количество простых чисел, не превышающих n, rub(n) — количество палиндромных чисел, не превышающих n. Рихаил хочет доказать, что простых чисел намного больше, чем палиндромных. Он попросил вас решить следующую задачу: по заданному значению коэффициента A найти наибольшее такое n, что π(n) ≤ A·rub(n). Выходные данные Если наибольшее такое число существует, то вывести его. Иначе вывести "Palindromic tree is better than splay tree" (без кавычек).
| |
|
|
A. Мишка и покер
математика
реализация
теория чисел
*1300
Лимак — старый бурый медведь. Он любит играть в покер со своими друзьями, для чего они часто ходят в ближайшее казино. За столом сидят n игроков (включая Лимака), которые уже сделали какие-то ставки. i-й игрок поставил ai долларов. Каждый игрок может удвоить или утроить свою ставку произвольное количество раз (может быть, и удвоить, и утроить). В казино есть специальное условие о джекпоте в случае, если ставки всех игроков становятся равны. Могут ли Лимак и его друзья выиграть джекпот? Выходные данные Выведите "Yes" (без кавычек), если игроки смогут сделать все ставки равными, или "No" в противном случае. Примечание В первом тесте первый и третий игроки должны дважды удвоить свои ставки, второй игрок должен удвоить свою ставку один раз, а четвертый игрок должен удвоить и утроить свою ставку. Можно показать, что во втором тесте невозможно сделать все ставки равными.
| |
|
|
H. Боты
Комбинаторика
математика
дп
теория чисел
*1800
Саша и Ира — лучшие друзья. Они не просто друзья — они разработчики ПО и эксперты по искусственному интеллекту. Они разрабатывают алгоритм для двух ботов, играющих в игру для двух игроков. За каждый ход, один из игроков совершает ход (неважно, какой игрок, возможно, игроки делают ходы не по очереди). Алгоритм для ботов, разработанный Сашей и Ирой, работает за счет отслеживания состояния, в котором находится игра. Каждый раз, когда любой бот делает ход, состояние меняется. А так как игра очень динамичная, она никогда не вернется в то состояние, в котором она была на каком-либо этапе в прошлом. Саша и Ира — перфекционисты и они хотят, чтобы у их алгоритма была оптимальная выигрышная стратегия. Они заметили, что в оптимальной выигрышной стратегии оба бота делают ровно по N ходов каждый. Но для того, чтобы найти оптимальную стратегию, их алгоритму надо проанализировать все возможные состояния этой игры (они ещё не изучили альфа-бета отсечение) и выбрать лучшую последовательность ходов. Они беспокоятся насчет эффективности их алгоритма и им интересно, какое общее количество состояний в игре, которое необходимо проанализировать? Выходные данные Вывод должен содержать единственное целое число – количество возможных состояний по модулю 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, про которые он должен задать вопросы. Выходные данные Выведите длину искомой последовательности вопросов k (0 ≤ k ≤ n), а затем k чисел — саму последовательность вопросов yi (1 ≤ yi ≤ n). Если существует несколько корректных последовательностей вопросов минимальной длины, то разрешается вывести любую. Примечание Последовательность из ответа на первый тест из условия действительно корректна. Если загаданное число не делится ни на одно из чисел последовательности, то оно равно 1. Если же загаданное число делится на 4, то оно равно 4. Если загаданное число делится на 3, то загаданное число равно 3. Иначе, оно равно 2. Стало быть, эта последовательность вопросов действительно угадывает загаданное число. Можно показать, что не существует последовательности вопросов состоящей из менее, чем трёх вопросов, удовлетворяющей условию.
| |
|
|
A. Таблица умножения
*1000
реализация
теория чисел
Рассмотрим таблицу из n строк и n столбцов. Известно, что в клетке, образованной пересечением i-й строки и j-го столбца, записано число i × j. Строки и столбцы нумеруются с единицы. Дано целое положительное число x. Требуется посчитать количество клеток таблицы, в которых находится число x. Выходные данные Выведите единственное число: количество раз, которое число x встречается в таблице. Примечание Ниже приведена таблица для второго теста из условия. Жирным выделены вхождения числа 12.
| |
|
|
A. Таблица НОД
Конструктив
теория чисел
жадные алгоритмы
*1700
Таблица НОД G размера n × n для массива целых положительных чисел a длины n задается формулой Напомним, что наибольшим общим делителем (НОД) двух положительных целых чисел x и y называется наибольшее целое число, делящее одновременно и x и y, оно обозначается как . Например, для массива a = {4, 3, 6, 2} длины 4 таблица НОД будет выглядеть следующим образом: Зная все числа таблицы НОД G, восстановите массив a. Выходные данные В единственную строку выведите n целых положительных чисел - элементы массива a. Если возможных решений несколько, разрешается вывести любое.
| |
|
|
C. Превосходящие периодические подмассивы
теория чисел
*2400
Дан бесконечный периодический массив a0, a1, ..., an - 1, ... с периодом длины n. Формально, . Периодическим подмассивом (l, s) (0 ≤ l < n, 1 ≤ s < n) массива a называется бесконечный периодический массив с периодом длины s, период которого является подотрезком массива a, начинающегося с позиции l. Периодический подмассив (l, s) называется превосходящим, если при совмещении его с массивом a, начиная с индекса l, любой элемент подмассива оказывается большим либо равным соответствующего ему в совмещении элемента массива a. Пример совмещения представлен на рисунке (сверху — бесконечный массив a, снизу — его периодический подмассив (l, s)): Найдите количество различных пар (l, s), соответствующих превосходящим периодическим подмассивам. Выходные данные Выведите единственное число — искомое количество пар. Примечание В первом примере превосходящими являются подмассивы (0, 1) и (3, 2). Подмассив (0, 1) является превосходящим, так как a0 ≥ a0, a0 ≥ a1, a0 ≥ a2, a0 ≥ a3, a0 ≥ a0, ... Подмассив (3, 2) является превосходящим, так как a3 ≥ a3, a0 ≥ a0, a3 ≥ a1, a0 ≥ a2, a3 ≥ a3, ... В третьем примере любая пара (l, s) соответствует превосходящему подмассиву, так как все элементы массива равны.
| |
|
|
D. Количество биномиальных коэффициентов
математика
дп
теория чисел
*3300
Для заданного простого целого числа p и целых α, A посчитайте количество пар целых чисел (n, k) таких, что 0 ≤ k ≤ n ≤ A и делится на pα. Поскольку ответ может быть очень большим, выведите его остаток от деления на 109 + 7. Напомним, что — это количество сочетаний размера k из n предметов. Выходные данные В единственной строке выведите ответ на задачу. Примечание В первом примере три биномиальных коэффициента, делящихся на 4, это , и .
| |
|
|
D. Дима и Лиза
Перебор
математика
теория чисел
*1800
Дима любит раскладывать нечетное число в сумму нескольких простых чисел, а Лиза любит, когда простых не больше трех. Помогите им представить данное число в виде суммы не более, чем трех простых чисел. Более формально, вам дано нечётное число n. Найдите набор чисел pi (1 ≤ i ≤ k), такой что - 1 ≤ k ≤ 3
- pi — простое число
-

Не требуется, чтобы числа pi были различными. Гарантируется, что хотя бы один возможный ответ существует. Выходные данные В первой строке выведите k (1 ≤ k ≤ 3) - количество чисел в найденном вами представлении. Во второй строке выведите сами числа pi в любом порядке. Если возможных ответов несколько, разрешается вывести любой. Примечание Простое число — это целое число, строго большее единицы, которое делится только на единицу и на само себя.
| |
|
|
C. Алиса, Боб, Апельсины и Яблоки
теория чисел
*2400
Алиса и Боб решили поесть фруктов. На кухне они нашли большой мешок с апельсинами и яблоками. Алиса сразу взяла себе апельсин, а Боб — яблоко. Чтобы процесс разделения оставшихся фруктов был интереснее, ребята решили поиграть в игру. Они выложили в ряд несколько карточек и на каждой записали либо букву 'A', либо букву 'B'. После этого они стали убирать карточки по одной слева направо, каждый раз когда они убирали карточку с буквой 'A' Алиса отдавала Бобу все фрукты, имеющиеся у нее на тот момент, и забирала из мешка столько же яблок и столько же апельсинов, сколько у неё было до этого. Таким образом количество апельсинов и яблок, имеющихся у Алисы, не менялось. Если же на карточке была записана буква 'B', то Боб поступал аналогично, то есть отдавал Алисе все фрукты, которые у него были, и забирал из мешка такой же набор фруктов. После того, как была разыграна последняя карточка, все фрукты в мешке закончились. Вам известно, сколько сначала в мешке было апельсинов и яблок. Требуется найти любую последовательность карточек, которыми могли играть Алиса и Боб. Выходные данные Выведите любую последовательность карточек, удовлетворяющую условиям задачи в виде строки из символов 'A' и 'B' в сжатом виде. Это значит, что вам нужно заменить отрезки одинаковых подряд идущих символов на количество повторений символа и сам символ. Например, строку AAABAABBB нужно заменить на строку 3A1B2A3B, но нельзя заменить на 2A1A1B2A3B или на 3AB2A3B. Смотрите примеры для уточнения формата вывода. выведенная вами строка должна состоять из не более, чем 106 символов. Гарантируется, что если ответ существует, то существует его представление в сжатом виде, состоящее из не более чем 106 символов. Если возможных ответов несколько, разрешается вывести любой из них. Если последовательности карточек, удовлетворяющей условию задачи, не существует, выведите одно слово Impossible. Примечание В первом примере, если в ряду находились три карточки с буквой 'B', то Бобу пришлось бы три раза отдать Алисе по одному яблоку. Таким образом, в итоге у Алисы был бы один апельсин и три яблока, а у Боба одно яблоко. Значит в мешке изначально был один апельсин и четыре яблока. Во втором примере, ответа не существует, так как одной карточки было бы недостаточно для завершения игры, если же карточек было хотя бы две, то это значило бы, что в мешке изначально было хотя бы три яблока или апельсина. В третьем примере, на карточках были записаны буквы 'AB', поэтому после убирания первой карточки у Боба был бы один апельсин и одно яблоко, а после убирания второй карточки у Алисы было бы два апельсина и одно яблоко. Таким образом, изначально в мешке было три апельсина и два яблока.
| |
|
|
E. Подарок для филателиста Виталика
Комбинаторика
математика
теория чисел
*2900
У филателиста Виталика сегодня день рождения! Как постоянному клиенту магазина почтовых марок «Робин Бобин», руководство магазина решило сделать ему подарок. Виталик хочет купить одну марку, а магазин, в свою очередь, подарит ему некоторый непустой набор из оставшихся марок, такой, что наибольший общий делитель (НОД) цен подаренных марок больше единицы. Если НОД цен купленной марки и цен марок из подаренного набора окажется равен 1, то Виталик уйдет из магазина абсолютно счастливым. Руководство магазина просит вас посчитать количество различных ситуаций, при которых Виталик уйдет из магазина абсолютно счастливым. Так как искомое количество ситуаций может оказаться очень большим, вам требуется найти остаток от деления этого количества на число 109 + 7. Ситуации считаются различными, если различаются марки, купленные Виталиком, или один из подарков содержит марку, которую не содержит другой. Выходные данные Выведите одно целое число — остаток от деления искомого количества ситуаций на число 109 + 7. Примечание В первом примере возможны следующие ситуации: - Виталик покупает 1-ю марку, магазин дарит 2-ю марку;
- Виталик покупает 3-ю марку, магазин дарит 2-ю марку;
- Виталик покупает 2-ю марку, магазин дарит 1-ю марку;
- Виталик покупает 2-ю марку, магазин дарит 3-ю марку;
- Виталик покупает 2-ю марку, магазин дарит 1-ю и 3-ю марки.
| |
|
|
B. Гадание
реализация
теория чисел
*1200
Марина любит Сашу. Но ей не дает покоя вопрос: а любит ли ее Саша? Конечно же, лучший способ узнать это — гадание. Есть много способов гадания, но Марина выбрала самый простой. Она берет в руку одну или несколько ромашек, и отрывает лепестки один за другим. После каждого лепестка она произносит чередуя «Любит» или «Не любит», причем начинает Марина всегда с «Любит». В поле растет n ромашек с количествами лепестков a1, a2, ... an. Марина хочет собрать букет, в котором будет как можно больше лепестков в сумме, а результат гадания, естественно, будет «Любит». Помогите ей это сделать — найдите, какое наибольшее количество лепестков может быть в таком букете. Выходные данные Выведите одно число — максимальное количество лепестков в букете, итог гадания на котором «Любит». Если такого букета не существует, выведите 0. Букет может состоять из одного цветка.
| |
|
|
D. REQ
Структуры данных
теория чисел
*2500
Сегодня на уроке математики Марья Ивановна рассказала Вовочке, что функция Эйлера целого положительного числа φ(n) — это мультипликативная арифметическая функция, равная количеству целых положительных чисел, меньших n и взаимно простых с ним. При этом полагают, что число 1 взаимно просто со всеми целыми положительными числами и что φ(1) = 1. Теперь учительница дала Вовочке массив из n целых положительных чисел a1, a2, ..., an и задание обработать q запросов li ri — посчитать и вывести остаток от деления на 109 + 7. Поскольку это сложновато для второкласника, вы решили помочь Вовочке. Выходные данные Выведите q чисел — значение функции Эйлера для каждого из запросов, вычисленное по модулю 109 + 7. Примечание Во втором примере значения вычисляются так: - φ(13·52·6) = φ(4056) = 1248
- φ(52·6·10·1) = φ(3120) = 768
- φ(24·63·13·52·6·10·1) = φ(61326720) = 12939264
- φ(63·13·52) = φ(42588) = 11232
- φ(13·52·6·10) = φ(40560) = 9984
- φ(63·13·52·6·10) = φ(2555280) = 539136
| |
|
|
B. Муудулярная Арифметика
Комбинаторика
математика
теория чисел
*1800
поиск в глубину и подобное
снм
Как подобает любому порядочному школьнику, Кевин Сан изучает коровометрию, коровоматику и криптобычество в Буреновском государственном университете (БГУ) под руководством Фермера Ивана. На последнем занятии по математическому упрощению уравнений (МУУ) Кевин столкнулся со странным функциональным уравнением, для решения которого он нуждается в вашей помощи. Даны два целых числа k и p, при этом p — нечётное простое число и функциональное уравнение:  для некоторой функции . (Равенство должно выполняться для любого целого x от 0 до p - 1 включительно). Кевин просит вас посчитать количество различных функций f, удовлетворяющих этому уравнению. Поскольку ответ может быть достаточно большим, вы должны вывести остаток от деления этого числа на 109 + 7. Выходные данные Выведите единственное целое число — количество различных функций f, удовлетворяющих уравнению, по модулю 109 + 7. Примечание В первом примере p = 3 и k = 2. Подходят следующие функции: - f(0) = 0, f(1) = 1, f(2) = 2.
- f(0) = 0, f(1) = 2, f(2) = 1.
- f(0) = f(1) = f(2) = 0.
| |
|
|
D. Множители
математика
теория чисел
*2000
У Айрата есть число n, представленное в виде разложения на m простых множителей pi, то есть n = p1·p2·...·pm. Айрат получил секретную информацию, что произведение всех делителей n по модулю 109 + 7 — пароль от секретной базы данных. Теперь осталось только вычислить это значение. Выходные данные Выведите одно число — произведение всех делителей числа 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. Сумма остатков
математика
реализация
теория чисел
*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. Выходные данные Выведите целое число s — остаток значения искомой суммы при делении на число 109 + 7.
| |
|
|
C. Мокрая Акула и цветы
Теория вероятностей
Комбинаторика
математика
теория чисел
*1700
В подчинении у Мокрой Акулы находится n акул, сидящих за круглым столом. Таким образом, соседями являются акулы с номерами i и i + 1 для всех i от 1 до n - 1, а так же акулы с номерами 1 и n. Каждая акула в течение дня вырастит случайное количество цветков si — целое число от li до ri, при этом все варианты равновероятны. У Мокрой Акулы есть любимое простое число p, от которого он совершенно без ума! Если для какой-то пары соседних акул i и j произведение количества выращенных ими цветков si·sj делится на p, то Мокрая Акула радуется и даёт каждой из этих акул по 1000 бурлей. В конце дня акулы собираются вместе и складывают все подаренные бурли. Вычислите математическое ожидание этого количества. Выходные данные Выведите единственное вещественное число — математическое ожидание суммарного количества бурлей, которое получат акулы. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6. А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если . Примечание Положительное целое число называется простым, если оно не делится ни на какое другое положительное целое число, кроме себя и 1. При этом число 1 простым не является. Рассмотрим первый пример из условия. Первая акула выращивает от 1 до 2 цветков, вторая от 420 до 421, а третья от 420420 до 420421. Возможны восемь вариантов количества выращенных цветков (s0, s1, s2): - (1, 420, 420420): 1·420 = 420, 420·420420 = 176576400 и 420420·1 = 420420. Каждая акула в каждой паре получит по 1000 бурлей, то есть в итоге каждая акула получит по 2000 бурлей, и сумма будет равна 6000 бурлей.
- (1, 420, 420421): В этом варианте 420421·1 не делится на 2, поэтому первая и третья акулы получат только по 1000 бурлей, а вторая всё ещё получит 2000. Итоговая сумма — 4000 бурлей.
- (1, 421, 420420): сумма 4000
- (1, 421, 420421): сумма 0.
- (2, 420, 420420): сумма 6000.
- (2, 420, 420421): сумма 6000.
- (2, 421, 420420): сумма 6000.
- (2, 421, 420421): сумма 4000.
Математическое ожидание равняется . Во втором примере никакая комбинация количества цветов не приносит акулам бурлей.
| |
|
|
B. НОД массива
дп
теория чисел
жадные алгоритмы
*2300
Вам дан массив ai длины n. К массиву можно последовательно применить две операции: - удалить некоторый подотрезок длины m < n, заплатив за это m·a монет;
- изменить некоторые элементы массива не более чем на 1, заплатив за каждое изменение b монет.
Обратите внимание, что каждую операцию можно выполнить только по одному разу (а можно и не выполнять вовсе), то есть удалить можно только один отрезок и каждое число можно изменить (увеличить или уменьшить) не более чем на 1. Дополнительно обратите внимание, что, выполняя первую операцию, мы не можем удалить весь массив. Какое минимальное количество монет потребуется потратить, чтобы получить массив, наибольший общий делитель элементов которого больше 1? Выходные данные Выведите единственное целое число — минимальную стоимость изменений, необходимых для получения массива, наибольший общий делитель элементов которого больше 1. Примечание В первом тесте оптимально удалить число 3 и заплатить за это 1 монету. Во втором тесте нужно удалить отрезок из чисел [17, 13], а затем уменьшить число 6. Стоимость изменений равна 2·3 + 2 = 8 монетам.
| |
|
|
C. Башни из кубиков
Перебор
математика
*1600
теория чисел
жадные алгоритмы
Сегодня на парах студенты собирают башни из кубиков. Каждый студент собирается построить башню ненулевой высоты, поставив друг на друга некоторое количество блоков из кубиков. n студентов используют блоки, состоящие из двух кубиков, а m студентов используют блоки из трёх кубиков. Блоки кладутся только вертикально, то есть каждый блок добавляет к высоте башни 2 или 3 кубика соответственно. Студенты хотят, чтобы все башни имели различную высоту, но при этом они не хотят использовать много блоков, поэтому они попросили вас определить минимально возможную высоту самой высокой башни. Выходные данные Выведите единственное целое число — минимально возможную высоту самой высокой башни, если высоты всех башен положительны и различны. Примечание В первом примере студент, использующий блоки из двух кубиков, может построить башню высоты 4, а студенты, использующие блоки из трёх кубиков, — башни высоты 3, 6 и 9. Самая высокая башня будет иметь высоту 9 кубиков. Во втором примере студенты могут построить башни высотой 2, 4 и 8, используя блоки по два кубика, и башни высотой 3 и 6, используя блоки по три кубика.
| |
|
|
A. Опять двадцать пять!
теория чисел
*800
HR-менеджер опять был расстроен. Очередной кандидат так же провалил собеседование, как и 24 предыдущих. «Неужели я даю такое сложное задание? — думал HR-менеджер. — Всего лишь возвести число 5 в степень n и узнать последние две цифры числа. Да, конечно, n может быть большим, и на калькуляторе такую степень не посчитать, но нам и нужны люди, способные думать, а не только инструкции исполнять.» А вы смогли бы пройти собеседование в компании, занимающейся машинным зрением в ИТ-граде? Выходные данные Выведите последние две цифры числа 5n без пробелов между ними.
| |
|
|
J. Делимость
математика
теория чисел
*1100
Компания ИТ-града, выпускающая компьютерные игры, придумала новый способ поощрения своих сотрудников. Когда случается выпуск новой игры, пользователи начинают активно её покупать, а компания отслеживает количество продаж с точностью до каждой транзакции. Каждый раз, когда очередное количество продаж делится нацело на все числа от 2 до 10, всем разработчикам начисляется небольшая премия. Гейм-дизайнер Петя знает, что компания вот-вот выпустит релиз новой игры, в разработке которой он участвовал. На основании прошлого опыта он прогнозирует, что в течение месяца игру купят n человек. Теперь Петя хочет определить, сколько раз ему будет начислена премия. Помогите ему это узнать. Выходные данные Выведите одно целое число — количество чисел от 1 до n, делящихся на все числа от 2 до 10.
| |
|
|
K. Неделимость
математика
*1500
теория чисел
Компания ИТ-града, выпускающая компьютерные игры, решила модернизировать свой способ поощрения сотрудников. Теперь он выглядит следующим образом. Когда случается выпуск новой игры, пользователи начинают активно её покупать, а компания отслеживает количество продаж с точностью до каждой транзакции. Каждый раз, когда очередное количество продаж не делится нацело ни на одно из чисел от 2 до 10, всем разработчикам начисляется небольшая премия. Гейм-дизайнер Петя знает, что компания вот-вот выпустит релиз новой игры, в разработке которой он участвовал. На основании прошлого опыта он прогнозирует, что в течение месяца игру купят n человек. Теперь Петя хочет определить, сколько раз ему будет начислена премия. Помогите ему это узнать. Выходные данные Выведите одно целое число — количество чисел от 1 до n, не делящихся нацело ни на одно из чисел от 2 до 10.
| |
|
|
D. Самая длинная подпоследовательность
Перебор
математика
*2100
теория чисел
Вам задан массив a из n элементов и число m. Рассмотрим некоторую подпоследовательность a и значение наименьшего общего кратного (НОК) её элементов. Обозначим этот НОК буквой l. Найдите самую длинную подпоследовательность массива a со значением l ≤ m. Подпоследовательностью массива a называется массив, который получается из a удалением некоторых элементов. Разрешено удалять ноль или все элементы массива. НОК пустого массива равен 1. Выходные данные В первой строке выведите два целых числа l и kmax (1 ≤ l ≤ m, 0 ≤ kmax ≤ n) — значение НОК и количество элементов в оптимальной подпоследовательности. Во второй строке выведите kmax целых чисел — позиции элементов в исходной последовательности, в возрастающем порядке. Заметим, что вы можете найти и вывести любую подпоследовательность с наибольшей длиной.
| |
|
|
A. Тёмный и Светлый
Перебор
математика
теория чисел
*1100
Данте сражается со «Спасителем». Чтобы нанести ему решающий удар мечом, он сначала должен уничтожить его щит. У Данте есть два пистолета, Тёмный и Светлый, каждый из которых может произвести любое неотрицательное количество выстрелов. Каждая пуля, попавшая в щит, наносит a единиц урона, если она была выпущена из Тёмного пистолета, и b единиц урона, если она была выпущена из Светлого. Чтобы разрушить щит, Данте должен нанести ровно c единиц урона. Проверьте, возможно ли это. Выходные данные Если Данте может нанести ровно c единиц урона, то выведите «Yes» (без кавычек), в противном случае выведите «No» (без кавычек). Примечание Во втором примере Данте может выпустить 1 пулю из Тёмного пистолета и 2 пули из Светлого, таким образом он нанесёт по щиту 1·3 + 2·2 = 7 единиц урона.
| |
|
|
B. Тривиальная задача
Перебор
Конструктив
математика
теория чисел
*1300
Мистер Санта поручил всем сильнейшим программистам мира решить тривиальную задачу. Он даёт им целое положительное число m и просит найти количество таких целых положительных чисел n, что десятичная запись факториала числа n будет заканчиваться ровно на m нулей. А вы считаете себя достаточно сильным программистом, чтобы решить эту задачу? Выходные данные Сначала выведите k — количество таких целых чисел n, что их факториал заканчивается на m нулей. Затем выведите эти k целых чисел в порядке возрастания. Примечание Факториал n равняется произведению всех целых чисел от 1 до n включительно, то есть n! = 1·2·3·...·n. В первом примере 5! = 120, 6! = 720, 7! = 5040, 8! = 40320 и 9! = 362880.
| |
|
|
G. Яш и деревья
Структуры данных
математика
теория чисел
*2800
поиск в глубину и подобное
битмаски
Яш любит играть с деревьями, особенно если в этой игре замешаны простые числа. На его 20-й день рождения ему подарили корневое дерево, состоящее из n вершин, на котором он должен теперь отвечать на запросы. Услышав про деревья и простые числа, Яш так переполнился восхищением, что отвечать на запросы придётся теперь вам. Корнем дерева является вершина с номером 1. В каждой вершине записано некоторое целое число ai. Дополнительно нам дано целое число m. Поступают запросы двух типов: - Для данной вершины v и целого числа x — увеличить все ai в поддереве v на x.
- Для данной вершины v — найти количество таких простых чисел p, меньших m, что найдётся вершина u в поддереве вершины v и целое число k, такие что au = p + m·k.
Выходные данные Для каждого запроса второго типа выведите количество подходящих простых чисел.
| |
|
|
E. Простой отрезок
Перебор
математика
теория чисел
*особая задача
*1800
Простое число это такое число, у которого ровно два различных натуральных делителя. Например, числа 2, 3, 17, 97 — простые, а числа 1, 10, 120 — нет. Для заданного числа n найдите наиболее короткий отрезок чисел [a, b] такой, что a ≤ n ≤ b, а числа a и b — простые. Выходные данные Выведите пару искомых чисел a и b через пробел.
| |
|
|
F. Ароматные эксперименты
Комбинаторика
математика
теория чисел
*2500
Чтобы отпраздновать установление мира, Бесси, Элси и Фермер Джон собираются посадить несколько грядок с цветами, что позволит им дополнительно украсить роскошные луга Бовинии. Как известно любому садоводу, на каждой грядке необходимо посадить одинаковые цветы в одинаковом порядке. Изначально у Фермера Джона есть n различных типов цветов, ai цветов типа i. В каждый из q последующих дней Фермер Джон получит некоторое количество цветов нового типа. В день j он получит cj цветов одного типа, отличного от всех типов, имевшихся у него до этого. Поскольку Фермер Джон знает баланс между экстравагантностью и минимализмом, он хочет посадить цветы ровно k различных типов. Кроме того, если какой-то тип был выбран для использования, то Джон хочет посадить все цветы этого типа. Дополнительно: цветы будут посажены на несколько грядок таким образом, что для каждого из k выбранных типов, количество цветов этого типа на каждой грядке одинаково. Поскольку Джон — фанат всеобщего равенства, он хочет, чтобы количество грядок при этом было максимально. Для каждого из q дней Фермер Джон хотел бы знать сумму по всем возможным способам выбрать k типов, максимального количества грядок, которое он может сделать для этого подмножества типов. Поскольку это число может быть достаточно большим, выведите его по модулю 109 + 7. Выходные данные Для каждого из 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 для второго.
| |
|
|
G. Ход простым
Комбинаторика
математика
теория чисел
*3100
У кошечки Сони есть массив, состоящий из n целых положительных чисел. У этого массива есть 2n подпоследовательности. Для каждой подпоследовательности Соня вычисляет минимальное количество действий, которые необходимо совершить, чтобы сделать все элементы равными. Возможны следующие действия: - Выбрать один элемент подпоследовательности и умножить его на простое число;
- Выбрать какой-нибудь элемент подпоследовательности и поделить его на простое число. При этом данный элемент должен обязательно делиться на выбранное простое число.
Чему равна сумма минимального количества необходимых операций по всем 2n подпоследовательностям? Найдите и выведите это значение по модулю 109 + 7. Выходные данные Выведите сумму минимального количества операций, необходимых, чтобы уравнять все элементы подпоследовательности по всем подпоследовательностям данного массива. Значение выводите по модулю 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.
| |
|
|
G. Забористое разнообразие
Комбинаторика
дп
теория чисел
*2300
Давным-давно Василий Иванович соорудил на своей даче хороший забор. Василий Иванович называет забор хорошим, если он представляет собой ряд из n последовательно скреплённых вертикальных досок сантиметровой ширины, высота каждой из которых — целое положительное число сантиметров. Хозяин дачи прекрасно помнит, что высота i-й слева доски равна hi. Сегодня Василий Иванович решил изменить конструкцию сооружённого забора, спилив у него сверху связную часть таким образом, чтобы забор остался хорошим. Спиленная часть должна состоять только из верхних частей досок, причём соседние части должны быть соединены между собой (иметь ненулевую длину соприкосновения до выпиливания из забора). Вам, как любопытному соседу Василия Ивановича, предстоит посчитать количество возможных способов спилить ровно одну часть, как описано выше. Два способа спилить часть называются различными, если для оставшихся заборов существует такое i, что высоты i-х досок различаются. Поскольку забор Василия Ивановича может быть очень высоким и длинным, найдите остаток от деления искомого количества способов на 1 000 000 007 (109 + 7). Выходные данные Выведите остаток при делении r на 1 000 000 007, где r — количество способов спилить ровно одну связную часть так, чтобы часть состояла из верхних частей досок и оставшийся забор был хорошим. Примечание Из забора первого примера невозможно вырезать ровно одну часть таким образом, чтобы получившийся забор остался хорошим. Все возможные варианты получившегося забора из второго примера выглядят следующим образом (серым цветом выделена вырезаемая часть):
| |
|
|
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. Выходные данные Если ответа не существует, выведите "-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. Выходные данные В первой строке выведите целое число k — наименьшее количество элементов, которые нужно добавить в массив a, чтобы он стал взаимнопростым. Во второй строке выведите n + k целых чисел aj — элементы массива a после добавления k элементов. Обратите внимание, что этот массив должен быть взаимнопростым, то есть все пары соседних элементов должны быть взаимнопросты. Также новый массив должен быть получен из исходного массива a добавлением ровно k элементов. Если существует несколько решений, выведите любое.
| |
|
|
A. Сложный НОД
математика
теория чисел
*800
Наибольший общий делитель НОД(a, b) двух положительных целых чисел a и b равняется самому большому целому числу, на которое без остатка делятся оба числа a и b. Известны эффективные алгоритмы для нахождения НОД(a, b), например, алгоритм Эвклида. Усложним требования и будем просить решить более сложную задачу — нужно найти НОД среди всех чисел от a до b включительно. Формально, найдите максимальное целое число, на которое без остатка делится каждое из чисел a, a + 1, a + 2, ..., b. Чтобы было бы ещё сложнее, разрешим a и b достигать числа гугол, 10100 — такие числа не помещаются даже в 64-битный тип целых чисел! Выходные данные Выведите одно число — НОД всех чисел от a до b включительно.
| |
|
|
D. Красивое подмножество
Конструктив
теория чисел
*1800
жадные алгоритмы
Кортеж положительных целых чисел {x1, x2, ..., xk} называется простым, если для всех пар положительных чисел (i, j) (1 ≤ i < j ≤ k) число xi + xj является простым. Вам задан массив a из n положительных целых чисел a1, a2, ..., an (не обязательно различных). Вам нужно найти простое подмножество массива a наибольшего размера. Простое число — натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя — единицу и самого себя. Подмножеством массива a называется кортеж, который может быть получен из a удалением некоторых (возможно всех) элементов массива. Выходные данные В первой строке выведите целое число m — наибольший размер простого подмножества массива a. Во второй строке выведите m целых чисел bl — элементы наибольшего по размеру простого подмножества массива a. Если существует несколько решений, вы можете вывести любое из них. Числа подмножества вы можете выводить в любом порядке.
| |
|
|
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). Выходные данные Выведите единственное целое число c — количество чисел от 1 до n (включительно) с ровно четырьмя положительными делителями.
| |
|
|
C. Безграничная странность массива
Структуры данных
теория чисел
*2800
Ясину подарили массив a, состоящий из n целых чисел. Ясину только 5 лет, поэтому он любит разные странные вещи. Ясин называет странностью массива максимум gcd(ai, aj) по всем 1 ≤ i < j ≤ n. Для n ≤ 1 странность массива полагается равной 0. gcd(x, y) означает наибольший общий делитесь целых чисел x и y. Также он определяет безграничную странность массива. Безграничная странность равняется , где f(i, j) равняется странности массива a, получаемого удалением всех элементов с i по j включительно, то есть массива [a1... ai - 1, aj + 1... an]. Поскольку Ясину только 5 лет, и программировать он не умеет, он просит вас помочь ему вычислить безграничную странность данного массива a. Выходные данные Выведите одно целое число — безграничную странность массива a. Примечание Рассмотрим первый пример. - f(1, 1) равняется 3.
- f(2, 2) равняется 1.
- f(3, 3) равняется 2.
- f(1, 2), f(1, 3) и f(2, 3) равны 0.
Таким образом, ответ равен 3 + 0 + 0 + 1 + 0 + 2 = 6.
| |
|
|
C. Мила и шоколад
математика
реализация
*1600
теория чисел
Маленькой Миле дали задачу. У неё есть n досок, пронумерованных целыми числами от 1 до n. Она должна покрасить их странным образом. Непокрашенная доска может быть покрашены в красный цвет, если её номер делится на число a, а также может быть покрашена в синий цвет, если её номер делится на число b. Таким образом, доска номер которой делится на a и на b может быть покрашена как в красный, так и в синий цвет. После покраски она получит p шоколадок за каждую доску красного цвета и q шоколадок за каждую доску синего цвета. Обратите внимание, что она может красить доски в любом порядке. Помогите Миле найти наибольшее количество шоколадок, которые она может получить. Выходные данные Выведите одно целое число 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. Выходные данные Выведите одно целое число s — значение g(n)(x) по модулю 109 + 7.
| |
|
|
A. Иррациональная задача
реализация
теория чисел
*1100
Маленькому Пете задали в качестве домашнего задания следующую задачу: Дана функция ( обозначает операцию взятия остатка по модулю). Требуется посчитать количество целых чисел x из промежутка [a;b] таких, что f(x) = x. К сожалению, Петя забыл, в каком порядке должны браться остатки, а просто записал 4 числа. С равной вероятностью может оказаться, что брать остатки для вычисления функции нужно в любом из 24 возможных порядков. К примеру, если у Пети есть числа 1, 2, 3, 4, то он может брать остатки именно в таком порядке, а может сначала брать остаток по модулю 4, затем по модулям 2, 3, 1. Также существует 22 других перестановки этих чисел, в порядке которых могут браться остатки. В этой задаче 4 числа, записанных Петей, будут попарно различны. Теперь Петя уже не может выполнить задачу так, как от него требовал учитель, но ради развлечения он решил найти количество таких целых чисел , что вероятность того, что для них f(x) = x, не меньше чем 31.4159265352718281828459045%. Иными словами, Пете подойдут те числа x, для которых существует не менее 7 таких перестановок чисел p1, p2, p3, p4, что f(x) = x. Выходные данные Выведите количество целых чисел из заданного интервала, удовлетворяющих заданным условиям.
| |
|
|
A. Алёна и числа
Конструктив
математика
теория чисел
*1100
Когда пухленькая девочка Алёна доела очередную булочку, она придумала два целых числа n и m. Алёна решила выписать на доске в один столбик все числа от 1 до n, а в другой столбик — все числа от 1 до m. Девочка решила посчитать, сколько пар чисел она может выбрать, чтобы сумма чисел была кратна 5, если первое число пары — это произвольное число из первого столбика, а второе число пары — произвольное число из второго столбика. Формально, Алёне интересно, сколько существует пар целых чисел (x, y), таких что 1 ≤ x ≤ n, 1 ≤ y ≤ m и равно 0. Алёна затрудняется посчитать искомое количество, потому что она блондинка. Помогите ей в этом. Выходные данные В единственной строке выведите ответ на задачу — количество пар целых чисел (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).
| |
|
|
B. Игра с остатками
математика
теория чисел
*1800
китайская теорема об остатках
Сегодня Пари и Арий играют в игру Остатки. Пари выбирает два положительных целых числа x и k и говорит Арию k (а x не говорит). Арий должен найти . Известны n древних чисел c1, c2, ..., cn, и для каждого из них Арий может спросить у Пари . Для данного k и набора древних чисел определите, правда ли, что Арий выигрывает для любого значения x? Запись означает остаток от деления x на y. Выходные данные Выведите «Yes» (без кавычек), если Арий может выиграть для любого x, и «No» (без кавычек) в противном случае. Примечание В первом примере Арий может узнать значение , потому что 5 является одним из древних чисел. Во втором примере Арий не может знать наверняка. Например, 1 и 7 дают одинаковые остатки при делении на 2 и 3, но разные при делении на 7.
| |
|
|
F. Couple Cover
Перебор
дп
теория чисел
*2200
"Couple Cover" — популярная игра на удачу, скоро начнётся! Два игрока должны работать сообща, чтобы построить прямоугольник. В мешке, находящемся на столе, лежит n шаров и на каждом из них записано целое число. Первый игрок случайным образом вытаскивает из мешка шар (все шары могут быть выбраны равновероятно). Число записанное на этом шаре будет шириной построенного прямоугольника в метрах. Этот шар не возвращается в мешок и второй игрок достает ещё один шар. Число записанное на этом шаре будет длиной построенного прямоугольника в метрах. Если площадь прямоугольника окажется больше или равна некоторой величины p квадратных метров, то игроки побеждают. В противном случае они проигрывают. Организаторы игры хотят подобрать подходящее значение p так, что вероятность победы пары будет не очень большой и не очень маленькой, но они считают совсем медленно, поэтому они наняли вас, чтобы ответить на несколько запросов. Вам задан список чисел записанных на шарах и организаторы хотят узнать для нескольких значений p сколько выигрышных пар существует. Обратите внимание, что пары считаются различными, если различается первый или второй шар, и два шара с одинаковым числовым значением считаются различными. Выходные данные Для каждого запроса выведите в отдельной строке количество выигрышных пар шаров, существующих для заданного значения p.
| |
|
|
C. Прямая
математика
теория чисел
*1800
Своим уравнением Ax + By + C = 0 задана прямая на плоскости. Требуется найти любую принадлежащую этой прямой точку, координаты которой — целые числа от - 5·1018 до 5·1018 включительно, или выяснить что таких точек нет. Выходные данные Если искомая точка существует, выведите ее координаты, иначе выведите единственное число -1.
| |
|
|
E. Мишка и делители
дп
теория чисел
*2600
Вдоволь наигравшись со своим красивым массивом, Мишка решила углубиться в изучение математики. Научившись умножать и делить и изучив понятие кратности, она заинтересовалась следующей задачей. Дано целое число k и массив целых чисел a1, a2, ..., an длины n. Необходимо найти такую непустую подпоследовательность элементов заданного массива, что произведение её элементов кратно k, а её размер минимален. Формально, требуется найти последовательность индексов 1 ≤ i1 < i2 < ... < im ≤ n, такую, что делится на k, а m принимает наименьшее возможное значение. Если же существует несколько таких подпоследовательностей, то следует выбрать ту из них, сумма элементов которой минимальна. Мишка быстро справилась с этой задачей. А сможете ли Вы? Выходные данные В первой строке выведите целое положительное число — количество элементов в искомой подпоследовательности. Во второй строке выведите m различных целых чисел — последовательность индексов элементов исходного массива, входящих в искомую подпоследовательность. Если искомых последовательностей несколько (то есть подпоследовательностей из наименьшего количества элементов с минимально возможной суммой элементов), то разрешается вывести любую из них. Если таких последовательностей не существует, выведите - 1 в единственной строке.
| |
|
|
C. Пифагоровы тройки
математика
*1500
теория чисел
Катя учится в пятом классе. В ее классе недавно проходили прямоугольные треугольники и теорему Пифагора. Оказывается, существуют такие тройки целых положительных чисел, что из трех отрезков, длины которых соответствуют тройке, можно составить прямоугольный треугольник. Подобные тройки чисел называются Пифагоровыми тройками. К примеру, Пифагоровыми тройками являются тройки чисел (3, 4, 5), (5, 12, 13) и (6, 8, 10). И вот Катя задалась вопросом: можно ли фиксировать длину одной из сторон прямоугольного треугольника и найти любую Пифагорову тройку, соответствующую ей? Заметьте, что сторона, длина которой фиксируется, может быть как катетом, так и гипотенузой. Катя без проблем справилась с этой задачкой. Интересно, а вы сможете? Выходные данные В единственной строке выведите два целых числа m и k (1 ≤ m, k ≤ 1018), такие что числа n, m и k образуют Пифагорову тройку. В случае, если Пифагоровой тройки, содержащей число n, не существует, выведите - 1. Если ответов несколько, выведите любой. Примечание  Иллюстрация к первому примеру из условия.
| |
|
|
C. Рыцари круглого стола
математика
*1600
дп
теория чисел
За круглым столом сидят n рыцарей на одинаковом расстоянии друг от друга. Каждый из них пребывает либо в хорошем настроении, либо в плохом. Волшебник Мерлин предсказал королю Артуру, что грядущий месяц окажется особенно удачливым, если найдется такой правильный многоугольник, что во всех его вершинах находятся рыцари в хорошем настроении. Иначе грядущий месяц сулит неудачи. Выпуклый многоугольник называется правильным, если все его стороны равны, а так же равные все его углы. В этой задаче мы считаем правильными только многоугольники хотя бы с 3 вершинами, то есть невырожденные. На рисунке ниже приведены примеры таких многоугольников. Зеленые точки означают рыцарей в хорошем настроении, а красные - в плохом. Королю Артуру известны настроения всех рыцарей. Помогите ему узнать — будет следующий месяц удачливым или нет. Выходные данные Выведите «YES» без кавычек, если следующий месяц окажется удачливым. Иначе выведите «NO».
| |
|
|
D. Две арифметические прогрессии
математика
теория чисел
*2500
Вам заданы две арифметические прогрессии: a1k + b1 и a2l + b2. Найдите количество целых чисел x таких, что L ≤ x ≤ R и x = a1k' + b1 = a2l' + b2, для некоторых целых k', l' ≥ 0. Выходные данные Выведите искомое количество целых чисел x.
| |
|
|
E. ZS и Парадокс дней рождения
Теория вероятностей
математика
теория чисел
*2300
Кодер ZS недавно узнал об интересной идее, так называемом Парадоксе дней рождения. Он утверждает, что среди произвольной группы из 23 человек с примерно 50% вероятностью найдутся двое, дни рождения которых совпадают. Кодер ZS нашел это очень интересным, и решил проверить это на жителях Удайлэнда. Продолжительность года в Удайлэнде равна 2n дням. Кодер ZS хочет расспросить k жителей Удайлэнда, день рождения каждого из которых совпадает с одним из 2n дней (с равной вероятностью). ZS'а интересует вероятность того, что хотя бы двое из них родились в один и тот же день. Кодер ZS знает, что ответ можно записать в виде несократимой дроби . Он хочет найти значения A и B (ему не нравится работать с вещественными числами). Поможете ему? Выходные данные Если вероятность того, что хотя бы двое из 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. Организация фестиваля
Комбинаторика
математика
теория чисел
*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 различных туров одинаковой длины на 1 000 000 007.
| |
|
|
F. Циклический шифр
Структуры данных
реализация
теория чисел
*2800
китайская теорема об остатках
Вам задан набор из n последовательностей. Каждая из последовательностей состоит из целых положительных чисел, не превосходящих m. Все числа внутри одной последовательности различны, но одно и то же число может встречаться в разных последовательностях. Длина i-й последовательности равна ki. Раз в секунду числа в каждой последовательности циклически сдвигаются на одну позицию влево, то есть числа на позициях i > 1 переходят на позиции i - 1, а первое число становится последним. Каждую секунду будем выписывать первое число каждой последовательности в новый массив. Для всех чисел 1 до m найдем самый длинный подотрезок этого массива, все элементы которого равны этому числу. Будем проделывать эту операцию на протяжении 10100 секунд. Для каждого числа от 1 до m определите самый длинный из подотрезков, найденных за это время. Выходные данные Выведите m чисел, i-е из которых равняется длине самого большого подотрезка, все числа в котором равны i и который встретился в выписываемом массиве за первые 10100 секунд.
| |
|
|
C. Трассировка луча
математика
реализация
теория чисел
*1800
жадные алгоритмы
сортировки
хэши
В прямоугольной комнате размером n на m метров расположено k датчиков, датчик номер i расположен в точке с координатами (xi, yi). Все датчики расположены в различных точках, находящихся строго внутри прямоугольника. Противоположные углы комнаты находятся в точках с координатами (0, 0) и (n, m). Стены комнаты расположены параллельно осям координат. В момент времени 0, из точки (0, 0) в направлении точки (1, 1) выпускается лазерный луч. Луч летит со скоростью метров в секунду. Таким образом, луч окажется в точке (1, 1) ровно через одну секунду после старта. При столкновении со стеной луч отражается по закону, что угол падения равен углу отражения. При попадании луча в любой из четырёх углов комнаты он останавливается. Определите для каждого датчика первый момент времени, когда луч пройдет сквозь точку, содержащую этот датчик. Для датчиков, через которые луч не пройдёт, выведите - 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 по всем интересным тройкам. Выходные данные Выведите единственное число, равное искомой сумме по модулю 109 + 7. Примечание В первом примере существует 6 интересных троек: - (1, 2, 1)
- (1, 3, 2)
- (1, 4, 3)
- (2, 3, 3)
- (2, 4, 2)
- (3, 4, 1)
Искомая сумма равна 1 + 2 + 3 + 3 + 2 + 1 = 12. В втором примере существует 12 интересных троек: - (1, 2, 1)
- (2, 3, 2)
- (1, 3, 3)
- (3, 4, 4)
- (2, 4, 6)
- (1, 4, 7)
- (1, 4, 8)
- (2, 4, 9)
- (3, 4, 11)
- (1, 3, 12)
- (2, 3, 13)
- (1, 2, 14)
Искомая сумма равна 1 + 2 + 3 + 4 + 6 + 7 + 8 + 9 + 11 + 12 + 13 + 14 = 90.
| |
|
|
E. Morrowindows
математика
теория чисел
*2400
Вася играет в The Elder Trolls III: Morrowindows. У него есть огромный список предметов в инвентаре, благо, ограничения на размер вещей нету. Сколько же всего предметов Вася не знает, но уверен, что их не больше чем x и не меньше, чем 2. В новом патче к игре появилась возможность просматривать инвентарь в n различных режимах. Отображение в режиме i представляет собой разбиение списка всех предметов инвентаря на страницы, на каждой из которых (кроме, может быть, последней) отображается ровно ai предметов. Кроме того, в каждом режиме показывается, сколько страниц bi занимает полный список. Прекрасно! Возможно, этой информации будет достаточно для Васи, чтобы найти заветное число. Более того, очень интересно, в каком наименьшем количестве режимов Васе придется просмотреть инвентарь, чтобы определить количество предметов в нем? Вася не может использовать информацию, полученную при просмотре одного режима, для выбора других режимов. Сначала Вася выбирает множество режимов, а затем просматривает инвентарь в этих режимах. Зная числа ai и x и предполагая, что Вася очень умный, установите, сможет ли он однозначно определить количество предметов в его инвентаре и за какое число просмотров он сможет это сделать, если он знает числа ai, x и может узнать число bi, посмотрев список в режиме i. Выходные данные Если Вася сможет однозначно определить количество предметов в инвентаре, то нужно вывести наименьшее возможное количество режимов, необходимых для этого. В противном случае следует вывести - 1. Примечание Во втором примере Вася не сможет определить количество предметов однозначно, поскольку как 3 предмета, так и 4 предмета будут отображаться на 2 страницах.
| |
|
|
F. Видеокарты
Перебор
Структуры данных
математика
реализация
теория чисел
*1900
Маленький Влад обожает играть в популярную игру Bota-2 на своем компьютере. На днях разработчики сообщили о выходе её продолжения под названием Bota-3. Разумеется, Влад тут же её приобрёл, но оказалось, что компьютер Влада слишком старый для этой игры, поэтому он отправился в магазин за обновлением для него. В магазине Влад увидел n видеокарт, i-я из которых имеет свою мощность ai, выражаемую целым положительным числом. Для того, чтобы игра точно заработала, Влад решил купить не одну, а несколько видеокарт и объединить их мощности по новейшей технологии. Для использования этой технологии одна из видеокарт выбирается в качестве ведущей, а все остальные видеокарты подключаются к ней в качестве вторичных. Для корректной работы этой конструкции необходимо, чтобы мощность каждой видеокарты была кратна мощности ведущей видеокарты. Для обеспечения совместимости мощность каждой вторичной видеокарты может быть понижена до любого меньшего целого положительного значения. При этом мощность опорной видеокарты должна оставаться оригинальной, то есть не может быть уменьшена. У Влада очень много денег, поэтому он может купить любые видеокарты. Помогите ему выбрать такие видеокарты, чтобы после необходимого понижения их мощностей и соединения их по новой технологии суммарная итоговая мощность видеокарт была максимальной. Выходные данные В единственной строке выведите целое число — максимальную возможную суммарную итоговую мощность видеокарт. Примечание В первом примере выгодно купить видеокарты с мощностями 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.
| |
|
|
B. Урбанизация
теория чисел
*1100
жадные алгоритмы
сортировки
Местные власти узнали о комбинаторных способностях Остапа Бендера и обратились к нему за помощью в вопросе урбанизации. Имеется n человек, которые хотят переехать жить в города. Состояние i-го из них равняется ai. Планируется построить два города и поселить в первый из них n1 человек, а во второй — n2 человек. Разумеется, каждый из n кандидатов может быть поселён не более, чем в один город. Таким образом, некоторое подмножество кандидатов размером n1 будут поселены в первый город, из оставшихся некоторое подмножество кандидатов размера n2 будут поселены во второй город, а остальным будет отказано в поселении. Для улучшения показателей региона в глазах вышестоящего начальства местные власти решили выбрать соответствующие подмножества кандидатов таким образом, чтобы сумма средних арифметических состояний жителей этих двух городов была максимальна. Средним арифметическим состояний жителей города называется сумма всех состояний ai жителей города, поделённая на количество жителей (n1 или n2 соответственно). Деление следует осуществлять в вещественных числах без каких-либо округлений. Помогите местным властям найти оптимальный способ заселить два города. Выходные данные Выведите одно вещественное число — максимально возможную сумму средних арифметических состояний жителей двух городов. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6. А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если . Примечание В первой примере одним из оптимальных решений будет поселить кандидата 1 в первый город, а кандидата 2 — во второй. Во втором примере оптимальным расселением будет назначить кандидатов 3 и 4 в первый город, а кандидата 2 — во второй. Получаем (a3 + a4) / 2 + a2 = (3 + 2) / 2 + 4 = 6.5
| |
|
|
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 на части оптимальным образом. Выходные данные Выведите одно целое число — минимальное количество денег, которое придется платить старику Фунту, если он разбил исходную сумму на части оптимальным образом.
| |
|
|
C. Бильярд на шахматной доске
*2100
теория чисел
поиск в глубину и подобное
графы
снм
Ход шахматной фигуры бильярдный шар похож на ход шахматной фигуры слон, с тем лишь различием, что при столкновении с границей доски бильярдный шар может от нее отразиться и продолжить движение. Более формально — сначала выбирается одно из четырех диагональных направлений и бильярдный шар движется в этом направлении. Попав на клетку, находящуюся на границе доски, бильярдный шар отражается от нее — изменяет направление своего движения на 90 градусов — и продолжает свое движение. В частности, попав в угловую клетку, бильярдный шар делает сразу 2 отражения и начинает двигаться в обратную сторону. В ходе своего движения бильярдный шар может сделать неограниченное число отражений. В любой клетке своей траектории шар может остановиться и на этом ход считается законченным. Считается, что один бильярдный шар a бьет другой бильярдный шар b если a может сходить в ту клетку, где находится b. Вам предлагается найти максимальное количество попарно не бьющих друг друга бильярдных шаров, которые можно разместить на шахматной доске размера n × m. Выходные данные Выведите одно число — максимальное возможное количество попарно не бьющих друг друга бильярдных шаров. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).
| |
|
|
A. Сложный экзамен Arpa и наивный чит Mehrdad
математика
*1000
реализация
теория чисел
Существует остров под названием страна Arpa, красивые девушки живут на нем. Mehrdad хочет стать министром страны Arpa. Arpa приготовил ему экзамен. Экзамен состоит из одной задачи: по заданному числу n определите последнюю цифру числа 1378n. Mehrdad озадачен и обратился за помощью к вам. Помогите ему! Выходные данные Выведите одно целое число — последнюю цифру числа 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 нужна ваша помощь в написании решения к этой задаче. Выходные данные Выведите одно целое число: ответ на задачу.
| |
|
|
C. Владик и дроби
Перебор
Конструктив
математика
*1500
теория чисел
Владик и Хлоя решили определить, кто из них лучше разбирается в математике. Владик заявил, что сможет для любого положительного целого n представить дробь вида в виде суммы трех попарно различных положительных дробей вида . Помогите Владику сделать это, то есть найти для заданного n три различных положительных целых числа x, y и z такие, что . Так как Хлоя не сможет проверить ответ Владика, если эти числа будут слишком большие, он просит вас вывести числа не превосходящие 109. Если подходящего ответа не существует, выведите -1. Выходные данные Если решение существует, выведите 3 различных целых числа x, y и z (1 ≤ x, y, z ≤ 109, x ≠ y, x ≠ z, y ≠ z). Иначе выведите -1. Если существует несколько решений, выведите любое из них.
| |
|
|
A. Задача Бахгольда
математика
реализация
теория чисел
жадные алгоритмы
*800
Задача Бахгольда формулируется очень просто. Дано целое положительное число n. Требуется представить его в виде суммы максимального количества простых слагаемых. Известно, что представление в виде суммы простых существует для всех целых положительных чисел, больших 1. Напомним, целое положительное число k называется простым, если оно больше 1 и у него ровно два целых положительных делителя — 1 и k. Выходные данные В первой строке выведите целое число k — максимально возможное количество простых слагаемых. В следующей строке выведите k чисел — сами простые слагаемые. Их сумма должна быть равна n. Числа можно выводить в любом порядке. Если оптимальных решений несколько, разрешается вывести любое из них.
| |
|
|
C. Модифицированный НОД
Бинарный поиск
*1600
теория чисел
Что ж, вот еще одна математическая задача. Как известно, НОД — наибольший общий делитель. Найти НОД двух положительных целых чисел несложно. Общий делитель двух положительных чисел — это число на которое делятся оба этих числа. Но Вам дана более сложная задача. Требуется найти наибольший общий делитель d двух целых чисел a и b, принадлежащий отрезку целых чисел [low, high] (low ≤ high), то есть такой, что low ≤ d ≤ high. Может получиться, что в заданном отрезке нет общих делителей. Даны два целых числа a и b, далее следует n запросов. Каждый запрос — это некоторый отрезок [low, high]. Напишите программу, которая обработает все заданные запросы. Выходные данные Выведите n строк, i-ая из них должна содержать ответ на i-ый запрос из входных данных. Если в данном отрезке общих делителей нет, выводите -1 в качестве ответа на запрос.
| |
|
|
A. Польшар и Гипотеза
Перебор
математика
теория чисел
графы
*800
Польшар — юный, умный шар. Он заинтересовался простыми числами. Он придумал следующую гипотезу: «Существует натуральное число n такое, что для любого натурального m число n·m + 1 является простым». К сожалению, Польшар еще неопытен и не знает, что его гипотеза неверна. Можете опровергнуть ее? Напишите программу, которая найдет контрпример для любого n. Выходные данные Выведите такое 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, враги все равно будут впечатлены. Выходные данные Выведите последовательность из k целых чисел. Число i должно быть равно искомому числу способов выбрать ровно i групп в соответствии с правилами Польшара. Примечание В первом примере можно разделить шары на группы следующим образом: {1}, {2}, {3}, {12}, {23}. {12}{3}, {1}{23}, {1}{2}, {1}{3}, {2}{3}. {1}{2}{3}. Поэтому нужно вывести 5 5 1.
| |
|
|
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. Выходные данные В единственной строке выведите остаток от деления числа, задаваемого выражением, на 109 + 7.
| |
|
|
B. Большой день для Баша
математика
теория чисел
*1400
жадные алгоритмы
Баш отправился в путешествие, чтобы стать величайшим мастером Покемонов. Чтобы получить первого покемона, он отправился в лабораторию профессора Зулу. Поскольку Баш — любимый студент профессора, Зулу разрешил ему взять столько покемонов из лаборатории, сколько Баш захочет. Однако, профессор предупрел Баша, что группа из k > 1 покемонов с силами {s1, s2, s3, ..., sk} склонна к драке между собой, если gcd(s1, s2, s3, ..., sk) = 1 (смотрите примечания для определения gcd). Баш, будучи умным студентом, не хочет, чтобы его покемоны дрались между собой. В то же время, он хочет максимизировать количество покемонов, которые он возьмет. Можете помочь Башу найти максимальное число покемонов, которых он может взять с собой? Обратите внимание: Один покемон не может драться сам с собой. Выходные данные Выведите одно число — максимальное число покемонов, которых Баш может взять. Примечание gcd (наибольший общий делитель) множества натуральных чисел {a1, a2, ..., an} равняется наибольшему натуральному числу, на которое делятся все числа {a1, a2, ..., an}. В первом примере Баш может взять покемонов с силами {2, 4}, потому что gcd(2, 4) = 2. Во втором примере Баш может взять покемонов с силами {2, 4, 6}, и не существует группы больше с gcd ≠ 1.
| |
|
|
E. Баш играет с функциями
Перебор
Комбинаторика
дп
теория чисел
*2500
Баш решил сделать перерыв в своем пути к становлению величайшим мастером покемонов, и поиграть с функциями. Баш определил функцию f0(n), которая равна числу способов разложить число n на два множителя p и q такие, что gcd(p, q) = 1. Другими словами, f0(n) — число упорядоченных пар натуральных чисел (p, q) таких, что p·q = n и gcd(p, q) = 1. Но Баш почувствовал, что эту функцию слишком просто посчитать. Поэтому он определил набор функций, где fr + 1 определена как:  где (u, v) — упорядоченная пара натуральных чисел, при этом они не обязательно взаимно простые. Теперь Баш хочет узнать некоторые значения fr(n) для различных r и n. Так как эти значения могут быть большими, он хочет узнать остаток от деления этих значений на 109 + 7. Помогите ему! Выходные данные Выведите q чисел. Для каждой данной пары r и n выведите остаток от деления fr(n) на 109 + 7 на отдельной строке.
| |
|
|
B. Сломанная гирлянда
Перебор
реализация
теория чисел
*1100
Ничто не вечно в этом мире, понял Костя утром 7-го января, увидев частично перегоревшую четырехцветную гирлянду. Он сразу задался целью заменить сломанные лампочки, однако он не знает сколько лампочек каждого цвета требуется. Гарантируется, что для каждого из четырех цветов хотя бы одна лампочка осталась рабочей. Известно, что гирлянда состоит из лампочек четырёх цветов: красного, синего, жёлтого и зелёного. Гирлянда сделана следующим образом: если вы возьмёте четыре любые подряд идущие лампочки, то среди них нет лампочек одинакового цвета. Например, гирлянда может иметь вид «RYBGRYBGRY», «YBGRYBGRYBG», «BGRYB», но не может «BGRYG», «YBGRYBYGR» или «BGYBGY». Буквы обозначают цвета: 'R' — красный, 'B' — синий, 'Y' — жёлтый, 'G' — зелёный. Используя то, что для каждого цвета хотя бы одна лампочка всё еще горит, посчитайте количество перегоревших лампочек каждого из четырёх цветов. Выходные данные В единственную строку выходных данных выведите четыре целых числа kr, kb, ky, kg — количество перегоревших лампочек красного, синего, жёлтого и зелёного цветов соответственно. Примечание В первом тесте из примеров нет перегоревших лампочек. Во втором примере очевидно, что перегорела одна синяя лампочка, так как лампочки другого цвета на её месте не могло быть по условию.
| |
|
|
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. Выходные данные Выведите одно целое число 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.
Возможные прогрессии для четвёртого теста из примеров:
| |
|
|
A. k-й делитель
математика
теория чисел
*1400
Даны два натуральных числа n и k. Найдите k-й в порядке возрастания делитель числа n, либо сообщите, что его не существует. Делителем числа n является любое натуральное число, на которое число n делится без остатка. Выходные данные Если у числа 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. Выходные данные Выведите -1, если невозможно переставить элементы последовательности так, чтобы она стала арифметической прогрессией по модулю m. Иначе, выведите два целых числа — первый элемент получившейся прогрессии x (0 ≤ x < m) и ее разницу d (0 ≤ d < m). Если ответов несколько, выведите любой.
| |
|
|
G. МАТЕМАТNКА
Перебор
математика
дп
теория чисел
meet-in-the-middle
*3200
Если вы дошли до этой задачи, вы всё равно вряд ли станете читать легенду... Вам дана бинарная строка и целое число . Найдите количество целых k, 0 ≤ k < N, таких что для всех i = 0, 1, ..., m - 1  Выведите ответ по модулю 109 + 7. Выходные данные Едиственное число — ответ на задачу.
| |
|
|
B. Махмуд и треугольник
Конструктив
математика
*1000
геометрия
теория чисел
жадные алгоритмы
сортировки
У Махмуда есть n отрезков, i-й из них имеет длину ai. Ехаб поспорил с ним, сможет ли он использовать ровно 3 отрезка для того, чтобы составить из них невырожеднный треугольник. Махмуд никогда не спорит, если не уверен, что может выиграть, поэтому он спросил вас, должен ли он принять этот вызов или нет. Вам даны длины отрезков, проверьте, можно ли выбрать ровно 3 из них, чтобы составить невырожденный треугольник. Махмуд должен использовать ровно 3 отрезка, он не может составить отрезок из двух или изменять какие-либо длины. Невырожденным считается треугольник с положительной площадью. Выходные данные В единственной строке выведите «YES», если можно выбрать ровно три отрезка и составить из них невырожденный треугольник, и «NO» иначе. Примечание В первом примере Махмуд может выбрать отрезки с длинами 2, 4 и 5 и составить из них невырожденный треугольник.
| |
|
|
F. Бочки и коробки
Перебор
Теория вероятностей
Комбинаторика
математика
теория чисел
*2300
Тарли имеет два различных типа предметов, коробки еды и бочки вина. Есть f коробок с едой и w бочек вина. Тарли хранит их в разных стеках, и каждый стек может содержать только либо коробки еды, либо бочки вина, но не оба типа предметов сразу. Стеки расположены в ряд так, что нет двух стеков еды рядом, и нет двух стеков вина рядом. Высота стека определена, как количество предметов в стеке. Два стека различны, если их высоты различны или один стек содержит еду, а другой вино. Джону Сноу не нравится когда, какой-нибудь стек с вином имеет высоту меньше либо равную h. Какова вероятность, что Джону Сноу понравится расстановка в стеки, если все расстановки равновероятны? Две расстановки стеков считаются разными, если существует такое i, что i-й стек одной расстановки не равен i-у стеку другой расстановки. Выходные данные Выведите вероятность того, что Джон Сноу понравится расстановка. Вероятность этого имеет форму , вам необходимо вывести единственное целое число равное p·q - 1 mod (109 + 7). Примечание В первом тестовом примере f = 1, w = 1 и h = 1, здесь две возможных расстановки, и ни одна из них не нравится Джону Сноу. Во втором тестовом примере f = 1, w = 2 и h = 1, здесь три возможных расстановки. Джону нравятся расстановки (1) и (3). Поэтому вероятность равна .
| |
|
|
C. Возмутительный Контраст
Конструктив
математика
дп
теория чисел
графы
*2300
Вам дано целое число m, а также список из n различных целых чисел от 0 до m - 1. Вы хотите построить последовательность, удовлетворяющую следующим требованиям: - Каждый элемент последовательности — целое число от 0 до m - 1, включительно.
- Все префиксные произведения (то есть, произведения положительного числа первых элементов последовательности) различны по модулю m.
- Никакое префиксное произведение по модулю m не является элементом заданного списка.
- Длина последовательности максимально возможна.
Постройте любую последовательность, удовлетворяющую описанным свойствам. Выходные данные В первой строке выведите число k — длину построенной последовательности. Во второй строке выведите k целых чисел — вашу последовательность. Примечание В первом примере префиксные произведения построенной последовательности по модулю m равны [1, 2, 3, 4, 0]. Во втором примере префиксные произведения построенной последовательности по модулю m равны [3, 7, 4, 6, 8, 0].
| |
|
|
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. Выходные данные Выведите единственное число — количество удовлетворяющих ограничениям тестов, на которых оба приведенных неверных решения выдают ответ, отличающийся от правильного, по модулю q. Примечание В первом примере интересные тесты выглядят следующим образом: 1 1 1 3 2 4 6 2 4 6
| |
|
|
E. Большое число и остаток
математика
теория чисел
*особая задача
*2300
У Степана есть большое целое положительное число. Рассмотрим все циклические сдвиги числа, если рассматривать его как строку, которые также являются числами (то есть не начинаются с нуля). Будем называть такие циклические сдвиги хорошими. Например, для числа 10203 хорошими циклическими сдвигами являются само число 10203, а также числа 20310 и 31020. Степану стало интересно, какой наименьший остаток от деления на заданное число m можно получить, поделив на m все хорошие циклические сдвиги заданного числа. Выходные данные Выведите искомый наименьший остаток от деления на число m всех хороших циклических сдвигов заданного числа. Примечание В первом примере все хорошие циклические сдвиги числа 521 (они равны 521, 215, 152) дают одинаковый остаток 2 при делении на 3. Во втором примере для заданного числа есть только два хороших циклических сдвига: на ноль позиций и на одну позицию вправо. Сдвиг на ноль позиций равен 1001 и остаток от деления на 5 равен 1, а сдвиг на одну позицию вправо равен 1100 и остаток от деления на 5 равен 0, который является минимальным возможным остатком.
| |
|
|
F. Ручки и дни недели
Бинарный поиск
теория чисел
*особая задача
*2700
У Степана есть n ручек. Каждый день он пользуется ими, причём в i-й день он использует ручку номер i. В (n + 1)-й день он вновь использует ручку номер 1, в (n + 2)-й — ручку номер 2 и так далее. Каждый рабочий день (с понедельника до субботы, включительно) Степан расходует ровно 1 миллилитр чернил той ручки, которой пользуется в этот день. В воскресенье у Степана выходной, поэтому он совсем не тратит чернил ручки, которую использует в этот день. Степан знает, сколько миллилитров чернил в каждой из его ручек. Сегодня начало понедельника и Степан будет использовать в этот день ручку номер 1. Перед вами стоит задача определить номер ручки, которая закончится раньше всех (то есть в ней не останется чернил), если Степан будет использовать ручки согласно условиям, описанным выше. Выходные данные Выведите номер ручки, которая закончится раньше всех (то есть в ней не останется чернил), если Степан будет использовать ручки согласно описанным условиям. Ручки нумеруются в том же порядке, в котором заданы во входных данных. Нумерация начинается с единицы. Обратите внимание, что ответ всегда однозначен, так как несколько ручек не могут закончиться одновременно. Примечание В первом примере расходование чернил в ручках выглядит следующим образом: - в день номер 1 (понедельник) Степан будет использовать ручку номер 1, после чего в ней останется 2 миллилитра чернил;
- в день номер 2 (вторник) Степан будет использовать ручку номер 2, после чего в ней останется 2 миллилитра чернил;
- в день номер 3 (среда) Степан будет использовать ручку номер 3, после чего в ней останется 2 миллилитра чернил;
- в день номер 4 (четверг) Степан будет использовать ручку номер 1, после чего в ней останется 1 миллилитр чернил;
- в день номер 5 (пятница) Степан будет использовать ручку номер 2, после чего в ней останется 1 миллилитр чернил;
- в день номер 6 (суббота) Степан будет использовать ручку номер 3, после чего в ней останется 1 миллилитр чернил;
- в день номер 7 (воскресенье) Степан будет использовать ручку номер 1, но так как это выходной, в этот день он не потратит чернил этой ручки;
- в день номер 8 (понедельник) Степан будет использовать ручку номер 2, после чего в ней не останется чернил, то есть она закончится.
Поэтому, первой ручкой, в которой не останется чернил, является ручка номер 2.
| |
|
|
G. Перфекционист Аркадий
теория чисел
*особая задача
*2700
У Аркадия есть много квадратных фотографий размера a × a. Он хочет развесить некоторые из них на прямоугольную стену в своей комнате, которая имеет размер h × w. Все фотографии, которые он повесит на стену, должны образовывать прямоугольную сетку, а расстояния между соседними по вертикали и горизонтали фотографиями, а также, расстояния между крайними рядами и столбцами фотографий до ближайшего конца стены, должны быть равны x, где x — это какое-то неотрицательное вещественное число. Ознакомьтесь с рисунком для лучшего понимания условия. Аркадий еще не выбрал сколько фотографий он повесит на стену, однако он хочет повесить хотя бы одну фотографию. Перед вами стоит задача определить минимальное значение x, которое может быть получено после развешивания фотографий, либо сообщить, что невозможно повесить положительное число фотографий так, чтобы удовлетворить всем условиям. Считайте, что количество фотографий, которые есть у Аркадия, достаточно для любого их корректного развешивания, согласно описанным условиям. Обратите внимание, что Аркадий обязательно хочет повесить хотя бы одну фотографию. Те фотографии, которые будут повешены на стену, не должны накладываться друг на друга, выходить за пределы стены, а их стороны должны быть параллельны сторонам стены. Выходные данные Выведите одно неотрицательное вещественное число — минимальное значение x, которое может быть получено после развешивания фотографий. Абсолютная или относительная погрешность ответа не должна превышать 10 - 6. Если невозможно повесить положительное число фотографий так, чтобы удовлетворить всем условиям, выведите -1. Примечание В первом примере можно повесить 7 рядов из фотографий по 5 фотографий в каждом, поэтому искомое x будет равно 0.5. Во втором примере можно повесить только 1 фотографию, которая займет всю стену целиком, поэтому искомое x будет равно 0. В третьем примере невозможно повесить положительное число фотографий так, чтобы удовлетворить всем условиям, поэтому ответ -1.
| |
|
|
B. Шерлок и его девушка
Конструктив
теория чисел
*1200
У Шерлока новая девушка (так необычно для него!). Приближается День Святого Валентина, и он хочет подарить ей украшения. Шерлок купил n украшений. Цена i-го украшения равняется i + 1, то есть цены украшений равны 2, 3, 4, ... n + 1. Ватсон поставил перед Шерлоком задачу раскрасить эти украшения так, чтобы два украшения имели разный цвет, если цена одного из них является простым делителем цены другого. Кроме того, Ватсон хочет, чтобы Шерлок использовал как можно меньше различных цветов. Помогите Шерлоку выполнить это простейшую задачу. Выходные данные В первую строку выведите одно целое число k — минимальное число цветов, которое необходимо использовать. Во вторую строку выведите n целых чисел (в диапазоне от 1 до k), которые задают цвета каждого украшения в порядке увеличения цены. Если есть несколько способов раскрасить украшения используя k цветов, выведите любой из них. Примечание В первом примере мы раскрасили украшения с ценой 2, 3 и 4 в цвета 1, 1, и 2 соответственно. Т. к. 2 является простым делителем 4, то цвета украшений с ценами 2 и 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. Выходные данные Выведите одно целое число — значение 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.
| |
|
|
C. Игра для бобров
дп
теория чисел
*2000
игры
Бобры Тимур и Марсель играют в следующую игру. Имеются n бревен, каждое длиной ровно m метров. Бобры делают ходы по очереди. За свой ход бобер выбирает одно из бревен и разгрызает его на некоторое количество (больше одной) равных частей, длина каждой из которых выражается целым числом и не меньше k метров. Каждая получившаяся часть в свою очередь тоже является бревном, которое в дальнейшем может быть разгрызено любым бобром. Проигрывает бобер, который не может сделать ход. Другой бобер, соответственно, выигрывает. Тимур ходит первым. Игроки играют оптимально. Определите победителя. Выходные данные Выведите «Timur», если выигрывает Тимур или «Marsel», если выигрывает Марсель. Все нужно выводить без кавычек. Примечание В первом примере у бобров имеется только одно бревно, длина которого 15 метров. Тимур ходит первым. Единственный ход, который он может сделать — это разгрызть бревно на 3 части длиною 5 метров каждая. После этого ход Марселя, но он уже не может разгрызть ни одно из оставшихся бревен, так как k = 4. Поэтому победителем является Тимур. Во втором примере у бобров имеется 4 бревна длины 9 метров. Тимур не может разгрызть ни одно из них, так чтобы оставшиеся части имели длину не меньше 5 метров, поэтому сразу проигрывает.
| |
|
|
D. Антон и школа - 2
Комбинаторика
математика
дп
теория чисел
*2300
Как вы уже, наверное, знаете, Антон учится в школе. Один из школьных предметов, который изучает Антон — скобкология. На уроках скобкологии школьники обычно изучают всякие последовательности, состоящие только из круглых скобок (символов «(» и «)» (без кавычек)). На прошлом уроке Антон изучал правильные простые скобочные последовательности (ППСП). Скобочная последовательность s длины n является ППСП, если соблюдаются следующие условия: - Она не является пустой (то есть n ≠ 0).
- Длина последовательности четна.
- Первые
символов последовательности равны «(». - Последние
символов последовательности равны «)». Например, последовательность «((()))» является ППСП, а вот последовательности «((())» и «(()())» — нет. На дом учитель Антона, Елена Ивановна, задала Антону такую задачу. Дана некоторая скобочная последовательность s. Необходимо найти количество ее различных подпоследовательностей таких, что они являются ППСП. Напомним, что подпоследовательностью строки s называется такая строка, которая была получена вычеркиванием из s некоторых символов. Две подпоследовательности считаются различными, если множества позиций вычеркнутых символов различаются. Так как ответ может быть очень большим, а учителю Антона не нравятся большие числа, то она просит Антона найти ответ по модулю 109 + 7. Антон долго думал над этой задачей, однако так и не придумал, как ее решить. Помогите Антону решить эту задачу и напишите программу, которая находит ответ на нее! Выходные данные Выведите одно целое число — ответ на задачу по модулю 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, .... Монстр поймает их, если в какой-то момент времени они закричат одновременно. Так что он хочет знать, когда он поймает их (первый момент времени, когда они закричат одновременно) или они никогда не закричат одновременно. Выходные данные Выведите первый момент времени, когда Рик и Морти закричат одновременно, или - 1, если они никогда не закричат одновременно. Примечание В первом тестовом примере 5-й крик Рика и 8-й крик Морти произойдут в момент времени 82. Во втором тестовом примере все крики Рика будут в нечетные моменты времени и все крики Морти будут в четные моменты времени, поэтому они никогда не закричат одновременно.
| |
|
|
C. Поделись на три!
математика
дп
теория чисел
*2000
жадные алгоритмы
На доске записано целое положительное число n, не содержащее лишних лидирующих нулей и состоящее не более чем из 105 цифр. Необходимо стереть минимальное количество цифр таким образом, чтобы получить красивое число. Число называется красивым, если оно записано так, что содержит хотя бы одну цифру, не содержит лишних лидирующих нулей и число делится нацело на 3. Например, 0, 99, 10110 — красивые, а 00, 03, 122 — не являются красивыми. Напишите программу, которая по заданному числу n найдет такое красивое число, которое можно получить из заданного путем вычеркивания минимального количества цифр, или сообщит, что ответа не существует. Вычеркивать из n можно произвольный набор цифр, например, эти цифры не обязаны идти подряд. Если невозможно получить какое-либо красивое число, то выведите -1. Если ответов несколько, то выведите любой. Выходные данные Выведите единственное число — любое красивое число, полученное вычеркиванием минимального количества цифр. Если ответ не существует, то выведите - 1. Примечание В первом примере для получения числа, которое делится нацело на 3, достаточно удалить только первую цифру. Однако тогда в числе будет присутствовать лишний лидирующий ноль, который недопустим. Следовательно, минимальное количество цифр, которые надо стереть, равно двум.
| |
|
|
E. Разноцветные шары
математика
теория чисел
жадные алгоритмы
*2500
На столе стоят n коробок с разноцветными шарами. Цвета пронумерованы от 1 до n. В i-й коробке лежит ai шаров i-го цвета. Требуется разбить шары на минимальное количество наборов таких, что: - каждый шар принадлежит ровно одному набору,
- каждому набору принадлежит хотя бы один шар,
- в каждом наборе все шары одного цвета,
- размеры любых двух наборов отличаются не более чем на 1.
Выведите искомое минимальное количество наборов. Выходные данные Выведите одно число — минимальное возможное количество наборов. Примечание В первом примере можно разбить шары на следующие наборы: первую коробку — на набор из 4 шаров, вторую — на наборы из 3 и 4 шаров и третью — на два набора из 4 шаров.
| |
|
|
A. k-Факторизация
математика
реализация
теория чисел
*1100
Дано натуральное число n. Необходимо разложить его ровно на k чисел, таких, что все числа строго больше 1, а их произведение равно n, либо сообщить о том, что это невозможно. Выходные данные Если разложить n на k множителей невозможно, выведите -1. Иначе выведите k натуральных чисел, таких, что их произведение в точности равно n. Числа можно выводить в любом порядке. Если возможных ответов несколько, выведите любой из них.
| |
|
|
C. Майк и GCD
дп
теория чисел
жадные алгоритмы
*1700
У Майка есть последовательность A = [a1, a2, ..., an] длины n. Он считает последовательность B = [b1, b2, ..., bn] красивой, если gcd всех её элементов больше чем 1, то есть . Майк хочет изменить последовательность, чтобы сделать её красивой. За один ход он может выбрать позицию i (1 ≤ i < n), удалить числа ai, ai + 1 и вставить числа ai - ai + 1, ai + ai + 1 на их место в таком порядке. Он хочет сделать как можно меньше ходов. Найдите минимальное количество ходов, которое необходимо сделать, чтобы последовательность A стала красивой, иначе сообщите ему, что это невозможно. — наибольшее натуральное число d, такое что d делит bi для всех i (1 ≤ i ≤ n).
Выходные данные В первой строке выведите «YES» (без кавычек), если возможно последовательность A сделать красивой, выполнением ходов, описанных выше. Или выведите «NO» (без кавычек) иначе. Если выведенный ответ был «YES», тогда выведите минимальное количество ходов необходимое для того, чтобы сделать последовательность A красивой. Примечание В первом тестовом примере достаточно сделать только один ход, чтобы получить последовательность [0, 2] с . Во втором тестовом примере gcd последовательности изначальное больше чем 1.
| |
|
|
F. Взаимно простые подпоследовательности
Комбинаторика
теория чисел
*2000
битмаски
Назовём непустую последовательность натуральных чисел a1, a2... ak взаимно простой, если наибольший общий делитель всех элементов последовательности равен 1. Дан массив a, состоящий из n натуральных чисел. Найдите количество его взаимно простых подпоследовательностей. Так как ответ может быть очень большим, выведите его по модулю 109 + 7. Обратите внимание: две подпоследовательности считаются различными, если различны выбранные индексы. К примеру, в массиве [1, 1] 3 различных подпоследовательности: [1], [1] и [1, 1]. Выходные данные Выведите единственное число — количество взаимно простых подпоследовательностей a по модулю 109 + 7. Примечание В первом примере взаимно простыми являются следующие подпоследовательности: - 1
- 1, 2
- 1, 3
- 1, 2, 3
- 2, 3
Во втором примере все подпоследовательности являются взаимно простыми.
| |
|
|
F. Фальшивые слитки
Комбинаторика
дп
теория чисел
поиск в глубину и подобное
графы
*3400
В Исарте люди живут вечно. Среди них есть n банд злоумышленников. В i-й банде состоят si человек, пронумерованных от 0 до si - 1. Некоторые из них однажды приняли участие в большом ограблении шахты и украли каждый по одному золотому слитку (эти люди заданы во входных данных). Это произошло 10100 лет назад и с тех пор все банды уехали далеко от городов. Все эти годы бандиты копировали некоторые золотые слитки в соответствии с определенным планом, чтобы не быть пойманными. Они построили ориентированный граф-турнир (то есть граф, в котором между каждой парой вершин есть одно направленное ребро), вершины в котором — банды (граф задан во входных данных). В этом графе ребро из вершины u в вершину v означало, что в i-й час человек номер из банды u может послать фальшивый слиток человеку номер из банды v. Он посылает слиток, только если у него есть какой-то слиток (настоящий или фальшивый), а у получателя нет слитков. Таким образом, в каждый момент времени каждый бандит имел один или ноль слитков. Некоторые из бандитов имели настоящие слитки, некоторые — фальшивые. В начале этого года полиции удалось найти банды, но, как всегда, поймать их она пока не может. Полиция решила открыть ювелирный магазин, чтобы бандиты попытались продать слитки. Теперь каждый бандит, у которого есть слиток (подлинный или фальшивый), попробует его продать. Если слиток подлинный, то он его без проблем продаст, а если фальшивый, то может случиться одна из двух ситуаций: - Бандит успешно продаст слиток.
- Бандит будет арестован полицией.
Сила банды равна числу бандитов, которые успешно продали свой слиток. После того, как все продажи завершены, полиция арестует b банд из самых сильных. Банда с силой p состоит в самых сильных бандах, если и только если не более чем a - 1 банда имеет силу строго больше p. Рассмотрим всевозможные результаты продажи фальшивых слитков и всевозможные способы выбрать b банд из самых сильных банд. Подсчитайте, сколько различных множеств могут образовать эти b банд по модулю 109 + 7. Два множества X и Y считаются различными, если некоторая банда есть в X, но ее нет в Y. Выходные данные Выведите одно число: количество различных множеств из b банд, которые полиция может арестовать по модулю 109 + 7.
| |
|
|
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 в надежде хоть как-то удивить девушку. Леха просит вас помочь ему посчитать искомое математическое ожидание. Пусть данное значение представимо в виде несократимой дроби . Чтобы еще больше удивить Нуру, он хочет назвать ей значение . Помогите Лехе! Выходные данные В единственной строке выведите число, равное 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·a2)·d(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·a3)·d(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·a3)·d(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 .
| |
|
|
A. Поиск сокровищ
математика
реализация
теория чисел
*1200
Капитан Билл Колибри и его команда получили интересное предложение об испытании. Незнакомец вручил им карту, зелье перемещения и сообщил, что, только используя данный зелье, они смогут добраться до сокровища. На бутылке с зельем написаны два значения x и y. Они определяют четыре шага, которые можно совершить с данным зельем: Карта указывает, что позиция Капитана Билла Колибри — (x1, y1), а позиция сокровища — (x2, y2). Помогите Капитану Биллу Колибри с выбором, принимать предложение или нет. Если Капитан может добраться до сокровища с этим зельем, то выведите "YES", иначе — "NO" (без кавычек). Зелье можно использовать бесконечное количество раз. Выходные данные Выведите "YES", если Капитан может добраться до сокровища, используя только данное зелье. Иначе выведите "NO" (без кавычек). Примечание В первом примере можно применить такие шаги: -
— первый тип шага -
— третий тип шага
| |
|
|
E. И снова карточная игра
Бинарный поиск
Структуры данных
теория чисел
*1900
Вова опять пытается играть в одну компьютерную карточную игру. Правила создания колоды в этой игре очень просты. Изначально Вова получает колоду из n карт, а также магическое число k. Порядок карт в колоде строго фиксирован, нельзя её перемешивать. На картах записаны числа: ai — число на i-й карте в колоде, которую получает Вова. После этого Вова убирает x (возможно, что x = 0) первых карт из начала колоды и y (возможно, y = 0) карт из конца, и оставшиеся карты составляют колоду Вовы (хотя бы одна карта должна остаться). То есть новая колода Вовы включает в себя карты, которые были на позициях x + 1, x + 2, ... n - y - 1, n - y в колоде, которую он получил. Новая колода считается правильной тогда и только тогда, когда произведение чисел, записанных на всех картах новой колоды, делится на k нацело. Итак, Вова получил колоду (не обязательно правильную) и число k, и теперь он хочет знать, сколько существует различных способов выбрать x и y так, что колода, полученная после удаления x карт из начала и y карт из конца, является правильной? Выходные данные Выведите кол-во способов выбрать x и y так, чтобы новая колода Вовы была правильной. Примечание В первом примере возможные значения x и y — следующие: - x = 0, y = 0;
- x = 1, y = 0;
- x = 2, y = 0;
- x = 0, y = 1.
| |
|
|
C. Мистер Б и маяки на поле
теория чисел
*2900
Мистер Б живет в домике посередине огромного плоского поля, и так случилось, что оно заинтересовало инопланетную жизнь. Для удобства инопланетяне определили декартову систему координат таким образом, что домик Мистера Б находится в точке (0, 0). Далее они сбросили систему из трех сигнальных маяков, но не все пошло по плану. Один маяк полостью сгорел в атмосфере, а два другие приземлились в координатах (m, 0) и (0, n), но сломались и отключились. Мистера Б заинтересовали необычные устройства и он решил приволочь их к себе домой для более детального осмотра. Он пришел за первым маяком, находящемся в (m, 0), взял его и понес к себе домой по кратчайшему пути, потом он пришел за вторым, находящемся в (0, n), и сделал то же самое. При этом, подняв первый маяк, он активировал навигационную систему. Система, будучи поврежденной, начала работать следующим образом. В моменты времени, когда оба уцелевших маяка находятся в точках с целочисленными координатами, система пробует найти положение для третьего маяка. Это удается, если существует такая точка с целочисленными координатами, что площадь треугольника, образованного двумя маяками и этой точкой, равна в точности s. В таком случае система посылает пакет информации с координатами маяков инопланетянам, иначе — нет. Посчитайте, сколько пакетов информации было послано системой инопланетянам в процессе передвижения маяков. Выходные данные Выведите t чисел по одному в каждой строке — ответы на каждый тестовый случай. Примечание В первом тестовом случае изначальные позиции маяков следующие: (2, 0) и (0, 2), s = 3. Могли быть посланы следующие пакеты вида (b1, b2, p), где b1 — позиция первого маяка, b2 — позиция второго маяка, p — некоторая третья точка: ((2, 0), (0, 2), ( - 1, 0)), ((1, 0), (0, 2), (4, 0)), ((0, 0), (0, 2), (3, 1)), ((0, 0), (0, 1), ( - 6, 0)) Во втором тестовом случае изначальные позиции маяков следующие: (4, 0) и (0, 5), s = 2. Могли быть посланы следующие пакеты: ((4, 0), (0, 5), (0, 4)), ((3, 0), (0, 5), (2, 3)), ((2, 0), (0, 5), (2, 2)), ((1, 0), (0, 5), (1, 4)), ((0, 0), (0, 4), (0, - 1)), ((0, 0), (0, 2), (2, 0)), ((0, 0), (0, 1), (4, 0)).
| |
|
|
D. Мистер Б и астрономы
теория чисел
*2900
После изучения изучения маяков Мистер Б загорелся желанием самому отправиться на планету инопланетян, ведь он узнал про них очень важную информацию: они живут в системе с мерцающей звездой, названной Луной. Более того, Мистеру Б стало известно, что данная звезда мерцает раз в T секунд. Но вот незадача: ученые еще не открыли данную звезду, хотя во всю стараются решить данную проблему. Над поиском данной звезды бьются n астрономов, пронумерованных от 1 до n и наблюдающих за ней посредством отправки запросов на съемку неба. Каждый запрос есть запись неба в течение 1 секунды. Астрономы посылают запросы по циклу: i-й астроном посылает запрос через ai секунд после (i - 1)-го (если предыдущий запрос послан в момент t, то текущий — в t + ai); 1-й астроном посылает запрос через a1 секунд после n-го. Можно считать, что первый запрос отправлен в момент времени 0 первым астрономом. Первый момент вспышки звезды неизвестен, но очевидно, что все моменты вспышки звезды однозначно определяются ее моментом вспышки в отрезке [0, T). Более того, данный интервал можно разбить на T частей длиной по 1 секунде вида [t, t + 1), где t = 0, 1, 2, ..., (T - 1). Астроном, открывший Луну, будет крайне занят, а потому Мистеру Б надо уже сейчас знать оценку успешности каждого астронома. Для каждого астронома посчитайте, сколько существует интервалов [t, t + 1) (t = 0, 1, 2, ..., (T - 1)) в интервале [0, T) таких, что данный астроном первым обнаружит Луну, если первая вспышка звезды произойдет в этом интервале. Выходные данные Выведите n целых чисел через пробел: для каждого астронома количество описанных выше отрезков времени. Примечание В первом примере первый астроном будет посылать запросы в моменты t1 = 0, 5, 10, ..., второй — в моменты t2 = 3, 8, 13, .... Поэтому интервал [0, 1) первым изучит 1-й астроном в момент t1 = 0, [1, 2) — 1-й астроном в момент t1 = 5, [2, 3) — 1-й астроном в момент t1 = 10, а [3, 4) — 2-й астроном в момент t2 = 3. Во втором примере интервал [0, 1) — 1-й астроном, [1, 2) — 2-й астроном, [2, 3) — 3-й астроном, [3, 4) — 4-й астроном, [4, 5) — 1-й астроном.
| |
|
|
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!. Примечание Рассмотрим пример. 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. Если Нура сможет посчитать значение этого выражения, организаторы обещают ей помощь в ходе конкурса красоты. Но бедная девушка не сильна в математике, поэтому за помощью она обратилась к Лехе, а тот — прямиком к вам. Выходные данные Выведите единственное число — значение искомого выражения по модулю 109 + 7. Примечание Рассмотрим пример. Необходимо найти значение . f(2) = 1. Из двух девушек можно составить только одну группу из двух человек, в которой произойдет одно сравнение. f(3) = 3. Из трех девушек можно составить только одну группу из трех человек, в которой произойдет три сравнения. f(4) = 3. Четырех девушек можно разбить на две группы по две девушки в каждой. Тогда на первом этапе произойдет два сравнения, по одному в каждой из двух групп. Во второй этап выйдут две девушки, между которыми произойдёт ещё одно сравнение. Итого 2 + 1 = 3. Можно также в первом этапе оставить всех девушек в одной группе. Тогда произойдет сравнений. Очевидно, что лучше разбивать девушек на группы первым способом. Тогда значение выражения это .
| |
|
|
D. Числа
математика
дп
теория чисел
*2400
В один из самых обыкновенных будних дней Валера пошел в школу (а куда же еще ему идти), где на уроке математики его любимая учительница Валерия Валерьевна рассказывала ученикам про делители. Несмотря на то, что Валера любил математику, эта тема его не слишком заинтересовала. Даже более того, она показалась ему настолько скучной, что он уснул прямо посреди урока. И только громкий звук звонка смог прервать его сладкий сон. Разумеется, ценный материал и объяснения учительницы были упущены. Однако домашнее задание Валере, так или иначе, сделать придется. Поскольку он абсолютно не знает нового материала, сделать задание сам он не в состоянии. Поэтому он и обратился к Вам за помощью. Вы ведь все-таки его лучший друг и просто не можете отказать в помощи. В домашнем задании Валеры всего лишь одна задача, которая хоть и формулируется очень просто, но имеет совсем не тривиальное решение. Её условие выглядит следующим образом: если рассмотреть все натуральные числа в отрезке [a;b], то требуется посчитать количество таких чисел из этого отрезка, что их наименьшим делителем будет являться некоторое число k (делитель равный единице учитывать не надо). Другими словами, необходимо посчитать количество таких чисел из отрезка [a;b], что они не делятся ни на одно число от 2 до k - 1, однако делятся на k. Выходные данные В единственной строке выведете ответ на поставленную задачу. Примечание Комментарии к примерам из условия: В первом примере ответом являются числа 2, 4, 6, 8, 10. Во втором - 15, 21. В третьем такие числа отсутствуют.
| |
|
|
A. Игра, не имеющая смысла
математика
теория чисел
*1700
Сластена и ее верный пес Пушок играют в крайне интересную, но совершенно не имеющую смысла игру. Игра состоит из множества партий. Правила ее очень просты: в каждом раунде выбирается некоторое натуральное число k, и тот кто его быстрее выкрикнет (или пролает, в зависимости от участника), выиграет этот раунд. После этого количество очков победителя увеличивается в k2 раз, а число очков его оппонента — в k раз. В начале любой игры Сластена и Пушок обладают одинаковым числом очков, равным единице. К сожалению, Сластена потеряла свой блокнот, где содержалась информация обо всех партиях всех n прошедших игр, а смутно запомнить она сумела лишь окончательные результаты. Помогите Сластене для каждой игры проверить правдивость ее воспоминаний, а именно, скажите, могла ли состояться игра, в которой оба участника набрали заданное число очков. Выходные данные На каждый вопрос выведите одно слово «Yes», если игра с таким результатом возможна, и «No» в противном случае. Вы можете выводить каждую из букв в любом регистре (строчную или заглавную). Примечание Первая игра могла состоять из одного раунда, в котором было выбрано число 2, пролаянное Пушком. Во второй же игре необходимо ровно два раунда, в первом из которых Сластена могла назвать число 5, а во втором — Пушок пролаять число 3.
| |
|
|
D. Рассадка в самолете
математика
теория чисел
*2700
В самолете есть n рядов от кабины до хвоста, в каждом ряду — одно место. На самолет сядут m человек. В самолете есть вход в начала перед всеми рядами, а также есть вход в конце после всех рядов. У каждого человека есть место. Возможно, что у нескольких людей места совпадают. Люди будут садиться на борт по одному, начиная с человека 1. Каждый человек независимо войдет либо через передний вход, либо через задний. Когда человек входит в самолет, он пройдет сразу к своему месту. Затем, пока место, около которого он стоит, занято, он будет проходить на одно место в том же направлении. Пассажир разозлится, если он дойдет до конца ряда (т.е. до противоположного входа), так и не найдя свободного места. Найдите число способов назначить каждому пассажиру место и выполнить посадку так, чтобы никто не разозлился. Два способа считаются различными, если есть пассажир, у которого в двух способах разные места, либо есть пассажир, который входит через разные входы в двух способах. Выведите это число по модулю 109 + 7. Выходные данные Выведите единственное число — искомое число способов по модулю 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) последовательности целых чисел называется наибольшее целое число такое, что каждый элемент последовательности делится на это число. Выходные данные Выведите одно число — силу армии Джона Сноу по модулю 1000000007 (109 + 7). Примечание В первом примере кланы — {1}, {2}, {1, 2}, так что ответ 1·3 + 1·3 + 2·3 = 12
| |
|
|
A. Игрушечные армии
математика
*900
теория чисел
Герой нашего повествования Валерий и его лучший друг Аркадий еще только учатся в школе, и поэтому все свободное время они проводят играя в пошаговую стратегию «GAGA: Go And Go Again». Процесс игры выглядит следующим образом. На игровом поле располагаются две армии, каждая из которых состоит из n солдат (n всегда четное). Текущий игрок указывает для каждого своего солдата, в какого солдата противника тот будет стрелять, а после этого все солдаты игрока стреляют одновременно. Это игровой мир, и поэтому каждый солдат стреляет идеально, то есть абсолютно всегда попадает в указанную цель. Если в солдата противника стреляли, он обязательно погибает. Может случиться, что нескольким солдатам была указана одна и та же цель. Убитые солдаты больше не принимают участия в игре. Игра «GAGA» состоит из трех шагов: сначала делает ход Валерий, потом Аркадий, после чего опять Валерий, — и игра заканчивается. Вас попросили подсчитать, какое максимальное суммарное количество солдат может быть убито в процессе игры? Выходные данные Выведите единственное число — какое максимальное суммарное количество солдат могло быть убито в процессе игры за три хода. Примечание Первый пример из условия: 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 целых чисел a'1, a'2, ..., a'm — массив A', являющийся перестановкой массива A.
| |
|
|
C. Илья и дерево
Деревья
математика
теория чисел
*2000
поиск в глубину и подобное
графы
Илья очень любит графы, особенно деревья. Во время последнего похода в лес Илья нашел очень интересное дерево с корнем в вершине 1, в каждой вершине i которого записано одно целое число ai. Красотой вершины x Илья называет наибольший общий делитель всех чисел в вершинах на пути от корня до x включительно. При этом Илья может изменить число в одной произвольной вершине на 0, либо оставить все вершины неизменными. Теперь Илью интересует, какая максимальная красота может быть у каждой вершины. Для каждой вершины ответ нужно считать независимо. Красота корня равна числу, записанному на нем. Выходные данные В единственной строке через пробел выведите n чисел, где i-е по порядку числу — максимальная красота вершины i.
| |
|
|
B. Арпа и список чисел
реализация
*2100
теория чисел
Арпа нашел список из n чисел. Он считает, что список плохой, если и только если он не пустой и НОД (см. примечания для пояснения) чисел в списке равен 1. Арпа может выполнять следующие два типа операций: - Выбрать число и удалить его, стоимость операции равна x,
- Выбрать число и увеличить его на 1, стоимость операции равна y.
У Арпы нет ограничений на количество применений второй операции на одно и то же число. Помогите Арпе найти минимально возможную стоимость сделать список хорошим. Выходные данные Выведите одно число: минимальную стоимость сделать лист хорошим. Примечание В первом примере число 1 должно быть удалено (со стоимостью 23), а число 16 должно быть увеличено на 1 (со стоимостью 17). НОД (наибольший общий делитель) множества чисел равняется максимальному целому числу, которое делит все числа из множества. Больше информации о НОД здесь.
| |
|
|
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. Выходные данные Выведите массив A слева направо, разделённый пробелами. Примечание Мультипликативный порядок числа a по модулю Q — это наименьшее положительное целое число x такое, что ax mod Q = 1. Например, .
| |
|
|
A. k-Округление
Перебор
математика
теория чисел
*1100
Для заданного натурального числа n его k-округлением назовём такое минимальное целое положительное число x, что x заканчивается на k или более нулей в системе счисления по основанию 10 и одновременно делится на n. Например, 4-округлением числа 375 будет число 375·80 = 30000. Число 30000 — минимальное такое число, которое заканчивается на 4 или более нуля и делится на 375. Напишите программу, которая осуществляет k-округление числа n. Выходные данные Выведите k-округление числа n.
| |
|
|
C. Максимальное разбиение
математика
дп
теория чисел
жадные алгоритмы
*1300
Вам задано некоторое количество запросов. В i-м запросе дано положительное целое число ni. Надо представить ni в виде суммы максимального количества составных слагаемых и вывести это количество, либо вывести -1, если такое представление невозможно. Составными называются натуральные числа большие 1, не являющиеся простыми, то есть, имеющие натуральные делители, отличные от 1 и самого числа. Выходные данные Для каждого запроса выведите максимальное количество слагаемых в корректном разбиении на составные слагаемые или -1, если такого разбиения не существует. Примечание 12 = 4 + 4 + 4 = 4 + 8 = 6 + 6 = 12, но в первом разбиении больше количество слагаемых 8 = 4 + 4, 6 нельзя разбить на меньшие составные слагаемые. 1, 2, 3 меньше любого составного числа, поэтому для них не существует корректных разбиений.
| |
|
|
F. Пути
Структуры данных
теория чисел
*2700
Дано положительное целое число n. Построим граф на вершинах 1, 2, ..., n так, чтобы ребро между вершинами u и v существовало тогда и только тогда, когда . Пусть d(u, v) — кратчайшее расстояние между u и v или 0, если между ними нет пути. Посчитайте сумму d(u, v) для всех 1 ≤ u < v ≤ n. gcd или НОД (наибольший общий делитель) двух натуральных чисел — такое наибольшее натуральное число, которое делит оба этих числа нацело. Выходные данные Выведите сумму d(u, v) для всех 1 ≤ u < v ≤ n. Примечание Все кратчайшие пути в первом примере: Между остальными парами вершин путь не существует. Суммарное расстояние 2 + 1 + 1 + 2 + 1 + 1 = 8.
| |
|
|
B. Кратность разностей
математика
реализация
теория чисел
*1300
Дан набор из n целых чисел. Требуется выбрать из них ровно k чисел таким образом, что разность любых двух выбранных чисел будет делиться на m, либо определить, что это сделать невозможно. Числа могут повторяться как в исходном наборе, так и среди выбранных чисел, но количество вхождений любого числа среди выбранных не должно превосходить количества его вхождений в исходный набор. Выходные данные Если выбрать k чисел требуемым образом невозможно, то в единственной строке выведите «No» (без кавычек). Иначе, в первой строке выходных данных выведите «Yes» (без кавычек). Во второй строке выведите k целых чисел b1, b2, ..., bk — выбранные числа. Если существует несколько подходящих решений, выведите любое из них.
| |
|
|
A. Гордыня
Перебор
математика
дп
*1500
теория чисел
жадные алгоритмы
Вам дан массив a длиной n, вы можете выполнять определенные операции над ним. Каждая операция выгладит следующим образом: выберите два соседних элемента из a, пусть это будут x и y, и замените один из них величиной gcd(x, y), где gcd обозначает наибольший общий делитель. Какое минимальное число операций необходимо, чтобы сделать все элементы массива равными 1? Выходные данные Выведите -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. Подсчет массивов
Комбинаторика
математика
дп
теория чисел
*2000
Вам заданы два целых положительных числа x и y. Массив F называется y-факторизацией числа x тогда и только тогда, когда выполняется следующие условия: - В массиве F ровно y элементов, все они являются целыми числами;
-
. Посчитайте количество попарно различных массивов, являющихся y-факторизациями числа x. Два массива A и B считаются различными, если существует хотя бы одна позиция i (1 ≤ i ≤ y) такая, что Ai ≠ Bi. Так как ответ может быть очень большим, выведите его по модулю 109 + 7. Выходные данные Выведите 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. Обратите внимание, нет ограничения на целые числа, которые можно ставить в блоки, однако, можно показать, что ответ конечный. Выходные данные Выведите единственное число — остаток от деления ответа на 1000000007. Примечание В первом примере единственный способ — поставить -1 в единственный блок. Во втором примере единственный способ — поставить 1 в каждый блок.
| |
|
|
D. Нефрен и кинотеатр
Комбинаторика
математика
теория чисел
*2900
китайская теорема об остатках
Лахеш любит снимать фильмы, поэтому Нефлен помогает ей организовать кинотеатр, который называется кинотеатр 68. 
Однажды в кинотеатре 68 кончились деньги (у них нет купюр достоинством в 50 юаней в данный момент), но Нефлен всё равно хочет открыть его. В кассу кинотеатра приходят три типа покупателей: одни приносят ровно одну купюру достоинством в 50 юаней, вторые приносят ровно одну купюру достоинством в 100 юаней, поэтому Нефлен должна дать им сдачу одной купюрой в 50 юаней, а третьи приходят с VIP картой, поэтому не должны платить за билет. Сейчас n посетителей стоят снаружи кинотеатра в очереди. Нефлен хочет узнать, сколько возможных очередей могут быть таких, чтобы все люди смогли купить билет (то есть каждый покупатель мог получить сдачу, если она требуется), и чтобы после продажи билетов всем покупателям в кассе осталось не менее l и не более r купюр достоинством 50 юаней. Две очереди называются различными, если существует позиция, на которой в этих очередях стоят покупатели разного типа. Так как ответ может быть большим, выведите его по модулю p. Выходные данные Выведите единственное число — ответ на задачу по модулю 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 различных очередей.
| |
|
|
B. Правильное питание
Перебор
реализация
теория чисел
*1100
У Васи есть n бурлей. Одна бутылка Бер-Колы стоит a бурлей, а один батончик Барса стоит b бурлей. Он может покупать любое целое неотрицательное количество бутылок Бер-Колы и любое целое неотрицательное количество батончиков Барс. Определите, сможет ли Вася купить какое-то количество бутылок Бер-Колы и батончиков Барс таким образом, чтобы потратить ровно n бурлей. Иными словами, вам необходимо найти два неотрицательных целых числа x и y таких, что Вася может купить x бутылок Бер-Колы, y батончиков Барс, при этом x·a + y·b = n, либо сообщить, что такие числа найти невозможно. Выходные данные Если Вася не сможет купить Бер-Колу и батончики Барс так, чтобы потратить ровно n бурлей, выведите «NO» (без кавычек). В противном случае, в первую строку выведите «YES» (без кавычек). Во вторую строку выведите два целых неотрицательных числа x и y — количество бутылок Бер-Колы и количество батончиков Барс, которые должен купить Вася, чтобы потратить ровно n бурлей, то есть x·a + y·b = n. Если ответов несколько разрешается вывести любой из них. Любое из чисел x и y может быть равно 0. Примечание В первом примере Вася может купить две бутылки Бер-Колы и один батончик Барс, тогда он потратит ровно 2·2 + 1·3 = 7 бурлей. Во втором примере, Вася может потратить ровно n бурлей несколькими способами: - купить две бутылки Бер-Колы и пять батончиков Барс;
- купить четыре бутылки Бер-Колы и не покупать батончиков Барс;
- не покупать Бер-Колу и купить 10 батончиков Барс.
В третьем примере невозможно купить Бер-Колу и батончики Барс, чтобы потратить ровно n бурлей.
| |
|
|
B. Позиция в дроби
математика
теория чисел
*1300
У вас есть дробь . Найдите первое вхождение цифры c в десятичную запись этой дроби после десятичного разделителя (запятой). Выходные данные Выведите первую позицию цифры c в дроби. Позиции нумеруются с 1 после десятичного разделителя. Если такой позиции не существует, выведите -1. Примечание Дробь в первом примере имеет вид: . Поэтому первый ноль после десятичного разделителя на второй позиции. Во втором примере дробь имеет вид: . В десятичном представлении этой дроби нет цифры 7.
| |
|
|
D. Необычные последовательности
Комбинаторика
математика
дп
теория чисел
*2000
битмаски
Найдите количество различных последовательностей из строго положительных целых чисел a1, a2, ..., an (1 ≤ ai) таких, что gcd(a1, a2, ..., an) = x и . Так как ответ может быть большим, выведите остаток от его деления на 109 + 7. gcd здесь обозначает наибольший общий делитель. Выходные данные Выведите количество искомых последовательностей по модулю 109 + 7. Примечание В первом примере подходят последовательности: (3, 3, 3), (3, 6), (6, 3). Во втором примере не подходит ни одна последовательность.
| |
|
|
B. Новогодняя ночь
Конструктив
теория чисел
*1300
битмаски
Поскольку Гриша весь год вел себя хорошо, в новогоднюю ночь его посетил Дед Мороз с мешком подарков! В мешке Деда Мороза содержатся n сладких конфет из той самой кондитерской, по одной конфете каждой возможной вкусности от 1 до n. Счастье Гриши напрямую зависит от того, какие именно конфеты он возьмет. Несмотря на то, что разумно предположить, что брать нужно наиболее вкусные конфеты, новогодняя магия переворачивает все с ног на голову: оказывается, важна не просто сумма вкусностей конфет, а их XOR-сумма! XOR-сумма последовательности целых чисел a1, a2, ..., am считается как побитовый XOR всех элементов последовательности: , здесь обозначает операцию побитового XOR; подробнее про побитовый XOR (операцию, также известную как побитовое исключающее ИЛИ) можно прочитать здесь. Дед Мороз заранее предупредил Гришу, что ему требуется посетить еще несколько мест, а потому Гриша волен выбрать не более k конфет из мешка Деда Мороза. Помогите Грише узнать, чему равна максимальная XOR-сумма, а вместе с ней и максимальное счастье, которое он может обрести при оптимальном выборе конфет. Выходные данные Выведите одно число — максимальную возможную XOR-сумму. Примечание В первом примере можно взять конфеты со вкусностями 1, 2 и 4. Их XOR-сумма равняется 7. Во втором примере можно взять все шесть конфет и получить XOR-сумму 7.
| |
|
|
E. Простой подарок
Бинарный поиск
математика
теория чисел
поиск в глубину и подобное
*2400
meet-in-the-middle
— Мужик, у тебя простые числа есть? — Нету. — На, мужик, простые числа. Пингвин В отличие от Гриши, который вел себя хорошо, Олег за весь год так и не научился решать задачи на теорию чисел. Поэтому вместо Деда Мороза к нему пришел его сокомандник Андрей и торжественно вручил ему множество из n различных простых чисел вместе с простой задачей: Олегу необходимо найти k-е в порядке возрастания положительное целое число, среди простых делителей которого встречаются числа только из этого множества. Выходные данные Выведите k-е в порядке возрастания число, удовлетворяющее условию. Гарантируется, что оно не превосходит 1018. Примечание Для первого примера последовательность с простыми делителями из набора {2, 3, 5} выглядит так: (1, 2, 3, 4, 5, 6, 8, ...) Седьмым по счету числом (в 1-индексации) как раз и будет восьмерка.
| |
|
|
G. Степенная подстрока
математика
теория чисел
*3200
Вам даны n целых положительных чисел a1, a2, ..., an. Для каждого ai требуется найти целое положительное число ki такое, что десятичная запись числа 2ki содержит десятичную запись числа ai среди своих последних min(100, length(2ki)) цифр как подстроку, где length(m) означает длину десятичной записи числа m. Обратите внимание, что минимизировать ki не обязательно. В рассматриваемых десятичных записях не могут содержаться ведущие нули. Выходные данные Выведите n строк: в i-й из них целое число ki такое, что последние min(100, length(2ki)) цифр числа 2ki содержат десятичную запись числа ai как подстроку. Числа ki должны удовлетворять неравенствам 1 ≤ ki ≤ 1050. Можно показать, что при данных ограничениях ответ всегда существует. Если есть несколько ответов, выведите любой.
| |
|
|
D. Баш и сложная математическая головоломка
Структуры данных
теория чисел
*1900
Баш любит играть с массивами. У него есть массив a1, a2, ... an, состоящий из n целых чисел. Он любит делать предположения о значении наибольшего общего делителя (gcd) на некоторых подотрезках массива. Конечно же, его предположения не всегда верны, но Баш будет доволен, если его предположение почти верно. Допустим он предположил, что gcd элементов на подотрезке [l, r] массива a равен x. Тогда он считает предположение почти верным если если он может изменить не более одного элемента на подотрезке так, что gcd на этом отрезке станет равным x. Учтите, что после предположения о значении gcd Баш не меняет сам массив, ему только интересно, можно ли сделать так, чтобы gcd на подотрезке стал равен x. Помимо этого, Баш иногда изменяет сам массив. Помогите Башу определить, какие его догадки являются почти верными. Формально, Вам надо обработать q запросов, каждый из которых имеет один из двух типов: - 1 l r x — Баш предполагает, что gcd на подотрезке [l, r] равен x. Сообщите, правда ли, что это предположение почти верно.
- 2 i y — Баш изменяет значение ai на y.
Массив индексируется, начиная с 1. Выходные данные Для каждого запроса первого типа выведите "YES" (без кавычек), если предположение Баша верно и "NO" (без кавчек) иначе. Примечание В первом тестовом примере изначальное состояние массива таково: {2, 6, 3} Для запроса 1 gcd первых двух элементов массива уже равен 2. Для запроса 2 можно добиться gcd равного 3 изменив значение первого элемента на 3. Учтите, что после запросов типа 1 массив не изменяется. После запроса 3 массив выглядит так: {9, 6, 3}. В запросе 4 нельзя изменить один элемент так, чтобы получить gcd, равный 2.
| |
|
|
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. Выходные данные Вывод 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.
| |
|
|
B. Прекрасное число
Бинарный поиск
Перебор
реализация
дп
теория чисел
*1100
Будем называть положительное целое число прекрасным, если и только если сумма его цифр равна \(10\). Вам дано целое число \(k\), найдите \(k\)-е по величине прекрасное положительное целое число. Выходные данные Выведите \(k\)-е по величине прекрасное число. Примечание Первое прекрасное число равно \(19\), а второе — \(28\).
| |
|
|
E. Уравнение конгруэнтности
математика
*2100
теория чисел
китайская теорема об остатках
Дано число \(x\). Ваша задача — найти количество положительных чисел \(n\) (\(1 \leq n \leq x\)), удовлетворяющих \(\)n \cdot a^n \equiv b \quad (\textrm{mod}\;p),\(\) где \(a, b, p\) — заданные константы. Выходные данные Выведите одно число: количество решений \(n\). Примечание В первом примере \(n=2\) и \(n=8\) являются решениями.
| |
|
|
F. SUM и REPLACE
Перебор
Структуры данных
теория чисел
*2000
снм
Обозначим за D(x) количество положительных делителей натурального числа x. К примеру, D(2) = 2 (2 делится на 1 и 2), D(6) = 4 (6 делится на 1, 2, 3 и 6). Вам дан массив a из n целых чисел. Нужно обрабатывать два вида запросов: - REPLACE l r — для каждого
заменить ai на D(ai); - SUM l r — посчитать
. Выведите ответ на каждый запрос SUM. Выходные данные Для каждого запроса SUM выведите ответ на него.
| |
|
|
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 чисел, где i-е число — ответ на i-й запрос.
| |
|
|
C. Наскальная живопись
Перебор
*1600
теория чисел
Имп решил посмотреть документальный фильм про наскальную живопись. Его внимание мгновенно привлекли нацарапанные в хаотическом порядке числа, подозрительно напоминающие остатки от деления числа n на всевозможные i от 1 до k. К несчастью, этих чисел слишком много, а потому последовательность уходит далеко за пределы экрана и ее сложно анализировать. Имп просит вас заняться этим вместо него и сообщить, правда ли, что все эти остатки от деления различны. Более формально, необходимо проверить, что все различны для 1 ≤ i ≤ k, то есть не существует такой пары (i, j), что одновременно выполняются следующие условия: - 1 ≤ i < j ≤ k,
-
, где означает остаток от деления x на y. Выходные данные Выведите «Yes», если все остатки различны, и «No» в противном случае. Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Примечание В первом примере остатки по модулю 1 и 4 совпадают.
| |
|
|
F. Делимость
Конструктив
дп
теория чисел
жадные алгоритмы
*2400
Имп очень благодарен вам за оказанную помощь. Впрочем, если вы решите последнюю задачу, его радость возрастет многократно. Определим  для некоторого множества  как число таких пар a, b во множестве  , что: - a строго меньше b;
- a делит b без остатка.
Необходимо найти такое множество , которое является подмножеством множества {1, 2, ..., n} (т. е. множества всех положительных целых чисел, не превосходящих n), что . Выходные данные Если ответ не существует, выведите одно слово «No». В противном случае в первой строке выведите «Yes», во второй — число m, размер множества , а в третьей строке — m чисел, составляющих множество . Если возможных ответов несколько, выведите любой. Для лучшего понимания формата вывода смотрите примеры. Примечание Во втором примере подходящими парами являются (1, 2), (1, 4), (1, 5), (1, 6), (2, 4), (2, 6). Таким образом, . В третьем примере подходящими парами являются (2, 4), (4, 8), (2, 8). Таким образом, .
| |
|
|
A. Простой спорт
математика
теория чисел
*1700
Алиса и Боб начинают свой день с простой игры. Они выбирают начальное целое число X0 ≥ 3 и пробуют достичь одного миллиона, играя по правилам, описанным ниже. Первой ходит Алиса, затем игроки ходят по очереди. На i-м ходу игрок выбирает простое число, меньшее, чем текущее число, и увеличивает текущее число до наименьшего числа, кратного выбранному. Формально, игрок выбирает простое число p < Xi - 1 и находит минимальное целое число Xi ≥ Xi - 1 такое, что p делит Xi нацело. Обратите внимание, если выбранное простое число p делит нацело число Xi - 1, то текущее число не меняется. Ева увидела состояние игры после двух ходов. По данному X2 определите минимально возможное начальное число X0. Обратите внимание, игроки не обязательно играют оптимально. Вам нужно рассмотреть все возможные варианты хода игры. Выходные данные Выведите одно целое число — минимально возможное начальное число X0. Примечание В первом примере минимальное начальное число равно X0 = 6. Например, возможна следующая игра: - Алиса выбирает простое число 5 и получает X1 = 10,
- Боб выбирает простое число 7 и получает X2 = 14.
Во втором примере минимально возможное X0 = 15. - Алиса выбирает простое число 2 и получает X1 = 16,
- Боб выбирает простое число 5 и получает X2 = 20.
| |
|
|
B. Добавление точек
математика
теория чисел
*1800
На прямой находится n точек, причем i-я точка имеет координату xi. Координаты всех точек различны. Определите число m — минимальное количество точек, которые нужно добавить на прямую так, чтобы расстояния между каждой парой соседних точек на прямой были одинаковыми. Выходные данные Выведите число m — минимальное количество точек, которые нужно добавить на прямую так, чтобы расстояния между каждой парой соседних точек на прямой были одинаковыми. Примечание В первом примере достаточно добавить одну точку с координатой 0. Во втором примере расстояния между всеми парами начальных точек равны между собой, поэтому ничего добавлять не нужно.
| |
|
|
E. Лостборн
математика
дп
теория чисел
*2600
Игорь К. очень любит многопользовательскую ролевую игру WineAge II. Кто знает, возможно, именно в ней причина его не слишком успешной учебы в университете. Как и любой играющий в нее человек, он заинтересован в том, чтобы экипировка и оружие его персонажа были как можно лучше. Однажды, в очередной раз читая форум этой игры, он наткнулся на очень интересный факт. Оказывается, каждое оружие в игре характеризуется k различными числами: a1, ..., ak. Они называются показателями удара и по задумке разработчиков игры являются попарно взаимно простыми. Урон, наносящийся при ударе, зависит не только от характеристик оружия, но и от показателя силы персонажа. Так, если сила персонажа равна n, то наносимый урон будет вычисляться как количество чисел на отрезке , которые не делятся ни на один из показателей удара ai. Недавно, выполнив очередной квест, Игорь К. нашел новый меч Лостборн. Он хочет знать, сколько урона он будет наносить своим противникам, используя его. Выходные данные Выведите единственное число — урон, который будет наносить персонаж Игоря К. при применении своего нового оружия. Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.
| |
|
|
B. Вредные кузнечики
Перебор
математика
теория чисел
*1400
Стоит отличная погода, а значит, самое время забраться на верхушку близлежащей сосны и вдоволь насладиться пейзажем. От ствола сосны отходят несколько веток, расположенных друг над другом и пронумерованных числами от 2 до y. На ветках со 2 по p включительно живут маленькие злобные кузнечики, отношения с которыми у вас не ладятся. Они также отличаются повышенной прыгучестью: кузнечик, живущий на ветке x, способен допрыгнуть до веток с номерами . Помня о ваших прошлых неудачах в общении с кузнечиками, вы решили устроиться так, чтобы ни один кузнечик не сумел вас побеспокоить; в то же время вам хочется вскарабкаться как можно выше, ибо вид сверху открывается просто потрясающий! Иными словами, найдите самую высокую ветку, до которой не допрыгнет ни один кузнечик, или сообщите, что это невозможно. Выходные данные Выведите одно число — номер самой высокой ветки, до которой не достанут кузнечики. Если такой не существует, выведите -1. Примечание В первом примере до веток 2, 4, 6 допрыгивает кузнечик, живущий на ветке 2, а на ветке 3 изначально живет еще один. Поэтому единственным возможным вариантом является ветка 5. Во втором примере подходящих веток не существует — это напрямую следует из пояснения к первому примеру.
| |
|
|
B. Необычное вычитание
математика
теория чисел
*1100
Даны две переменные a и b. Рассмотрим следующую последовательность действий над этими переменными: - Если a = 0 или b = 0, закончить процесс. Иначе перейти к шагу 2;
- Если a ≥ 2·b, то присвоить a значение a - 2·b и повторить шаг 1. Иначе перейти к шагу 3;
- Если b ≥ 2·a, то присвоить b значение b - 2·a и повторить шаг 1. Иначе закончить процесс.
Изначально значения a и b — положительные целые числа, поэтому алгоритм отработает за конечное время. Определите значения a и b после завершения работы алгоритма. Выходные данные Выведите два числа — значения a и b после завершения работы алгоритма.
| |
|
|
C. Грустные степени
Бинарный поиск
математика
*2100
теория чисел
Дано Q запросов формата (L, R). Для каждого запроса необходимо посчитать количество таких x, что L ≤ x ≤ R и существуют натуральные числа a > 0, p > 1, для которых выполняется x = ap. Выходные данные Выведите Q чисел — ответы на запросы. Примечание В первом запросе подходят числа 1 и 4.
| |
|
|
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 целых чисел, разделённых пробелами, i-е из которых равно bi. Примечание Заметьте, что во втором примере все числа в массиве уже попарно взаимнопросты, поэтому мы и выводим его.
| |
|
|
G. Разбиения
Комбинаторика
математика
теория чисел
*2700
Дано множество из n элементов, пронумерованных от 1 до n. Вес i-го объекта равен wi. Вес некоторого подмножества этого множества рассчитывается по формуле . Вес разбиения R данного множества на k подмножеств равен (напоминаем, разбиением называется множество таких подмножеств данного множества, что каждый элемент данного множества принадлежит ровно одному множеству из разбиения). Посчитайте суммарный вес всех различных разбиений данного множества на k непустых подмножеств по модулю 109 + 7. Два разбиения считаются различными, если существуют два объекта x и y, такие, что в одном разбиении они принадлежат разным множествам, а в другом — одному и тому же. Выходные данные Выведите единственное число — суммарный вес всех различных разбиений на k непустых подмножеств по модулю 109 + 7. Примечание Возможные разбиения в первом тесте из условия: - {{1, 2, 3}, {4}}, W(R) = 3·(w1 + w2 + w3) + 1·w4 = 24;
- {{1, 2, 4}, {3}}, W(R) = 26;
- {{1, 3, 4}, {2}}, W(R) = 24;
- {{1, 2}, {3, 4}}, W(R) = 2·(w1 + w2) + 2·(w3 + w4) = 20;
- {{1, 3}, {2, 4}}, W(R) = 20;
- {{1, 4}, {2, 3}}, W(R) = 20;
- {{1}, {2, 3, 4}}, W(R) = 26;
Возможные разбиения в втором тесте из условия: - {{1, 2, 3, 4}, {5}}, W(R) = 45;
- {{1, 2, 3, 5}, {4}}, W(R) = 48;
- {{1, 2, 4, 5}, {3}}, W(R) = 51;
- {{1, 3, 4, 5}, {2}}, W(R) = 54;
- {{2, 3, 4, 5}, {1}}, W(R) = 57;
- {{1, 2, 3}, {4, 5}}, W(R) = 36;
- {{1, 2, 4}, {3, 5}}, W(R) = 37;
- {{1, 2, 5}, {3, 4}}, W(R) = 38;
- {{1, 3, 4}, {2, 5}}, W(R) = 38;
- {{1, 3, 5}, {2, 4}}, W(R) = 39;
- {{1, 4, 5}, {2, 3}}, W(R) = 40;
- {{2, 3, 4}, {1, 5}}, W(R) = 39;
- {{2, 3, 5}, {1, 4}}, W(R) = 40;
- {{2, 4, 5}, {1, 3}}, W(R) = 41;
- {{3, 4, 5}, {1, 2}}, W(R) = 42.
| |
|
|
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\). Обратите внимание, в задаче нестандартный модуль! Выходные данные Выведите одно целое число — значение данного выражения по модулю \(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\). Выходные данные Выведите одно целое число — ответ на задачу. Примечание В первом примере подходящими парами являются \((1; 9)\), \((3; 3)\) и \((9; 1)\). Во втором примере есть 6 подходящих пар: \((2; 220)\), \((4; 110)\), \((8; 55)\), \((10; 44)\), \((20; 22)\) и \((40; 11)\). Ниже пример разрезания для получения \((20; 22)\). В третьем примере не существует ни одной подходящей пары.
| |
|
|
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, если таких чисел в массиве нет. Поскольку вы программист, Кэти просит вас написать программу, которая будет автоматически и точно выполнять внутриигровые запросы, чтобы выполнить поручения Куро. Давайте поможем ей! Выходные данные Для каждого запроса типа \(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 как ответ на этот запрос.
| |
|
|
D. Идеальные группы
математика
*2100
дп
теория чисел
SaMer написал лучший тест всех времён и народов для одной из его задач. В этой задаче требуется для данного массива целых чисел найти минимальное число групп, на которое можно разбить данный массив так, что произведение любых двух чисел в одной группе — точный квадрат. Каждое целое число должно находиться ровно в одной группе, однако числа в группе не обязательно должны быть последовательными в массиве. SaMer хочет создать больше тестов из того теста, который у него уже есть. Его тест является массивом \(A\) из \(n\) целых чисел и ему необходимо найти число подмассивов \(A\), состоящих из чисел, идущих в изначальном массиве последовательно, таких, что ответ на задачу для подмассива будет равен \(k\), для всех \(k\) от \(1\) до \(n\) включительно. Выходные данные Выведите \(n\) целых чисел, разделённых пробелами, \(k\)-е из которых должно быть равно числу подмассивов \(A\), состоящих из чисел, идущих в изначальном массиве последовательно, ответ для которых на задачу равен \(k\).
| |
|
|
E. Бильярд
геометрия
теория чисел
*2600
Представьте себе бильярдный стол размера \(n \times m\) с четырьмя лузами в углах. Введем систему координат относительно левого нижнего угла стола (см. картинку). На столе один шар, который стоит в точке с координатами \((x, y)\). В один момент к столу подошел Макс, ярый любитель бильярда, и ударил по шару. Оказалось, что шар начал двигаться по прямой, которая либо параллельна осям координат, либо образует с ними угол в \(45^{\circ}\). Будем считать, что: - углы, которые траектория шара образует со стенкой до и после соударения, равны,
- шар двигается бесконечно долго, пока не попадет ни в какую лузу,
- шар можно представить точкой, он попадает в лузу, только если его координаты точно совпадают с координатами какой-то лузы,
- в начальный момент времени шар не находится в лузе.
Обратите внимание, шар может катиться вдоль какой-то стенки, в таком случае считается, что соударений со стенкой не происходит, и шар в итоге попадет в лузу в конце стенки. Ваша задача — определить попадет ли шар когда-либо в лузу, и если да, то в какую. Выходные данные Выведите координаты лузы, в которую попадет шар, или \(-1\), если такого не произойдет. Примечание Первый тест: Второй тест: В третьем тестовом примере \(y\) координата не меняется, соответственно шар не попадет в лузу.
| |
|
|
A. Ярмарка
*1600
теория чисел
жадные алгоритмы
графы
кратчайшие пути
В Байтландии собираются провести ярмарку. В Байтландии \(n\) городов, которые соединены \(m\) двухсторонними дорогами, причём из любого города можно доехать до любого другого, передвигаясь только по дорогам. В Байтландии производят \(k\) различных товаров, причём каждый город специализируется на одном товаре. Чтобы ярмарка состоялась, на неё нужно привезти хотя бы \(s\) различных товаров. Чтобы привезти товары из города \(u\) в город \(v\) нужно потратить \(d(u,v)\) монет, где \(d(u,v)\) — длина кратчайшего пути между городами \(u\) и \(v\). Длина пути — это количество дорог, которые входят в этот путь. Организаторы ярмарки оплатят перевозку товаров, однако они сами могут выбрать, производителей из каких городов пригласить на ярмарку. Теперь организаторы хотят для каждого из \(n\) городов посчитать, какое минимальное количество монет нужно потратить на перевозку товаров, чтобы провести ярмарку в этом городе. Выходные данные Выведите \(n\) чисел, \(i\)-е из которых — минимальное количество монет на перевозку товаров при проведении ярмарки в городе \(i\). Разделяйте числа пробелами. Примечание Рассмотрим первый пример. Чтобы провести ярмарку в городе \(1\), можно привезти товары из городов \(1\) (\(0\) монет), \(2\) (\(1\) монета) и \(4\) (\(1\) монета). Суммарное количество монет равно \(2\). Город \(2\): Товары из городов \(2\) (\(0\)), \(1\) (\(1\)), \(3\) (\(1\)). Сумма \(2\). Город \(3\): Товары из городов \(3\) (\(0\)), \(2\) (\(1\)), \(4\) (\(1\)). Сумма \(2\). Город \(4\): Товары из городов \(4\) (\(0\)), \(1\) (\(1\)), \(5\) (\(1\)). Сумма \(2\). Город \(5\): Товары из городов \(5\) (\(0\)), \(4\) (\(1\)), \(3\) (\(2\)). Сумма \(3\).
| |
|
|
E. Задача Принца
Деревья
Перебор
Структуры данных
математика
теория чисел
*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\). Обратите внимание, что сами числа в вершинах не изменяются. Думаю, вам интереснее было бы смотреть на супергеройские похождения Доктора Стренджа и Таноса, чем на то, как они решают задачку. Поэтому вам предлагается решить задачу вместо них. Выходные данные Выведите \(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\) строк — если \(i\)-й вариант клипа осуществим, выведите в \(i\)-й строке «YES» (без кавычек), иначе выведите «NO» (без кавычек).
| |
|
|
G. Подсчёт GCD
Деревья
дп
теория чисел
*2400
разделяй и властвуй
снм
Дано дерево из \(n\) вершин. На каждой вершине дерева записано число; на \(i\)-й вершине записано число \(a_i\). Определим функцию \(g(x, y)\) как наибольший общий делитель всех чисел, записанных на вершинах на простом пути от вершины \(x\) до вершины \(y\) (включая эти две вершины). Для каждого целого числа от \(1\) до \(2 \cdot 10^5\) подсчитайте количество таких пар \((x, y)\) \((1 \le x \le y \le n)\), что \(g(x, y)\) равен этому числу. Выходные данные Для каждого целого числа \(i\) от \(1\) до \(2 \cdot 10^5\) необходимо сделать следующее: если не существует таких пар \((x, y)\), что \(x \le y\) и \(g(x, y) = i\), не выводите ничего; иначе выведите два числа: \(i\) и количество описанных пар. Значения \(i\) нужно выводить в возрастающем порядке. Посмотрите примеры для лучшего понимания.
| |
|
|
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. Выходные данные В первой строке выведите единственное число — ответ на задачу. Примечание В первом тесте есть две подходящих хороших пары чисел (a, b) — (1, 2) и (2, 1). Во втором тесте есть четыре подходящих хороших пары чисел (a, b) — (1, 12), (12, 1), (3, 4), (4, 3). В третьем тесте есть хорошие пары чисел, к примеру, (3, 30), но ни одна из них не удовлетворяет ограничению l ≤ a, b ≤ r.
| |
|
|
E. Number Clicker
теория чисел
графы
разделяй и властвуй
*2700
meet-in-the-middle
Аллен играет в Number Clicker на телефоне. Он начинает с целого числа \(u\) на экране. Каждую секунду он нажимает одну из трех кнопок: - Изменить \(u \to u+1 \pmod{p}\).
- Изменить \(u \to u+p-1 \pmod{p}\).
- Изменить \(u \to u^{p-2} \pmod{p}\).
Аллен хочет нажать на кнопки не более 200 раз так, чтобы получить на экране число \(v\). Помогите ему! Выходные данные В первой строке выведите одно целое число \(\ell\) — количество нажатий кнопок. Во второй строке выведите целые числа \(c_1, \dots, c_\ell\) — кнопки, которые должен нажать Аллен. Для всех \(1 \le i \le \ell\) должно выполняться \(1 \le c_i \le 3\). Можно показать, что ответ всегда существует. Примечание В первом примере число на экране меняется следующим образом: \(1 \to 2 \to 3\). Во втором примере число на экране меняется следующим образом: \(3 \to 2\).
| |
|
|
Космический лазер
теория чисел
На космической станции есть лазер с усилителем. Каждую секунду мощность лазера умножается на коэффициент усиления A. Начальная мощность лазера = 1 единица. Нужно узнать мощность через N секунд.
Но есть проблема: мощность может стать АСТРОНОМИЧЕСКИ большой! Поэтому бортовой компьютер показывает результат по модулю M.
Определите, что покажет бортовой компьютер после N секунд.
ВХОДНЫЕ ДАННЫЕ:
Три числа A, N, M (1 ≤ A, M ≤ 10^9, 0 ≤ N ≤ 10^18)
ВЫХОДНЫЕ ДАННЫЕ:
Одно число - ответ на задачу
| |
|
|
Глючные робоанты
Алгоритмы сортировки
математика
теория чисел
Недавно директору Ресторана Отеля пришла в голову следующая мысль: <<Все какое-то обычное. Надо что-то модернизировать!>> Именно так и решили заменить всех официантов на роботов или, точнее, робоантов.
Но вот беда! Денег на закупку высококачественного оборудования не нашлось, и партия робоантов была заказана в ОАО <<В Гараже у Петровича>>. И вот теперь, спустя неделю работы по непонятным причинам робоанты начали глючить. Проблема в том, что скоро в Отеле большой банкет. Для его проведения в Ресторане уже расставили \(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>> в противном случае случае.
Рассмотрим первый пример: здесь расставить все по местам может один робоант, изначально стоящий у второго стола. Для этого он:
-
Берёт со \(2\)-го стола \(8\)-е блюдо, перемещается к \(8\)-му столу, кладет блюдо.
-
Берёт с \(8\)-го стола \(2\)-е блюдо, перемещается ко \(2\)-му столу, кладет блюдо.
-
Перемещается к \(4\)-му столу.
-
Берёт с \(4\)-го стола \(6\)-е блюдо, перемещается к \(6\)-му столу, кладет блюдо.
-
Берёт с \(6\)-го стола \(4\)-е блюдо, перемещается к \(4\)-му столу, кладет блюдо.
Можно доказать, что во втором примере невозможно расставить все блюда по местам.
| |
|