Чемпионат ICPC (International Collegiate Programming Contest) в своем нынешнем формате существует уже 40 лет, и его популярность среди молодых программистов только растет. В прошлом году, например, было зарегистрировано рекордное количество участников – более 46 тысяч студентов по всему миру.
Чтобы попасть на финальные состязания, команды должны сначала пройти отбор в своем вузе, а затем региональный тур. В одной команде может быть не больше трех студентов не старше 25 лет. За пять часов программисты должны решить от восьми до тринадцати алгоритмических задач. Особенность задач в том, что их условия приближены к тем, что могут встретиться программистам-практикам в работе. На одну команду дается лишь один компьютер без доступа к интернету или другой внешней сети. Ребята должны показать навыки командной работы, которые также требуются при разработке реального программного продукта в любой IT-компании.
Для каждой задачи решением считается программа, написанная на одном из языков программирования: С++, Java, Python (c 2016 года), Kotlin (с 2017 года). Участники отправляют свое решение в тестирующую систему. Если программа компилируется, выдает правильные ответы на все тесты, укладывается в ограничения по количеству используемой памяти и времени выполнения, то решение засчитывается. За каждую решенную задачу начисляется штрафное время (время, ушедшее на решение с начала тура). Если же перед этим команда несколько раз отправляла в систему неверное решение, то за каждую проваленную попытку начисляется 20 штрафных минут. Однако если задача в итоге была решена, то штраф не начисляется. Побеждает та команда, которая справилась с большим количеством задач и заработала меньше штрафного времени.
Текущие результаты решений всех команд можно видеть на специальной таблице прямо во время контеста. Но за час до окончания основного тура таблицу результатов «замораживают». В заморозку команда видит результаты только своих отправок и попытки соперников, не зная их результата. И только на награждении таблицу «размораживают». Промежуточные результаты начинают меняться, а лидирующие команды постепенно передвигаются вверх рейтинга. Победителей никто не знает до самого объявления первых двух мест, потому что результаты таблицы постоянно обновляются. Так, на чемпионате создается интрига и атмосфера настоящих состязаний в живом времени.
По словам председателя жюри отборочного тура в Университете ИТМО Романа Елизарова, в ICPC побеждают самые настойчивые. Редко команды решают самые сложные задачи с первой попытки, подчеркнул он на церемонии награждения победителей полуфинала. Порой команды делают по пять и более попыток отправить в тестовую систему свой алгоритм. Бывают и случаи, когда команде вообще не удается найти правильное решение ни для одной из задач.
Полуфинал в регионе Северная Евразия проходил на четырех площадках. Кроме Университета ИТМО, программисты соревновались в Алтайском государственном техническом университете (Барнаул), Грузинском техническом университете (Тбилиси), Казахстанско-Британском техническом университете (Алматы). В этом году для того, чтобы получить диплом полуфиналиста ICPC, команда должна была решить минимум четыре задачи из 12. С этим справились 93 команды. Чтобы получить диплом второй степени, нужно было решить уже половину задач. Этот рубеж преодолели только 35 команд. Роман Елизаров подчеркнул, что это – уже большой результат, которого смогли достигнуть лишь 10% участников полуфинала. И почетными дипломами первой степени награждали 19 лучших команд, которые смогли решить семь и больше задач.
«Отличие полуфинала этого года в том, что приехали очень много новых команд, многие из которых ранее вообще не собирались вместе. Ранее новые сборные оставались позади из-за более сильных команд, которые уже не раз выступали на чемпионате. Сейчас же “ветераны” уступили место другим участникам. Также в этом году очень много заданий на полуфинальные соревнования прислали представители разных университетов из регионов. Обычно большая часть заданий составляется представителями Университета ИТМО, Санкт-Петербургского государственного университета, Академического университета, для этих же отборочных несколько задач пришло из московских вузов, одна из Белорусского государственного университета, а также одна пришла от представителя Google, победителя чемпионата прошлых лет. И это была их инициатива», – прокомментировала Виктория Волочай, один из организаторов полуфинала на площадке Университета ИТМО.
Количество команд, которые представляют определенный регион на финальных соревнованиях, каждый год практически одно и то же. Оно подсчитывается ежегодно в зависимости от заслуг команд региона на финале. В этом году регион Северная Евразия будут представлять 16 команд, показавших лучшие результаты в полуфинале. Один университет может представлять только одна лучшая команда, хотя участвовать в отборочных может несколько команд. Так, бороться за кубок ICPC 15-20 апреля в Пекине будут команды следующих вузов (перечислены в порядке убывания призовых мест): МФТИ (1 место в полуфинале), МГУ (2 место), Университета ИТМО (3 место), Санкт-Петербургского академического университета, Латвийского университета, Казахстанско-Британского технического университета, Уральского федерального университета, Университета Тарту, Санкт-Петербургского государственного университета, Пермского государственного университета, Университета Вильнюса, Белорусского государственного университета, ВШЭ, Московского авиационного института, Саратовского государственного университета, Новосибирского государственного университета.
«Все задачи, которые мы решили, давались относительно легко, нельзя сказать, что какие-то были сложнее или легче. Пожалуй, последняя была самая интересная: была дана криптосистема, которая имеет потенциальную уязвимость, и при некоторых условиях ее нужно было взломать. Что касается уровня задач, то нам не показалось, что они по сложности сильно отличаются от тех, что были в отборочных прошлых лет. Просто по статистике в этом году в целом команды решили меньше задач», – прокомментировала команда победителей полуфинала из Московского физико-технического института (Александр Голованов, Александр Останин, Никита Уваров).
Студенты подчеркнули, что они впервые участвовали в полуфинале чемпионата мира по программированию как единая команда. Соответственно, ранее ребята ни разу не участвовали в финале. Они смогли решить 10 задач за меньшее время, чем их ближайший соперник – команда МГУ, которая также справилась с 10 заданиями. На третье место полуфинала вышла сборная Университета ИТМО в составе Ильи Збаня, Ивана Белоногова и Михаила Путилина. Первые два участника в прошлом году привезли в Университет ИТМО кубок чемпионов ICPC, что сделало вуз семикратным победителем чемпионата. Михаил Путилин отправится в финал впервые, ранее он участвовал отборочных в составе других команд от Университета ИТМО.
«Конечно, мы были нацелены на победу в полуфинале, но главное было пройти в финал, что и удалось. В этот раз нам немного не повезло, но для финала в Пекине мы подготовимся по максимуму, чтобы достойно защитить имя вуза. В этом году в нашей команде новый участник, мы отлично сработались. Задачи на полуфинале были, на мой взгляд, очень похожи на те, что были в финале в прошлом году, поэтому команды прошли качественный отбор», – прокомментировал Илья Збань.
Ознакомиться с полными результатами полуфинала можно здесь.