Олимпиадное программирование: что это такое и как устроено

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

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

Чем олимпиадная задача отличается от обычной программы

Условие задано полностью и не обсуждается

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

Ответ либо верный, либо нет

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

Время работы — часть условия

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

Проверяют не знание языка, а способ решения

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

Какие бывают олимпиады по программированию у школьников

Олимпиад по информатике в России две большие группы, и они устроены по-разному.

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

Вторая — олимпиады из перечня Минобрнауки, их проводят вузы. Отборочный тур у большинства идёт онлайн, записывается школьник сам, участвовать можно с 7–8 класса. Диплом действует четыре года, и вуз решает, какую льготу за него дать: приём без испытаний или сто баллов за предмет. Список по информатике — перечневые олимпиады по информатике.

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

На каком языке пишут

Python разрешён на всероссийской олимпиаде на всех этапах и на перечневых олимпиадах тоже. Мы учим только на Python и говорим об этом прямо: до регионального этапа лимиты рассчитаны так, что решение на Python проходит, а разница с C++ начинает решать на заключительном этапе. Что именно упирается в скорость языка и на каких задачах, разобрано в «Python на олимпиадах».

Олимпиадное программирование для школьников: с какого класса и сколько времени

Начинают обычно в 6–8 классе, и школьный этап доступен в первый же сезон, потому что отбора на него нет. Занятие по 15–30 минут в день доводит до уровня «решаю часть задач школьного этапа» за 3–4 месяца. Дальше время растёт не из-за сложности материала, а из-за календаря: этапы идут раз в год, и быстрее сезона их не пройти.

Класс при этом важен меньше, чем кажется. Задачи начального уровня не опираются на школьную программу дальше арифметики, поэтому семиклассник и десятиклассник начинают с одного места. Уровни сложности у нас привязаны к этапам олимпиады, а не к классу.

С чего начать сегодня

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

Куда идти дальше

Частые вопросы

С какого класса занимаются олимпиадным программированием?

Школьный этап всероссийской олимпиады по информатике открыт любому классу, и участвуют обычно с 5–7. Начинать удобно в 7 классе: до регионального этапа остаётся запас в три года. В 9 и 10 классе начинать тоже нормально, путь тот же, просто плотнее.

Какой язык нужен для олимпиадного программирования?

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

Сколько времени нужно, чтобы начать решать олимпиадные задачи?

До уровня «решаю часть задач школьного этапа» с нуля доходят за 3–4 месяца занятий по 15–30 минут в день. Это не оценка талантливого школьника, а расчёт по объёму: язык занимает 2–3 месяца, первые приёмы — ещё месяц-полтора.

Нужен ли тренер, чтобы заниматься олимпиадным программированием?

На старте нет. Задача с автоматической проверкой сама говорит, что решение неверное, а разбор попытки объясняет, где именно. Тренер начинает решать позже, примерно с регионального этапа, где разбор чужого решения и постановка мышления дают больше, чем ещё сто решённых задач.

Чем олимпиадное программирование отличается от обычного?

Целью. Обычная программа должна работать долго и меняться по требованию, поэтому её пишут читаемой и разбитой на части. Олимпиадная программа живёт две секунды и нужна один раз, зато обязана уложиться в лимит на самых больших входных данных. Отсюда и разница в навыке: там проектирование, здесь выбор способа посчитать.