Для того, чтобы принять участие в тестировании, зайдите на сайт olympic.tusur.ru
Перейдите в раздел Олимпиады/Тренировки (рисунок 1).

Trainings
Рисунок 1 - переход на страницу тренировок

В разделе тренировок выберите Одномерные и двумерные массивы. После этого вы окажетесь на странице со списком задач тренировки (рисунок 2).

List_of_problems
Рисунок 2 - список задач тренировки

На вкладке Задания вы можете ознакомиться с условиями всех задач тренировки. Вы можете решать задачи и посылать их решения в любом порядке. Успешно сданные задачи будут помечаться в списке знаком +.

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

Registration_1
Рисунок 3 - форма входа

Во время регистрации в качестве отображаемого имени укажите свои имя, фамилию и группу. На рисунке 4 показан пример заполнения формы регистрации.

Registration_2
Рисунок 4 - заполненная форма регистрации

Если вы уже зарегистрированы в системе, то для входа в неё вам достаточно ввести свои логин и пароль в форму входа и нажать кнопку Вход (рисунок 5).

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

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

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

Обратите внимание: взаимодействие вашего решения и тестирующей системы происходит через стандартный ввод-вывод (как если бы данные в программу вводились с клавиатуры, а выводились ею на экран монитора). Ваша программа не должна выводить ничего, кроме ответа на задачу в формате, оговорённом в условии задачи (всегда внимательно читайте раздел "Выходные данные"), в частности, программа не должна выводить приглашений на ввод значений (таких, как "Введите числа а и 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);
  }
}

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

В отправляемых решениях на 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
Time limit exceeded on test NПревышено допустимое время работы на тесте N
Memory limit exceeded on test NПопытка использовать больше памяти, чем дозволено
Run-time error on test NПрограмма завершилась с ненулевым кодом возврата
Presentation error on test NОшибка в формате выходных данных на тесте N
Wrong answer on test NПолучен неверный ответ на тесте N
AcceptedУспешно пройдены все тесты, решение правильное

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

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

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

Ваша цель состоит в том, чтобы успешно сдавать задачи (получая вердикт Accepted на них). Вкладка Рейтинг показывает успехи всех участников тренировки. При составлении рейтинга учитывается только количество успешно сданных задач. Обратите внимание, что ни количество неудачных попыток, ни время сдачи никак не учитываются при его составлении. Пример рейтинга показан на рисунке 8.

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

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

При решении задач на 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().

Пример корректного кода для чтения одномерного массива:

#include <cstdio>
#include <iostream>

using namespace std;

int main() {
    int n;
    double a[10000];

    cin >> n;//Для ввода одного числа допустимо использование cin.

    //Ввод элементов массива.
    for (int i = 0; i < n; i++)
        scanf("%lf", &a[i]);

    //Вывод элементов массива с точностью до 4-х знаков после десятичной точки.
    for (int i = 0; i < n; i++)
        printf("%.4f ", a[i]);

    return 0;
}

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