Правила на състезанието на Codeforces

Обща информация за рунда

За да участвате в кръга, трябва да се регистрирате. Регистрацията за кръг започва 6 часа преди началото му и приключва 5 минути преди началото му, освен ако не е посочено друго в информацията за кръга.

Състезателната система има два интерфейса: български и английски, между които участниците могат да превключват.

Продължителността на кръга е 2 часа, освен ако не е посочено друго в информацията за кръга.

На участниците се дават 5 задачи за решаване, освен ако в информацията за кръга не е посочен различен брой проблеми.

Проблемните условия са налични на два езика: български и английски.

Условията на всички проблеми стават достъпни за четене в началото на рунда.

Преди началото на състезанието всички регистрирани участници се разпределят на случаен принцип в стаи. Във всяка стая попадат приблизително 40 участника.

Въпроси за задачите

По време на състезанието участниците имат право да задават въпроси към журито на състезанието чрез системата. Въпросите могат да се отнасят до грешки, неточности и неясноти в условието.

Журито на конкурса може да отговори на въпроса във всяка текстова форма.

Разрешаване на проблем

Решението на проблема е програма, написана на един от следните езици за програмиране (различни проблеми могат да бъдат решени на различни езици за програмиране, списъкът с езици може да бъде разширен):

Програмни изисквания:

  • Програмата трябва да се съдържа изцяло в един файл.
  • Ако условието на задачата не указва имената на входните или изходните файлове, е необходимо да се прочетат данни от стандартния входен поток и да се изведат данните в стандартния изходен поток.
  • Забранява се работата с мрежата.
  • Забраненизвършва I/O операции, с изключение на отваряне, затваряне, четене и запис на файлове и стандартни потоци, които са посочени в условието на задачата за извършване на I/O.
  • Забранено е стартирането на други програми и създаването на процеси.
  • Забранено е да се променят разрешенията във файловата система.
  • Забранява се работата с директории, различни от текущата.
  • Забранена е работата с регистъра на операционната система.
  • Забранено е създаването и използването на GUI елементи (прозорци, диалогови прозорци и др.)
  • Забранена е работа с външни устройства.
  • Забранено е извършването на каквито и да било действия, освен изброените по-горе, които по един или друг начин могат да дестабилизират системата.

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

Участникът може да види резултатите от проверката на решението в съответния раздел на състезателната система.

Компилиране на решения

При изпращане на решение участникът избира компилатора, който системата за тестване да използва за компилиране на програмата. Системата за тестване използва следните компилатори за тестване (журито има право да разшири списъка с компилатори по свое усмотрение или да замени версиите на компилатора с по-нови):

  • MinGW GNU C++4
  • MinGW GNU C4
  • Microsoft Visual C++ 2010
  • Безплатен Паскал 2
  • Делфи 7
  • C# Mono2
  • Java 6, 7
  • Рубин 1
  • Python 2
  • PHP 5
  • Haskell GHC6
  • Цел Caml 3
  • Скала 2
  • Perl 5
  • Отиди 1
  • MS C# .NET 4

ОрганизаториСъстезанието не носи отговорност за проблеми, причинени от несъответствие между версията на компилатора в системата за тестване и версията на компилатора, използвана от участника при разработването на програмата. За да се избегнат частично подобни проблеми, е възможно да се изпълнява членският код от страната на сървъра. За да стартирате, трябва да изпратите програмата и входните данни на сървъра. След известно време системата за тестване ще отчете резултата от програмата и изходните данни.

Решенията се компилират и стартират под Windows OS. Прекъсването на редовете се определя от двойка знаци #13#10. След последния ред на файл или входен поток (точно преди края му) има нов ред.

Ако възникне грешка при компилиране, участникът се информира за резултата от проверката, както и за дневника на компилатора.

Размерът на файла с изходния код не трябва да надвишава 64 килобайта.

Системата за тестване използва компилатори от командния ред за компилиране на решения. Редовете за компилация за различни компилатори са показани в таблицата:

Проверка на решенията

По време на състезанието решенията се проверяват на малък набор от тестове, които се наричат ​​предварителни тестове.

Резултатът от проверката на решението на предварителни тестове се съобщава на участника веднага след проверката.

Всеки тест е вход към програмата на участника. Ограниченията върху входните данни, съдържащи се в тестовете, са посочени в описанието на проблема.

Всички задачи показват максималното време, което програмата може да изпълнява на един тест и максималното количество памет, което е разрешено да се използва.

Тестването се извършва чрез стартиране на програмата последователно на всеки от тестовете.

Тестът се счита за преминат, ако стартирането на програмата завърши с код за връщане 0, процесът е бил в рамките наопределеното време и ограничения на паметта, като в същото време програмата даде правилния отговор на този тест. Таблицата по-долу показва най-често срещаните решения за възможни грешки.

Ако решението е преминало всички предварителни тестове, участникът се информира за резултата от проверката „Предварителните тестове са преминали“. В противен случай резултатът от теста, докладван на участника, се състои от номера на първия предтест по ред, който не е преминал, и решението на системата за тестване.

Ако резултатът от проверката на решението е „Грешка при компилация“, „Тестването е неуспешно“ или решението не е преминало първия предварителен тест, тогава това решение не се взема предвид при изчисляване на резултатите.

Решението на един и същ проблем може да бъде изпратено няколко пъти.

Решение, което е преминало всички предварителни тестове, се нарича потвърдено решение на този участник за този проблем.

Ако участник изпрати решение за определен проблем, което преминава всички предварителни тестове за втори или повече пъти, тогава последният от тях се счита за потвърдено решение за този проблем. Всички други решения ще се считат за неуспешни опити.

Ако решението на даден участник на определен проблем премине всички предварителни тестове, проблемът се счита за вече решен от този участник и се изчислява предварителната оценка на участника за този проблем. Резултатът се изчислява, както следва:

  • всяка минута цената на задачата намалява: цената на задачата пада с X/250 точки на минута (където X е първоначалната цена на задачата), например задача с първоначална цена от 500 точки става по-евтина със скорост 2 точки на минута;
  • оценката на участника за задачата е равна на текущата цена на задачата в точки минус наказанието;
  • наказанието се определя като броят на решенията на този участник по този проблем, направени по-рано, умножен по 50 точки;
  • Оценката на участника за задачата не може да бъде по-малка от 30% от първоначалната цена на задачата.

По всяко време участникът може да блокира за себе си всяка задача, решена преди това от него. Това означава, че участникът вече няма право да изпраща решения на този проблем.

За успешно хакване участникът получава 100 точки. При неуспешен хак участникът получава наказание от 50 точки.

В случай на успешно хакване се случва следното за участника, чието решение е хакнато:

  • задачата вече не се счита за решена преди това от него
  • неговият предварителен резултат за този проблем става 0
  • тестът от хака се добавя към набора от предварителни тестове за този проблем за този конкретен участник

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

Какво може и какво не може да се направи

По време на кръга участниците имат право да използват всякаква литература и лични бележки, както и да използват предварително написан код.

Забранено е използването на чужд код във вашето решение. С големи ограничения можете да използвате и нечий предварително написан код, прочетете подробностите на връзката.

Разрешено е използването на всякакви източници на информация в Интернет (но не можете да копирате и поставяте чужд код).

Забранено е обфускацията на кода на решението, както и създаването на пречки за четенето и разбирането му. Тоест, забранено е използването на специални трикове, предназначени да усложнят четенето на кода, за да се разбере работата му.

На участниците не е позволено да общуват по теми, свързани със задачи, с никого, включително други участници. Разрешено е само да задавате въпроси на журито чрез системата (вижте раздел„Въпроси“).

Организаторите на състезанието имат право да следят честността на поведението на участниците чрез различни методи и, ако бъдат открити нарушения, да дисквалифицират участника.

Всички програми, изпратени от участниците за тестване, трябва да се опитват да решат проблема, а не да нарушават правилата или да дестабилизират системата за тестване. В случай на умишлен опит за дестабилизиране на системата за тестване, участникът ще бъде дисквалифициран.

Забранено е използването на каквито и да е технически методи (включително, но не само, OCR, инструменти за анализ на трафика, плъгини за браузър и др.) за взаимодействие с хакнати решения на други участници. Единственият приемлив начин за анализ на хакнато решение е неговият визуален анализ. Разрешено е ръчно повторно въвеждане на хакнато решение или някоя от неговите части, за да се стартира локално.

Всяко нарушение на тези правила, правилата от секцията ЧЗВ, правилата от обявяването на конкурса или потвърдено по време на процеса на регистрация може да доведе до наказания до дисквалификация и бан. Бъди честен!

Таблица с текущи резултати

По време на състезанието таблицата с текущи резултати е достъпна за участниците. Показва текущата позиция на участника в състезанието. В таблицата можете да видите дали решението е блокирано или не, както и историята на потребителските опити.

Всички междинни резултати са неофициални.

Окончателни тестове и крайни резултати

След края на състезанието се публикуват резултатите от тестването на решенията на участниците по основния набор от тестове.

В основния набор от тестове се тестват потвърдени решения, т.е. тези, които едновременно:

  • преминали всички предварителни тестове и са последни от тях (от участника в задачата);
  • не са били хакнати.

Задачата се счита за разрешена от участника, ако решението на участника е издържало всички тестове от основния набор от тестове.

За решената задача участникът получава точка, равна на предварителната оценка на решението му за тази задача. Оценката за нерешената задача е 0.

Резултатът на участника е сбор от точки за всички решени от него задачи и точки за хакове.

Във финалната таблица с резултати участниците се подреждат в низходящ ред на резултата. В случай, че двама или повече участници имат еднакъв резултат, те делят едно и също място.

Тестването се извършва на компютри Core 2 Duo E6750, 2.66 Ghz, 3Gb памет.

Интелектуална собственост

Правилата по-долу се използват, когато няма специални правила за рунд. Участниците запазват собствеността върху всички права на интелектуална и индустриална собственост (включително морални права) при изпращане на решението.

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

Участниците предоставят решението на база „както е“, без никакви гаранции или условия, изрични или подразбиращи се, включително, без ограничение, никакви гаранции или условия относно правата на собственост, каквито и да е гаранции за продаваемост или годност за определена цел и ненарушение.