Открытый турнир ФИТиУ по олимпиадному программированию


В феврале – марте 2015 г. впервые будет проведен Открытый турнир ФИТиУ по олимпиадному программированию.

Цели турнира:
  • выявления наиболее способных студентов в области программирования,
  • развития у студентов навыков решения сложных алгоритмических задач,
  • повышения интереса студентов к логическому программированию.
К участию в турнире допускаются студенты ВСЕХ факультетов БГУИР.
Участие в турнире — ИНДИВИДУАЛЬНОЕ (не командное).

Победители определяются раздельно – как в общем зачете, так и среди студентов ФИТиУ. Также будут отдельно определены победители среди первокурсников и среди первокурсников ФИТиУ.

Победителей ждут призы от компании WARGAMING. Компания является одним из крупнейших в мире разработчиков и издателей многопользовательских онлайн-игр и околоигровых сервисов. Ею созданы игры World of Tanks, Операция «Багратион», Order of War и т.д.. WARGAMING имеет центры разработки в Минске, а также в США, России и других странах с более чем 3000 сотрудниками, и заинтересована в поиске способных студентов для будущей работы в компании.

  
Соревнования проводятся в 2-3 этапа:
  • Первый (отборочный) заочный тур. Выдача заданий и обработка решений производится на сайте contest.bsuir.by. Решение заданий проходит в удобной для Вас обстановке.
  • Второй отборочный тур проводится только в случае большого количества участников, прошедших первый тур. Он может проводиться в очной либо в заочной форме.
  • Финал турнира проводится в очной форме. Решение заданий проходит в компьютерных аудиториях БГУИР.
    
Для участия в Турнире необходимо:
не позднее 15 марта 2015 г. зарегистрироваться на турнир на сайте contest.bsuir.by;
с 12 марта по 16 марта 2015 г. принять участие в первом (заочном) этапе Турнира.

По всем вопросам обращаться:
  • до начала турнира, в промежутках между турами, а также при проблемах с регистрацией на contest.bsuir.by либо с входом в турнир – на почту gurealex@bsuir.by;
  • во время туров – на сайте contest.bsuir.by отправить вопрос жюри, выбрав пункт меню «отправить вопрос».


Правила Открытого турнира ФИТиУ по олимпиадному программированию

1. ОБЩИЕ ПОЛОЖЕНИЯ


1.1. Цели турнира

Открытый турнир ФИТиУ по олимпиадному программированию проводится с целями:
  • выявления наиболее способных студентов в области программирования,
  • развития у студентов навыков решения сложных алгоритмических задач,
  • повышения интереса студентов к логическому программированию.

1.2. Состав участников

К участию в Турнире допускаются студенты всех факультетов БГУИР.
Турнир является индивидуальным (не командным) соревнованием.
Победители определяются раздельно – как в общем зачете, так и среди студентов ФИТиУ.
По решению жюри могут также быть определены победители в других номинациях, в частности, среди первокурсников.

2. АППАРАТНОЕ И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

2.1. Тестирующая система

Тестирование решений происходит на компьютерах с процессором Intel(R) Xeon(R) CPU E5-2603 0 @ 1.80GHz, либо более мощном. Объем памяти, доступной программе, составляет 64 Мb, если не указано иное. Используются следующие компиляторы (с опциями компиляции):

  • Free Pascal 2.4.0 (fpc -O2 -Xs -Sgic -viwn -dONLINE_JUDGE -Mdelphi)
  • GNU C++ 4.4.5 (g++ -O2 -Wall -DONLINE_JUDGE -x c++)
  • Java Open JDK 1.6.0 (javac)
  • Mono C# 2.6.7.0 (gmcs -optimize+ -define:ONLINE_JUDGE -r:System.Numerics.dll)

2.2. Рабочие места

Во время очных туров соревнований предоставляется подсоединенный к локальной сети IBM PC-совместимый компьютер в следующей конфигурации: процессор Pentium или совместимый, ОЗУ не менее 1 Gb, операционная система Microsoft Windows и сопутствующее программное обеспечение.

Могут использоваться следующие системы программирования:
  •     Borland Pascal 7.0
  •     Free Pascal
  •     Microsoft Visual C++ версии не ниже 6.0
  •     Borland C++ Builder версии не ниже 6
  •     Borland Delphi версии не ниже 6
  •     Eclipse 3.5

Участники должны заранее сообщить, какие из перечисленных систем программирования им потребуются - в противном случае, гарантируется лишь доступность хотя бы одной из перечисленных (и имеющих 32-разрядную адресацию) систем как для Паскаля, так и для С/C++. Примеры и встроенная система помощи также полностью доступны для участников.

3. ПОРЯДОК  ПРОВЕДЕНИЯ


Турнир по программированию состоит из 2-3 туров.

3.1. Первый (отборочный) тур

Первый отборочный тур проводится в заочной форме. Его продолжительность обычно составляет 120 часов (5 дней). Жюри имеет право продлить соревнования в случае каких-либо непредвиденных обстоятельств. Для прохождения на следующий этап участникам необходимо решить не менее половины задач.
Во время заочного тура участники имеют право общаться между собой и обсуждать условия и решения задач. Однако решения, имеющие НЕСОМНЕННЫЕ ПРИЗНАКИ «СПИСЫВАНИЯ» ИСХОДНОГО ТЕКСТА (а не только алгоритма) программы, при подведении итогов тура (обычно после его окончания) дисквалифицируются жюри. В случае особенно явных нарушений участники, отославшие такие решения, также могут быть дисквалифицированы для дальнейшего участия в Турнире.
По решению жюри некоторые участники могут быть допущены к участию в следующем туре без прохождения отборочного этапа.

3.2. Второй отборочный тур


В случае большого количества участников, прошедших первый отборочный тур, жюри имеет право назначить второй отборочный тур. Он может проводиться в очной либо в заочной форме.
Участникам предлагается решить от 3 до 8 задач (текст задач на русском языке) за 2-5 астрономических часа. Жюри имеет право продлить соревнования в случае каких-либо непредвиденных обстоятельств.
В отсутствие необходимости, второй отборочный тур не назначается и участники, успешно прошедшие первый тур, допускаются непосредственно к финалу турнира.

3.3. Финал турнира

Финал соревнований проводится в очной форме. Участникам предлагается решить от 3 до 8 алгоритмических задач (текст задач на русском языке) за 4-5 астрономических часа.

3.4. Прочие условия

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

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

4. РЕШЕНИЕ ЗАДАЧ


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

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

Ввод и вывод осуществляется через стандартные потоки (stdin, stdout). Тестирование производится автоматически, поэтому программы должны в точности соблюдать форматы ввода-вывода, описанные в условии каждой задачи. Если не оговорено отдельно, все входные данные предполагаются корректными и удовлетворяющими всем ограничениям, указанным в условии.

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

В решениях задач запрещено использовать:
  1.     Работу с подкаталогами и файлами.
  2.     Любые сетевые средства.
  3.     Любые другие средства или действия, которые могут нарушить работу программного обеспечения олимпиады (в том числе использование вставок ассемблерного кода).

Проверяющие программы используют различные методы контроля за соблюдением данных требований. Нарушители дисквалифицируются.

По мере готовности участники посылают свои решения в тестирующую систему для проверки. После этого они могут продолжать работу над другими задачами. После того как тестирующая система проверит решение, они получают сообщение о результатах тестирования. Это сообщение появится на экране (в окне программы-клиента проверяющей системы). Участнику сообщается, зачтено ли решение или нет. Если решение не зачтено, сообщается тип ошибки и номер теста, на котором эта ошибка произошла.
В случаи сообщения “Compilation error” можно будет просмотреть протокол компиляции. Номер теста при таком сообщении указываться не будет.
Все тесты выполняются в одном и том же порядке. Номер ошибочного теста, указываемый в результатах проверки, есть номер первого теста, на котором задача не прошла проверку. Например, если система сообщила: “Time-limit exceeded: Test 9” (“Превышен предел времени на тесте № 9 ”), это означает, что:

  •     тесты с 1 по 8 прошли проверку;
  •     на более сложном, чем предыдущие восемь, девятом тесте программа превысила предел времени.
Если получено сообщение “Presentation error” (“Ошибка вывода”), то это означает, что формат результата (вывода) программы отличается от требуемого.
Сообщение «Run-time error» означает ошибку времени выполнения (аварийное завершение программы).
Сообщение «Wrong answer» означает неправильный ответ.

C целью упрощения поиска ошибок ввода/вывода гарантируется, что тест №1 совпадает с примером, указанным в условии и известным участникам.

Во время соревнований участники могут задавать вопросы по условиям задач. Вопрос должен быть составлен в форме, предполагающей ответы “ДА” (Yes) или “НЕТ” (No). Если вопрос поставлен некорректно или ответ прямо следует из условия задачи, жюри отвечает “Без комментариев” (No comments). Если жюри согласно, что в условии присутствует неясность или ошибка, то всем участникам делается соответствующее объявление.

Выигрывает участник, правильно решивший наибольшее число задач. В случае равенства числа решенных задач, выигрывает участник, у которого меньше штрафных очков. Штрафные очки начисляются отдельно за каждую успешно решенную задачу и суммируются. Для каждой задачи число штрафных очков равно времени от начала соревнований до ее успешного решения (в минутах) с добавлением по 20 минут за каждую неудачную попытку. Каждая попытка сдать задачу ПОСЛЕ того, как решение для данной задачи уже было зачтено, может быть воспринята как “неудачная попытка” и привести к дополнительному штрафному времени.

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

PlaceUserABCDEFTotalPenalty
1kegbl+++1+5++6370
2K5+++1+5+2+6667
3abra++3+1+1+3+6876
4K4++3+3
+2+15788
5LGS+++1
+2+356184
64lulz+1++4+3+1
59769
7AI+2++4
+1+1515438
8abcd+++2
+2
4305
9Doll_backs+++1
+2
4418
10ШИК++2-8
+2+4504
11BrainInside++2+2
+3
4552
12VakH.FITU+++-3

351
13Blin_TM++2+

-13387
14Ahtung++3+1-1-2
3138
153K+1++2-1
-63172
16Belomor2+1+4+-1

3179
17void+2+1+-2
-63194
18REDTeam+++1-18

3219
19Probe+++4
-5
3244
20obschaga1++3+4

-43545
21Ky++-5


2172
22orange+-2+9
-2
2404
23REDTEam1+7-9+3-3

2544
24Ne[AGA]rA+1
-2


163
25IQ48A-6-5+2-3

1165

Total:456083504041319

Success:242122411789

%:53%35%27%8%28%17%28%



5. ОСОБЕННОСТИ НАПИСАНИЯ ПРОГРАММ

5.1. На С/С++

Если решение задачи написано на языке С/С++, то для корректной работы тестирующей системы оно должно завершать работу с кодом возврата 0, т.е., например,

int main() {
    ...
    return 0;
}


но не

void main() {
    ...
}


Также вместо __int64 нужно писать long long (VC++ тоже понимает long long).

Для использования hash_xxx следует подключить namespace __gnu_cxx (вместо stdext в VC++).

Вместо
#include <iostream.h>

надо писать:
#include <iostream>
using namespace std;


 itoa, atoi могут не компилироваться - тогда используйте sscanf,  sprintf

5.2. На Pascale/Delphi


Если в начало программы вставить директиву {$MODE DELPHI}, то компилятор работает в режиме эмуляции Delphi. При этом integer хранится в 4х байтах.

5.3. На Java

Решение нужно оформить в виде публичного класса Main в пакете по умолчанию.
В файле может быть произвольное количество непубличных и вложенных классов.
Точка входа в программу - стандартный метод main(String[]).

Пример:

import java.io.*;
public class Main
{
    public static void main(String args[])
    {
        //решение
    }

}

6. ПОДВЕДЕНИЕ ИТОГОВ СОРЕВНОВАНИЯ

Результаты соревнований подводятся жюри.

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

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

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