Что происходит?

«Куча людей, которые разбиты на группы по три человека, сидят за одним компьютером пять часов, пьют сок, едят печенье, шоколадки и пытаются решить непонятные задачки», — описывает процесс Роман Муртазин из команды Samara NRU 3.

На полуфинале в Университете ИТМО собрались участники из стран Северо-Восточной Европы -106 команд из России и стран СНГ. Их цель — решить как можно большее количество задач из предложенных за максимально короткое время и в идеале — без ошибок и «вторых подходов», за которые начисляются штрафные баллы. Решением задачи считается программа, написанная на одном из языков программирования. Успешность же решения проверяется набором тестовых данных, заготовленных жюри. Если предложенная командой программа компилируется, выдает правильные ответы на все тесты, укладывается по количеству памяти и по времени выполнения, значит, решение оказалось верным. За каждую решенную задачу начисляется штрафное время — минуты, ушедшие на решение задачи с начала тура. Побеждает команда, решившая наибольшее количество задач.

«Это как решение математических задач из учебника. Только сложных, со звездочкой», — комментирует Никита Ларка, член команды University of Latvia 2.

Региональный полуфинал турнира по спортивному программированию ACM ICPC
Региональный полуфинал турнира по спортивному программированию ACM ICPC

Пятичасовой лимит — это много или мало?

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

Время создает и главную интригу соревнования. За час до окончания основного тура результаты, выведенные на экран, «замораживаются». Команда видит только результаты своих отправок (принято их решение или нет), а соперники и зрители — лишь попытки команды сдать задачу, не зная при этом, насколько они были успешными.

Региональный полуфинал турнира по спортивному программированию ACM ICPC
Региональный полуфинал турнира по спортивному программированию ACM ICPC

Тактика и работа в команде

«Мы с ребятами уже два года участвуем в ACM ICPC. Пожалуй, я могу предсказать каждое движение их мышки», — делится Никита Ларка, приехавший в Петербург из Латвии.

Как правило, у участников продуман целый механизм цикличной проверки и отладки полученных результатов. Действительно, при наличии одного устройства для решения важно правильно организовать работу каждого. Участники договариваются заранее о распределении полномочий, чтобы не перекрывать друг другу доступ к единственному компьютеру. Тактика у всех примерно одна: сначала из списка задач каждый выбирает для себя легкую — ту, которую он сможет решить самостоятельно. Задачи расположены не по уровню сложности, однако более простые, по словам представителей команды SPb ITMO University 2 (Николай Будин, Михаил Путилин, Дмитрий Якутов), найти можно сразу. Командная работа начинается на этапе вопросов с более высоким уровнем сложности — именно тогда требуются навыки и вклад каждого.

Подготовка

«Чтобы освоить все необходимые для успешного выступления на ACM ICPC навыки, нужно тратить очень много времени на их оттачивание. Пожалуй, самое сложное происходит не во время турнира, а до него», — такого мнения придерживаются представители команды Ural FU 2.

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

Региональный полуфинал турнира по спортивному программированию ACM ICPC
Региональный полуфинал турнира по спортивному программированию ACM ICPC

«Мы стараемся участвовать в различных сборах. Также в этом году к нам приезжали ребята, ставшие финалистами в прошлом году. Они устроили нам подобный пятичасовой контест, а после мы вместе разбирали задачи, которые решали», — рассказал Роман Муртазин.

Факторов, которые необходимо предусмотреть при подготовке, достаточно много. Поэтому участникам всегда кажется, что что-то еще не пройдено, и даже в перерывах они продолжают оттачивать мастерство.

Что дальше?

За час до окончания соревнований турнирная таблица «застыла», на тот момент верхнюю строчку в ней занимала первая команда Университета ИТМО с 8 решенными задачами — максимальный результат к тому времени — и одной задачей, которую они отправили жюри в последний час. Таким образом, при правильно решенной задаче команда SPb ITMO University 1 имела бы в активе девять решенных задач. На втором месте по предварительным результатам была команда SPb State University 1 c семью решенными и двумя отправленными на проверку задачами. На подобный результат претендовала и команда Moscow IPT 1, имея к последнему часу шесть решенных задач и три отправленных.

Обе отправленные на проверку задачи первой команды СПбГУ были засчитаны, что сделало их победителями регионального полуфинала с максимальным результатом — 9 задач. Пятерка лидеров регионального полуфинала ACM ICPC выглядит так:

1 место — SPb State University 1

2 место — SPb ITMO University 1

3 место — Moscow Institute of Physics & Technology 1

4 место — SPb ITMO University 2

5 место — Ural Federal University 1

Право представлять свой вуз в финале наиболее авторитетного чемпионата по программированию заслужили 17 команд. Заключительный этап ACM ICPC пройдет 20−25 мая в Рапид Сити в США.

Дарья Торопова,

Редакция новостного портала Университета ИТМО