Для того, чтобы принять участие в олимпиаде, зайдите на сайт olympic.tusur.ru. Используйте для входа в систему логин и пароль, выданные вам во время регистрации участников. Для этого вам достаточно ввести свои логин и пароль в форму входа (верхний правый угол любой страницы) и нажать кнопку Вход (рисунок 1).

Login
Рисунок 1 - форма входа

Перейдите в раздел Олимпиады/Актуальные контесты (рисунок 2).

Contests_1
Рисунок 2 - переход на страницу олимпиад

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

Contests_2
Рисунок 3 - выбор олимпиады

После выбора олимпиады вы окажетесь на вкладке Задания, где можно просмотреть условия всех задач олимпиады. Для переключения между задачами используйте кнопки в верхней части вкладки (рисунок 4). Обратите внимание, что на вкладках указаны цены всех задач (то есть количество баллов за прохождение всех тестов). Описание задачи всегда начинается с цены и ограничений по памяти и времени.

Problems
Рисунок 4 - навигация по задачам

Задачи можно сдавать в любом порядке. Написав код для решения одной из задач, перейдите на вкладку Послать.

Вкладка Послать позволяет вам отправлять от своего имени решения на проверку. Убетитесь, что вы правильно выбрали компилятор и номер задачи, скопируйте своё решение в окно для исходного кода. Пример заполнения этой формы для задачи A. "Задача A+B" показан на рисунке 5. Заполнив все поля, воспользуйтесь кнопкой Отправить.

Submit
Рисунок 5 - форма отправки

Обратите внимание: взаимодействие вашего решения и тестирующей системы происходит через стандартный ввод-вывод (как если бы данные в программу вводились с клавиатуры, а выводились ею на экран монитора). Ваша программа не должна выводить ничего, кроме ответа на задачу в формате, оговорённом в условии задачи (всегда внимательно читайте раздел "Выходные данные"), в частности, программа не должна выводить приглашений на ввод значений (таких, как "Введите числа а и b: "). Программа не должна содержать никаких пауз в конце и должна всегда завершаться с нулевым кодом возврата. Примеры правильного и неправильного исходного кода для задачи 1. "Задача A+B" на разных языках приведены в таблицах 1 а-в.

Таблица 1.а - примеры исходного кода на C++.
Правильный кодНеверный код 1Неверный код 2Неверный код 3
#include <cstdio>

using namespace std;

int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d", a + b);
    return 0;
}
#include <cstdio>

using namespace std;

int main() {
    int a, b;
    printf("Input A and B: ");
    scanf("%d%d", &a, &b);
    printf("%d", a + b);
    return 0;
}
#include <cstdio>

using namespace std;

int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    printf("a+b = %d", a + b);
    return 0;
}
#include <cstdio>

using namespace std;

int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d", a + b);
    return a + b;
}

Таблица 1.б - примеры исходного кода на Pascal/Delphi.
Правильный кодНеверный код 1Неверный код 2Неверный код 3
Var a, b: LongInt;
Begin
    Read(a, b);
    Write(a + b);
End.
Var a, b: LongInt;
Begin
    Write('Input A and B: ');
    Read(a, b);
    Write(a + b);
End.
Var a, b: LongInt;
Begin
    Read(a, b);
    Write('a+b = ', a + b);
End.
Var a, b: LongInt;
Begin
    Read(a, b);
    Write(a + b);
    Halt(a + b);
End.

Таблица 1.в - примеры исходного кода на Java.
Правильный кодНеверный код 1Неверный код 2Неверный код 3
import java.util.Scanner;

public class Main {
  public static void main(String[ ] args) {
    Scanner in = new Scanner(System.in);
    int a, b;
    a = in.nextInt();
    b = in.nextInt();
    System.out.println(a + b);
  }
}
import java.util.Scanner;

public class Main {
  public static void main(String[ ] args) {
    Scanner in = new Scanner(System.in);
    int a, b;
    System.out.println("Input A and B: ");
    a = in.nextInt();
    b = in.nextInt();
    System.out.println(a + b);
  }
}
import java.util.Scanner;

public class Main {
  public static void main(String[ ] args) {
    Scanner in = new Scanner(System.in);
    int a, b;
    a = in.nextInt();
    b = in.nextInt();
    System.out.println("a+b = " + (a + b));
  }
}
import java.util.Scanner;

public class Main {
  public static void main(String[ ] args) {
    Scanner in = new Scanner(System.in);
    int a, b;
    a = in.nextInt();
    b = in.nextInt();
    System.out.println(a + b);
    System.exit(a + b);
  }
}

Содержимое комментариев в исходном коде никак не влияет на ход его проверки.

При решении задач на C++ следует учитывать следующие особенности GNU C++:

  • операторы C++ cin и cout сильно уступают в быстродействии функциям С printf и scanf и не пригодны для достаточно быстрого считывания больших массивов. Чтобы использовать printf и scanf, обязательно подключите модуль <cstdio>, иначе GNU C++ сгенерирует ошибку компиляции (в отличие от Visual C++).
  • Для ввода и вывода длинных целых (long long int) следует использовать спецификатор %lld. Спецификатор %I64d не соответствует стандарту C++ и не обрабатывается GNU C++.
  • Visual C++ позволяет использовать функцию abs(x) как для целых, так и для вещественных чисел. GNU же требует использования для вещественных чисел функции fabs().

В отправляемых решениях на Java главный класс должен называться Main.

Вам может быть интересно, что для компиляции вашего кода используются нижеследующие строки компиляции (таблица 2).

Таблица 2 - используемые строки компиляции.
C++g++ -DONLINE_JUDGE -fno-asm -fno-optimize-sibling-calls -ffloat-store -lm -s -static -x c++ -O2 -o Main Main.cpp
Pascalfpc -dONLINE_JUDGE -So -XS -O2 Main.pas -oMain
Delphifpc -dONLINE_JUDGE -So -XS -Mdelphi -O2 Main.pas -oMain

Для запуска Java используется команда "java -Xmx%dM -DONLINE_JUDGE=true Main". Как видите, для Java тоже используется ONLINE_JUDGE. Если вы не знаете, для чего это, значит, вам это не нужно.

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

Таблица 3 – Возможные значения поля Результат.
РезультатРасшифровка
Waiting...Решение ещё не проверено и ожидает своей очереди
Compilation errorРешение компилируется с ошибкой
Testing... NРешение сейчас проверяется на тесте N
X%Решение даёт верный ответ для X% от общего числа тестов
IgnoredЖюри исключили данную попытку из рассмотрения

Возможый вид очереди попыток приведён на рисунке 6.

Attempts_1
Рисунок 6 - очередь попыток

Обратите внимание, что названия задач в очереди попыток являются ссылками. Перейдя по такой ссылке, вы можете ещё раз просмотреть отправленный вами исходный код. Кроме того, вердикт Compilation error также является ссылкой. При переходе по ней вы можете прочесть текст ошибки, выведенный компилятором. Наконец, ссылкой является и резуьтат вида X%. Перейдите по такой ссылке, чтобы просмотреть данные о прохождении решением каждого отдельного теста.

При проходении каждого теста ваше решение получает вердикт. Все возможные вердикты приведены в таблице 4.

Таблица 4 – Возможные вердикты
ВердиктУсловие получения
Time limit exceededПревышено допустимое время работы
Memory limit exceededПопытка использовать больше памяти, чем дозволено
Run-time errorПрограмма завершилась с ненулевым кодом возврата
Presentation errorОшибка в формате выходных данных
Wrong answerПолучен неверный ответ
OKПолучен верный ответ, тест пройден успешно

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

Attempts_2
Рисунок 7 - информация о прохождении тестов.

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

Standings
Рисунок 8 - рейтинг

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

  • Процент пройденных тестов наиболее успешной попытки.
  • Количество попыток до наиболее удачной включительно (попытки с ошибкой компиляции не учитываются).
  • Время отправки наиболее удачной попытки (не выводится, если попыток, набравших более 0%, нет).

В колонке Баллы выводится сумма баллов, набранных на каждой из задач. Баллы за задачу начисляются пропорционально проценту пройденных тестов. Полную цену задачи участник получает, сдав её на 100%.

В колонке Время выводится штрафное время. Оно равно сумме времён отправки наиболее удачных попыток на каждую из задач плюс по 20 минут за каждую попытку до наиболее удачной не включительно (для задач, сданных более чем на 0%).

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

Если в ходе участия у вас возникают вопросы, связанные с условиями задач или корректностью тестов на них, вы можете задать их жюри, используя вкладку Вопросы. На этой же вкладке вы увидите ответ, когда он будет дан. Кроме того, жюри могут делать для всех участников олимпиады объявления. Объявления отображаются на странице с условиями задач (как правило, они связаны с уточнением условий задач).