Почему мы любим спортивное программирование и почему Вам тоже стоит его полюбить.
Спортивное программирование объединяет турниры самого разного уровня — от школьных и студенческих олимпиад до финалов чемпионата мира. Крупнейшие международные компании организовывают свои контесты и выступают спонсорами авторитетных соревнований вроде ACM-ICPC. В нашей команде работают четыре чемпиона мира по программированию, и уже в четвёртый раз мы совместно с Codeforces проводим VK Cup — собственный турнир ВКонтакте.
Управляющий директор ВКонтакте Андрей Рогозов, основатель Codeforces Михаил Мирзаянов с победителями и призёрами VK Cup 2017
Откуда берутся чемпионы?
Часто всё начинается ещё со школы: олимпиады по информатике, студенческие соревнования, а потом и этапы международных чемпионатов. Спортивное программирование требует, в первую очередь, много и изобретательно думать, а не действовать по какому-то стандартному шаблону. Несмотря на это, умение решать олимпиадные задачи тоже нужно тренировать. Сборы, лекции, прорешивание бесконечных наборов задач — всё это в чём-то напоминает подготовку обычных атлетов.
Если Вы уже избрали другой профессиональный путь, не стоит огорчаться. Заглянуть в мир спортивного программирования можно и более простым способом.
На платформе Codeforces любой желающий может попробовать свои силы в решении задач разного уровня сложности. За каждую решенную в рамках рейтинговых раундов задачу участник получает баллы. На основании этих баллов участники раундов ранжируются и получают рейтинг. После окончания раунда можно прочитать разбор решения, если не удалось найти его самостоятельно. Подборка задач за годы существования проекта скопилась впечатляющая, смотрите сами.
Уверен, что соревнования по программированию — увлекательный и эффективный способ научиться кодить, разобраться в структурах данных и выработать алгоритмическое мышление. Пробуйте участвовать, раунды на Codeforces открыты для всех и проходят каждую неделю. Наша цель — предложить интересные задачи для каждого участника!
Михаил Мирзаянов, основатель Codeforces
Турниры и задачи
Регламент проведения турниров может различаться в деталях, но общие принципы сохраняются. Обычно участникам отводится строго ограниченное время, сами задачи могут быть ранжированы по «стоимости» в зависимости от уровня сложности, а решения оцениваются с помощью набора готовых тестов. Самый популярный язык спортивного программирования — C++, хотя бывают и исключения. Например, на одном из раундов VK Cup 2017 нужно было решить каждую задачу на отдельном языке.
Соревнования могут быть личными и командными, с ограничениями по возрасту участников и без. У турнира может быть определённая тематика — например, AI, стратегии для биржи или классические алгоритмы. Поставленная задача может заключаться во взломе удалённого сервера или в создании нейросети для хороших результатов на синтетическом датасете.
Создание задач — отдельное искусство, которое требует от автора не меньшей подготовки, чем у самого участника. Победители прошлых лет часто принимают участие в написании задач для нового турнира. У хорошей задачи есть характерные свойства:
Её можно решить.
Её можно решить в отведённое время.
Для проверки решения можно создать набор тестов, на которых правильное решение будет работать, а неправильное — выдавать ошибку (или не укладываться в ограничения по времени выполнения и объёму памяти).
Она интересная. Олимпиадные задачи не решаются «в лоб», и даже если за условиями проглядывает какой-то фундаментальный алгоритм, придётся как следует подумать, чтобы понять, как именно его здесь применить.
Хотя опытные участники соревнований видели уже тысячи разных задач и редко запоминают их в деталях, авторы стараются добавить живое описание проблемы. В архиве Codeforces попадаются задачи про пылкий поток любви, «фибоначчиеватость» и хипстера Васю. Как такое пропустить?
После победы
Победителей престижных соревнований хотят заполучить к себе в штат самые известные IT-компании. Случается, что предложение о работе ждёт участника ещё до подведения итогов контеста.
Это неудивительно. Помимо очевидного (такие люди — умные), опыт в спортивном программировании во многих случаях даст преимущество разработчику. Он не боится сложностей, потому что привык постоянно иметь дело с нетривиальными задачами. Он умеет быстро принимать решения в непростых ситуациях и эффективно использовать все имеющиеся ресурсы.
Конечно, не во всех отраслях индустрии навыки такого разработчика будут использованы по максимуму. Отличное знание фундаментальных алгоритмов и умение выбирать эффективные структуры данных позволяют привлекать лучших из лучших к разработке высоконагруженных сложных систем, где они могут проявить себя в полной мере.
Это относится и к нам — почти все С-разработчики ВКонтакте принимали участие в соревнованиях. Мы используем самописные базы данных, созданные талантливыми программистами, которые не раз побеждали в самых престижных чемпионатах, включая ACM-ICPC.
Чемпионы ACM-ICPC 2014 — Егор Суворов, Дмитрий Егоров, Павел Кунявский. Тренер Андрей Лопатин. Двое участников этой команды сейчас работают ВКонтакте.
VK Cup
ВКонтакте всегда поддерживал это направление: мы спонсировали обучение олимпиадному программированию в СПбГУ, помогали организовывать Летнюю компьютерную школу, сделали свой вклад в создание Codeforces. Следующим закономерным шагом стала организация собственного турнира.
История VK Cup началась в 2012 году с первого личного состязания. Сейчас кубок проходит в формате турнира для команд из двух человек. Возраст участников ограничен — не младше 14 и не старше 23 лет.
Финал VK Cup 2017 в штабе ВКонтакте
С марта по июль участники решали задачи отборочных раундов. Из 2736 команд, принявших участие в квалификации, до финала дошли лишь 20 лучших. Финал чемпионата традиционно проводится в штабе ВКонтакте, Доме Зингера на Невском проспекте. Об итогах VK Cup 2017 мы рассказали в этой статье.
Хочу участвовать!
Мы будем ждать Вас на VK Cup 2018. И призываем попробовать свои силы в других открытых турнирах: