Python на олимпиадах по информатике: разрешён и чего им хватает

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

Где Python хватает

Косвенное подтверждение не только наше: рабочий язык подготовительных сборов Яндекса перед школьным и муниципальным этапами — Python, а C++ появляется только на сборах перед региональным и заключительным этапом (проверено 29 июля 2026). Олимпиада имени Келдыша для 5–8 классов принимает Python, Pascal, C++ и Java.

Сколько на самом деле занимают наши задачи

Это не оценка, а выгрузка из нашего судьи за 4–30 июля 2026: 1754 успешных прогонов тестов по 79 задачам, все решения — на Python 3. Медиана времени одного теста — 21 мс, девять тестов из десяти укладываются в 32 мс. Время считается целиком, вместе со стартом интерпретатора.

Самый тяжёлый измеренный тест — 2628 мс: задача на префиксные суммы с массивом до 35 тысяч элементов. Вердикта «превышено время» (TLE) за весь период не было ни одного — ни в одном из 1786 прогонов.

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

Что решает время: не язык, а как написано

Замер 31 июля 2026, CPython 3.12.10, 200 тысяч чисел, лучшее из трёх запусков, время процесса целиком. Один и тот же язык, одна и та же задача — меняется только способ записи:

Что делаемКак написаноВремя
Прочитать 200 000 чиселfor _ in range(n): a.append(int(input()))148 мс
Прочитать 200 000 чиселdata = sys.stdin.buffer.read().split()63 мс
Собрать ответ из 200 000 строкout += x в цикле26,9 с
Собрать ответ из 200 000 строк'\n'.join(parts)63 мс

Разница между двумя способами собрать ответ — больше четырёхсот раз, и это внутри одного языка. Именно поэтому «переписать на C++» почти никогда не бывает первым правильным шагом: сначала стоит посмотреть, как написан ввод-вывод и какая у решения сложность.

Четыре правила, чтобы Python не тормозил

Читай ввод одним куском

input() в цикле разбирает строки по одной; sys.stdin.buffer.read().split() забирает весь поток сразу. На нашем замере это 148 мс против 63 мс на 200 000 числах.

Не склеивай ответ через out += x

Каждое сложение строк создаёт новую строку целиком. Собирай куски в список и один раз делай '\n'.join(parts) — на нашем замере 26,9 секунды против 63 миллисекунд.

Списки вместо словарей там, где ключи — числа

Если индексы идут подряд от 0 до n, обычный список быстрее словаря и памяти ест меньше.

Считай сложность, а не строки кода

Разница между O(n²) и O(n log n) на входе в 100 000 элементов — это разница между «никогда» и «мгновенно». Ни один язык её не отыгрывает.

Где Python действительно упирается

Честно: такие задачи есть. Когда на входе миллион элементов и требуется несколько проходов с арифметикой в каждом, константа интерпретатора становится заметной, и участники на C++ получают запас, которого у Python нет. Это уровень регионального этапа и выше — до него сначала нужно дойти.

Что делают в этот момент опытные участники: меняют не язык, а алгоритм. Задача, которая не проходит перебором, обычно решается сортировкой, префиксными суммами, двумя указателями или бинарным поиском по ответу — и тогда она проходит на любом языке с запасом. Эти приёмы разобраны по темам: префиксные суммы, два указателя, бинарный поиск, сортировка.

С чего начать, если Python ещё не знаешь

Курс «Python с нуля» в программе курса ведёт с первого print() до мини-проекта — специально для тех, кто до олимпиад не программировал. Весь маршрут дальше — в гайде «С нуля до олимпиады»: сколько занимает язык, когда подключать приёмы и что решать на каждом шаге. Ближайшая настоящая олимпиада — школьный этап ВсОШ: он проходит онлайн, отбора нет, участвовать может любой школьник.

Проверить кусок кода можно без установки: песочница Python онлайн запускает код прямо в браузере, ввод подаётся через input().

Вопросы и ответы

Можно ли писать олимпиаду по информатике на Python?

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

Хватает ли Python на школьном и муниципальном этапе?

Хватает. Косвенное подтверждение не только наше: рабочий язык подготовительных сборов Яндекса перед школьным и муниципальным этапами — Python, а C++ появляется только на сборах перед региональным и заключительным этапом (проверено 29 июля 2026). Олимпиада имени Келдыша для 5–8 классов принимает Python, Pascal, C++ и Java.

Правда ли, что Python медленный?

Он медленнее компилируемых языков на одинаковом алгоритме — это константа, а не «в разы хуже». Насколько именно, мы честно не измеряли: наш судья принимает только Python 3, значит и сравнивать нам не с чем. Зато измерили другое: два способа записать одно и то же на самом Python отличаются в сотни раз — 26,9 секунды против 63 миллисекунд. Способ записи стоит дороже выбора языка.

Когда переходить на C++?

Не раньше, чем упрёшься в лимит времени с уже правильным алгоритмом. Если решение не проходит из-за сложности, смена языка ничего не даст: O(n²) останется O(n²). На школьном и муниципальном этапе такая ситуация встречается редко.

Какие библиотеки можно использовать на олимпиаде?

Правила конкретного тура публикует организатор — их и надо смотреть в год участия. На практике для олимпиадных задач хватает стандартной библиотеки: sys для быстрого ввода, collections для очередей и счётчиков, heapq для очереди с приоритетом, bisect для двоичного поиска.

Что учить, чтобы решать быстрее?

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

Попробовать сейчас

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