ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила

Руководство по использованию архива задач

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

1. Выбираем задачу

Чтобы увидеть список задач перейдите по ссылке Архив задач, затем выберите том или рубрику. Выберите интересующую вас задачу. Для тех, кто здесь впервые, рекомендуем начать с задач 1000. A+B Problem и 1001. Обратный корень. После того как определитесь с выбором задачи, приступайте к ее решению.

2. Решаем задачу и отправляем решение на проверку

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

Пример решения задачи 1000. A+B Problem, в которой требуется считать два целых числа и вывести их сумму (на языке Паскаль):

var
   a, b, sum: integer;
begin
   read(a, b);
   sum := a + b;
   writeln(sum);
end.

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

  • Программа должна являться консольным приложением.
  • Входные данные подаются программе в стандартном потоке ввода (ввод с клавиатуры). Программа должна выводить ответ в стандартный поток вывода (вывод на экран).
  • Программа должна выводить только те данные, которые требует условие задачи. Выводить приглашение для ввода («Введите N:») не нужно. Также не нужно ожидать нажатия клавиши в конце работы программы.

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

В решениях задач запрещается:

  • работа с любыми файлами;
  • выполнение внешних программ и создание новых процессов;
  • работа с элементами графического интерфейса (окнами, диалогами и т.д.);
  • работа с внешними устройствами (принтером, звуковой картой и т.д.);
  • использование сетевых средств.

О том, как следует использовать конкретные языки программирования, читайте в соответствующих разделах:

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

3. Система проверяет решение

После отправки решения вы попадете на страницу Состояние проверки, где находится список всех последних решений. Среди них должно быть и ваше.

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

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

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

При подсчете времени работы решения учитывается только процессорное время, затраченное программой. Для подсчета памяти берется максимальный объем памяти, который использовался процессом в течение его работы (максимальный рабочий набор, peak working set). Далее из этого значения вычитается константа, равная минимальному объему памяти, который нужен программам на выбранном языке (обычно от 1 до 15 МБ).

Результатом проверки решения может быть один из следующих вердиктов:

  • Accepted. Решение засчитано как правильное.
  • Compilation error. Компиляция программы завершилась с ошибкой. Отчет компилятора в течение 15 минут будет доступен по ссылке на странице Состояние проверки. Возможные причины: синтаксическая ошибка; неправильно указан язык.
  • Wrong answer. Ответ программы неверен. В этом случае сообщается только номер теста. Входные данные теста не предоставляются, т.к. причины ошибки должны быть выявлены автором решения самостоятельно. Возможные причины: ошибка в программе; неверный алгоритм; программа выводит ответ в файл.
  • Time limit exceeded. Программа превысила установленное ограничение по времени. Работа решения будет прервана, как только истечет это время. Возможные причины: бесконечный цикл; неэффективное решение.
  • Memory limit exceeded. Программа превысила установленное ограничение по памяти. Работа решения будет прервана, как только превышено это ограничение. Возможные причины: утечка памяти; неэффективное решение.
  • Output limit exceeded. Программа превысила ограничение на размер выходных данных. Данное ограничение устанавливается с большим запасом и, как правило, не указывается в условиях задач. Возможные причины: бесконечный цикл; ошибка в программе.
  • Idleness limit exceeded. Программа простаивала в течение длительного промежутка времени. Возможные причины: ожидание нажатия клавиши в конце программы; чтение входных данных, когда они уже прочитаны до конца.
  • Runtime error. Программа аварийно завершила работу. Возможные причины: ненулевой код возврата (ошибка «non-zero exit code»); деление на ноль (ошибка «division by zero»); бесконечная рекурсия (ошибка «stack overflow»); недостаточный размер массивов или обращение по недоступному адресу в памяти (ошибка «access violation»). Чтобы избежать переполнения стека, используйте специальные директивы, которые приведены в разделах, посвященных конкретным языкам программирования.
  • Restricted function. Программа попыталась совершить небезопасную для проверяющей системы операцию. Возможные причины: чтение из файла, обращение к сетевому ресурсу.

Пример: если вы получили вердикт Wrong answer на тесте №3, то это означает, что ваше решение успешно прошло тесты №1 и №2, а на тесте №3 вывело неверный ответ. Если вы исправили ошибку, отправили решение на проверку снова и получили вердикт Time limit exceeded на тесте №10, то это означает, что исправленная ошибка действительно проявлялась на тесте №3. Теперь решение успешно проходит тесты с №1 по №9, а на тесте №10 работает дольше установленного ограничения. При этом неизвестно, был бы ответ на этом тесте правильным в случае, если бы решение уложилось в ограничение по времени.

4. Задача сдана. Что дальше?

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

Вы всегда можете обсудить одну из задач или систему в целом на форуме. Если вы нашли ошибку в задаче, то напишите об этом в форуме с пометкой «To admins» в начале темы. Если ваше решение засчитано в Архиве задач, но у вас есть тест, который оно не проходит, то присылайте этот тест по адресу timus_support@acm.timus.ru с темой «Слабые тесты в задаче X».