1.1 Каждому участнику на время участия в соревновании предоставляется один компьютер. Установленное на компьютере участников ПО должно обеспечивать возможность связи с тестирующей системой, а также возможность локальной разработки и тестирования решений задач на языках программирования, планируемых к использованию.
1.2 Во время соревнования участники решают предложенные задачи. Решением является программа (файл с исходным текстом), написанная на одном из поддерживаемых тестирующей системой языков программирования. Участник может решать различные задачи на различных языках программирования. Во время проведения соревнования взаимодействие участников и Жюри осуществляется с помощью системы проведения соревнований ejudge. Взаимодействие с тестирующей системой происходит с использованием браузера. Ниже приведён главный экран системы:
Сверху расположены два горизонтальных меню: меню входа-выхода и настроек (самая верхняя полоса) и основное меню (полоса чуть ниже). Далее идёт строка состояния. В ней указано состояние контеста (Running - контест идёт), текущее время и общее количество попыток, которые ещё можно сделать по всем задачам в сумме. Также в строке состояния указывается наличие непрочитанных сообщений от жюри. Внизу указывается состояние сервера: в частности, время старта контеста и продолжительность. Если контест не стартовал, указывается время, в которое произойдёт автоматический старт.
1.3 После старта соревнований участнику становятся доступными условия задач (в PDF формате на русском языке), архив с материалами к задачам, а также информация о параметрах задач в тестирующей системе (таких, как ограничение по памяти, ограничение по времени и имена входных и выходных файлов).
Для скачивания условий необходимо выбрать пункт Statements основного меню:
Для скачивания архива с материалами к задачам (обычно содержит тесты, приведённые в условии в качестве примеров к задачам) необходимо выбрать пункт Samples ZIP основного меню:
Для просмотра информации о задачах необходимо выбрать пункт Summary основного меню:
Параметры задач выдаются участнику в виде следующей таблицы:
Значения колонок расшифровываются следующим образом:
Название колонки | Значение |
---|---|
Short name | Короткое имя (идентификатор) задачи. Обычно это заглавная латинская буква от A до Z. |
Long name | Полное название задачи. |
Input file name | Откуда читать данные. Значение Standard input указывает, что читать данные нужно со стандартного потока входа (stdin), то есть "с клавиатуры". |
Output file name | Куда выводить результат. Значение Standard output указывает, что выводить результат нужно в стандартный потока вывода (stdout), то есть "на экран". |
Time Limit | Ограничение по времени на выполнение программы на одном тесте, в миллисекундах. Если программа на каком-то тесте превысит это время, участник получит на этом тесте вердикт Time Limit Exceeded. |
Language TL's | Ограничения по времени для отдельных компиляторов. Если они указаны, то при проверке решения под этим компилятором вместо ограничения из предыдущего пункта используется указанное. |
Memory Limit | Ограничения по памяти в мебибайтах (220 байт). Если программа при выполнении займёт больше памяти, чем указаное ограничение, участник получит на этом тесте вердикт Memory Limit Exceeded. |
Stack Limit | Ограничения на количество используемого стека в мебибайтах (220 байт). Обычно совпадает с Memory Limit. В случае, если оно меньше, участник при выходе стека за указанное ограничение также получит вердикт Memory Limit Exceeded. |
Source Limit | Ограничения на размер отправляемого кода в байтах. Если размер отправляемого кода превысит данное ограничение, программу отправить не удастся и будет получено сообщение о превышении размера файла. |
Submits Left | Количество попыток, оставшееся для отправки задачи. Если это количество станет равно нулю, решение по этой задаче отправить больше не удастся. Кроме того, есть общий лимит на посылки, отображаемый в строке состояния. |
Status | Актуальный вердикт по задаче. Расшифровывается ниже, в списке вердиктов. Зелёный цвет строки обозначает, что задача сдана, красный - что последняя попытка завершилась с ошибкой. |
Failed test | Номер теста, на котором произошла ошибка при последней отправке задачи. Решение проходит тесты в фиксированном порядке, примеры к задачам идут первыми в том порядке, в котором они заданы в условии. |
Run ID | Идентификатор посылки в тестирующей системе. |
В случае расхождения указанных в условии ограничений и информации о задачах актуальными являются данные из информации по задачам (Summary) (они берутся непосредственно из тестирующей системы).
1.4 Проверка представленных решений проводится во время соревнований. По мере готовности участник посылает свои решения в систему для проверки. Для отправки решений на тестирование участник выбирает пункт Submit основного меню:
Затем из появившегося выпадающего меню участник выбирает название задачи:
Затем участник выбирает компилятор, который будет использован системой для компиляции решений:
Затем файл, содержащий решение задачи:
После чего отправляет решение:
1.5 После отправки решения открывается список посылок участника, отсортированный по убыванию времени отправки (самая свежая посылка находится вверху):
В списке посылок участнику сообщается, зачтено решение или нет. Если решение не зачтено, сообщается тип ошибки и номер первого теста, на котором произошла ошибка. В случае ошибки компиляции по ссылке View в колонке с заголовком View Report доступна диагностика компилятора.
Также информация о статусе последней сделанной посылки доступна в пункте Summary (информация по задачам).
1.6 Решения участников запускаются под OS Linux. Решение проверяется путём запуска на наборе тестов, который недоступен участникам и является одинаковым для всех участников.
Каждый тест представляет собой набор входных данных, удовлетворяющий описанноым в условии задачи формату и ограничениям. Запуски решения на каждом тесте производятся независимо. Попытки
несанкционированной передачи информации между запусками являются нарушением правил и ведут к немедленной дисквалификации участника.
Первыми тестами в наборе тестов всегда являются тесты из условия задачи (продублированные в архиве с материалами к задачам). Эти тесты идут в том же порядке, в котором они приведены в условии задачи
и/или пронумерованы в архиве с материалами к задачам).
Решение засчитывается в том и только в том случае, если оно выдаёт верные ответы на все тесты. Тестирование производится автоматически, поэтому программы должны в точности соблюдать
форматы входных и выходных данных, описанные в условии каждой задачи. Если не оговорено отдельно, все входные данные предполагаются корректными и удовлетворяющими всем ограничениям,
указанным в условии задачи.
1.7 Результаты проверки (вердикты) тестирующей системы расшифровываются следующим образом (для интерактивных задач список вердиктов расширен):
Сообщение | Номер теста сообщается? | Когда возникает | Возможная причина |
---|---|---|---|
OK | нет | решение зачтено | Программа на соответствующем наборе тестов работает верно |
Check Failed | нет | Проверка невозможна | Ошибка в задаче на стороне жюри. При получении такого вердикта отправляйте сообщение в жюри с указанием номера посылки (Run ID). |
Compilation error | нет | компиляция программы завершилась с ошибкой | 1. В программе допущена синтаксическая или семантическая ошибка 2. Неправильно выбран компилятор |
Wrong answer | да | ответ не верен | 1. Ошибка в программе 2. Неверный алгоритм |
Presentation error | да | программа проверки не может проверить выходные данные, так как их формат не соответствует описанному |
1. Неверный формат вывода (например, текст вместо целого числа) 2. Программа не выводит результат 3. Лишний вывод (непробельные символы в конце ввода) |
Time-limit exceeded | да | Программа превысила установленный в условии лимит времени | 1. Ошибка в программе (например, бесконечный цикл) 2. Неэффективное решение |
Memory limit exceeded | да | программа превысила установленный в условии лимит памяти | 1. Ошибка в программе (например, бесконечная рекурсия) 2. Неэффективное решение |
Run-time error | да | Программа завершила работу с ненулевым кодом возврата | 1. Ошибка выполнения (деление на 0/SIGSEGV etc) 2. Программа на языке C/C++ не завершается оператором return 0 3. Ненулевой код возврата указан явно |
Queries Limit Exceeded | да | Для интерактивных задач: превышено количество запросов | Программа сделала больше запросов, чем указано в условии |
Invalid Request | да | Для интерактивных задач: запрос не соответствует формату условия | Программа сделала некорректный запрос (например, вывела double вместо целого) |
Extra Data | да | Для интерактивных задач: в конце запроса содержатся лишние данные | Программа передала данные, не требуемые протоколом взаимодействия |
Insufficient Data | да | Для интерактивных задач: неполный запрос | Программа передала не все данные, требуемые протоколом взаимодействия. Возможно, она аварийно прекратила работу. |
Wall Time Limit Exceeded | да | Для интерактивных задач: длительное бездействие | Программа слишком долго ожидает ввода от интерактора. Возможно, при отправке запроса отсутствует перевод строки или же не сброшен (flush) буфер после вывода запроса. |
При возникновении ошибки Compilation error программа не запускается ни на одном тесте. При возникновении ошибок Run-time error, Memory limit exceeded, Time-limit exceeded, Wall time-limit exceeded вывод программы не проверяется (то есть возможна как ситуация, когда во всех этих случаях выведенный ответ верен, так и ситуация, когда выведенный ответ неверен и получил бы вердикт Wrong Answer. В интерактивных задачах вердикт выдаётся сразу же, как только произошло соответствующее событие.
1.8 В случае, если условие какой-либо задачи неполно (не содержит ограничений на переменные либо не имеет однозначной интерпретации), а также при получении вердикта Check Failed участник может обратиться к Жюри с вопросом. Для того, чтобы задать вопрос, используется пункт "Ask Jury" основного меню:
В выпадающем меню найдите название задачи, с которой связан вопрос:
Затем заполните поля с темой и текстом сообщения и отправьте вопрос кнопкой Send:
Жюри может ответить на поставленный вопрос "Да", "Нет", "См. Условие", если считает, что ответ на поставленный вопрос содержится в условии задачи, и "Без комментариев", если вопрос на самом деле относится к решению задачи. Любой другой ответ является уточнением к условию и рассылается всем участникам соревнований. Если в системе есть непрочитанное сообщение от жюри, строка состояния меняет цвет и на ней появляется текст про непрочитанные сообщения:
Для того, чтобы прочитать сообщения от судей, используется пункт "Jury Messages" в основном меню:
Появится список сообщений (как отправленных участником, так и сообщений, полученных участником от судей). Для просмотра сообщений из списка используется ссылка "View":
Если в поле From указано judges, то это сообщение от жюри, иначе это сообщение, посланное в жюри самим участником. Поле Flags может принимать, в частности, значения N (ещё не прочитано) и A (отвечено, применяется к сообщениям, которые участник отправлял в жюри). При переходе по ссылке открывается текст сообщения, а само сообщение помечается как прочитанное (в частности, исчезнет напоминание в строке состояния).
Сообщение от жюри по какой-то задаче "The problem is under investigation" обозначает, что жюри исследует задачу на предмет возможных ошибок в ней. Участник может отправлять решения, но правильный вердикт получит только после того, как проблемы в задаче будут исправлены (или жюри убедится, что их нет) и жюри разошлёт сообщение "The problem is OK now". Все попытки, сделанные по такой задаче до внесения исправлений, после исправления будут перетестированы. При этом успешные (получившие вердикт OK) попытки обычно не перетестируются.
1.9. Посылки одного и того же участника с идентичным исходным текстом, сделанные подряд, игнорируются. Если посылка была признана неправильной по причине ошибки компиляции, такая посылка не учитывается при последующем вычислении штрафа за успешно сданные задачи.
1.10 Участники ранжируются по количеству сданных задач. Участники, сдавшие одинаковое количество задач, ранжируются по суммарному времени решения.
1.11 Суммарное время решения определяется как сумма округлённых с точностью до секунды времён решения для каждой принятой задачи. Время решения задачи определяется как время в секундах от начала соревнования до момента посылки решения, признанного правильным, плюс 20 штрафных минут за каждое забракованное решение. Задачи, не признанные решёнными к моменту окончания соревнования, никакого вклада в суммарное время не дают (в том числе, и в виде штрафов за забракованные решения).
Для просмотра таблицы результатов используется пункт "Standings" в основном меню:
1.13 В таблице текущих результатов принятые задачи обозначены знаком "+", после которого следует количество забракованных решений этой задачи (если таковые имеются). Например, если задача сдана с третьей попытки, то в таблице будет стоять "+2", если сразу - то "+". Задачи, отправленнные в систему и не принятые, обозначаются знаком "-", после которого следует количество попыток по данной задаче.
1.14 Итоговым результатом соревнования считается положение участников в таблице текущих результатов на момент окончания времени соревнования (после проверки всех отправленных во время соревнования решений).