Сегодня завершился второй раунд. Предлагаю обсудить здесь задачи.
Вот краткий разбор тех задач, которые я прочитал на контесте:
Задача 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)
If on step I sum of angles is >=90 then Out after I
If 2*sin((90-sum of angles)/90 * pi/2) is <=l then Reached after I
I will post proof later from home and in Russian.
Вот здесь уже есть над чем подумать :)