Serve.cfg:problem:date penalty

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Использование/Конфигурационные файлы/serve.cfg/Конфигурационные параметры задач/date_penalty

Имя переменной: date_penalty
Содержится в: problem
Используется: serve
Тип содержимого: спецификации штрафа
Может отсутствовать: да
Наследуется: нет
Значение по умолчанию: не установлено
Может повторяться: да
Версия ejudge: начиная с 2.1.28.

Описание. Данная конфигурационная переменная позволяет назначать штраф за посылку в зависимости от времени сдачи задачи. Например, посылка, принятая раньше определённой даты, не штрафуется, а после этой даты накладывается некоторый штраф и т. д. (см. пример ниже). В рамках описания одной задачи определение переменной date_penalty может повторяться несколько раз. Каждое новое Каждое определение добавляет новую спецификацию штрафования к уже существующим. Значение переменной date_penalty не наследуется от абстрактных задач. Спецификации date_penalty одной задачи не зависят от date_penalty других задач. Спецификации упорядочены и проверяются в порядке их задания в конфигурационном файле.

Каждая спецификация штрафа имеет вид

DATE ADD-VALUE

где DATE — календарная дата, задаваемая в стандартном для ejudge формате YYYY/MM/DD [hh[:mm[:ss]]], ADD-VALUE — значение, прибавляемое к количеству баллов, полученному в результате тестирования. Получившееся значение не может быть меньше 0 (в этом случае оно устанавливается в 0) и больше максимального значения баллов за данную задачу (в этом случае оно устанавливается в максимальное количество баллов). Штрафование в зависимости от времени работает только в режиме турнира KIROV.

Пример.

date_penalty = "2004/04/05 0"
date_penalty = "2004/04/12 -1"
date_penalty = "2005/01/01 -2"

В данном примере если попытка по задаче послана до 5 апреля 2004 г., она не получает штрафных очков, если она послана 5-11 апреля, она получает одно штрафное очко, а если 12 апреля и позднее - 2 штрафных очка.

(С версии 2.3.21) Формат ADD-VALUE расширен и поддерживается плавное изменение штрафа в зависимости от времени посылки.

BASE[(+|-)DECAY[/SCALE]]

Здесь BASE - значение, прибавляемое (или отнимаемое) к количеству баллов за задачу, полученному в результате тестирования. DECAY значение, на которое изменяется балл со временем (неотрицательное целое число), SCALE — масштабный коэффицент (секунды) (положительное целое число). В записи масштрабного коэффициента допускается использовать суффиксы m, h, d и w, означающие минуты, часы, дни и недели соответственно. Один день полагается равным 24 часам, одна неделя — 7 дням.

Штраф к баллам в зависимости от времени вычисляется по следующей формуле:

TIME_PENALTY = BASE + (SUBMIT_TIME - BASE_TIME) / SCALE * DECAY

Здесь SUBMIT_TIME - это время сдачи решения, BASE_TIME - это базовое время, которое берется по следующим правилам:

  • если данная спецификация date_penalty в секции определения задачи не является первой, то берется поле DATE предыдущей спецификации date_penalty;
  • в противном случае, если для задачи задана конфигурационная переменная start_time, используется это время;
  • в противном случае, если турнир начался, используется время начала турнира;
  • в противном случае штраф к баллам не вычисляется.

Балл за задачу не может быть отрицательным, то есть если штраф к баллам больше количества баллов, которое получило решение при тестировании, решение оценивается в 0 баллов.

Например,

start_date = "2012/03/20"
date_penalty = "2012/12/31 0-1/d"

Начиная с 20 марта 2012 года за каждый день просрочки накладывается штраф 1 балл. Эта спецификация действует до 31 декабря 2012 года.