• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта

Чемпионство в ICPC без плаща супермена. История Михаила Ипатова


Михаил Ипатов – студент программы РЭШ и ШАД «Экономика и анализ данных» (EDS), выпускник мехмата МГУ, двукратный чемпион ICPC (The International Collegiate Programming Contest). Как проходит главное мировое студенческое соревнование по программированию? По каким материалам готовиться и какие навыки нужны для победы? Ответы найдете в материале, а в конце вас ждет бонус – рецепт, как не допустить выгорания на EDS и в чем отличие нагрузки здесь от пятичасовых тренировок по программированию.

С олимпиадами по жизни

Мое увлечение олимпиадами началось еще в школе, примерно в четвертом классе я впервые поучаствовал в олимпиаде по математике. В седьмом – добавилась информатика. Когда начались победы на Всеросе по этому предмету (в 9 классе я становился призером, в 10 и 11 – победителем), я решил сосредоточиться на нем. По математике трижды становился только призером.

В 10 классе я поступил в СУНЦ МГУ, где был кружок по олимпиадной информатике. В 11 классе поучаствовал в международной олимпиаде среди школьников (IOI). Это стало одной из ступеней на пути к победам на ICPC.

Спортивный азарт за монитором

ICPC – международная студенческая олимпиада по программированию, она считается самой главной и престижной среди других профильных олимпиад. Про нее знают все в индустрии, участие и тем более победа может стать весомой строчкой в резюме. Я участвовал дважды, в 2018 и 2019 году, и оба раза в составе команды становился чемпионом. В этом деле мне нравится атмосфера, интересные задачи, спортивный азарт. Было логично после школьной олимпиадной истории пойти дальше, подняться на ступень выше. Тем более, что нашу команду МГУ тренировала Елена Владимировна Андреева, с которой мы занимались и в СУНЦе.

В каждом регионе свои условия отбора, у нас, в Северной Евразии, он ступенчатый. Сначала проходят квалификационные этапы, где команды отбираются на четвертьфиналы. По их итогам лучшие едут на полуфинал, который традиционно проходит в Санкт-Петербурге. А оттуда – на мировой финал, в этом году он состоялся в Москве, а в 2018 и 2019, когда участвовал я, он проходил в Пекине и Порто. Так как это студенческое соревнование, есть некоторые ограничения для участников. Команда из трех человек обязательно должна представлять какой-то вуз, требования к составу описаны здесь.

Внутри ICPC

Обычно олимпиада состоит из 10-12 задач. Как правило, требуется написать какую-то программу, которая правильно обработает и посчитает данные. Примеры заданий можно найти здесь. Сначала команды соревнуются по количеству решенных задач, чем их больше, тем лучше. Отправлять решения на проверку можно сколько угодно, но затем за каждую попытку, которая не увенчалась успехом, команде добавляют штрафное время. Победа складывается из этих двух факторов: как можно больше решенных заданий и как можно меньше штрафного времени.

Раньше для каждой команды выделялся один компьютер. Поэтому нужно было распределять время нахождения за монитором, коды распечатывались, их читали и анализировали с листа. В составе команды мог быть математик, который не пишет код, но ищет решение со стороны математики. В этом году из-за ковидных ограничений (финал 2020 года проходил в октябре 2021, часть команд, которая не смогла приехать, участвовала в отдельном соревновании онлайн на платформе Codeforces – прим. ред.) на каждую команду было три компьютера, между ними – защитные экраны. Это могло повлиять на выбор стратегии участия в соревнованиях.

Тренировки не для супергероев

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

Затем – подготовка. Если вы решили добраться до пьедестала, предстоит долго и упорно трудиться. Не нужно быть суперменом и обладать какими-то запредельными сверхспособностями, важны мотивация и систематичность.

Когда мы с командой участвовали в ICPC, у нас было примерно по три пятичасовых тренировки в неделю. Также до четырех раз в год мы ездили на сборы, которые длились по 7-10 дней. Кроме групповых тренировок, каждый занимался еще и отдельно, проходил контесты. Я до сих пор участвую в личном первенстве – это тоже интересно, помогает не растерять навыки. Общепризнанные сайты вроде Codeforces или Topcoder проводят регулярные раунды, публикуют рейтинг участников. Также бывают соревнования от компаний, например Google Code Jam, Facebook Hacker Cup. Раньше финалистов приглашали в главные офисы, теперь все в онлайне.

Скилл-сет чемпионов

Необходимый скилл-сет для участия в олимпиадах по программированию включает несколько навыков, их все можно развить во время регулярных тренировок. Во-первых, английский на достаточном уровне для того, чтобы прочитать условие задачи. Во-вторых, умение базово программировать на каком-то языке, желательно C++. На финале официально разрешены еще и Python, Java и Kotlin, но удобнее всего использовать именно C++ – важна скорость работы программы на олимпиадных задачах. Из личных качеств можно назвать умение быстро решать и сдавать задачи, аккуратность, высокая производительность в течение долгого времени.

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

Главное лекарство от выгорания

Когда я активно участвовал в олимпиадах по программированию, у меня не было никаких проблем с высокой нагрузкой. Я еще не начал учиться ни в ШАДе, ни в РЭШ, мехмат занимал не очень много времени. А к многочасовым тренировкам мы относились серьезно, но без стресса, на результат: собрались, начали делать, устали – прогулялись за хот-догами или просто болтаем пару минут. Это было в удовольствие и с интересом.

С выгоранием я столкнулся на первом курсе EDS. Я, как и многие, набрал много курсов в начале модуля, чтобы, если что, отказаться от них в конце. Из-за этого накапливалась усталость, тонны домашних заданий, которые не получалось сдавать вовремя, проблемы со сном. От некоторых предметов я отказывался, но время и ресурсы, потраченные на них, было уже не вернуть. В конце концов режим окончательно сбился, я понимал, что уже не могу воспринимать новую информацию и продуктивно учиться. Весной я ушел в академический отпуск.

А осенью – вернулся на пары со вторым курсом, это стало возможным благодаря гибкости программы. Сейчас я изучаю предметы второго года обучения, а когда начнется четвертый модуль, после которого я ушел, буду наверстывать пропущенное на первом курсе. Затем у меня будет еще один год, чтобы изучать интересные элективы и писать итоговую работу. Думаю, вернуться после года академа было бы сложнее, чем спустя несколько месяцев.

Совет тем, кто не хочет попадать в такие ситуации, – спать. Развивать силу воли и не идти на поводу у себя, когда кажется, что одни сутки без сна ни на что не повлияют. Идея немного задержаться ночью, чтобы не делать задание завтра, оказывалась плохой всегда. Нужно взять за правило ложиться спать не позже какого-то часа и следовать ему, несмотря ни на что.

Вебинар об особенностях поступления на программу «Экономика и анализ данных» и другие программы РЭШ пройдет 8 ноября – присоединяйтесь.

3250 человек прочитали эту новость, 29 отметили, что она им понравилась. А вам интересна эта новость?