Как готовиться к олимпиадам по информатике

от admin

7 интернет-ресурсов и книг для подготовки к олимпиадам по информатике

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

Codeforces.com. Портал, объединяющий огромное количество участников соревнований по программированию по всему миру. На сайте регулярно проводятся онлайн-соревнования для школьников самого разного уровня: от начинающих до многократных чемпионов мира. Многие известные компании, в том числе ВКонтакте, Mail.Ru, Тинькофф Банк и AIM Tech проводят на платформе официальные соревнования.

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

Вики-конспекты. Энциклопедия по дискретной математике и теории алгоритмов, составленная студентами ИТМО. В ней описано большинство алгоритмов, используемых на олимпиадах по программированию. Многие статьи содержат примеры задач и псевдокоды приведенных алгоритмов. Конспекты написаны очень подробно и качественно. Это один из немногих ресурсов на русском языке по данной теме.

Maximal. Мини-энциклопедия, содержащая наиболее популярные алгоритмы в олимпиадной информатике, к большинству из которых приведены реализации и примеры использования. Сайт отличается чуть более неформальным стилем изложения (что иногда может сказаться на качестве статей или корректности алгоритмов), однако он облегчает восприятие информации. На сайте размещены ссылки на полезные книги для более детального изучения приведенных алгоритмов, а также разобраны некоторые конкретные задачи, представляющие особенный интерес.

Олимпиады по информатике. Сайт, посвященный олимпиадам школьников по программированию в Санкт-Петербурге, официальный сайт Всероссийской командной олимпиады школьников (ВКОШП), индивидуальной олимпиады школьников по информатике и программированию (ИОИП). Одним из главных достоинств этого сайта является очень богатый архив проводимых в России мероприятий, в том числе Всероссийской олимпиады: сайт содержит презентации с разбором задач и результатами соревнований. Также здесь регулярно проводятся личные и командные соревнования для школьников.

Книги

Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн. Алгоритмы. Построение и анализ . Данная книга является классическим учебным пособием с подробным описанием алгоритмов и структур данных, а также базовыми сведениями из дискретной математики, необходимыми каждому программисту. Помимо этого книга содержит огромное количество упражнений различной сложности, которые будут интересны и самому искушенному читателю. В ней очень удачный стиль изложения, и хотя она ориентирована на студентов, большая часть материала будет доступна и школьникам.

Как готовиться к олимпиадам по информатике

Олимпиадное или спортивное программирование — это участие в соревнованиях по решению нетривиальных алгоритмических задач. Оно позволяет получить фундаментальные знания, научиться эффективнее писать код и подготовиться к дальнейшей карьере — победителей и призеров олимпиад охотно нанимают ведущие IT-компании.

На старте

Программирование — это умение превращать объекты из реальных задач в абстрактные сущности и выражать их взаимодействие на языке программного кода. Поэтому главное условие для изучения программирования — абстрактное мышление, на которое сильно влияет уровень преподавания школьной математики.

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

С чего начать?

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

Минимум тем, которые нужно изучить: переменные, операторы присваивания, логические и арифметические операции, условные операторы, потом — массивы и циклы, процедуры и функции. Для того, чтобы в них разобраться, можно, например, посмотреть курс Михаила Густокашина по C++ на Stepik. С этой базой можно решать первые олимпиадные задачи.

Как тренироваться?

Для программирования в первую очередь важна практика, хотя оно требует и теоретической подготовки. Это как водить машину: правила движения можно изучить и в классе автошколы, но научиться ездить можно только сидя за рулём автомобиля.

Я думаю, есть два основных способа выучить программирование:

  1. «Задачное» обучение — изучение конструкции языка через решение абстрактных задач. Например, когда надо прочитать все числа из файла и подсчитать сумму нечетных.
  2. Проектное обучение, при котором учащийся получает наглядный результат своей работы, небольшой работающий «продукт».

Олимпиадное программирование хорошо тем, что практиковаться можно и самостоятельно, без помощи преподавателя. Есть платформы, на которых доступно большое количество олимпиадных задач. Решаешь задачу, пишешь код, отправляешь его на проверку и тут же получаешь результат. Мгновенная обратная связь мотивирует продолжать заниматься программированием.

Например, есть сайт «Информатикс», созданный коллективом московских преподавателей олимпиадной информатики. На нём есть и теоретические материалы: например, вводные лекции по Python, к которым прикреплены примеры олимпиадных задач. Прошёл тему — и сразу выполняешь по ней задание.

Самая популярная платформа для решения задач — это codeforces.com, которую создал и активно развивает Михаил Мирзаянов. На ней постоянно проводятся контесты (соревнования), открытые для всех желающих. Они рассчитаны на людей с разным уровнем: от тех, кто только вчера узнал базовые конструкции языка, до настоящих профессионалов, которые выигрывали международные соревнования и занимаются спортивным программированием уже много лет.

Путь к успеху — решать, решать, а потом ещё немного решать. Регулярно писать контесты — хотя бы один раз в неделю, а лучше два. Если решение задачи после долгих раздумий так и не нашлось, читайте её разбор.

Когда сталкиваетесь с незнакомым алгоритмом — знакомьтесь с ним, смотрите лекции на эту тему, изучайте статьи, форумы и книги. Например, «Алгоритмы: построение и анализ» Томаса Кормена и соавторов. Так выглядят дни тех, кто занимается олимпиадным программированием уже профессионально.

А ещё решать задачи гораздо приятнее и полезнее в команде. Ребята, которые занимаются в сообществе, как правило, достигают больших успехов.

Продолжение обучения

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

В любой задаче есть своя уникальная идея — даже если ты видел до этого тысячу других идей и задач, то 1001-я всё равно будет новой.

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

Самостоятельное обучение по книгам и материалам из интернета — это длинный и сложный путь, хотя поиск самой информации и не составит труда. В частности, на сайте MAXimal собраны 145 алгоритмов для решения разных задач, а также в открытом доступе опубликованы книги по алгоритмам, оптимизации, С++ и Java.

Тактическое преимущество

Чтобы эффективно выполнять задачи, надо понимать, решение каких из них принесет наибольшую пользу в будущем.

Я подразделяю задачи на четыре уровня сложности:

  • Первый уровень: даже не замечаешь, как решил задачу. Решение приходит в голову сразу же, как только прочитал условие. Это бесполезные с точки зрения опыта задачи, хотя их и можно встретить на олимпиаде. Если есть возможность их не решать — не решайте.
  • Второй уровень: задание вызывает небольшое напряжение. Сходу его не решить, хотя и примерно ясно, в каком направлении нужно двигаться. На такие задания уходит минут 5-15. Подумал, попробовал наиболее очевидный вариант решения или два — и решил.
  • Третий уровень: трудные, но подъёмные задачи. Для выполнения придётся опробовать или с нуля придумать новую идею. Не просто собрать решение из готовых кирпичиков, а распутать головоломку. Пока выполняешь такие задачи, осознаёшь то, с чем раньше не сталкивался, возможно, пробуешь малознакомые алгоритмы. На обдумывание может уйти час, а на написание кода — ещё пару часов. Это тяжело и требует волевых усилий, но очень полезно.
  • Четвёртый уровень: не для тебя (пока). Например, ты семиклассник, а для решения задачи нужны знания университетских математических формул и громоздких алгоритмов. Прочитал разбор и всё равно вообще ничего не понял. Ты можешь попытаться разобраться и в итоге выполнить это задание, потратив колоссальное время, но получится неэффективно для общего результата.

На смене в «Сириусе» ребята, например, решали такие задачи:

Ошибки при подготовке к олимпиаде

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

Тут же сдаваться. «Если я не понял, как решать задачу за 15 минут, то я узнаю, как она решается, прочитав её разбор». При помощи ресурса Codeforces, про который я говорил выше, можно узнать, как автор видел решение этой задачи, и как эту задачу решили бы другие люди. Но ты не дал себе шанса подумать как следует, упустил возможность найти решение самостоятельно, а это плохо для опыта и развития интуиции.

Решать только те задачи, которые нравятся. В олимпиадном программировании существуют разные типы задач: некоторые требуют в первую очередь развитого математического аппарата (например, знания теории чисел), в других идёт упор на написание кода, в-третьих — на математику (системы уравнений, теория чисел), а иногда — комбинаторику (графы). Углубляться всегда надо в те области, где возникло сопротивление. Для успеха на соревнованиях полезнее решить пять задач на нелюбимую тему, чем на ту, которая легко даётся.

Не уделять достаточно внимания коду. В процессе написания программы наброски решения переводятся на формальный язык. Иногда ты за пять минут находишь решение и потом пару часов пишешь код, а бывает и наоборот. Писать код так, чтобы в нём было меньше ошибок, способность эти ошибки находить и исправлять — навык, который можно и нужно нарабатывать. Чем больше пишешь код, тем лучше начинаешь это делать. Также полезно обсуждать с другими людьми, как писать программы с меньшим количеством ошибок и читать чужой код.

Как выиграть ВСОШ по информатике и больше не волноваться о ЕГЭ?

Привет, меня зовут Сергей Вольнов и я сейчас учусь на первом курсе в НИУ ВШЭ на программе прикладной математики и информатики. Если поступать туда по ЕГЭ, то проходной в этом году был 304 балла по трем предметам, но выиграв олимпиады туда можно без вступительных испытаний.

В 10 и 11 классе я стал призером заключительного этапа Всероссийской Олимпиады Школьников по Информатике (ВСОШ) и даже стал медалистом на международной Жаутыковской олимпиаде по Computer Science. Призерство ВСОШ дало мне возможность поступить в любой ВУЗ на информатическое направление по БВИ и я выбрал ВШЭ.

В этой статье я хотел бы рассказать о том как готовился к олимпиадам по информатике, какие есть кружки/курсы и как правильно вести себя на турах.

Немного предыстории

В 6-7 классе я занимался физикой и в конце 7 класса даже стал призером заключительного этапа олимпиады Максвелла по физике (что-то типо ВСОШ для младших классов). С 8 класса (агрессивно с 9) я ботал олимпиадную информатику и в итоге в 10 и 11 классах стал призером ВСОШ по информатике. Я не считаю себя каким-то мега-гением, а скорее думаю, что при должном усилие заботать можно все — осталось лишь приложить усилие.

Олимпиадная информатика VS жизнь

Вообще, олимпиадная информатике довольно сильно отличается от обычной. Весь мир олимпиадной информатике крутится вокруг различных алгоритмов и структур данных, чтобы уметь считать какие-то вещи оптимально. В обычной разработке с этими алгоритмами сталкиваешься куда реже и в сильно меньшем объеме по сравнению со школьными олимпиадами, но уметь применять базовые алгоритмы все равно необходимо (+ их часто спрашивают на собеседованиях). Так что эта статья может быть полезна и тем, кто просто решил подтянуть свои знания в этой области, но не знает с чего начать.

Все ресурсы подготовки к ВСОШ можно разделить на три основных блока: курсы и кружки, олимпиадные смены и летние школы и онлайн ресурсы для самоподготовки. Давайте сейчас подробнее рассмотрим каждый из этих блоков.

Курсы и кружки по подготовке

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

Читать:
Почему не работает display flex

Однозначно лучший из курсов, который я проходил. Занятия проходят раз в неделю по 5 часов, на неделю дается контест с задачами на пройденную тему, есть разборы и дорешки контестов, а так же семинары на которых решаете теоретические задачи. Еще есть возможность писать дистанционные туры и в принципе крутое олимпиадное комьюнити.

Есть несколько уровней сложности: C, B’, B, A’, A, каждый уровень — годовой курс. Свой первый всерос я взял, пройдя B’ и B. Сам курс бесплатный, но для поступления нужно решить отборочный контест, который проходит в конце августа или пройти донабор в начале январе. За анонсами можно следить в их телеграмм канале.

В 9 классе ходил на кружок в центр педагогического мастерства (ЦПМ). Сами занятия были выстроены хорошо, но одного этого кружка было бы маловат, так как это всего 3 часа в неделю (для сравнения, в Тинькоффе 5 часов в неделю) и контесты в качестве домашнего задания меньше. Думаю, может быть неплохим вариантов в качестве дополнительного кружка.

Занятия в школе | Оффлайн

Иногда в школах есть свои кружки по информатике — их качество может сильно варьироваться в зависимости от школы, но мне повезло и у меня был очень сильный кружок (я учился в Физтех-лицее им П. Л. Капицы), в который я ходил в 10 классе. Возможно в вашей школе тоже есть что-то такое.

Ссылочки на разные кружки/курсы, в которых сам не занимался

Онлайн ресурсы для самостоятельной подготовки

Вообще есть довольно много ресурсов, где можно решать алгоритмические задачи (LeetCode, Informatics, Timus и тд), но я за время своей подготовки пользовался в основном Codeforces и чуть-чуть Informatics (для прорешивания туров ВСОШ прошлых лет).
Codeforces это сайт, на котором пару раз в неделю проводятся микро соревнования, которые можно писать для тренировки в «боевых условиях». Также имеется довольно большой архив задач для самостоятельной подготовки. Всем советую его решать, так как это является хорошим приближением (по формату) разных олимпиадок + дополнительная практика.

Образовательные интенсивы

Помимо кружков и курсов есть еще один распространенный формат подготовки — это различные летние школы, сборы и образовательные смены. Их суть заключается в том, чтобы в короткие сроки (обычно 2-3 недели) дать максимум подготовки. Каждый день у вас есть много пар связанных с олимпиадным программированием, которые зачастую делятся на два типа: вначале идет лекция, а потом решаете контест на пройденную тему + дорешка в свободное время. Обычно вся эта активности идет с утра и часов до 17 (дальше отдых), так что бота реально много, но и прокачивает хорошо.

Это была моя первая олимпиадная школа, в которую я поехал летом после 8-ого класса. Я бы посоветовал ее именно в качестве начального варианта, так как туда не очень сложный отбор и довольно неплохой уровень обучения. Так что это хорошая возможность подготовиться к отборочным во всякие кружки по типу Тинькоффа (которые проходят в конце лета), ведь чтобы в них пройти нужно уже иметь некоторый бэкграунд.

Сириус | 3 недели, Бесплатно

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

Сам был в нем 3 раза на информатических и 2 раза на физических сменах. Для того, чтобы туда попасть нужно пройти отбор (не очень легкий) или уже показать хорошие результаты на региональном/заключительном этапе. Может хорошо прокачать даже опытных олимпиадников, так что всем советую мониторить его программы и подаваться.

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

Ездил один раз в 10 классе. Если честно, не очень помню подробности, но вроде было нормально.

Региональные Сборы | 1-2 недели, Бесплатно

В многих регионах, в частности в московской области, проводятся сборы по подготовке к региональному и/или заключительному этапу ВСОШ. Для того, чтобы на них попасть нужно просто выйти на соответствующий этап и подать заявку через сайт. Вообще, советую не упускать шанса лишний раз подготовиться, так что если у вас в регионе такое проводят, то участвуйте.

Ссылочки на разные интенсивы, в которых сам не занимался

Как ботать эффективно?

Курсы и интенсивы можно проходить по-разному. Буквально один совет, чтобы повысить эффект от курсов в несколько раз: ❗️Дорешивайте задачи❗️. Если вы просто решаете задачи, то применяете те знания, что уже у вас есть, а если вы его после разбора дорешиваете, то узнаете кучу нового. Я это осознал только к 10 классу и стал полностью закрывать контесты на дорешке — реально в разы эффективнее.

Во многих кружках и школах проводятся разборы, так что остается только закодить (просто осознать разбор сильно хуже откладывается в голове). На codeforces можете дорешивать только те задачи, над которыми успели подумать во время раунда (разборы там тоже публикуются). В общем не пренебрегайте этим сильным инструментом.

Поведение на турах

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

До тура

Для начала разберем, что стоит делать, когда тур еще не начался, но уже на носу.

Во-первых, настройте себе режим дня заранее! Очень часто замечал, что люди всю неделю до тура идут спать после 00, а в последний день такие «лягу в 22, завтра ведь в 6 утра вставать». В итоге ложились и просто не могли заснуть до часу ночи, а потом писали региональный этап, поспав 5 часов. Не надо так)

Во-вторых, за день до тура (а лучше за два) ботать запрещено, чтобы дать мозгу отдохнуть — все равно перед смертью не надышишься. В идеале просто много гулять, можно поиграть в настольные/спортивные игры или позаниматься еще чем-нибудь, что не требует больших умственных усилий.

Перед туром нужно хорошо поесть, чтобы хватило надолго (в идеале где-то за час до тура). В дополнение к шоколадкам на олимпиаду мне еще нравилось брать чай с сахаром (быстрые углеводы) и какую-нибудь булочку, так как на одном шоколаде может быть сложно 5 часов писать тур.

Еще я перед туром съедал по 3 аскорбинки, так как однажды услышал от одного препода, что они разгоняют мозг немного. 99%, что это полная лажа, но тем не менее я их ел))

На туре

Теперь давайте пройдемся по основным правилам, которыми я старался следовать на турах и о которых я не раз слышал от своих преподавателей.

Важно: основная цель на туре это не решить много задач, а набрать много баллов.

После тура не должно быть ни одной подгруппы, которая «легкая, но просто прочитал в последние 5 минут и не успел решить».

Если задача не идет — переключитесь и повыбивайте баллы где можете (она в фоне все равно будет думаться).

Выход в туалет — отличный способ проветриться, не стоит им пренебрегать.

К середине тура не должно быть ни одной непрочитанной задачи.

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

Чтобы меньше нервничать мне помогала следующая парадигма: «моя задача решить на мой максимум, чтобы я ни о чем не жалел после тура, а остальное от меня не зависит (стану ли я в итоге призером/победителем или нет)». В таком случае, даже если в этом году загробили B, то ты сможешь переключиться, а не загоняться по этому поводу весь раунд и решать B на полный балл вместо выбивания баллов.

Тайминги по решение задач на туре

На региональном этапе хорошей стратегией может оказаться следующая:
1. A и B решаете за первые час-два
2. Потом закрываете все подгруппы, который можете в D
3. Оставшееся время спокойно решаете C.

На заключительном этапе:
1. A и B решаете за первые час-два (если B не идет, то можно переключится на D)
2. Потом закрываете все подгруппы, который можете в D
3. Оставшееся время спокойно решаете C (и B, если еще не дорешали ее).

Второй тур

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

Заключение

В этой статье я постарался как можно подробнее рассказать о ресурсах и трюках, которые помогли мне стать призером Всероссийской Олимпиады Школьников по информатике и надеюсь они помогут вам. Всем успехов!

Как эффективно подготовиться к олимпиадам по программированию?

Обложка: Как эффективно подготовиться к олимпиадам по программированию?

Скоро стартует вторая олимпиада Типичного программиста, и мы решили спросить у экспертов, как можно успешно к подготовится к подобным соревнованиям.

Михаил Рубинчик

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

Мы будем говорить про ACM ICPC, т.к. для таких олимпиад есть множество готовых рецептов. Прежде всего, нужно научиться решать задачи. Как ни странно, чтобы научиться решать задачи, нужно решать задачи �� Поэтому самый верный путь для новичка такой: открываешь любой архив задач и решаешь по возрастанию сложности. Если вдруг какая-то задача уж очень долго не поддаётся, пропускаешь её и решаешь следующую. Если слишком много задач пропущены, то стоит посоветоваться с более опытным олимпиадником, нет ли там какого-то сакрального знания. Прорешивание архива задач — это самый важный на старте процесс. Например, можно использовать acm.timus.ru. А далее постепенно добавлять другие элементы: чтение книг и сайтов по алгоритмам (например, e-maxx.ru), участие в онлайн соревнованиях (codeforces.ru, opencup.ru).

Артём Зюрюкин

Можно поучаствовать в семинарах при университете, проводящем олимпиаду, а также найти тех, кто уже участвовал. Если вы планируете принять участие в международной олимпиаде (например, крупнейшей в мире ACM/ICPC), то найти тестовые задания и материалы для подготовки можно и на сайте самой олимпиады. Кроме того, полезным будет обсудить сложности с участниками сообществ выбранных олимпиад в социальных сетях.

Андрей Зырянов

Олимпиады бывают разные. Отсюда и требования разные. Если «классические», как ACM ICPC, то вам нужно начать решать задачи на acm.mipt.ru и judge.mipt.ru. Если по информационной безопасности (Capture The Flag) — изучать архитектуру ЭВМ, криптографию и сетевые протоколы. По разработке ПО (DevCup, ImagineCup, «Старт в науку») — изучать ООП и работать в команде над небольшими проектами. Залог эффективности — трудолюбие. Этим нужно заниматься, причем постоянно. Если нет прогресса в самостоятельном изучении, потребуется помощь преподавателей.

Роман Юферев

Ходить на эти самые олимпиады. Смотреть задачи. Осознавать, что ничего не понимаешь и разбираться. Идти на следующую олимпиаду. Вот такая вот «многоходовочка».

Сергей Масягин

Для ответа на этот вопрос мы опросили чемпионов мира по программированию Николая Калинина, Геннадия Короткевича, Нияза Нигматуллина, Андрея Станкевича и Павла Маврина, которые сейчас тренируют новое поколение. Все они сходятся во мнении, что главное в этом вопросе — много практики. Обратите внимание на codeforces.ru, topcoder.com — периодически там бывают контесты, после которых на сайтах появляются разборы к ним. Также рекомендую к прочтению Programming Challenges, Miguel Skiena. Есть множество ресурсов, где можно найти теорию, таких как e-maxx.ru, habrahabr.ru.

Антон Пискунов

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

Сергей Зефиров

Не готовиться к олимпиадам по программированию. Совсем.

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

Готовясь к олимпиадам, вы наработаете себе стиль и подход к программированию, который придётся довольно долго исправлять.

Похожие статьи