Опыт участия в олимпиадах по программированию
Медер Аккозов, Backend-developer in Mad Devs LLC![](/file/5a5f395a15f3ada1d0a35.jpg)
Впервые я принял участие в олимпиаде по программированию во время учёбы в Кыргызско-Российском Славянском университете (г. Бишкек). Тогда смысл участвовать точно был – в рамках подготовки нас обучали алгоритмам, дискретной математике, принципам построения графов, деревьев и т.д. Соревнования проходили по правилам ICPC. В команде было 3 участника основного состава и 2 запасных игрока. На время соревнования выдавали подготовленный компьютер, при этом можно было указать, какую ОС и какой компилятор поставить.
Написанный для решения олимпиадной задачи код должен не просто выполниться, он должен отработать быстро. По этому, как правило, выбирают компилируемые языки типа C/C++. При мне команда, писавшая на Python, не смогла пройти дальше первой задачи из-за скорости. Результаты все команды видят на большом экране. Он показывает, выполнился ли код и сколько времени это заняло. ICPC длится 4 часа и по жёсткости дисциплины напоминает экзамен - выходить можно только в туалет. Воду, печенье и бумагу для записей участникам выдают. Всё это делается, чтобы получение помощи извне было невозможно.
Есть онлайн-чемпионаты, например, Russian AI Cup, где на задачу отводится 4 дня или даже неделя. Задача может быть прикольной – например, запрограммировать робота, который будет убивать других роботов в шутере, или играть в игру, где надо защищать свои ворота и бить по чужим. Там используются очень крутые алгоритмы.
Минус спортивного программирования в том, что там понятность кода часто приносят в жертву скорости. В "живом" проекте так лучше не делать – твой код должны понимать все участники команды. В промышленном программировании ясность кода и простота его поддержки – важные условия.
Но польза от олимпиад и чемпионатов всё равно есть. Они учат быстро думать и принимать решения. Плюс использование интересных алгоритмов. Когда я сталкиваюсь с задачами, в которых я могу применить алгоритм для ускорения, я так и делаю.