Олимпиады по программированию


Олимпиада по программированию (олимпиада по информатике) — интеллектуальное соревнование по решению различных задач на ЭВМ, для решения которых необходимо придумать и применить какой-либо алгоритм или программу на одном из языков программирования. Как правило участникам выдаётся комплект из нескольких задач. Задача считается решённой, если участники смогли составить программу, которая правильно работает на тестах, подготовленных жюри. Тесты участникам неизвестны.

Олимпиады бывают личные и командные. В командных олимпиадах обычно участвует 3 человека и им на всё время олимпиады предоставляется 1 компьютер для решения задач. Для проведения подобных соревнований используются специализированные программные турнирные системы.

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

Например, если самая простая задача по математике звучит как «Сложите два числа: 4 и 5», то самая простая задача по программированию прозвучит как «Напишите программу, которая складывает любые два числа». В этом случае от участника потребуется написать программу, которая считывает два числа через стандартный поток ввода, и выводит одно число — ответ на задачу — в стандартный поток вывода. Иногда организаторы соревнований предлагают считывать и выводить данные другим способом, например, через файлы. A+B — классическая задача для знакомства с таким форматом.

Конечно, жюри соревнований должно как-то убеждаться в том, что программа участника работает верно для любых данных. Для этого перед соревнованием готовится набор тестов, на которых будут запускаться решения участников, и набор ответов на них. Если у жюри и участника совпадут ответы на все тесты — решение получит полный балл, если нет — частичный или нулевой. На большинстве олимпиад проверка автоматизирована и производится сразу после отправки решения участником, что позволяет быстро сообщить ему результат и дать шанс доработать программу.

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