Первая ступень

DUNA

DUNA · Олимпиадное программирование

Уметь писать код и уметь решать олимпиадные задачи — разные вещи. Учимся решать: сначала понять задачу и придумать подход, и только потом писать программу.

Для кого

11–16 лет: уже умеют программировать на базовом уровне, но системно олимпиадными задачами ещё не занимались. Не курс «с нуля» — переход от программирования к олимпиадным задачам.

Формат

  • онлайн · 1 занятие в неделю · 60 минут
  • небольшая группа — до 6 человек
  • задачи самостоятельно между занятиями
  • учебный год: октябрь → июнь
  • C++ параллельно с задачами
  • 20 € / занятие

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

Чему научимся за год

  1. Понимать условие: что дано на вход, что нужно получить, зачем примеры и ограничения
  2. Решать по шагам: идея → план → оценка «успеем ли» → код → проверка
  3. Находить простое решение и улучшать его, если нужно
  4. Самостоятельно писать решение на C++ и разбирать, почему программа ошибается или не укладывается во время

Программа курса

Год состоит из модулей — небольших учебных блоков со своей целью. В начале больше опоры: как читать задачу и аккуратно писать код. К концу года — больше самостоятельной практики на уже знакомых идеях. Язык C++ осваиваем вместе с задачами, а не отдельным длинным курсом «только синтаксис».

  1. 01

    Старт олимпиадника

    3 недели

    Учимся читать задачу спокойно и рассуждать до кода. Это первый шаг от «я умею программировать» к «я умею решать олимпиадные задачи».

    • Как устроено условие: входные данные, ответ, примеры
    • Пошаговый путь к решению: от идеи к проверке
    • Ограничения и оценка сложности: time/space в виде O(...), зачем это нужнее подсчёта операций
    • Особые случаи: границы да/нет, ноль и пустота, деление на 0, индексы; вердикты WA/TLE/RE
  2. 02

    Реализация по условию

    4 недели

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

    • Удобный шаблон программы и аккуратный ввод-вывод
    • Массивы: как хранить последовательность чисел и проходить по ней
    • Подсчёт, как часто встречается значение
    • Решение «шаг за шагом» по описанию в условии
    • Работа со строками и типичные ошибки с индексами
  3. 03

    Полный перебор

    3 недели

    Иногда достаточно проверить все подходящие варианты. Учимся понимать, когда такой подход уместен, а когда программа будет слишком долгой.

    • Как размер данных связан со временем работы программы
    • Перебор пар и троек значений
    • Аккуратная организация перебора: что ищем и когда останавливаемся
    • Почему лишние циклы делают решение слишком медленным
  4. 04

    Сортировка и умный проход

    4 недели

    Сортировка помогает навести порядок в данных. После этого многие задачи решаются простым и понятным проходом — в том числе с двух сторон массива.

    • Сортировка чисел и зачем она нужна в задачах
    • Задачи, которые становятся проще после упорядочивания
    • Проход с двух концов массива на понятных примерах
    • Осторожность с равными значениями и границами
  5. 05

    Префиксные суммы

    3 недели

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

    • Идея накопления: что такое префикс и как его построить
    • Быстрый ответ на вопрос о сумме на отрезке
    • Аккуратная работа с большими числами
    • Типичные сюжеты и частые ошибки на границах отрезка
  6. 06

    Бинарный поиск

    4 недели

    Ищем нужное значение не перебором всего подряд, а делением диапазона пополам — быстрее и аккуратнее, когда ответ «ведёт себя предсказуемо».

    • Когда поиск делением пополам вообще возможен
    • Поиск числа в упорядоченном массиве
    • Как правильно сужать границы поиска
    • Поиск самого ответа в задаче, а не только элемента в массиве
    • Как выбрать: бинарный поиск или другой способ
  7. 07

    Жадные стратегии

    3 недели

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

    • Идея «лучшего шага прямо сейчас» на понятных историях
    • Когда перед жадным выбором помогает сортировка
    • Проверка идеи: пример, который подтверждает, и пример, который опровергает
    • Как решить: жадная стратегия или полный перебор
  8. 08

    Математика, подсчёт и закрепление

    4 недели

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

    • Делимость и остатки в задачах
    • Подсчёт частот и проверка уникальности
    • Смешанные задачи: какую идею года выбрать
    • Учебная проверочная работа на пройденном материале
  9. 09

    Финал года

    2 недели

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

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