Чемпионат ICPC (International Collegiate Programming Contest) в своем нынешнем формате существует уже 40 лет, и его популярность среди молодых программистов только растет. В прошлом году, например, было зарегистрировано рекордное количество участников – более 46 тысяч студентов по всему миру.

Чтобы попасть на финальные состязания, команды должны сначала пройти отбор в своем вузе, а затем региональный тур. В одной команде может быть не больше трех студентов не старше 25 лет. За пять часов программисты должны решить от восьми до тринадцати алгоритмических задач. Особенность задач в том, что их условия приближены к тем, что могут встретиться программистам-практикам в работе. На одну команду дается лишь один компьютер без доступа к интернету или другой внешней сети. Ребята должны показать навыки командной работы, которые также требуются при разработке реального программного продукта в любой IT-компании.

Полуфинал ACM ICPC в Университете ИТМО
Полуфинал ACM ICPC в Университете ИТМО

Для каждой задачи решением считается программа, написанная на одном из языков программирования: С++, Java, Python (c 2016 года), Kotlin (с 2017 года). Участники отправляют свое решение в тестирующую систему. Если программа компилируется, выдает правильные ответы на все тесты, укладывается в ограничения по количеству используемой памяти и времени выполнения, то решение засчитывается. За каждую решенную задачу начисляется штрафное время (время, ушедшее на решение с начала тура). Если же перед этим команда несколько раз отправляла в систему неверное решение, то за каждую проваленную попытку начисляется 20 штрафных минут. Однако если задача в итоге была решена, то штраф не начисляется. Побеждает та команда, которая справилась с большим количеством задач и заработала меньше штрафного времени.

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

Команда Университета ИТМО на полуфинале ACM ICPC
Команда Университета ИТМО на полуфинале ACM ICPC

По словам председателя жюри отборочного тура в Университете ИТМО Романа Елизарова, в ICPC побеждают самые настойчивые. Редко команды решают самые сложные задачи с первой попытки, подчеркнул он на церемонии награждения победителей полуфинала. Порой команды делают по пять и более попыток отправить в тестовую систему свой алгоритм. Бывают и случаи, когда команде вообще не удается найти правильное решение ни для одной из задач.

Полуфинал в регионе Северная Евразия проходил на четырех площадках. Кроме Университета ИТМО, программисты соревновались в Алтайском государственном техническом университете (Барнаул), Грузинском техническом университете (Тбилиси), Казахстанско-Британском техническом университете (Алматы). В этом году для того, чтобы получить диплом полуфиналиста ICPC, команда должна была решить минимум четыре задачи из 12. С этим справились 93 команды. Чтобы получить диплом второй степени, нужно было решить уже половину задач. Этот рубеж преодолели только 35 команд. Роман Елизаров подчеркнул, что это – уже большой результат, которого смогли достигнуть лишь 10% участников полуфинала. И почетными дипломами первой степени награждали 19 лучших команд, которые смогли решить семь и больше задач.

Роман Елизаров
Роман Елизаров

«Отличие полуфинала этого года в том, что приехали очень много новых команд, многие из которых ранее вообще не собирались вместе. Ранее новые сборные оставались позади из-за более сильных команд, которые уже не раз выступали на чемпионате. Сейчас же “ветераны” уступили место другим участникам. Также в этом году очень много заданий на полуфинальные соревнования прислали представители разных университетов из регионов. Обычно большая часть заданий составляется представителями Университета ИТМО, Санкт-Петербургского государственного университета, Академического университета, для этих же отборочных несколько задач пришло из московских вузов, одна из Белорусского государственного университета, а также одна пришла от представителя Google, победителя чемпионата прошлых лет. И это была их инициатива», – прокомментировала Виктория Волочай, один из организаторов полуфинала на площадке Университета ИТМО.

Количество команд, которые представляют определенный регион на финальных соревнованиях, каждый год практически одно и то же. Оно подсчитывается ежегодно в зависимости от заслуг команд региона на финале. В этом году регион Северная Евразия будут представлять 16 команд, показавших лучшие результаты в полуфинале. Один университет может представлять только одна лучшая команда, хотя участвовать в отборочных может несколько команд. Так, бороться за кубок ICPC 15-20 апреля в Пекине будут команды следующих вузов (перечислены в порядке убывания призовых мест): МФТИ (1 место в полуфинале), МГУ (2 место), Университета ИТМО (3 место), Санкт-Петербургского академического университета, Латвийского университета, Казахстанско-Британского технического университета, Уральского федерального университета, Университета Тарту, Санкт-Петербургского государственного университета, Пермского государственного университета, Университета Вильнюса, Белорусского государственного университета, ВШЭ, Московского авиационного института, Саратовского государственного университета, Новосибирского государственного университета.

Полуфинал ACM ICPC в Университете ИТМО
Полуфинал ACM ICPC в Университете ИТМО

«Все задачи, которые мы решили, давались относительно легко, нельзя сказать, что какие-то были сложнее или легче. Пожалуй, последняя была самая интересная: была дана криптосистема, которая имеет потенциальную уязвимость, и при некоторых условиях ее нужно было взломать. Что касается уровня задач, то нам не показалось, что они по сложности сильно отличаются от тех, что были в отборочных прошлых лет. Просто по статистике в этом году в целом команды решили меньше задач», – прокомментировала команда победителей полуфинала из Московского физико-технического института (Александр Голованов, Александр Останин, Никита Уваров).

Студенты подчеркнули, что они впервые участвовали в полуфинале чемпионата мира по программированию как единая команда. Соответственно, ранее ребята ни разу не участвовали в финале. Они смогли решить 10 задач за меньшее время, чем их ближайший соперник – команда МГУ, которая также справилась с 10 заданиями. На третье место полуфинала вышла сборная Университета ИТМО в составе Ильи Збаня, Ивана Белоногова и Михаила Путилина. Первые два участника в прошлом году привезли в Университет ИТМО кубок чемпионов ICPC, что сделало вуз семикратным победителем чемпионата. Михаил Путилин отправится в финал впервые, ранее он участвовал отборочных в составе других команд от Университета ИТМО.

Команда Университета ИТМО на награждении
Команда Университета ИТМО на награждении

«Конечно, мы были нацелены на победу в полуфинале, но главное было пройти в финал, что и удалось. В этот раз нам немного не повезло, но для финала в Пекине мы подготовимся по максимуму, чтобы достойно защитить имя вуза. В этом году в нашей команде новый участник, мы отлично сработались. Задачи на полуфинале были, на мой взгляд, очень похожи на те, что были в финале в прошлом году, поэтому команды прошли качественный отбор», – прокомментировал Илья Збань.

Ознакомиться с полными результатами полуфинала можно здесь.