Привет. Победитель белорусской олимпиады школьников по программированию, призер многих российских (открытка, технокап и прочие) и разных студенческих командных (ICPC, БГУ, БГУИР) на связи.
Для начала надо понимать что если нет никакого бэкграунда то за полтора года прошариться до уровня призеров сложно, нужно будет жестко ебашить. Я тоже начинал свой путь по олимпиадам по программированию в 10м классе, но а) с многолетним опытом олимпиад по математике позади, б) с пускай и небольшими, но уже какими-то познаниями в программировании.
Большинство людей, с которыми я в будущем соревновался к этому времени уже имели опыт именно в олимпиадном программировании. Так что если никакого бэкграунда нет, то чтобы обогнать этих монстров придется жестко работать, но это возможно.
За примерами ходить далеко не надо - у меня был одноклассник, который к 10му классу максимум проходил до уровня Минска (белорусский аналог предпоследнего этапа всероса), но по некоторым причинам в Беларуси Минск это самый простой путь, несмотря на то, что людей больше, чем в других областях. Два года он жестко ебашил, и в 11м классе прошел на международную олимпиаду и взял там медаль, обогнав много людей с куда более большим опытом.
// конец типа предисловия
---------
Как готовиться:
Вообще в идеале найти курсы. Там отзывы чекнуть, посмотреть какие олимпиадники оттуда вышли, какие у них результаты. Это куда лучше, чем учиться самостоятельно. Если хорошие курсы найдешь, то там тебя сами всему научат. Так что дальнейшая часть гайда в основном на случай если ты таки одинокий волк или просто норм курсов нет под рукой (среди успешных олимпиадников есть и самоучки, и не сильно мало), но я бы все равно ее дочитал)
Итак, план действий:
- Выбор языка программирования:
Если ты решил реально заниматься олимпиадами, то в современных реалиях учить нужно С++ и это не обсуждается. Питон слишком медленный, Паскаль и голый Си слишком устарели, Джава совсем для других задач (хотя вроде как Котлин кому-то заходит из олимпиадников, там не нужно ебаться с классами, но его а) много на каких олимпиадах нет, б) язык слишком молодой, на плюсах куда больше гайдов, в) смотри пункт с Питоном), остальные ЯП редко доступны в системах тестирования, да и не для того создавались.
Исключение: в будущем неплохо выучить хотя бы базовый синтаксис питона для решения заадч в которых нужна длинная арифметика, но пока не забивай этим голову.
- С чего начать:
С изучения ЯП) Экзамены позади, лето впереди, в интернете много материала - лопату в руки и вперед. В начале слишком глубоко уходить в плюсы не надо - базовый синтаксис, циклы, ветвления, работа с массивами и строками, функции, ввод и вывод (стандартный и файловый). ООП нужно, но базового достаточно, не нужно лезть во всякие там виртуальные наследования.
- Вход в СП (спортивное программирование):
Когда база С++ усвоена, можно начинать решать задачи. Самая популярная платформа сейчас
, там есть архив старых задачек и постоянно проходят контесты (в том числе отборочные на, например, технокап). Более олдовая тема это
, тоже хороший сборник задачек (оттуда кстати можно решать простые задачки пока только начинаешь изучать С++). К еолимпу кстати где-то есть типа решебник, но, насколько я помню, там только код без объяснений.
Оказывается, что для решения большинства задач нужно знать специальные алгоритмы и структуры данных (ну и конечно уметь их реализовать).
В интернете мб где-то есть норм гайд по всему этому, но лучше конечно найти хорошую книгу. Я рекомендую "Олимпиадное программирование (Антти Лааксонен)". Но оговорка: я познакомился с этой книгой, когда получил ее в награду за MWJ (что это за зверь расскажу позже), поэтому начало, нацеленное на новичков, я пробежал по диагонали, так как все знал, поэтому на 100% ручаться не могу. То во что я вникал написано хорошо, темы вначале выбраны правильные, так что особо поводов сомневаться в ней я не вижу и таки рекомендую.
- Прокачка себя в СП:
Practice makes perfect. Решай задачи, пиши контесты (ака олимпиады). Но не все так просто.
Все решить вряд ли получится. Особенно на контестах, где времени не так много. Так что после контеста ищешь разбор (или людей которые решили задачу) и смотришь как она решалась. Запомнил решение? Выучи из него новые алгоритмы, а потом ОБЯЗАТЕЛЬНО напиши его сам и зашли на полный балл. Такое называется дорешиванием, и оно просто необходимо если хочешь развиваться и достигать нормальных уровней.
Кроме контестов есть еще всякие "школы" которые работают на каникулах. Какие хорошие я не знаю, раньше была только Зимняя Компьютерная Школа (ныне это Moscow Workshops Junior), она проходит в МФТИ на зимой и на нее надо отбираться. Плюс она стоит денег, если у тебя еще нет дипломов с крутых олимпиад. Но это того стоит. Это крутая атмосфера топовых олимпиадников и две недели топовой подготовки к финалами Технокапа и Открытой Олимпиады школьников (открытки), которые проходят в это же время. Ну и до заключительного этапа всероса там уже недалеко.
Ну и плюс естественно сборы, но это уже везде местные обычаи и особенности.
-------
Если вдруг более конкретные вопросы будут можешь писать в тг