Поскольку n ≥ 4, один ход Васи никак не влияет на то, выпьет ли он стакан сока во время другого своего хода. Следовательно, задача заключается просто в том, чтобы найти в заданной строке количество позиций, номера которых (в 0-индексации) кратны n и перед которыми стоит хотя бы три одинаковых символа.
Асимптотика решения — O(|s|)
332B - Максимальная абсурдность
Предварительно построим массив частичных сумм, который позволит отвечать на запрос суммы на отрезке за O(1). Будем перебирать по убыванию число a из ответа — левую границу того из наших отрезков, который лежит левее. Теперь нужно среди отрезков длины k, начинающихся с элемента не левее a + k, выбрать отрезок с максимальной суммой. Поскольку a перебирается по убыванию, то такой отрезок можно поддерживать при переходе от a к a - 1.
Асимптотика решения — O(n).
Отсортируем приказы в первую очередь по возрастанию bi, а при равенстве bi — по убыванию ai. Можно считать, что в оптимальном решении все приказы, выполненные заведующей, следуют (в отсортированном списке) после тех приказов, которые она не выполнила (это может быть неверно в случае наличия одинаковых приказов, однако на параметры ответа это все равно не влияет). Переберем i — номер первого приказа в отсортированном списке, который выполнит заведующая. Слева от этого приказа нужно выбрать p - k приказов, которые заведующая не выполнит. Поскольку требуется, что сумма bi у этих приказов была наибольшей, можно выбрать последние p - k приказов, стоящие перед i-ым приказом. Справа от i-ого приказа требуется выбрать k - 1 приказ, который заведующая выполнит. Требуется, чтобы эти приказы имели максимальную сумму ai. Если i перебирать по убыванию, то эту максимальную сумму можно поддерживать, просто храня k - 1 максимальных ai из уже проанализированных в какой-нибудь стандартной структуре данных, работающей за логарифмическое время (типа multiset’а в C++),
Асимптотика решения — O(n log n).
В задаче задан неориентированный взвешенный граф без кратных ребер и петель, удовлетворяющий следующему свойству: для любого k-элементного множества S его вершин существует единственная вершина, смежная со всеми вершинами этого множества (*) (эта вершина была названа в условии соседней с S). Для любого k-элементного множества можно вычислить специальную характеристику, равную сумме весов ребер, ведущих из вершин этого множества в соседнюю с ним вершину. Требуется найти среднее арифметическое характеристик всех k-элементных множеств вершин.
Решить эту задачу позволяет следующий факт (доказательство которого приведено ниже): при k ≥ 3 условию задачи удовлетворяет только полный граф из k + 1 вершины. Для полных графов ответ на задачу равен удвоенной сумме длин всех ребер, деленной на n. Точно так же вычисляется и ответ для k = 1. Осталось рассмотреть случай k = 2. Переберем вершину i, которая будет являться соседней с нашим двухэлементным множеством. Выпишем в порядке возрастания все такие номера вершин j, что ci, j ≠ - 1. Любые две вершины из построенного списка образуют множество, для которого вершина i является соседней, а других таких множеств не существует. Перебирая все пары вершин из этого списка, мы можем прибавить характеристики всех этих множеств к ответу. Поскольку в задаче гарантируется, что граф удовлетворяет свойству (*), то каждая пара вершин будет проанализирована ровно один раз. Отметим, что аналогичный подход используется и в валидаторе к данной задаче.
Асимптотическая сложность решения составляет, таким образом, O(n2)
Доказательство.
Пусть в графе любые k вершин имеют ровно одну общую смежную вершину (*)
Лемма 1. У любых двух вершин ровно k - 1 общая смежная вершина.
Рассмотрим две произвольные различные вершины s, t. Пусть v1, v2, ..., vl — все различные общие смежные вершины этих двух вершин. Если l ≥ k, то мы получим, что вершины из множества {v1, ..., vk} имеют две общие смежные вершины s, t, что противоречит (*). Пусть теперь l ≤ k - 2. Рассмотрим множество вершин S = {s, t, v1, ..., vl}, состоящее из l + 2 ≤ k элементов. Если l + 2 < k, дополним это множество до k-элементного произвольными вершинами, не входящими в S. Полученное множество назовем T. Согласно (*), существует единственная вершина u, не входящая в T, которая смежна со всеми вершинами из T. В частности, эта вершина смежна с вершинами s и t. Однако по построению во множестве T должны были находиться все вершины, смежные c s и t, в том числе и вершина u. Получили противоречие. Значит, l = k - 1.
Лемма 2. В нашем графе найдется полный подграф из k + 1 вершины.
Рассмотрим множество S = {v1, ..., vk, vk + 1}, в котором v1, ... vk — произвольные попарно различные вершины нашего графа, vk + 1 — их общая смежная вершина. Приведем конструктивный способ построения полного подграфа на основе этого множества. Осуществим k - 1 итерацию, на i-ой итерации будем рассматривать вершину vi. Если эта вершина смежна со всеми вершинами vi + 1, ..., vk, то перейдем к следующей итерации. Иначе рассмотрим множество T = {v1, ..., vi - 1, vi + 1, ...vk + 1}. У вершин из T существует ровно одна общая смежная вершина u (не совпадающая, очевидно, с vi, поскольку vi смежна не со всеми вершинами из T). Заменим вершину vi на u и перейдем к следующей итерации. После окончания последней итерации множество S, очевидно, будет являться множеством вершин полного подграфа.
Покажем, что при k ≥ 3 наш граф — это полный граф из k + 1 вершины. Согласно лемме 2, в этом в графе найдется полный подграф с множеством вершин S = {v1, ..., vk + 1}. Допустим, что в нашем графе найдется вершина u, не принадлежащая S. Так как S — множество вершин полного подграфа, а любые две вершины согласно (1) имеют ровно k - 1 общую вершину, то все общие смежные вершины v1 и v2 (как и любых двух различных вершин из S) лежат в S. Если любые k вершин имеют общую смежную вершину, то и любые i (2 ≤ i ≤ k - 1) вершин имеют общую смежную вершину (возможно, не единственную). В частности, поскольку k ≥ 3, общую смежную вершину имеют вершины v1, v2, u, и эта вершина принадлежит S (как общая смежная вершина v1 и v2). Если допустить, что у u есть две смежных вершины x, y из S, то получим противоречие (1) (поскольку у этих двух смежных вершин будет k общих смежных вершин). Следовательно, в S существует единственная вершина x, смежная с u. Возьмем вершину y из S, отличную от x. У вершин (u, x, y) есть общая смежная вершина, и она принадлежит S. Но это значит, что u имеет две смежных вершины из S. Противоречие.
Переберем cnt — количество единичных бит в ключе. Заметим, что cnt достаточно перебирать до min(|s|, k), поскольку ключи, содержащие более чем |s| единичных бит, не могут являться минимальными лексикографически.
Научимся решать задачу для фиксированного cnt. Заметим, что любой полный проход по ключу соответствует выписыванию cnt из k просмотренных символов контейнера, т.е. контейнер разбивается на блоки длины k, а сообщение — на блоки длины cnt (последние блоки могут иметь меньшую длину). Пронумеруем символы каждого блока сообщения от 0 до cnt–1. Назовем (q, j)-суффиксом сообщения суффикс его q-ого блока, начинающийся с позиции j в этом блоке. Решим задачу динамическим программированием: di, j – верно ли, что существует ключ, первые i символов которого – нули и при использовании которого будет выписана строка, получаемая конкатенацией всех (q, j)-суффиксов сообщения. Переходы в этой динамике основаны на постановке в i-ую позицию ключа либо нуля, либо единицы (каждый раз нужно выбирать минимальный допустимый символ). Для восстановления самого ключа требуется сохранять для каждой подзадачи и сами выбранные символы, либо анализировать сами значения динамики.
Асимптотическая сложность решения — O(k·|s|2 + |p|).
Really fast editorial, thank you. C problem is much harder than usual, I spent more than one hour on it. :(
" Since we search a in descending order, we can maintain this segment during the transition from a to a - 1."
Can you please explain this sentence a bit better?
Here is an example:
We start from a = 5. There is only one another segment (i.e. {5, 6} with indices [7, 8]). We remember it for another steps.
Now we move a to 4. There are one new another segment {5, 5}. We compare it with previous maximum value. In this example {5, 6} is better than {5, 5}, that's why we do nothing.
Then we move a to 3. This time new possible segment {9, 5} (indices [5, 6]) is better than our maximum and we remember it.
C
можно решить при помощи массива и нескольких sort-ов :)По D еще есть решение без случаев, не использующее никакие соображения о виде графа.
Рассмотрим каждую вершину графа. Для любого k-элементного подмножества своих смежных вершин она является соседней (потому что соседняя у этого подмножества только одна). Если у вершины всего m соседей, то подмножеств размера k, для которых она соседняя, всего Cmk. Найдем сумму всего, что может прийти в эту вершину: всего используется Cmk·k ребер, среднее ребро при этом весит вот так: (сумма весов всех смежных ребер)/m. Итого в вершину придет Cmk·k * sum / m.
Просуммируем для всех вершин и поделим на общее количество k-элементных подмножеств — получим среднее для одного подмножества, что и требуется.
4155395
спасибо за классную идею! только поправьте, если я неправ: в ваше решение закралась опечатка:
...всего используется
C_m^k * k
ребер....итого в вершину придет
C_m^k * k * sum / m
да, спасибо, поправила.
Any solutions for problem D?
take too much time on understanding the meaning of Problem C.
В можно было еще и динамикой решить:
dp[i][j] — ответ на задачу, если у нас есть i первых законов, а выбираем мы j отрезков длины k.
Раз в задаче надо взять только два отрезка, то j будет только либо 1, либо 2:
1. Для j = 1, dp[i][1] = min(dp[i - 1][1], ps[i] - ps[i - k]) — либо берем отрезок, заканчивающийся в позиции i, либо не берем.
2. Для j = 2, dp[i][2] = min(dp[i - 1][2], ps[i] - ps[i - k] + dp[i - k][1]) — аналогично.
(ps[N] — массив префикс сумм)
В итоге решение за O(N).
The problems are all trsanslated well , but all problems are too long . Maybe for some problems , the shorter description will be better.
The problems are translated well , but all problems are too long ! Shortering some problems will be better .
Со вчерашнего дня думал, что в С недовольство возрастает если выполнить задание. Всю ночь не врубался в решение. Так печально.
Problem C is a good problem .
Ребят, поясните задачу B пожалуйста. Разбор совсем не понял. В разборе говорится только о элементе А, о элементе В же речи не идет. Как с ним поступать? Логично, что его нужно как-то зафиксировать, видимо. Но как с ним работать, я не совсем понимаю.
Размышляя над задачей пришел к следующему. Давайте будем считать не массив частичных сумм, а массив сумм на отрезке длинны k. Тогда получим следующий набор элементов: а[0] -- сумма на промежутке от 0 до k — 1. а[1] -- сумма на промежутке от 1 до k. а[2] -- сумма на промежутке от 2 до k + 1. ... а[n — k + 1] -- сумма на промежутке от n — k + 1 до n.
В таком случае задача сводится к следующей. Найти два элемента массива А на расстоянии не менее k так, чтобы их сума была максимальной. А вот здесь вот, что делать, я уже не очень себе представляю. Подскажите.
И, если несложно, поясните разбор задачи В.
Вы перебираете индекс a по убыванию. Соответственно, все индексы b, которые могли использоваться при больших a, могут использоваться и при данном a. При переходе от a + 1 к a в список доступных для использования мог добавиться лишь один отрезок — тот, у которого b = a + k. Таким образом, при переходе от больших a к меньшим мы просто можем поддерживать искомый индекс b (тот, который позволяет достичь максимальной суммы во втором отрезке). На мой взгляд, после просмотра авторского решения эта идея должна стать вполне понятной.
Can anyone tell me how to prove `` if k ≥ 3, only complete graph containing k + 1 vertices satisfies the problem statement''?
332B - Maximum Absurdity
TestCase
4 1
1 2 2 2
I am not able to understand why 2 4 is wrong answer for above test case. My submission: 12785367
"If there are multiple solutions, print the one with the minimum number a. If there still are multiple solutions, print the one with the minimum b."
My code Got that mine was giving the wrong answer. Trying to find out why..
Div.2-Problem B using 2d DP LINK