Про разбор больше никто не спрашивает, а это значит самое время ему появится.
297218A - Совсем другое (40 баллов)
Автор aropan
Решение
Найдем цифру, которую можно использовать и которая будет больше цифры в старшем разряде числа. Если такой цифры нет, то возьмем минимальную возможную цифру и при это длина числа в разрядах увеличится на один. Это цифра будет первой. Остальные цифры в числе будут одинаковыми и будут минимально возможными. Ответ не будет существовать когда в изначальном числе уже используются все цифры от $$$1$$$ до $$$9$$$.
297218B - Тяжелая доля лифтера (40 баллов)
Автор Vladik
Решение
Задача решается с помощью следующего жадного алгоритма: наберем в лифт $$$k$$$ людей, которые хотят попасть на самые высокие этажи, очевидным образом отвезти их по своим этажам у нас займет $$$max floor \cdot 2$$$ операций перемещения лифта. Будем отвозить с первого этажа людей таким образом пока они у нас не закончатся.
297218C - Перестановка (40 баллов)
Автор aropan
Решение
Можно заметить, что $$$i$$$-е число в массиве входит в сумму $$$i$$$ раз, а значит значение $$$\frac{a_i}{i}$$$ в сумму добавит $$$a_i$$$. То есть перестановка элементов не влияет на искомую сумму и значит достаточно проверить равна ли сумма элементов массива заданному числу.
297218D - Простой квадрат (40 баллов)
Автор AleXman111
Решение
Сначала заметим, что числа 0 и 1 не являются простыми. Теперь попробуем построить подходящий квадрат из только из этих чисел. Для начала заполним единичками главную и побочную диагональ квадрата.
Если $$$n$$$ чётное, то сумма в каждой строке и каждом столбце равна $$$2$$$(простому числу), и мы выполнили условие задачи.
Если же $$$n$$$ нечётное, то сумма в строке c номером $$$\frac{n+1}{2}$$$ и в столбце с номером $$$\frac{n+1}{2}$$$ будет равна единице. Чтобы это исправить, добавим единички в клетки $$$(\frac{n}{2}, \frac{n+1}{2})$$$ и $$$(\frac{n+1}{2}, \frac{n+1}{2} + 1)$$$. В итоге сумма в столбцах и строках будет равна двум или трём, и мы опять же выполнили условие задачи.
297218E - Маршруты (60 баллов)
Автор aropan
Решение
Найдем две наиболее удаленные друг от друга вершины. Это можно сделать при помощи двух обходов в глубину, находя каждый раз наиболее удаленную вершину от стартовой, и во время второго запуска в качестве стартовой использовать наиболее удаленную вершину с первого обхода. Потом можно найти путь между двумя удаленными вершинами. Все наши маршруту можно использовать из текущего пути. Изначально найдем максимальный по длине маршрут, а потом по очереди будет сдвигать концы маршрута ближе друг другу. Таким образом будут получены все длины и каждая вершина не будет использовать больше двух раз.
297218F - Бинарный поиск (60 баллов)
Автор AleXman111
Решение
Давайте просимулируем работу алгоритма бинарного поиска. Изначально у нас есть требуемая позиция $$$pos$$$. Для очередной позиции $$$middle$$$ в бинарном поиске, мы можем точно определить, должно ли быть очередное число на этой позиции больше или меньше числа $$$x$$$. Для всех остальных позиций значения чисел могут быть как больше, так и меньше числа $$$x$$$.
По итогу симуляции алгоритма, у нас есть $$$cntBig$$$ позиций, на которых числа должны быть больше числа $$$x$$$ и $$$cntLess$$$ позиций, на которых числа должны быть меньше числа $$$x$$$. Пусть больших чисел $$$hasBig$$$, а меньших $$$hasLess$$$. Теперь посчитаем количество способов разместить большие числа в $$$cntBig$$$ позиций по формуле $$$C(hasBig, cntBig) \cdot cntBig!$$$. Аналогично посчитаем для меньших чисел, а произведение получившихся результатов будет являться ответом на задачу.
297218G - Полигон (60 баллов)
Автор aropan
Решение
Вспомним, что площадь трапеция равна сумме оснований умноженное на высоту и деленное на два. Рассмотрим два случая:
$$$w$$$ находится в основании. Если $$$2 \cdot s > w$$$, то можно взять высоту трапеции равной $$$1$$$ и другое основание как $$$2 \cdot s - w$$$;
$$$w$$$ находится не в основании. Тогда давайте переберем высоту трапеции $$$h$$$. Она будет является делителем числа $$$2 \cdot s$$$. Для каждой высоты проверим, можно ли получить наклонную длины $$$w$$$ при высоте $$$h$$$ ($$$x^2 + h^2 = w^2$$$) и могут ли при этом основания быть положительными длинам $$$\frac{2 \cdot s}{h} \ge 2$$$. Если так, то можно строить трапецию с основаниями $$$1$$$ и $$$\frac{2 \cdot s}{h} - 1$$$, с высотой $$$h$$$ и нужным наклоном (разница по абсциссе равна $$$x$$$).
297218H - Идеальный палиндром (60 баллов)
Автор AleXman111
Решение
Для начала докажем, что идеальным палиндромом являются только строки вида $$$s_1s_2s_1s_2s_1...$$$, причём $$$s_1 \neq s_2$$$. Это так, потому что если мы заменим символ $$$s_1$$$ или $$$s_2$$$, то подстроки длины 3 перестанут быть палиндромами, а если бы $$$s_1$$$ и $$$s_2$$$ были равны, то подстроки длины 2 были палиндромами. Тогда итоговое количество идеальных палиндромов это $$$m \cdot (m - 1)$$$.
Теперь докажем, что все строки, длины большей чем 5, не могут содержать даже одну ошибку. Если ошибка будет в нечётной длине, то она обязательно будет в длине 3 (и соответственно обязательно в длине 5, так как изначальная строка имеет вид $$$s_1s_2s_1...$$$), следовательно ошибки в нечетной стороне быть не может. Аналогично с чётной стороной, если существует ошибка в длине 2 (то есть $$$s_i = s_{i+1}$$$), то вторая ошибка будет либо в длине 3 (если $$$s_{i+2} \neq s_{i+1}$$$), либо в длине 4. Соответственно ошибки в чётной стороне тоже не может быть.
По итогу получаем, что для строк длины большей, чем 5 ответом будет являться число $$$m \cdot (m - 1)$$$, а для меньших строк можно просто запустить перебор.
297218I - Сумма по подмножествам (100 баллов)
Автор hloya_ygrt
Решение
Давайте считать искомое произведение сумм $$$ans_i$$$ для множеств, наибольший общий делитель элементов которых равен $$$i$$$. Для начало выберем все элементы, которые делятся на $$$i$$$. Чтобы найти только те множества, НОД которых точно равен $$$i$$$, можно найти произведение сумм для всех подмножеств и вычесть ответы всех $$$ans_j$$$ таких, что $$$i < j$$$ и $$$i$$$ делит $$$j$$$ без остатка. Чтобы найти произведения всех подмножеств множества из $$$k$$$ элементов рассмотрим два случая:
произведение $$$a_i \cdot a_i$$$ будет учитываться $$$2^{k-2} \cdot (k - 1)$$$ раз. Каждый элемент во множестве $$$A$$$ может быть удален и это добавит произведение $$$a_i^2$$$. Количество элементов $$$k - 1$$$ и количество выбрать остально подмножество $$$2^{k-2}$$$;
произведение $$$a_i \cdot a_j$$$ будет учитываться $$$2^{k-3} \cdot (k - 2) + 2^{k-2}$$$. Первое слагаемое по аналогии с примером выше. А второе получается, если из множестве $$$A$$$ удалять $$$a_i$$$~-- количество способов выбрать подмножество из $$$k - 2$$$ элементов это $$$2^{k-2}$$$.
Осталось только считать отдельные суммы $$$a_i \cdot a_i$$$ и $$$a_i \cdot a_j$$$ для всех элементов, которые делятся на $$$i$$$. Для этого можно поддерживать для уже добавленных чисел их количество, сумму, сумму квадратов чисел и попарную сумму чисел. Ответ на задачу будет $$$ans_1$$$.
297218J - Бандиты в городе (100 баллов)
Автор hloya_ygrt
Решение
Для начала предположим, что все протестующие находятся в корне дерева. Тогда ответом на задачу будет $$$\lceil \frac{a_1}{leafs} \rceil$$$, где $$$leafs$$$ -- количество листов в дереве. По принципу Дирихле это будет минимальное возможное количество задержанных.
Ответом на исходную задачу будет $$$max_i{\lceil \frac{sum(a_v)}{leafs_i} \rceil}$$$, где $$$v$$$ лежит в поддереве $$$i$$$, $$$leafs_i$$$ -- количество листьев в поддереве $$$i$$$.
Рассмотрим некоторую вершину $$$i$$$, для которой невозможно разделить протестующих поровну. Тогда найдется такая вершина $$$m$$$, в которой в оптимальном разделении будет максимальное количество протестующих. Очевидно, нам не выгодно отправлять в $$$m$$$ ни одного протестующего из вершины $$$i$$$.
В таком случае мы можем перейти на один уровень ниже в дереве в направлении $$$m$$$. Будем повторять указанный шаг, пока мы не можем разделить протестующих поровну. Отсюда понятно, почему правильной является формула выше.
297218K - Сложные вычисления (100 баллов)
Автор andrew
Решение
Давайте будет перебирать ответ. Пусть текущий ответ это $$$x$$$, тогда мы можем получить его только тогда, когда не существует подмассивов, у которой MEX равен $$$x$$$. Заметим, что нам нужно проверить MEX подмассивов, которые находятся между всеми вхождениями числа $$$x$$$. Делать это можно, например, с помощью дерева отрезков, обрабатывая его вхождения по порядку. Число, для которого MEX не найдётся и будет ответом.
297218L - Нелюбимые числа (100 баллов)
Автор aropan
Решение
Можно заметить, что для получения максимальной разницы суммировать числа можно только двумя способами -- оставить изначальным массива как есть или объединить все числа, которые больше чем $$$m/2$$$ в одну сумму. Если на каком-либо префиксе нам лучшим (с большей разницей) стал второй вариант, то и для всех последюущих префиксов этот вариант будет лучше для фиксированного $$$m$$$. Еще можно заметить, что если для $$$m_i$$$ второй вариант стал лучше, то для $$$m_j$$$ такое, что $$$m_j \le m_i$$$, второй вариант тоже будет лучше. Таким образом отсортировав все $$$m_i$$$ можно находит префиксы для каждого запроса в которых первый вариант переходит во второй. Останется только просуммировать правильно нужные нам значения первого варианта для префиксов до определенно длины и второго варианта для префиксов начиная с определенной длины. Для этого нужно уметь находить количество элементов, сумму индексов, сумму элементов и сумму индекс умноженное на элемент на префиксах и суффиксах массива с нижним или верхним ограничением на элементы. Это можно сделать с помощью дерева отрезков или дерева Фенвика используя в качество индексов значения элементов и поддерживая состояние на текущий момент (для текущего префикса и текущего суффикса). В авторском решении для получения состояния на суффиксе использовалось персистентное дерево отрезков.
А еще вы можете просматривать все решения участников в группе (обратите внимание, что группа находится не в поддомене соревнования).