Журнал / польза

Ежедневная олимпиада: как устроены сборы в спортивном программировании

В чём преимущество школ перед самостоятельной работой и чего ждать от участия в сборах.

Участники олимпиад по программированию готовятся к соревнованиям разными способами: самостоятельно решают задачи, занимаются с тренерами и смотрят видеоразборы. Сборы для спортивных программистов — это возможность попрактиковаться в решении олимпиадных задач в условиях, приближенных к соревнованиям. Кроме того, на таких выездах можно послушать лекции победителей олимпиад по программированию и ведущих разработчиков, оценить свой уровень относительно других команд и принять участие в культурной программе. 

Академия Яндекса поговорила с двухкратным чемпионом ICPC World Finals Гришей Резниковым, финалистом ICPC 2010 и организатором сборов Алексеем Толстиковым и бронзовым и серебряным призером ICPC 2007 и 2010 Алексеем Николаевским. Спортивные программисты рассказали о том, как устроены сборы, почему важно не только писать онлайн-контесты, но и участвовать в школах и как получить от них наибольшую пользу.

​Фото предоставлено организаторами Petrozavodsk Programming Camp
​Фото предоставлено организаторами Petrozavodsk Programming Camp

В каких сборах участвовать

Сборы по спортивному программированию делятся на школьные и студенческие. «Одни из самых сильных выездных школ для старшеклассников — это Летняя компьютерная школа (ЛКШ) и Зимняя компьютерная школа в МФТИ, которая завершается Открытой московской олимпиадой», — рассказывает Алексей Толстиков. Помимо этого, проводятся местные сборы перед региональным этапом Всероссийской олимпиады по информатике для школьников и сборы перед заключительным этапом.

Из студенческих сборов самые известные — это Петрозаводские сборы и Moscow Workshops. Петрозаводские сборы проводятся весной и осенью, а Московские — зимой и летом. Это сделано для того, чтобы они не накладывались друг на друга и команды раз в сезон могли участвовать в выездах, которые длятся от семи до четырнадцати дней. Как и в случае со школами по программированию для старшеклассников, есть и региональные сборы.

А команды, которые занимаются спортивным программированием на международном уровне, выезжают на сборы в другие страны (в редких случаях организаторы покрывают сильным командам расходы на перелёт и проживание). Например, команда Григория Резникова, которая дважды выигрывала в Международной студенческой олимпиаде по программированию (ICPC), ездила в Китай. Гриша говорит о том, что сборы в разных городах и странах мало отличаются друг от друга, но дают возможность попутешествовать и познакомиться с людьми из других сообществ.

Как попасть на сборы по спортивному программированию

Для того, чтобы попасть на сборы, нужно пройти отбор: обычно он заключается в решении онлайн-контеста. Чтобы не пропустить сроки регистрации, стоит следить за группами сборов в социальных сетях — например, Петрозаводских сборов и Moscow Workshops. В них же публикуют записи разборов задач и лекций, по которым можно подготовиться к школам — или уже к соревнованиям.

«Хотя сейчас вся информация находится в открытом доступе, большую роль в том, чтобы начинающие разработчики стали посещать школы по программированию, продолжают играть преподаватели, тренеры и популяризаторы сборов», — говорит Лёша Толстиков. 

Фото предоставлено организаторами Moscow Workshops
Фото предоставлено организаторами Moscow Workshops

Алексей Николаевский рассказывает о том, как он начал заниматься спортивным программированием благодаря преподавателю Петрозаводского государственного университета, который продвигал олимпиадное программирование в местных школах: «Впервые я попал на сборы очень интересным образом. Летом на даче мы с моим братом-близнецом собирали землянику вдоль дороги. Рядом с нами остановилась машина, из которой высунулся профессор Кузнецов и спросил нас, не хотим ли мы вместо этого съездить посмотреть на сборы на туристической базе ПетрГУ. До этого мы ходили к нему на олимпиадный кружок в школе — и сразу согласились поехать. Мы не решили ни одной задачи на контесте, потому что соревнования были студенческими. Зато побывали на одних из первых сборов, на которые приезжали ведущие олимпиадные тренеры — Андрей Лопатин и Андрей Станкевич».

Как устроена программа сборов

Стандартный день сборов проходит следующим образом: с утра участники пишут пятичасовой контест, а после обеда начинаются разборы задач и лекции. «В зависимости от уровня подготовки участников и цели сборов полезными будут как туры с задачами на разные темы, так и тематические туры, например, посвященные проработке конкретных алгоритмов и подходов», — уточняет Алексей Толстиков.

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

​Фото предоставлено организаторами Petrozavodsk Programming Camp
​Фото предоставлено организаторами Petrozavodsk Programming Camp

Алексей Толстиков, Алексей Николаевский и Гриша Резников сходятся в одном: самое важное в сборах — это грамотно составленные задачи контеста и сильные преподаватели и организаторы, которые могут рассказать про способы их решения. Опытом обмениваются не только участники соревнований, но и тренеры, потому что для решения одних и тех же задач можно использовать множество алгоритмов и подходов.  «Иногда авторы туров в ходе разбора могут узнать более изящные и лаконичные решения для своих же задач, чем те, на которые они рассчитывали», — поясняет Лёша Николаевский.

Сборы продолжаются от семи до четырнадцати дней, так как работа довольно насыщенная, раз в несколько дней организаторы устраивают выходной. Во время него проходит культурная программа: поездки в соседние города, экскурсии и спортивные мероприятия. Многие участники во время выходного остаются решать задачи, однако Лёша Толстиков считает такой подход непродуктивным, потому что на сборах нужно выполнять нетривиальные задачи, и для того, чтобы справиться с очередным заданием, иногда лучше отдохнуть, а не корпеть над алгоритмами ещё несколько часов.

Зачем участвовать в выездных школах

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

Лёша Николаевский говорит о важности передачи знаний: школьники всё раньше узнают базу для решения задач от преподавателей и тренеров, и с каждым годом участники становятся всё более сильными, а сами соревнования — более сложными. А для Гриши Резникова ценной оказалась возможность сравнить работу своей команды с другими, чтобы проверить уровень своей подготовки перед соревнованиями. Однако на сборах царит атмосфера сотрудничества, а не конкуренции: в свободное от контестов время команды часто работают совместно.

На время пандемии школы не отменяются, а переносятся в онлайн. Например, команда Moscow Workshops проводит контесты и видеоконференции и публикует разборы заданий. Однако на онлайн-сборах тяжело следить за соблюдением правил участия: так, по правилам ICPC во время контестов можно использовать для запуска кода только один компьютер, но дистанционно проверить, по правилам ли работает команда, тяжело.

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