Всем Здравствуйте, сегодня я, участника областного этапа Белорусской олимпиады школьников, поделюсь с вами своим личным гайдом на олимпиадное программирование, расскажу что учить, как начать и учится и тренироваться
Вперёд!
Начало
Начать стоит с выбора языка программирования, в целом олимпиадки можно писать на любом языке, но зачастую все пишут на двух языках: на Python или на C++.
Больших различий в написание алгоритмах нет, только то что у некоторых языках больше возможностей.
Почему я советую выбрать C++?
Потому что он банально более быстрый чем все остальные, а в олимпиадах скорость выполнения программы играет важную роль.
Не следует пугаться того что C++ сложный язык, вы не почувствуете его сложности в олимпиадах. C++ сложный для проектного программирования, а для олимпиадного нет большой разницы между ним и python, единственное, что код на Python более короткий. Далее я приведу варианты изучения синтаксиса для двух этих языков.
Где учить python?
Для изучения основ python советую легендарный курс "Поколение Python" на Степике: https://stepik.org/course/58852/promo?search=7086480912.
Или курс сириуса "Введение в Python" : https://edu.sirius.online/#/.
Где учить C++?
Для изучения основ C++, я рекомендую курс от acmp: https://acmp.ru/asp/do/index.asp?main=course&id_course=1 (этот сайт ещё будет упомянут).
Также рекомендую курс от всех тех же Сириус: https://edu.sirius.online/#/.
Есть вариант изучения по хэндбуку от Яндекса: https://education.yandex.ru/handbook/cpp
Где изучать алгоритмы?
Итак, для старта в алгоритмах я порекомендую довольно банальную книгу, вы все уже знаете какую я скажу, барабанная дробь.......:
"Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих".
Но почему же именно её: потому что в ней довольно просто и понятно изложены основные алгоритмы используемые в олимпиадном программировании. Правда у неё есть один существенный недостаток - реализация некоторых алгоритмов из этой книги, не подходит для олимпиадного программирования.
Для компенсации этого я посоветую несколько ресурсов, созданные именно для олимпиадного программирования:
Сайт алгоритмика: https://ru.algorithmica.org/cs/
Хэндбук от Яндекса: https://education.yandex.ru/handbook/algorithms
Канал Павла Марвина на ютубе(легенда, отдельный респект): https://www.youtube.com/@pavelmavrin
Отдельно выделю очень крутую книги по олимпиадному программированию, она довольно сложна для понимания, но при этом в ней изложены почти ВСЕ темы, которые могут помочь вам в олимпиадном программировании.
Эта книга: Олимпиадное программирование автора Антти Лааксонен.
Старайтесь читая книги, максимально пытаться применить знания на практике. Но где же брать задачи?
Практика
Итак, сейчас будут сайты для практики наших знаний, и краткий обзор каждого из них:
Acmp: довольно неплохой сайт для изучения и практики на конкретные темы(см. раздел "курсы"). Ссылка: https://acmp.ru/
Codeforces: Главная обитель всех спортивных программистов, его ключевая особенность это соревнования, которые проходят регулярно, на них мы будем оттачивать своё умение работать в краткие сроки проведения олимпиады. Ссылка: https://codeforces.com/
Eolymp: Отличный сайт для отработки знаний конкретной темы, на мой взгляд, задачи тут чуть сложнее чем на acmp. Ссылка: https://eolymp.com/
Отдельно отмечу LeetCode, в теории, задачи на нём можно использовать при подготовке к Олимпиде, но он больше ориентирован на собеседования.
Заключение
В заключение, хочу пожелать вам удачи на вашем пути в олимпиадном программировании!
Успехов!