sankear's blog

By sankear, 13 years ago, In Russian

Сегодня завершился второй раунд. Предлагаю обсудить здесь задачи.


Вот краткий разбор тех задач, которые я прочитал на контесте:

Задача A
Думаю, что здесь ничего не надо разбирать, а просто аккуратно написать то, что от Вас требуют

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

Задача С
Т. к. НОД(A, B, C) = НОД(НОД(A, B), C), то можно каждую строку матрицы разбить на sqrt(N) блоков и в каждом предпосчитать НОД. Теперь будем отвечать на запросы, проходясь по строкам матрицы честно, а столбцы обрабатывать группами.

Задача D
A - массив заданных чисел
Посчитаем две вспомогательные величины.
SUM1i - сумма чисел с A1 по Ai
SUM2i - сумма чисел Ai, Ai+2, Ai+4 и т.д.
Максимум в первой строке всегда будет A1, а максимум второй строки мы переберем. Понятно, что максимум второй строки можно разместить под A1 и ответ от это не ухудшится. Пусть мы сейчас смотрим на число Ai, тогда вверх точно должно пойти числа с A2 по Ai-1, т. к. мы планируем сделать Ai максимумом во второй строке. Значит мы "под" эти числа можем поставить числа с Ai+1 по A2 * (i - 1). Ответ от этого не ухудшится. Теперь надо оставшиеся числа разбить на пары. Максимальное число в паре поставим вверх, а минимальное - "под" максимальное. Тогда ответ для такой конфигурации будет (A1 + Ai) * (SUM1i - 1 - SUM11 + SUM22 * i - 1 + A1). Из всех конфигураций нужно взять минимум.

Задача Е
SUM - массив сумм префиксов.
Будем решать задачу динамикой. Di, j - максимальная сумма, которую мы можем получить, сделав не более i зачеркиваний и используя первые j чисел.
Di, j = max(Di, j - 1, Di - 1, j - k + SUMj - SUMj - k)
  • Vote: I like it
  • 0
  • Vote: I do not like it