• Стоит ли начинать готовиться к олимпиадному программированию в 10 классе, и какой язык лучше выбрать?

    Nizamovoff
    @Nizamovoff
    HSE CS AMI student
    Здраствуйте. Начать программировать с 10 класса поздновато, но можно подготовиться к 11 классу, успев выучить базовые и не очень алгоритмы. Я бы посоветовал изучить С++, потому что Python часто не влезает в поставленные ограничения по времени.

    В целом, знать python на базовом уровне тоже надо, чтобы не приходилось писать длинную арифметику.

    Поучите c++ по данным темам (написано в порядке изучения):
    - Ввод/вывод
    - Условные операторы (if - else, switch - case, тернарный условный оператор)
    - Циклы (for, while, do while)
    - Массивы (одномерные, двумерные)
    - Функции
    - Рекурсии
    - Графы, введение в теорию графов
    - BFS (обход в ширину)
    - DFS (обход в глубину)
    - Бинарный поиск
    - Жадный алгоритм
    - Динамическое программирования (также: НОП, НВП, задача об укладке рюкзака)
    - Изучить встроенные контейнеры: vector, set, multiset, map, multimap, queue, priority_queue, stack, deque, list


    Если намерены знать более сложные алгоритмы (вполне могут пригодится):
    - алгоритм Дейкстры, Форда-Беллмана, Флойда
    - Поиск мостов и точек сочленения, компоненты сильной связности
    - Бинарный, а также тернарный поиск по ответу
    - Дерево отрезков (без массовых операций)
    - Доизучать контейнеры и структуры данных (в частности unordered версии)


    Если намерены участвовать не только в перечневых олимпиадах, но и подготовиться к 11 классу к региональному и заключительному этапу ВОШ:
    - ДП на подотрезках, на поддеревьях, по подмножествам (подмаскам), по профилю, по изломанному профилю
    - Дерево отрезков с массовыми операциями, Декартово дерево (+ по неявному ключу), дерево Фенвика (многомерное)
    - Система Непересекающихся Множеств
    - Sparse table
    - Нахождение LCA
    - Корневая оптимизация
    - Минимальный остов (алгоритм Прима, алгоритм Крускала, алгоритм Тарьяна)
    - Z-функции
    - Бор
    - Хэши
    - Кучи


    Также, ко всему этому, надо подтянуть математику, в частности геометрию:
    - Нахождение расстояния от точки до прямой
    - Вектора (скалярное и векторное произведение)
    - Да и логика не помешает


    Удачи в начинаниях!
    Ответ написан
    7 комментариев