EduBrick
домашняя работа

Что дальше

Программирование на Python: от нуля до олимпиад

Что здесь

Честный список того, что вы теперь умеете, и таблица «не пошла задача N — перечитайте занятие M».

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

теория

Что вы теперь умеете

Сорок пять занятий назад курс начинался с ввода и вывода. Стоит проговорить вслух, что осталось в руках — обычно этот список недооценивают.

  • Читать условие с ограничениями и понимать, какое решение в нём ждут
  • Прикидывать число операций до того, как написан код
  • Двоичный поиск и поиск по ответу
  • Два указателя и скользящее окно
  • Жадность — и, что важнее, недоверие к ней без контрпримера
  • Перебор с отсечениями, перебор подмножеств и перестановок, встреча посередине
  • Делимость, НОД, простые числа, решето, системы счисления
  • Комбинаторику со степенями и сочетаниями по модулю
  • Графы: как их увидеть в условии, обход в ширину и в глубину
  • Динамику: одномерную и по таблице, с восстановлением ответа и с экономией памяти

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

теория

Где именно у вас слабое место

Контест был устроен так, что каждая задача опирается на свою тему. Посмотрите, какие не пошли, и вернитесь точечно — перечитывать весь курс незачем.

Не пошла задача Тема Куда вернуться
1, 11 Цифры числа Занятие 36
2, 14 Словари и подсчёты Занятие 25
3 Префиксные суммы Занятие 29
4, 13 Сортировка Занятие 21
5 Два указателя Занятие 30
6, 16 Поиск по ответу Занятие 32
7, 17 Делимость и простые Занятия 34, 35
8, 18 Графы и обходы Занятия 40, 41
9, 19 Одномерная динамика Занятие 42
10 Комбинаторика Занятие 38
12 Строки и срезы Занятия 14, 15
15 Жадность Занятие 33
20 Динамика по сетке Занятие 43

И отдельно тот случай, который таблицей не лечится: тему знал, но не узнал. Если задача разобралась за минуту после прочтения признака — перечитывать занятие бесполезно, нужна насмотренность. Решайте задачи там, где тема не написана в заголовке; об этом ниже.

теория

Карта тем: что идёт дальше

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

Структуры данных

  • Куча — когда на каждом шаге нужен минимум из меняющегося набора. Планировщики, слияние списков, алгоритм Дейкстры.
  • Система непересекающихся множеств — когда объекты постепенно объединяются в группы и надо быстро отвечать, в одной ли группе двое. Динамическая связность, остовные деревья.
  • Дерево отрезков — когда запросы «сумма или минимум на отрезке» перемежаются с изменениями элементов. Ровно та задача из проверки выше, где честное суммирование даёт двадцать миллиардов операций.

Графы

  • Дейкстра — кратчайший путь, когда у рёбер есть вес. Обход в ширину здесь уже не годится.
  • Топологическая сортировка — порядок дел с зависимостями; заодно динамика на графе без циклов.
  • Остовное дерево — связать всё дешевле всего.

Динамика

  • По подмножествам — когда состояние это «какие из n20n \le 20 объектов уже использованы». Задача коммивояжёра, расстановки.
  • По цифрам — когда считать надо среди чисел до 101810^{18}, а перебор исключён. Та самая тема, в которую не надо было лезть в задаче 11 — но которая нужна, когда диапазон и правда огромен.

Строки

  • Хеши и префикс-функция — сравнение подстрок и поиск вхождений за линию.

Математика

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

Порядок разумно взять такой: сначала Дейкстра и система непересекающихся множеств, потом дерево отрезков, потом динамика по подмножествам. Строки и геометрию — позже, они реже встречаются на ранних этапах.

теория

Как готовиться

Регулярность важнее объёма

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

Сколько сидеть над задачей

Тридцать-сорок минут без всякого продвижения — сигнал открыть разбор. Дольше сидеть вредно: вы не придумываете, а перебираете одно и то же по кругу.

Но открыть разбор — это не «прочитать и пойти дальше». Прочитали идею — закрыли и написали код сами. Задача, разбор которой вы поняли, но не написали, не решена.

Дорешивание

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

Виртуальные контесты

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

Где решать

  • Codeforces — главная площадка. Соревнования уровня Div. 3 и Div. 4 рассчитаны на начинающих и хорошо ложатся на этот курс.
  • acmp.ru — задачи по темам, с уровнями сложности, на русском.
  • informatics.msk.ru — курсы дистанционной подготовки, много задач школьных этапов.

Про олимпиады

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

теория

Куда дальше на платформе

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

  • Олимпиадное программирование: базовый курс — с нуля до муниципального этапа, Python. Если этот курс дался тяжело и хочется пройти то же самое, но с преподавателем.
  • Олимпиадное программирование: продвинутый курс — от муниципа к региону. C++, структуры данных, графы, динамика. Прямое продолжение того, на чём вы остановились.
  • Олимпиадное программирование: курс профи — регион и перечневые олимпиады: продвинутые структуры, графы, динамика, математика.

Переход на C++ в продвинутом курсе не случаен: часть задач регионального этапа на Python не укладывается в ограничения по времени, каким бы верным ни было решение. Питон при этом никуда не девается — на нём удобно прикидывать и проверять идеи.

Напоследок

Самое ценное, что стоит унести из курса, — не список приёмов, а привычка задавать условию три вопроса: что говорят ограничения, что здесь состояние и можно ли проверить готовый ответ быстрее, чем его найти. Приёмы забудутся и перечитаются за вечер. Привычка — нет.

Спасибо, что дошли до конца.