Всем привет.
В этом году в рамках нашей олимпиады в Самаре (ссылка) также состоялось и экспериментальное соревнование с марафонской задачей. Такие задачи вы могли встречать на Marathon 24, Deadline 24, Google Hash Code, и вот совсем недавно прошел ICPC Challenge. Оказывается, Codeforces поддерживает и такие задачи тоже, и этот пост послужит инструкцией, как же такие задачи делать. Раз уж MikeMirzayanov нигде об этом не написал, это сделаю я.
Ссылка на контест: 2020, XIII Самарская областная межвузовская олимпиада по программированию (марафонская задача)
Длительность в оригинальном соревновании была 4 часа, так что можете порешать виртуально и сравнить с результатами онсайта:
Итак, как же делать такие задачи и такие соревнования? Оказывается, все очень просто. Отличия от обычных задач следующие:
- в задаче должен быть всего один тест, который надо предварительно куда-нибудь загрузить (например, на gist.github.com), а потом дать участникам ссылку для скачивания.
- в чекере нужно использовать функцию
void quitp(double points, const std::string &message = "")
илиtemplate<typename F> void quitp(F points, const char *format, ...)
. - в чекере нельзя выводить ничего в stderr (если быть точным, нельзя слишком много выводить в stderr), это почему-то ломает его и он начинает всегда возвращать 0 баллов. У меня нет идей, почему это происходит, но что есть то есть.
- в настройках контеста нужно поменять тип контеста на IOI (по умолчанию он ICPC).
- в настройках контеста нельзя выставить язык Text, зато существует волшебный язык PHP, который для таких задач работает аналогично Text и просто средиректит текст программы (ваш аутпут) в выходной поток. Надо только проследить, чтобы любой возможный ответ на тест не превышал source limit.
I think there is an upper limit on the score that we can provide in
quitp
. When we had tried to organize such a contest sometime ago, our checker kept crashing because the score was exceeding 10^7 or 10^8 (I don't remember). We couldn't think of a nice way to fix it, so we just scaled it down by a constant factor in the end.We also had mutliple test files, and it was summing all their scores up, so that is another possible contributor to the total score blowing up.
Multiple test files force you to submit source code. I think in such problems output files should be submitted.
That kinda gives an edge to people with better hardware. We wanted to maintain a more consistent execution platform. But anyway, I understand your point.
А вы знаете какие-то сайты, где содержатся архивы такого рода задач (желательно с возможностью досдачи)? И можете, пожалуйста, накидать побольше примеров подобных марафонских соревнований (типа ICPC Challenge)?
Точно такого же формата я знаю эти: