Как устроены экзамены
Экзамен по программированию. Экзамен состоит из нескольких задач, каждая из которых оценивается независимо от 0 до 100 баллов. Итоговый балл за экзамен — это сумма баллов за все решенные задачи.
В качестве решения вам нужно вставить в окно для ответа полную программу со всеми импортами и точкой входа. Важно: пользоваться можно только стандартными библиотеками.
Во время экзамена вы видите вердикт тестирования только на первом тесте. Полный набор тестов ваше решение пройдет только после окончания экзамена. Поэтому «ок» в системе не означает, что задача выполнена полностью правильно и вы получите 100 баллов. За каждый пройденный тест вы получаете баллы, итоговый балл за задачу — это сумма по всем пройденным тестам.
В задаче всегда есть формат входных данных. Все тесты от авторов удовлетворяют этим ограничениям, поэтому делать дополнительную проверку не нужно. Условия задач могут быть сложными, поэтому лучше убедиться, что вы правильно их поняли. Читайте внимательно и пробуйте применить ваше решение на тестах.
Входные данные подаются на стандартный поток ввода (не аргументами!), а вывести ответ нужно на стандартный поток вывода. Подсказки для пользователей наподобие «введите число N» проверяющая система воспринимает как часть ответа на задачу, поэтому при чтении данных их вставлять не нужно. Проверка автоматическая, поэтому во время решения можно не тратить время на кодстайл.
Обращайте внимание на ограничения по времени и памяти, считайте асимптотику своего решения. Вы можете написать правильное с точки зрения алгоритма решение, но
Иногда решения можно написать только на одном языке программирования. В других случаях вы можете выбрать язык из набора представленных в системе. Язык JS не имеет доступа к стандартному потоку ввода из консоли, поэтому можно использовать платформу Node.js.
Экзамен по математике. Внимательно читайте вопрос задачи. Например, если просят ввести число, не нужно писать единицы измерения. Если не просят написать решение, не пишите, потому что проверка будет автоматической. При этом в некоторых задачах явно указано, что решение нужно написать.
Вы можете менять ответ несколько раз. Система будет проверять только последний.
Если в задаче используется неизвестное вам понятие, попробуйте найти его значение самостоятельно. Мы либо используем общеизвестные термины, либо даем определение в условии задачи.
Частые ошибки
TL (Time Limit) — превышение лимита времени. Это значит, что ваше решение работает слишком медленно или зависает. Как исправить:
- Убедитесь, что ваш алгоритм оптимален для входных данных. Обычно процессоры не могут выполнить более 10⁹ операций в секунду. Например, если в коде есть три вложенных цикла с диапазоном от 1 до 5 000, это может быть слишком медленно. Попробуйте найти более эффективное решение.
- Проверьте, завершает ли программа выполнение после вывода ответа. Если она продолжает работать, даже выдав правильный ответ, это также приведет к TL.
WA (Wrong Answer) — неправильный ответ. Эта ошибка может возникнуть по разным причинам. Советы по устранению:
- Проверьте крайние случаи.
- Убедитесь, что используемые типы данных подходят для ваших расчетов. Например, сумма 1 000 чисел по модулю, превышающая 10¹⁰, может не поместиться в тип int в C++, поэтому используйте long long.
- Проверьте корректность вывода: иногда лишние или недостающие пробелы и переносы строк могут стать причиной WA.
PE (Presentation Error) — ошибка в формате вывода. Часто это связано с некорректным количеством выводимых данных. Например, программа должна вывести три числа, а выводит два.
RE (Runtime Error) — ошибка во время выполнения программы. Основные причины:
- Деление на 0. Убедитесь, что это исключено в вашем коде.
- Выход за пределы массива. Проверьте, как вы работаете с индексами.
- Превышение глубины рекурсии. В Python это часто встречающаяся ошибка. Возможно, ваша функция зацикливается.
- Импорт сторонних библиотек. Не используйте библиотеки, которые могут отсутствовать в среде тестирования (например, requests).
CE (Compilation Error) — ошибка компиляции. Основные причины:
- Синтаксические ошибки (пропущенная точка с запятой, неправильная табуляция и так далее).
- Использование библиотек, которых нет в поддерживаемой версии языка.
Часто в тестирующей системе можно посмотреть подробное описание ошибки.
Другие редкие ошибки, которые, скорее всего, вы никогда не увидите: ML (Memory Limit), то есть превышение лимита памяти, и SE (Security Error) — нарушение правил безопасности.
Частый вопрос: «Почему локально все работает, а в тестирующей системе ошибка на первом тесте?»
Наш ответ: скорее всего, версии компиляторов или настройки среды исполнения различаются у вас локально и в тестирующей системе. Это не усложнение со стороны организаторов, а указание на скрытую ошибку в вашем коде. Например, локально выход за границы массива может не приводить к сбою, но в тестирующей системе это не прощается.
Как отладить код в среде, похожей на тестирующую систему:
- Зарегистрируйтесь на платформе Codeforces.
- Перейдите в раздел «Архив» и выберите «Запуск».
- Выберите ваш язык программирования и выполните код.
Эта система почти идентична тестирующей, поэтому ошибки, возникающие в ней, скорее всего, совпадут.
Как потренироваться
Мы создали
Можно решать задачи и знакомиться с тестирующей программой в режиме реального времени, а еще — смотреть примеры решений. Контест работает без ограничений по времени и количеству попыток.
Доступен для языков C++, Perl, Java, C#, Python, Go, Scala, Kotlin, NodeJS и Swift.