Турниры с токенами

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Использование/Турниры с токенами

Турнир с токенами - это разновидность турнира с полной проверкой решений участников во время турнира, но с неполной обратной связью. Решения участников проверяются на всех тестах непосредственно во время тура (в системе ejudge это - турниры типа ACM или KIROV, но не типа OLYMPIAD). По умолчанию участник имеет доступ к ограниченной информации о прохождении программой тестов, но может получить более полную информацию, потратив свои токены. Каждому участнику выдается ограниченное количество токенов в начале турнира, в течение турнира токены могут периодически пополняться. В системе ejudge токены по каждой задаче получаются и тратятся независимо от других задач.

Система ejudge поддерживает турниры с токенами, начиная с версии 3.2.0. Рассмотрим пример настройки турнира с токенами в ejudge.

Пусть в турнире есть две задачи: A, в которой 2 предварительных теста и 20 финальных, и B, в которой 3 предварительных теста и 25 финальных. В ходе турнира участник может видеть протокол тестирования на предварительных тестах и получает результат проверки только на предварительных тестах. После окончания турнира участник сможет видеть все. Тогда настройки задачи A и B будут примерно такими:

[problem]
# ... прочие настройки
short_name = "A"
long_name = "Задача A"
full_score = 100     # полное решение - 100 баллов
full_user_score =  0 # решение на предварительных тестах получает 0 баллов
test_score = 5       # по 5 баллов на основные тесты
test_score_list = "0 0" # предварительные тесты стоят 0 баллов
open_tests = "1-2:full,3-22:hidden" # во время турнира показывать только первые два теста
final_open_tests = "1-22:full" # после окончания показывать все

[problem]
# ... прочие настройки
short_name = "B"
long_name = "Задача B"
full_score = 100     # полное решение - 100 баллов
full_user_score =  0 # решение на предварительных тестах получает 0 баллов
test_score = 4       # по 4 балла на основные тесты
test_score_list = "0 0 0" # предварительные тесты стоят 0 баллов
open_tests = "1-3:full,4-28:hidden" # во время турнира показывать только первые два теста
final_open_tests = "1-28:full" # после окончания показывать все

Для настройки турнира с токенами необходимо в настройки задач добавить спецификацию для начального числа токенов и дополнительной информации, показываемой при использовании токена. Например, по каждой задаче изначально дается 5 токенов, каждый час добавляется по одному токену, а потратив один токен можно увидеть балл, который получила задача на полном тестировании, и посмотреть вердикты прохождения задачи на всех тестах. Такая спецификация задается следующим образом:

tokens = "5+1/1h-1/FinalScore,TokenOpenTests"

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

token_open_tests = "1-22:brief"

Тогда полная конфигурация задач может выглядеть следующим образом:

[problem]
# ...
short_name = "A"
long_name = "Задача A"
full_score = 100     # полное решение - 100 баллов
full_user_score =  0 # решение на предварительных тестах получает 0 баллов
test_score = 5       # по 5 баллов на основные тесты
test_score_list = "0 0" # предварительные тесты стоят 0 баллов
open_tests = "1-2:full,3-22:hidden" # во время турнира показывать только первые два теста
final_open_tests = "1-22:full" # после окончания показывать все
enable_tokens # включить поддержку токенов для этой задачи
tokens = "5+1/1h-1/FinalScore,TokenOpenTests"
token_open_tests = "1-22:brief"

[problem]
# ...
short_name = "B"
long_name = "Задача B"
full_score = 100     # полное решение - 100 баллов
full_user_score =  0 # решение на предварительных тестах получает 0 баллов
test_score = 4       # по 4 балла на основные тесты
test_score_list = "0 0 0" # предварительные тесты стоят 0 баллов
open_tests = "1-3:full,4-28:hidden" # во время турнира показывать только первые два теста
final_open_tests = "1-28:full" # после окончания показывать все
enable_tokens # включить поддержку токенов для этой задачи
tokens = "5+1/1h-1/FinalScore,TokenOpenTests"
token_open_tests = "1-28:brief"