Блог пользователя dalex

Автор dalex, 4 года назад, По-русски

Всем привет.

В этом году в рамках нашей олимпиады в Самаре (ссылка) также состоялось и экспериментальное соревнование с марафонской задачей. Такие задачи вы могли встречать на 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.
  • Проголосовать: нравится
  • +95
  • Проголосовать: не нравится

»
4 года назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

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.

  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Multiple test files force you to submit source code. I think in such problems output files should be submitted.

    • »
      »
      »
      4 года назад, # ^ |
        Проголосовать: нравится +10 Проголосовать: не нравится

      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.

»
4 года назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

А вы знаете какие-то сайты, где содержатся архивы такого рода задач (желательно с возможностью досдачи)? И можете, пожалуйста, накидать побольше примеров подобных марафонских соревнований (типа ICPC Challenge)?

  • »
    »
    4 года назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Точно такого же формата я знаю эти:

    • Google Hashcode — https://codingcompetitions.withgoogle.com/hashcode/archive Можно скачать условия и тесты, а также посмотреть таблицы результатов прошедших соревнований, т.е. тренироваться на них можно. Чекер надо писать самостоятельно (но обычно это все равно делается при решении).
    • Deadline24 — https://deadline24.pl/history/previous-problemsets/ — больше не проводится. В квалификационном раунде всегда было 2-3 задачи такого типа. Можно скачать условия и тесты, но таблицы результатов нет. Остается только догадываться, какие скоры были у лучших команд.
    • Pizza — https://contest.pizza — новых анонсов не было. Последний раз условия были и на английском языке тоже. Аналогично, в квалификационном раунде 2-3 задачи такого типа. Более детальных ссылок не могу дать, т.к. сайт сейчас не работает.