Всем привет!
Мы открываем новый цикл интернет-олимпиад по программированию для школьников! Как всегда, интернет-олимпиады первой половины учебного года – командные, и позволяют потренироваться перед ВКОШП и другими официальными командными турнирами.
Как вы возможно помните из прошлого объявления, первые две олимпиады будут расчитаны на более-менее начинающих участников с небольшим опытом в олимпиадном программировании. Но это не значит, что не имеет смысл в ней участвовать, если вы считаете себя более опытным :) Возможно, в ней найдутся интересные для вас задачи.
И первая командная интернет-олимпиада состоится уже завтра, 30 сентября 2023 года в 15:00 (по Московскому времени). Приглашаем всех принять в ней участие!
Продолжительность олимпиады – 5 часов, в течение которых вам будет предложено 12 задач – это чуть больше, чем обычно. Не забудьте зарегистрироваться на цикл командных интернет-олимпиад в этом сезоне перед началом олимпиады. Обратите внимание, что для участия в командных олимпиадах нужно зарегистрировать именно команду. Команда может содержать от 1 до 3 человек.
Ссылка на регистрацию команд доступна из данного анонса, а также на основном сайте интернет-олимпиад. Всю дополнительную информацию, а также расписание всех предстоящих командных интернет-олимпиад можно посмотреть на той же страничке.
Условия появятся на сайте в момент начала олимпиады. Тестирующая система находится по адресу pcms.itmo.ru.
Олимпиаду для вас подготовили студенты университета ИТМО: Даниил Орешников (doreshnikov), Егор Юлин (EgorUlin), Даниил Голов (DanGolov), Константин Бац (kbats183), Александр Гордеев (gordeve) и Владислав Власов (Vladosiya).
Для связи с жюри можно использовать адрес электронной почты [email protected].
Удачи!
UPD: олимпиада добавлена в тренировки на Codeforces. Разбор, надеемся, выложим завтра, где и обычно – на сайте в разделе "Материалы".
Мы внимательно посмотрели на проблемсет, и подумали, что, возможно, первая олимпиада получилась не то что бы только для совсем "начинающих"...
Но, надеемся, всем участникам будет интересно :) Тем временем остается полчаса до старта олимпиады – не забывайте регистрироваться, по возможности немного заранее.
Вопрос к организаторам: можно будет написать тренировку после ее окончания? Или только во время самого тура можно писать?
Выложим сейчас в тренировки на codeforces :)
Я правда забываю пополнять ссылки на тренировки в посте, но постараюсь в какой-то момент и его привести в актуальное состояние.
Супер, спасибо!
Автокомментарий: текст был обновлен пользователем InternetOlympiads (предыдущая версия, новая версия, сравнить).
Прочитал разбор. Хотел бы описать решение задачи I без 2-SAT. На мой взгляд, оно немного проще.
Пусть есть рёбра
v->u
иw->u
. Если из двух рёбер, выходящих изv
, возьмёмv->u
, тоw->u
мы точно не возьмём. Тогда мы возьмём ребро из вершиныw
в другую вершину (пусть это какая-то вершинаt
).Продолжая данные рассуждения, сделав замену
v := w, u := t
, мы выделим два множества рёберS1
иS2
такие, что если взято какое-то ребро изS1
, то взяты все рёбра изS1
и ни одно ребро изS2
(и наоборот), причём для вершиныv
одно из рёбер, выходящих из неё, будет вS1
, другое — вS2
.Запускаясь так от разных
v
, мы получим много пар множеств рёбер. Нам нужно из каждой пары множеств рёбер выбрать рёбра одного из них так, чтобы отрезки[a; b]
выбранных рёбер пересекались. Как это сделать? Это несложная подзадача.Пусть всего есть k пар множеств рёбер. Найдём для каждого множества рёбер пересечение всех рёбер этого множества. Пусть это
[l, r]
. Тогда добавим 1 на отрезке сl
поr
. Тогда нам нужно найти точку, в которую мы добавили 1k
раз, это и будет искомое значениеw
.Надо заметить, что отрезки
[l, r]
для множеств из одной пары могут пересекаться. Тогда нужно дополнительно вычесть 1 на отрезке, соответствующем их пересечению.P. S. Можно убрать
log
из ассимптотики, заменив ДО на разностный массив для прибаления на отрезке заO(1)
, но и так заходит.