Привет! При подготовке к школьным олимпиадам (например, Высшая проба, Ломоносов, ИОИП) затруднительно найти тренировку с возможностью дорешать задачи. Их просто нет.
В случае цикла интернет олимпиад и ИОИП тренировки за текущий год стали выкладывать, но предыдущие года отсутствуют, за исключением нескольких штук.
Большое количество школьников (в числе которых был и я, пока не потратил пару часов на изучение платформы Polygon, спасибо за нее MikeMirzayanov) не в курсе того, как загрузить архив олимпиады на Polygon. Такой вывод я сделал когда видел подобные вопросы в тематических беседах. Поэтому я посчитал что будет полезно поделиться этими знаниями.
Данный пост будет полезен скорее новичкам (хотя в числе спрашивающих было несколько кандидатов в мастера), остальные же не найдут ничего нового, и даже наоборот, уверен, поправят меня :)
Что понадобится
Архив олимпиады с тестами, чекером, правильным решением
Разбирать будем на примере финала Индивидуальной олимпиады школьников по информатике и программированию (ИОИП) за 2018-2019г. Переходим по ссылке http://nerc.itmo.ru/school/io/2018-2019.html и скачиваем полный архив олимпиады 24 марта с тестами.
Регистрируемся в Полигоне, создаем контест.
Нажимаем New Problem ; придумываем имя маленькими латинскими буквами. Переходим в список задач, находим нашу и нажимаем start. Ставим нужные ограничения и галочку напротив Are test points enabled? (У нас ведь IOI формат с подзадачами), нажимаем сохранить.
Переходим в statement. Выбираем язык, в name пишем название задачи. У нас в архиве есть файлы с условием, поэтому мы не будем все заполнять, а просто загрузим их. Листаем вниз, нажимаем Add Files. Переходим по нашему пути в папку с задачей, statements/russian/ и загружаем problem.tex и все файлы вида example.01, example.01.a
Повторно нажимаем на Add Files и проверяем условие по ссылке In PDF,
Переходим в чекер. Чекер — программа, которая проверяет правильность ответа. В случае, если ответ однозначен (когда вас просят вывести конкретное число/строку/массив) и чекера в архиве нет можно выбрать стандартный, который проверяет соответствие int/long long/double с определенной точностью и так далее. Как правило чекер всегда есть (а если нет, то бегите подальше с этой олимпиады). Загружаем и сохраняем чекер.
Поехали дальше. Валидатор загружать нам смысла нет. Он проверяет, правильно ли созданы тесты и удовлетворяют ли они всем ограничениям. Мы же можем быть уверены, что все в порядке.
Переходим на вкладку Tests
Нажимаем Add tests, from the files и загружаем тесты.
В случае, если имеются подзадачи (а обычно они имеются), ставим галочку напротив Enable groups.
Смотрим условие задачи. Например, в данной при ограничениях n <= 100 решение набирает не менее 47 балла.
Чтобы поставить сразу нескольким тестам группы, выделяем их и нажимаем на group в появившемся нижнем справа окне.
Если баллы начисляются за каждый пройденный тест, можем проделать точно так же и изменить у всех нужных тестов Point.
Иначе, если баллы начисляются за подгруппу, поставим это количество баллов напротив любого теста, например, последний. Баллы начисляются в случае прохождения всех тестов подгруппы, а значит, если мы пройдем все тесты, то пройдем и выбранный, и получим баллы за подзадачу.
Листаем вниз. В Points policy ставим COMPLETE_GROUP — баллы начисляются за полное прохождение.
Если для прохождения подзадачи нужно чтобы оно прошло предыдущие, ставим нужные группы в Dependencies.
Переходим в Solution files. Сюда обязательно надо загрузить решение. В папке с архивом, в solutions можно найти все возможные решения: правильные и неправильные, получающие AC, TL, ML, WA. Они нужны чтобы составители задач были уверены, что неправильные решения (не)проходят те подгруппы, которые должны.
На вкладке Invocations можно проверить решения.
Теперь нажимаем Commit Changes справа. Подтверждаем. Переходим в Package. Все почти готово, Осталось создать архив.
Нажимаем standard(или full), галочку Verify убирать нежелательно (она запускает все решения на тестах и проверяет, действительно ли неправильные решения неправильные и наоборот), Ждем несколько минут. Все. Задача готова, проделываем тоже самое со всеми остальными.
Теперь создаем контест.
Переходим на главную страницу, New contest, заполняем нужную информацию. Листаем вниз, справа нажимаем на Manage developers list и пишем хэндл: codeforces. Access:write.
Нажимаем на Add problems? и ставим галочки напротив созданных нами задач. Ставим права WRITE. Готово, Запоминаем contest UID, который начинается с 5043 и идем на Codeforces
Загружаем контест в Codeforces
Переходим в Тренировки — Мэшапы — Создать Мэшап. В задачах вставляем UID контеста. В меню редактирования выбираем формат IOI.
Готово!
Если вы обновите что либо в задаче и пересоберете пакет, в течении пары минут задача обновится в мэшапе. В мэшап можно пригласить других пользователей — добавить их хэндл, и у них появится доступ по ссылке, либо загрузить в группу.
Теперь можно поучаствовать в виртуальном соревновании и испытать свои силы.
На этом все, надеюсь этот пост был вам полезен!