Правила Яндекс.Алгоритма 2013

1. Условия

В конкурсе могут участвовать люди, которым на момент начала тестового раунда (27 июня 2013 года) исполнилось 18 лет. К участию не допускаются сотрудники Яндекса и их близкие родственники, а также лица, непосредственно задействованные в организации конкурса. Люди в возрасте 14–18 лет могут участвовать только в тестовом, квалификационном и отборочных раундах — к финалу конкурса они не могут быть допущены.

2. Регистрация

Для участия в конкурсе необходимо зарегистрироваться. Организатор оставляет за собой право дисквалифицировать участника, сообщившего при регистрации заведомо ложные сведения о себе. Регистрация будет открыта 30 мая 2013 года в 17:00 по московскому времени (UTC+4) и продлится до конца квалификационного раунда.

3. Система оценки раундов: TCM/Time

Проведение турнира

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

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

Максимальное время прохождения теста указано в условии каждой задачи. Если этот лимит превышен, решение считается неверным.

Участник может отправлять решения на проверку «в открытую» или «втёмную». Для каждой задачи выбрать способ отправки решения можно только один раз. Результаты проверки решения доступны участнику сразу же.

При отправке решения «в открытую», оно сразу же проверяется полным набором системных тестов, после чего участнику сообщается, зачтено решение или нет. Если оно не зачитывается, участнику передается тип ошибки и номер теста, на котором она произошла.

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

Перечень возможных ошибок

Сообщение Сообщается ли номер теста? При сдаче «в открытую» При сдаче «втёмную» Возможная причина
OK Нет Решение зачтено Решение прошло все промежуточные тесты Программа верно работает на соответствующем наборе тестов
Compilation error Нет Компиляция программы завершилась с ошибкой Компиляция программы завершилась с ошибкой
Wrong answer Да Ответ неверен Ответ на один из промежуточных тестов неверен 1. ошибка в программе 2. неверный алгоритм
Presentation error Да Тестирующая система не может проверить выходные данные, так как их формат не соответствует описанному в условиях задачи Тестирующая система не может проверить выходные данные на одном из промежуточных тестов, так как их формат не соответствует описанному в условиях задачи 1. неверный формат вывода 2. программа не печатает результат 3. лишний вывод
Time-limit exceeded Да Программа превысила установленный лимит времени Программа превысила установленный в условии лимит времени на одном из промежуточных тестов 1. ошибка в программе 2. неэффективное решение
Memory limit exceeded Да Программа превысила установленный в условиях лимит памяти Программа превысила установленный в условиях лимит памяти на одном из промежуточных тестов 1. ошибка в программе (например, бесконечная рекурсия) 2. неэффективное решение
Run-time error Да Программа завершила работу с ненулевым кодом возврата Программа завершила работу с ненулевым кодом возврата на одном из промежуточных тестов 1. ошибка выполнения 2. программа на C или C++ не завершается оператором return 0 3. ненулевой код возврата указан явно

При возникновении ошибки Compilation error присланное решение не будет проверяться ни на одном из тестов, а участнику сразу будет сообщено об ошибке компиляции. Такая попытка не будет учитываться при последующем вычислении штрафа. При возникновении ошибок Run-time error, Memory limit exceeded и Time-limit exceeded вывод программы не проверяется.

Отправленные подряд решения с идентичным исходным кодом от одного и того же участника игнорируются. Если решение отправлено «втёмную» и признано неправильным на промежуточных тестах, оно не учитывается при последующем вычислении штрафа.

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

Подсчёт промежуточных и окончательных результатов

Участники ранжируются по количеству принятых решений. Участники, решившие одинаковое количество задач, ранжируются по суммарному времени решения.

Суммарное время решения определяется как сумма времени решения и бонусов за сдачу «втёмную» для каждой принятой задачи.

  • При сдаче «в открытую», время решения задачи считается в секундах от начала соревнования до момента отправки правильного решения, плюс 20 штрафных минут за каждое непринятое решение.

  • При сдаче «втёмную», из времени решения вычитается n секунд, где n равно (количество не решивших * продолжительность турнира в секундах) / количество участников.

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

В таблице текущих результатов правильные решения, отправленные «в открытую», обозначены знаком +, после которого следует количество забракованных решений. Если задача сдана с третьей попытки, то в таблице будет стоять +2, если сразу — +. Непринятые задачи обозначаются знаком −, после которого следует количество попыток.

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

По завершении турнира проходит проверка отправленных «втёмную» решений полным набором системных тестов.

В таблице итоговых результатов те из них, что прошли системные тесты, обозначаются как ✓, а не прошедшие — как X.

4. Структура конкурса: гран-при 30

Конкурс состоит из шести раундов. Время начала указано по московскому времени (UTC+4). В отборочный этап могут пройти только участники, сдавшие хотя бы одну задачу в тестовом или квалификационном раундах.

Тестовый раунд составлен из уже использованных ранее в других олимпиадах и конкурсах задач. Для всех остальных раундов подготовлены оригинальные задачи.

Тестовый раунд состоится 27 июня в 21:00. Двести лучших участников пройдут в отборочный этап конкурса, минуя квалификационный раунд. Ещё пятьдесят человек выбираются произвольным образом и также сразу попадают в отборочный этап.

Квалификационный раунд начнется 8 июля в 19:00 и продлится 24 часа. Для участия в нём зарегистрированный участник должен нажать на ссылку «Начать соревнование», после чего для него начинается 100-минутный раунд с виртуальным участием. 2000 лучших участников пройдут в отборочный этап.

Таким образом, в отборочном этапе принимают участие 2250 человек. Этап состоит из трех раундов продолжительностью 100 минут. Они оцениваются отдельно по системе «гран-при 30»: тридцать лучших участников каждого раунда получают зачетные очки в соответствии с приведенной ниже таблицей.

Место 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Очки 100 80 60 50 45 40 36 32 29 26 24 22 20 18 16
Место 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Очки 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

Если несколько участников имеют равный результат, зачетные очки делятся между ними поровну.

Первый раунд начнётся 14 июля в 21:00.

Второй раунд начнётся 18 июля в 13:00.

Третий раунд начнётся 22 июля в 5:00.

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

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

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

Результат по сумме раундов для этих 13 участников рассчитывается как сумма зачетных очков, сумма количества решенных задач и сумма штрафного времени в трех раундах.

Таким образом, в финальный раунд попадают 25 участников из 2250, сдавших хотя бы одну задачу на отборочном этапе.

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

Финал конкурса пройдёт в Санкт-Петербурге в Доме ученых им. М. Горького (Дворцовая набережная, 26) 21–23 августа, сам финальный раунд — 22 августа. Каждый финалист должен подтвердить свое участие до 25 июля. В противном случае он будет дисквалифицирован.

5. Футболки

Все участники финального раунда получат футболки с символикой конкурса. Их также получат 75 не прошедших в финал участников с лучшими результатами по сумме всех раундов отборочного этапа.

6. Призы

Организатор оплачивает всем участникам финального раунда проезд до Санкт-Петербурга и проживание в гостинице в одноместном номере 21–23 августа.

Победители финального раунда получают денежные призы:

I место — 300 тысяч рублей;

II место — 150 тысяч рублей;

III место — 90 тысяч рублей.

Денежные призы участники получают в указанном объеме, а налог на доходы физических лиц (НДФЛ) организатор удерживает и выплачивает самостоятельно.