среда, 2 декабря 2015 г.

Советы участникам олимпиад по программированию

Для российских вузов полуфинал студенческого чемпионата мира по программированию одновременно является Всероссийской командной студенческой олимпиадой по программированию. Александр Ипатов в составе команды УрГУ-2 с 2004 по 2008 год был участником полуфиналазавоевывая дипломы I, II, III степени студенческой олимпиады. 
С 2006 года он состоит в команде  Timus Online Judge. Занимается поддержкой архива задач и онлайн-соревнований, организатор соревнований, автор задач с 2003 года. Он соавтор статьи 
Публикую советы Александра Ипатова тем, чья команда показала в этом году результат ниже ваших ожиданий: не прошла с квалификационного тура четвертьфинала в основной, или с основного тура в полуфинал, или прошла в полуфинал, но не с первого места. 

1. Сайт http://codeforces.com - самое крупное в мире сообщество, посвящённое спортивному программированию. Здесь регулярно проходят собственные соревнования, в том числе учебного характера, и публикуются новости обо всех соревнованиях по программированию (очных и через интернет), проходящих где бы то ни было. Рейтинг и цвет на Codeforces - достаточно объективная характеристика уровня программиста; участвуя в соревнованиях, можно следить за графиком изменения собственного рейтинга. Ежедневное чтение ленты Codeforces позволяет быть в курсе всего, что происходит в мире спортивного программирования. Также на Codeforces вы можете задавать вопросы по поводу задач, алгоритмов, соревнований, тренировок и.т.п. Если ваш вопрос будет хоть как-то касаться программирования, вам обязательно помогут.

Чтобы у вас был лишний повод зайти на Codeforces, хотим вам прорекламировать серию публикаций про прошедший квалификационный тур нашего четвертьфинала: часть 1часть 2часть 3. Если у вас есть что добавить по теме квалификационного тура, напишите это в виде комментария к постам.

2. Сайт http://acm.timus.ru (Тимус) - архив задач с проверяющей системой, где вы можете решать и отправлять на проверку задачи. Архив содержит более тысячи задач разного уровня сложности, при этом указано, какую сложность имеет каждая задача. Если вы хотите добиться успехов в соревнованиях по программированию, Тимус нужно решать постоянно, сдавая в среднем хотя бы по задаче в день. Можно отсортировать все задачи по росту сложности и решать их в таком порядке. Во время решения задач уровень программиста растёт, и, как правило, когда он решил все простые задачи, то уже способен решать средние, когда решил все средние, то способен решать и сложные (но, конечно, если начать сразу со сложных, ничего не получится).

По нашему опыту решить половину (т.е. около 500) задач на Тимусе студентам большинства вузов хватает для выхода в полуфинал. Если вы тренируетесь командой, то имеет смысл поделить задачи между её участниками и каждому решать свои, раз в несколько дней встречаясь и обсуждая как решённые, так и нерешённые задачи.

3. Если вы хотите прокачать свои знания в области алгоритмов (это пригодится вам не только на соревнованиях по программированию), то можете начать с книги Кормен, Лейзерсон, Ривест, Штайн - Алгоритмы: построение и анализ (в оригинале Cormen, Leiserson, Rivest, Stein - Introduction to Algorithms). 

Ещё есть сайт http://e-maxx.ru/algo/, посвящённый в первую очередь алгоритмам, встречающимся в олимпиадных задачах. В сумме книга Кормена и e-maxx.ru содержат сильно больше алгоритмов, чем нужно знать большинству олимпиадников, поэтому не нужно хвататься за голову при виде объёма информации, которая там содержится.

4. Прочитайте статьи "Как стать чемпионом мира по программированию" и "Как стать чемпионом Урала по программированию" (именно в таком порядке). По меркам российского программирования они написаны очень давно: 18 и 13 лет назад соответственно. Тем удивительней, что 95% описанных в них рекомендаций актуальны и по сей день.

5. https://vk.com/kontur_edu - группа образовательных программ СКБ Контур. Если вы читаете ленту ВКонтакте, подпишитесь на эту группу. Туда репостятся все местные новости спортивного программирования и, конечно, информация о мероприятиях, проводимых самой компанией (конкурсы стипендий и грантов, стажировки и т.п.)

Двадцатый юбилейный чемпионат Урала по программированию

Весной 2016 года (ориентировочно в апреле) состоится Двадцатый юбилейный чемпионат Урала по программированию. Это соревнование является открытым и традиционно собирает сильнейшие российские команды, включая будущих участников финала чемпионата мира по программированию. Командам Восточного подрегиона на Чемпионате Урала будет отведено не менее половины мест от общего числа участников. Для них в феврале-марте 2016 года пройдёт специальный интернет-отбор. Следите за новостями на сайте http://acm.urfu.ru!

Команды СыктГУ ежегодно участвуют в этом чемпионате. Хотелось бы продолжить добрую традицию.