1 августа 2019 года в 19:30 (время московское) открылся первый этап SnarkNews Summer Series 2019. Как и несколько предыдущих серий, SNSS-2019 пройдёт на системе Яндекс.Контест. Опубликовано расписание серии.
По просьбам участников отдельно публикую ссылку для регистрации и входа в первый раунд. В комментариях к этому сообщению по окончании раунда в соответствии с расписанием можно будет обсудить задачи первого раунда.
Насколько я понимаю, то первый раунд окончен. Как решать задачу А?
Рассмотрим точку, которая будет покрыта последней. Можно заметить, что в момент, когда все круги оптимального радиуса, есть три случая:
Генерируем все точки-кандидаты, для каждой из них проверяем, что она лежит в многоугольнике, и если да, то обновляем ей ответ.
Альтернатива — бинпоиск по ответу, а дальше все то же, только теперь надо пересекать не три любых объекта, а два любых объекта. Работает примерно столько же, так как мы одну линию заменили на бинпоиск, в данных ограничения — примерно одинаково.
А как правильно решать задачу C?
Решение за куб. Идея: для любых трёх непересекающихся подпрямоугольников можно найти разбиение исходного прямоугольника на 3, что наши подпрямоугольники лежат в этих по одному. Так разбить можно принципиально двумя разными способами:
Насчитаем 6 динамик. Первая -- это
dp[i][j]
= максимальной сумме на подпрямоугольнике с вершинами в верхнем левом углу и (i, j), следующие 3 -- то же самое с другими углами, следующая --dp[i][j]
= максимальной сумме на подпрямоугольнике, содержащемся в столбцах от i до j, последняя -- то же, но со строками. Легко понять, как через эти динамики посчитать ответ. Динамики считаются так:Идём по строкам сверху вниз, для каждой пары (i, j) помним минимальную сумму всех чисел на прямоугольнике между этими столбцами, что мы встречали. В итоге для любой тройки $$$(r, c_1, c_2)$$$ мы узнаем максимальную сумму чисел на всех прямоугольниках $$$[x_1, x_2]\times[c_1, c_2]$$$, где $$$x_1 \leqslant x_2 \leqslant r$$$, через это можно посчитать первые 5 динамик, последнюю считаем так же, но для строк.
Не знаю, как объяснить нормально, зашло за 0.3с, а Вы как делали? Там, кажется, байт на 4 степень, судя по тайм лимиту
Я не начинал писать решение этой задачи во время контеста. Думал в похожем направлении, но мне ещё нужен был третий параметр, сколько прямоугольников уже включено в соответствующую область (от 0 до 3), и так делать выходило довольно сложно. Ваше решение выглядит более понятно, спасибо.