Чему научитесь
- Понимать, почему порядок тем важнее их количества
- Видеть, какие темы опираются на какие
- Знать, в каком порядке читать разделы учебника платформы
Как устроено занятие
Сначала разбор с примерами и короткими проверками понимания — они нужны, чтобы поймать непонятое сразу, а не через три темы.
Дальше 8 задач лестницей: разминка, основа, со звёздочкой. Занятие засчитывается, когда решено 5 — остальные не пропадают и учитываются отдельно.
Сколько это займёт
Примерно час-полтора вместе с задачами. Сроков нет: можно закрыть вкладку и вернуться когда удобно — прогресс сохранится.
Почему порядок важнее количества
Темы в олимпиадном программировании стоят друг на друге. Динамика на деревьях без обходов графа — это заучивание кода, а не понимание. Хеши без понимания, зачем нужен модуль, — источник вечных «почему у меня неверный ответ на десятом тесте».
Поэтому порядок изучения — не вопрос вкуса. Есть темы, которые бесполезно брать раньше срока: вы потратите на них втрое больше времени и всё равно не будете применять их сами.
Три правила порядка
Сначала то, что нужно везде. Оценка сложности, префиксные суммы, два указателя, сортировка. Эти четыре темы встречаются в задачах на любую другую тему.
Инструмент — после задачи, которая его требует. Дерево отрезков, взятое до того, как вы столкнулись с задачей «сумма на отрезке с изменениями», запоминается как обряд. Взятое после — как решение проблемы.
Одна новая тема за раз. Две параллельно дают ощущение движения и нулевой результат: на контесте вы не вспомните ни одну.
Порядок тем: от базы до перечневых
Ступень 1. База
- Ввод-вывод, ветвления, циклы
- Строки и списки
- Функции и рекурсия
- Оценка сложности — раньше всех алгоритмов: без неё непонятно, зачем они
- Префиксные суммы
- Два указателя и скользящее окно
- Простые числа и решето
Ступень 2. Продвинутый
- Сортировки и задачи после сортировки
- Двоичный поиск: по массиву, потом по ответу
- Стек, очередь, дек
- Жадные алгоритмы и доказательство обменом
- Графы: представление, обход в глубину, обход в ширину
- Компоненты связности, двудольность
- Кратчайшие пути: Дейкстра, Флойд, Форд — Беллман
- Динамика: одномерная, по таблице, рюкзаки
- Битовые операции и маски
Ступень 3. Профи
- Топологическая сортировка, DAG, конденсация
- Строки: префикс-функция и Z-функция
- Боры и Ахо — Корасик
- Хеши и сравнение подстрок
- Дерево отрезков, корневая декомпозиция
- Динамика по подотрезкам, по маскам, на деревьях
- Геометрия
- Теория игр
Что зависит от чего
| тема | без чего не берётся |
|---|---|
| двоичный поиск по ответу | оценка сложности, монотонность |
| кратчайшие пути | обходы графа, очередь с приоритетом |
| динамика на деревьях | обход в глубину, одномерная динамика |
| конденсация | обход в глубину, компоненты связности |
| боры и Ахо — Корасик | префикс-функция |
| хеши | арифметика по модулю |
| дерево отрезков | рекурсия, префиксные суммы |
| динамика по маскам | битовые операции, динамика по таблице |
Что можно брать не по порядку
Геометрия и теория игр стоят особняком: они почти ни на что не опираются, кроме базы, и их можно взять раньше, если такие задачи вам нравятся. Это единственное разумное исключение — остальные перестановки обходятся дороже, чем кажется.
В каком порядке читать учебник
В учебнике платформы двадцать разделов и больше двухсот статей. Читать их подряд по номерам не нужно — порядок ниже соответствует порядку тем.
Сначала
- «Основы» — 4 статьи. Как устроена задача, как читать условие, что такое сложность
- «Линейные алгоритмы» — 15 статей. Префиксные суммы, два указателя, окно
- «Сортировки» — 12 статей
- «Поиск» — 10 статей. Двоичный поиск и поиск по ответу
Дальше
- «Жадные алгоритмы» — 10 статей. Обратите внимание на доказательства, а не на примеры
- «Теория чисел» — 10 статей
- «Рекурсия и перебор» — 10 статей
- «C++ и STL» — 10 статей. Если переходите с Python
- «Динамическое программирование» — 14 статей
- «Графы» — 23 статьи, самый большой раздел. Читайте по частям вместе с решением задач
- «Битовые операции» — 12 статей
Уровень перечневых
- «Строки» — 11 статей
- «Хеши» — 10 статей. После строк: так видно, что чем удобнее
- «Отрезки и сканирующая прямая» — 10 статей
- «Запросы на деревьях» — 8 статей
- «Остовные деревья и СНМ» — 6 статей
- «Динамика на графах» — 7 статей
- «Корневая декомпозиция» — 6 статей
- «Геометрия» — 20 статей
- «Теория игр» — 8 статей
Как читать
Не подряд и не целиком. Рабочий порядок такой: берёте раздел, читаете две-три статьи, идёте решать задачи на них, возвращаетесь за следующими. Раздел «Графы» из двадцати трёх статей, прочитанный за вечер, не оставит после себя ничего.
Каждая статья заканчивается ссылками на соседние — по ним удобно достраивать тему, когда упёрлись в конкретной задаче.
Сколько это занимает
Честные ориентиры при двух-трёх часах в неделю. Они не обещание, а точка отсчёта: если у вас вдвое дольше — это нормально, если втрое — стоит поменять способ занятий, а не количество часов.
| путь | срок |
|---|---|
| с нуля до закрытой базы | 4–6 месяцев |
| от базы до продвинутого | 8–12 месяцев |
| от продвинутого до профи | год и больше |
Самый частый способ растянуть эти сроки вдвое — учить темы, не решая задач. Второй по частоте — решать задачи только на те темы, которые уже получаются.
Следующий урок — чек-лист развития: там способ проверить, что вы движетесь, а не топчетесь.