Упътване
Тук е описано как работи системата и какво да очаквате, когато направите някое действие.
Версия на системата: v.220807.33572da
Съобщаване за проблеми
Вляво на всяка страница има бутон "Мрън!", чрез който регистрираните потребители могат да се свържат с администратор и да съобщят за проблем (било то със системата или с някоя от задачите). Не се притеснявайте да го ползвате дори за малки проблеми като правописни грешки.Предаване на решение
За да предадете решение, трябва да сте се регистрирали и влезли в системата. След като отворите някоя задача ще видите син бутон "Предай Решение". Цъкайки на него ще се отвори форма, в която да копирате кода си. За разлика от други системи, езикът ще бъде разпознат автоматично, така че остава единствено да натиснете "Изпрати" и решението ви ще бъде изпратено за тестване.Статус кодове
След като сте изпратили решение е възможно системата да върне няколко различни статуса.- Waiting: Решението чака други предадени преди него решения да се изтестват.
- Running: Решението се тества в момента.
- Compilation Error: Решението не се е компилирало успешно.
- Memory Limit: Решението е използвало повече памет, от допустимата за задачата.
- Time Limit: Решението е вървяло повече време, от допустимото за задачата.
- Runtime Error: Решението е крашнало по време на изпълнение (например в следствие на индексиране извън масив или делене на нула).
- Wrong Answer: Решението е завършило изпълнението си успешно, но полученият от него отговор не е верен.
- Internal Error: Нещо се е случило със системата по време на тестване. В този случай е препоръчително да известите админ чрез бутона "Мрън!" вляво.
- Accepted: Разбира се, в най-добрия случай предаденото решение е вярно и не е нарушило нито едно от ограниченията на задачата.
Сравнение на числа с плаваща запетая
Системата имплементира сравнение на числа с плаваща запетая, базирано на абсолютна или релативна разлика. Този тип сравнение работи както за много малки, така и за много големи числа.Често възникват проблеми, когато за сравнение се ползва само абсолютната разлика на числата. Например
1234567890.123456717
и 1234567890.123456955
имат разлика от 0.000000238 - малко
над 10-7. При изисквана точност от 10-9 това би било грешен отговор. Ако пък ползваме
точност от 10-6, например, то числа като 0.0000001
и 0.0000009
биха
били счетени за еднакви, като всъщност разликата им е 9 пъти!
За да се справи с това, системата прави две проверки:
- Ако числата имат абсолютна разлика, по-малка от 10-9, отговорът се счита за верен (абсолютна разлика).
- Ако отношението на числата е много близо до 1 (попада в интервала [1-10-9, 1+10-9]), отговорът се счита за верен (релативна разлика).
Компилатори и командни флагове
Изпратените решения се компилират ползвайки следните командни флагове:- C++ (GCC 10.3.0):
g++ -O2 -std=c++20 -Werror=return-type -s -o <executable> <source>.cpp
- Java (OpenJDK 11.0.8):
javac -nowarn <source>.java
- Python (Python 3.8.5):
python3 -m pyflakes <source>.py
Максималният размер на стека е 64 мегабайта.
Тестова машина
Тестовата машина има следната хардуерна конфигурация:- Процесор: Intel Xeon 16 Core :: 2.1GHz
- Рам: DDR3 32GB :: 2666MHz ECC
- Харддиск: Corsair Force SSD :: 520MB/s
Статус
Чрез бутона "Статус" в главното меню можете да видите текущите решения, които системата все още не е обработила (както и последните няколко, които е обработила). Когато системата е по-натоварена (например по време на състезание) там е мястото да проверите кога вашето решение ще бъде тествано.Подготовка
Цялата система беше създадена като средство за подготовка за различни състезания или курсове. Чрез бутона "Подготовка" в главното меню можете да стигнете до тематично разделени задачи в нарастваща сложност, застъпващи някои от най-разпространените теми в състезателната информатика. Минавайки през цялата подготовка ще Ви научи на мнозинството от основните алгоритми и структури данни, а също така ще Ви помогне да потренирате писането на по-сложен код, от това, което обикновено се застъпва в училище и университета.Първите няколко секции от подготовката застъпват по-основните алгоритми и са подходящи както за ученици, готвещи се за състезания от по-долните класове (група D и нагоре), така и за студенти от университета или просто хора, които искат да се научат да пишат код.
Към края подготовката засяга значително по-сложни теми и включва съвсем нетривиални задачи (със сложност еквивалентна на задачи от републикански и международни състезания). Тя е по-скоро насочена към хората, подготвящи се за IOI или ACM ICPC.
Постижения
Всеки регистриран потребител може да "отключи" така наречените постижения. Това са важни събития в подготовката (и ползването на системата), като например регистрация, първо предадено решение, първа изцяло решена задача и много други (вече близо сто). Някои от тях са логични и очаквани (например завършването на дадена тема от подготовката), докато други са по-нестандартни и се присъждат на значително по-малък брой потребители. =)Pop-up box-ът "ACHIEVEMENT UNLOCKED" се появява при първото зареждане на страница след постигане на дадено постижение. Той се затваря автоматично след 10 секунди, но можете да затворите и като кликнете с мишката извън него или натиснете escape. Всички ваши постижения можете да видите в профила си (като кликнете на username-a си, горе вдясно на която и да е страница).
Класиране и точки
Чрез бутона "Класиране" можете да достъпите текущо класиране на потребителите (както и да намерите линк към профила на всеки от тях). Класирането по подразбиране се прави на базата на брой решени задачи, а при равен брой задачи - по постижения.Видове задачи
Системата поддържа няколко вида задачи:- IOI-стил: Тестовете са разделени на групи, като за всяка група има определен брой точки. В най-честия случай всеки тест е отделна група. За да се вземат точки за групата, решението трябва да се е справило с всички тестове в групата.
- ACM-стил: За да се вземат точки за задачата, решението трябва да се е справило с всички тестове.
- Игра: Всеки тест е "игра" между двама (или всички) участници, предали решение на задачата.
- Интерактивна: Програмата ви комуникира с авторска програма, която й дава частична информация (примерно отговаря на въпроси).
- Релативна: За всеки тест се получават точки, пропорционално спрямо най-добрия резултат от всички участници за съответния тест.
Задачи с много валидни изходи
Някои от задачите нямат еднозначен отговор, като за тях е предвидено да се оценяват посредством checker. Това е друга програма (написана от автора на задачата), която чете изхода от програмата ви и решава дали е валиден или не (или колко точки да получи, за задачи с релативно оценяване).В случай, че сте автор на задача и трябва да напишете чекер за нея, ето тук можете да намерите примерен чекер и инструкции какво се очаква той да прави: как да прочете входа на теста, изхода на участника, и изхода от авторското решение, както и как да изпечата резултата или пък да сигнализира за грешка.