Олимпиадное программирование на языке Python
Кому подходит курс
Приглашаем ребят 7-8 класса, увлекающихся математикой и/или программированием. Опыт программирования на Python или каком-то ином языке желателен, но не обязателен. Очень важно желание учиться, быстро воспринимать и применять полученную информацию
Что будем делать
Мы видим целью курса освоение учениками на хорошем уровне языка Python, возможность для каждого разобраться с достаточно большим объемом олимпиадных тем по программированию, получить удовольствие от решения олимпиадных задач

На курсе мы выясним на практике, верно ли утверждение о том, что хороший математический уровень + правильный язык программирования + правильные знания могут привести к успеху в олимпиадах

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

Из чего состоит курс
Курс состоит из 32 занятий (сентябрь-май)
Занятие 1
Стартовое занятие. Ввод-вывод в Python, арифметические операции, простые олимпиадные задачи, в которых требуется минимум знаний о языке. Тестирующая система
Занятие 2
Условная инструкция в Python. Задачи на шахматной доске
Занятие 3
Целочисленная арифметика. Деление с округлением вверх
Занятие 4
Задачи на пересечение отрезков и прямоугольников. Разные олимпиадные задачи
Занятие 5
Цикл for, перебор
Занятие 6
Строки в Python. Кодовые таблицы. Функции ord() и chr(). Сравнение строк. Перебор символов строки
Занятие 7
Срезы строк, методы строк. Строки и шифры. Простые и сложные задачи про строки из олимпиад
Занятие 8
Цикл while. Моделирование
Занятие 9
Списки в Python. Срезы и методы. Методы split и join для списка строк в Python
Занятие 10
Задачи про дату и время
Занятие 11
Двумерные списки в Python. Генераторы списков. Задачи с таблицами
Занятие 12
Функции в Python. Рекурсия
Занятие 13
Словари в Python
Занятие 14
Множества в Python
Занятие 15-16
Графы. Основные понятия теории графов. Рекурсивные алгоритмы на графах
Занятие 17-18
Задачи на делимость. Проверка числа на простоту. Разложение на простые множители. НОД и НОК. Алгоритм Евклида. Решето Эратосфена
Занятие 19-20
Как упорядочить данные? Медленные и быстрые сортировки. Три квадратичные сортировки. Идеи алгоритмов быстрой сортировки (сортировка слиянием, сортировка Хоара). Как пользоваться встроенной сортировкой Python. Жадный алгоритм
Занятие 21
Системы счисления
Занятие 22-23
Структуры данных стек, очередь, дек: что это такое, как написать свою структуру данных, как использовать встроенные возможности Python. Классические задачи, в которых удобно использовать структуры данных (в частности, задача про правильные скобочные последовательности и обратную польскую запись)
Занятие 24
Однопроходные алгоритмы, линейный поиск
Занятие 25
Двоичный поиск по ответу
Занятие 26
Метод двух указателей
Занятие 27
Одномерное динамическое программирование (количество способов, наилучший способ, задача восстановления ответа)
Занятие 28
Двумерное динамическое программирование
Занятие 29
Сложные задачи динамического программирования. Задача о рюкзаке
Занятие 30
Интерактивные задачи (то есть, такие задачи, в которых тестирующая система взаимодействует с вашей программой, не давая весь тест сразу, а меняя его в зависимости от действий вашей программы).
Занятие 31-32
Геометрические задачи по программированию