Четвертьфинал чемпионата мира по программированию 2021
Версия для печати

Правила соревнования

Соревнование проводятся по правилам Международного студенческого чемпионата мира по программированию (ICPC). Подобные соревнования предоставляют студентам возможность взаимодействия со студентами из других учебных заведений, оттачивания и демонстрации своих навыков решения алгоритмических задач, программирования и работы в команде.

Организация соревнования

В организационный комитет соревнования входят жюри, программный комитет, технический комитет.

Председатель оргкомитета назначает председателя жюри, председателя программного комитета и председателя технического комитета.

Жюри соревнования обеспечивает проверку работ участников, составляет таблицу результатов соревнования, определяет победителя и призёров. Жюри принимает окончательные решения о дисквалификации участников, нарушающих правила соревнования. Жюри разбирает вопросы, возникшие в результате непредвиденных обстоятельств. Решения жюри окончательны и обжалованию не подлежат.

Программный комитет подготавливает комплект задач соревнования. После соревнования его представители проводят разбор задач.

Технический комитет обеспечивает работоспособность программного и аппаратного обеспечения, следит за порядком на соревнованиях.

Допуск участников

Каждая команда состоит из трёх участников из одного учебного заведения. Учебное заведение — вуз, подразделение вуза (институт, филиал) или колледж/техникум, имеющий отдельную учётную запись на сайте icpc.baylor.edu. Каждый член команды должен удовлетворять требованиям правил Чемпионата мира:

  • Участник должен являться:
    • студентом, обучающимся по программе бакалавриата, специалитета или магистратуры, или аспирантом, или
    • студентом колледжа или техникума, получившим эквивалент полного среднего образования.
    Форма обучения значения не имеет.
  • Участник, выступавший в двух финалах Чемпионата мира, не допускается к соревнованиям.
  • Участник, выступавший в пяти сезонах Чемпионата мира, не допускается к соревнованиям. Сезон считается, если участник выступал в ходе него в основном туре четвертьфинала или в полуфинале.
  • Должно выполняться как минимум одно из двух условий:
    • участник родился не ранее 1 января 1998 года;
    • участник впервые зачислен в учебное заведение не ранее 1 января 2017 года.

При наличии свободных мест к внеконкурсному участию могут быть допущены команды, не удовлетворяющие данным правилам. Внеконкурсные команды отмечаются символом * и не учитываются при подведении итогов соревнования.

При регистрации команда должна указать, кто является её тренером. Тренер может совпадать с одним из участников этой команды, но не может являться участником другой команды. Тренер является официальным контактным лицом команды и может защищать её интересы при общении с жюри.

Проведение соревнования

Соревнование состоит из пробного и основного туров.

Пробный тур длится не более двух часов. В ходе него участники могут ознакомиться с рабочими местами и программным обеспечением соревнования, решив несколько простых задач. Во время пробного тура тренер может присутствовать на рабочем месте команды. Результаты пробного тура не учитываются при подведении итогов соревнования.

Основной тур длится 5 часов. Жюри имеет право продлить тур в случае непредвиденных обстоятельств. Во время основного тура командам предлагается для решения от 8 до 13 задач. Жюри принимает решения на языках программирования C++, Java, C#, Pascal, PascalABC, Python и Kotlin. Отправка решений осуществляется во время тура с помощью программного обеспечения соревнования. Через некоторое время после отправки команде становится доступен результат проверки. После окончания тура решения не принимаются.

Участники могут использовать бумажную литературу (справочники, словари, листинги алгоритмов). Разрешается использование любого программного обеспечения, установленного на используемом командой компьютере. Недопустимо использование любых сайтов, кроме сайта проверяющей системы.

Во время основного тура участники могут общаться только с членами своей команды и членами технического комитета. Команда может обратиться к жюри с вопросом по условию какой-либо задачи. Вопрос должен быть сформулирован на русском или английском языке и предполагать ответ «Yes» или «No». Вопрос задаётся с помощью программного обеспечения соревнования. Жюри может ответить на поставленный вопрос «Yes», «No», «Read the problem statement» или «No comments». Жюри может разослать ответ на вопрос всем участникам соревнования.

Команды могут быть дисквалифицированы за несоблюдение данных правил, а также за совершение действий, которые могут нарушить работу программного обеспечения соревнования. За нарушение правил во время пробного тура команда может быть отстранена от дальнейшего участия в соревновании.

Проверка решений

Решением задачи является файл с исходным текстом программы, написанной на одном из разрешённых языков программирования. Команда может решать задачи на различных языках программирования. Допустимый размер исходного текста одной программы с решением ограничен.

Входные данные подаются программе в стандартном потоке ввода. Программа должна выводить ответ в стандартный поток вывода.

В решениях задач запрещается:

  • работа с любыми файлами;
  • выполнение внешних программ и создание новых процессов;
  • работа с GUI-элементами (окнами, диалогами и т.д.);
  • работа с внешними устройствами (принтером, звуковой картой и т.д.);
  • использование сетевых средств.

При проверке решений используются заранее объявленные компиляторы. Однако набор функций, доступных программам во время проверки, ограничен. В ходе пробного тура команды должны убедиться в доступности необходимых им функций. До начала основного тура команда может обратиться к жюри с просьбой расширения набора доступных функций.

Решение проверяется путём последовательного запуска на наборе тестов, который недоступен участникам и является одинаковым для всех команд. Решение засчитывается в том случае, если оно выдаёт верные ответы на все тесты. Набор тестов не предоставляется участникам даже после окончания соревнования. Тестирование производится автоматически, поэтому программы должны в точности соблюдать форматы входных и выходных данных, описанные в условии каждой задачи. Все входные данные предполагаются корректными и удовлетворяющими всем ограничениям, указанным в условии задачи.

Для каждой задачи определены максимальное время выполнения и объём доступной памяти для одного теста. Если на одном из тестов программа превысила это время или выделила больше памяти, решение считается неверным.

Если компиляция решения, отправленного на проверку, завершилась с ошибкой, команда получает сообщение Compilation error. Если компиляция завершилась успешно, начинается его проверка на наборе тестов. Первыми тестами в наборе являются тесты из условия задачи. По результатам проверки команде сообщается о том, зачтено решение или нет. Если решение зачтено, команда получает сообщение Accepted. Если решение не зачтено, сообщается информация о первой случившейся ошибке: тип ошибки и номер теста, на котором она произошла. В этом случае решение не проверяется на последующих тестах.

Тип ошибки может быть одним из следующих:

сообщение расшифровка возможная причина
Wrong answer N
Presentation error N
ответ программы неверен ошибка в программе; неверный алгоритм; программа выводит ответ в файл
Runtime error N программа аварийно завершила работу деление на ноль; бесконечная рекурсия; массивы имеют недостаточный размер
Time limit exceeded N программа не закончила работу в установленное время бесконечный цикл; неэффективное решение
Memory limit exceeded N программа превысила установленное ограничение по памяти утечка памяти; неэффективное решение

При возникновении ошибок Runtime error, Memory limit exceeded, Time limit exceeded вывод программы не проверяется.

Результаты

Команды ранжируются по числу решённых (т.е. зачтённых) задач. При равенстве числа решённых задач выше ставится команда, имеющая меньшее суммарное штрафное время. При равенстве числа решённых задач и штрафного времени выше ставится команда, которая раньше сдала свою последнюю зачтённую задачу.

Суммарное штрафное время определяется как сумма штрафных времён каждой зачтённой задачи. Штрафное время отдельной задачи определяется как время от начала тура до момента посылки первого решения, признанного правильным, плюс 20 минут за каждую предыдущую посылку решения на эту задачу (кроме вердиктов Compilation Error). Нерешённые задачи никакого вклада в суммарное штрафное время не вносят.

Во время тура командам доступна таблица с текущими результатами. За час до конца тура таблица замораживается. Все промежуточные результаты являются неофициальными. Официальные результаты объявляются на закрытии соревнования.

Апелляция

Если команда считает, что в одной или нескольких задачах содержатся ошибки, она может подать апелляцию. Апелляция подаётся в письменном виде во время или сразу после окончания основного тура. Команда должна изложить основания для апелляции и предположения о возможном характере ошибки.

При наличии апелляций председатель жюри назначает апелляционную комиссию. Если комиссия признает, что некоторые тесты являются некорректными (противоречащими условию задачи), то эти тесты могут быть исправлены или удалены, а задача перепроверена (будут перепроверены решения всех команд, а не только той, которая подала апелляцию).