Прочитать чужой разбор задачи приятно и обманчиво. Появляется ощущение, что задача «понята»: мысль автора отслежена, код стал прозрачным, идею можно пересказать вслух. Через неделю это ощущение растворяется. На контесте встречается задача того же типа — и оказывается, что ни идею не получается восстановить, ни код не пишется без подсмотра. Между «я понял» и «я могу воспроизвести через неделю под давлением» стоят несколько дней целенаправленной работы.
Этот гайд — про то, как организовать эти дни. Без них один разбор остаётся одной строкой в логе прочитанного. С ними — становится частью устойчивого навыка, который вытаскивается из памяти за минуту в боевой ситуации.
Зачем вообще что-то делать после разбора
Кажется логичным закрыть разбор, поставить галочку и идти к следующему. Этот импульс есть у всех, но он мешает прогрессу. Причина — устройство памяти: то, что прочитано один раз, забывается за – часа примерно на %. Сильнее всего стираются детали реализации — границы циклов, тонкие моменты с типами, последовательность шагов. Идея в целом часто остаётся, но без деталей она бесполезна в момент, когда задача нужна.
Цель действий после разбора — поднять долю удержанного до %+ за неделю и закрепить навык так, чтобы он переносился на похожие, но не идентичные задачи. Это и есть смысл тренировки: не «решить много задач», а «расширить класс задач, в которых данный шаблон вытаскивается рефлекторно».
Чек-лист «я понял» vs «я могу воспроизвести»
Перед тем как закрыть разбор, прогоните по чек-листу. Если хотя бы один пункт «нет» — закрывать рано.
Уровень «я понял»
- Могу пересказать алгоритмическую идею двумя-тремя предложениями, не открывая текст разбора.
- Понимаю, почему алгоритм корректен (доказательство, инвариант или интуиция — что было в разборе).
- Могу назвать сложность по времени и по памяти, не подглядывая.
- Понимаю, в каком сигнале условия прячется этот шаблон.
Достижение этого уровня — необходимо, но не достаточно. С него начинается работа, а не заканчивается.
Уровень «я могу воспроизвести»
- Могу написать рабочий код с нуля на чистом редакторе, не глядя в разбор. До прохождения по всем примерам, без TL/RE/WA.
- Могу написать тот же код через 2–3 дня и не вспомнить ни одной детали из заметок — но он соберётся за минут.
- Если в задаче поменять один параметр (массив стал двумерным; вместо суммы — XOR; вместо отрезка — подматрица), сам понимаю, как переделать решение.
- Могу объяснить решение вслух так, чтобы кто-то, не видевший задачу, понял с первого раза.
Расстояние между двумя уровнями — это и есть тренировка. Без неё разбор остаётся в первом уровне, и при следующей встрече с задачей того же типа история повторяется.
План на 3 дня (минимальный)
Подходит, когда нет недели, или когда тема не центральная (вспомогательная техника, которую нужно «поднять до средней комфорта»).
День 1 — пересборка с нуля
После прочтения разбора отложите его на час (или дальше — на полдня). Затем возьмите ту же задачу и напишите решение с нуля, без подсмотра в код разбора. Можно подглядывать в свои конспекты («идея»), но не в готовый код.
Что важно:
- Если код не пишется за – минут — открыть разбор, посмотреть именно тот фрагмент, на котором застряли. Не весь код целиком. После — закрыть и продолжить.
- Если решение проходит — записать в свой лог: «задача , шаблон , написана с подсмотром: раз».
- Если решение не проходит — найти баг сами. Отладка тоже часть тренировки; разбор показал идею, но не сценарий отладки.
Цель дня — не «решить задачу», а прожить её руками: набрать структуру кода, ощутить узкие места, увидеть, где легко ошибиться.
День 2 — однотипная задача
Найдите задачу той же темы на той же полосе сложности. Источник — теги Codeforces (dp, prefix-sums, bfs), acmp.ru архив по тематике, Яндекс Контест архивы. Решайте без какой бы то ни было подсказки в начало. Если за минут идея не приходит — посмотреть только условие в другой формулировке (пересказать своими словами, выписать ограничения). Если за минут идея всё ещё не пришла — выяснить, почему: «нужна другая техника» или «техника та же, но другой ракурс»? Это анализ важнее, чем готовое решение.
Цель дня — проверить переносимость шаблона. Если задача того же типа решается, шаблон встал. Если нет — оригинальная тренировка зацепила частный случай, нужно расширять.
День 3 — stretch-задача
Берётся задача той же темы, но на – пунктов выше по CF-сложности. Цель — не обязательно дорешать, а попытаться применить шаблон. Если он подходит без изменений — отлично, тема плотно встала. Если требуется доработка (другое состояние, другая структура данных поверх) — это сигнал, в каком направлении расширять навык дальше.
Stretch не оценивается «решил / не решил». Оценивается: «я понял, чем эта задача отличается от моей основной» — то есть разница между уровнем тренировки и более высоким.
План на 7 дней (стандартный)
Подходит, когда тема центральная для текущей траектории (например, DP — если вы на полосе CF –). Семь дней — компромисс между «достаточно для закрепления» и «не слишком долго, чтобы темп тренировки сохранился».
День 1 — пересборка с нуля
Как в трёхдневном плане. Если код пишется за минут без подсмотра — переходить к дню можно прямо сегодня, не теряя время.
День 2 — две однотипные задачи
Две задачи того же типа на той же полосе. Между ними — короткая пауза (– минут), чтобы каждая воспринималась самостоятельно, а не как «продолжение первой».
Цель — отследить общее место: где в обеих задачах сработала та же часть шаблона. Эта «общая часть» — собственно шаблон. То, что в задачах разное, — «обвязка», специфика условия.
День 3 — отдых от темы
Контр-интуитивный, но критически важный пункт. Не трогать эту тему в этот день. Решайте задачи по другой технике: если тренируете DP — берите день на жадные / реализацию / графы. Если тренируете прирост на одной теме — день паузы по этой теме повышает удержание материала на следующих повторениях. Это феномен интервального повторения: вспомнить через часов сложнее, чем через , но именно эта сложность фиксирует материал в долгую память.
День 4 — повтор задачи дня 1
Та же задача, что в день 1. Пишите код с нуля на чистом редакторе. Засеките время. Если код собрался за минут — успех, шаблон встал. Если занимает + — это сигнал: между днём 1 и днём 4 не было настоящего удержания, нужна ещё одна задача того же типа.
В Anki-логике это «вторая карточка с интервалом дня». На третьей карточке (день ) интервал расширится до дней; при успехе следующий повтор — через – день, дальше реже.
День 5 — задача +200 CF
Stretch-задача из плана-3, но в семидневном цикле она встаёт точно на -й день — когда основной шаблон уже закреплён. Это не первое касание сложности, а проверка, расширяется ли шаблон. Если задача поддаётся за – минут без подсмотра — отлично, темп тренировки правильный.
День 6 — самостоятельный мини-проект
Выберите задачу, по которой по плану-3 уже была одна тренировочная попытка (день ). Решите её повторно, но при этом запишите свой собственный разбор в формате блог-статьи: идея, доказательство, код, проверка на примерах, типичные ошибки. Не подсматривая в чужой текст.
Это самый сильный приём закрепления: писать о теме заставляет проверить, где у понимания дыры. Если в разборе появляются места «здесь работает, почему — не знаю, надо проверить» — это и есть точки, которые в долгой памяти ещё не закрепились.
День 7 — финальная задача
Одна новая задача того же типа на текущей полосе сложности. Без подсмотра в любые материалы. Если решается за время боевого контеста (– минут) — тема закрыта, можно переходить к следующей. Если нет — тема нуждается в ещё одной итерации -дневного цикла.
Какие задачи брать для тренировок
Несколько источников, которые работают рядом друг с другом:
- Codeforces problemset с фильтром по тегу темы и сложности от исходной задачи. Это основной источник: критическая масса, понятная сложность, мгновенная проверка.
- acmp.ru — широкий архив, особенно полезен на полосах CF – (там много простых, но содержательных задач). Меньше теговой структуры, больше «прочитать условие и узнать тему».
- Яндекс Контест — открытые архивы Яндекс Кубка / Яндекс Алгоритм. Хороши для полосы –, формат условий ближе к ICPC.
- Codeforces Round Editorials — после серии ваших тренировок одной темы прочесть разборы Round, в которых эта тема была. Полезно увидеть, как авторы задач формулируют тему «в чистом виде» и какие отсечения они закладывают.
Что не имеет смысла:
- Брать задачи далеко за пределом текущей полосы (выше +400). Они тренируют не текущий шаблон, а способность импровизировать; на этапе закрепления техники это контр-продуктивно.
- Решать много одинаковых задач без анализа. Десять задач на «префикс + хешмап» — это не десять разных тренировок, а одна, повторённая раз. Подходит для самой первой недели; дальше требуется разнообразие.
- Брать «случайные задачи» из ленты Codeforces. Без фильтра по теме сложно отследить, что именно тренируется в данный момент.
Типичные ошибки самостоятельной тренировки
- Подмена решения чтением. Прочитал три разбора подряд — кажется, что «потренировался». Это работа над уровнем «я понял»; уровень «я могу воспроизвести» так не достигается. Лекарство: на каждый прочитанный разбор — минимум одна задача того же типа, написанная руками.
- Лжеповторение без интервала. Решить задачу дважды подряд в один день — не повторение, а вторая сборка по тёплому следу. Память не работает в режиме «час назад вспомнил, значит запомнил». Лекарство — день паузы между сборкой и повтором.
- Игнор stretch-задачи. Без задачи за пределом текущей полосы шаблон закрепляется только в узком окне сложности. На контесте сложность непредсказуема. Лекарство — обязательно одна задача к текущему уровню в плане.
- Перегрузка одной темой. Подряд дней одна тема — фаза неэффективности наступает на -й день, когда мозг «перенасытился» и удержание падает. Лекарство — план дней с разрывом в третий день.
- Запись «решил» без записи «как именно». Лог тренировок без отметки «с подсмотром / без / сколько раз застрял» не позволяет анализировать прогресс. Лекарство — короткие пометки: «, подсмотр, мин».
- Игнор stretch на CF в день . На полосе + это особенно заметно: расширение шаблона прокачивается именно на «чуть-чуть выше», а не на «сильно выше».
- Решение без анализа времени. Если задача дня заняла в раза больше времени, чем задача дня той же сложности, — это сигнал, что что-то «не село». Лекарство — фиксировать время в логе.
Где помогает тренажёр
После того как план составлен, нужен напарник для отладки и проверки. Тренажёр CodePal заточен под этот сценарий: пишете решение, ловите ошибку, и вместо того чтобы тратить минут на бисекцию принтов, обсуждаете с AI-партнёром, где конкретно в идее может быть пробой. AI не диктует решение, а помогает довести до состояния, в котором баг ловится за – минут.
Это особенно ценно на этапе тренировки, потому что готового разбора в этот момент уже нет — задача новая, никаких «открыть текст» нельзя. Альтернатива «спросить друга» доступна не всегда; тренажёр на этом этапе закрывает узкое место.
Второе — фиксация уровня. Тренажёр держит лог сессий: какие задачи разобраны, сколько подсмотров, какие шаблоны проседают. Через две недели тренировок видно, какие темы реально закрепились, а какие нужно прогнать ещё раз.
Итого
- Между «я понял» и «я могу воспроизвести» — несколько дней целенаправленной практики. Без них один прочитанный разбор остаётся отметкой в логе, а не навыком.
- План на 3 дня: пересборка с нуля → однотипная задача → stretch. Минимум для не центральной темы.
- План на 7 дней: пересборка → две задачи → пауза → повтор первой → stretch → собственный разбор → финальная новая задача. Стандарт для центральной темы.
- Главный приём интервального повторения — день паузы между касаниями одной темы. Без него удержание не работает.
- Главное измерение прогресса — не «решил / не решил», а «время до решения» и «количество подсмотров». Фиксируйте оба в логе.
- Stretch-задача обязательна. Без неё шаблон закрепляется только в узком окне.