Difference between revisions of "Serve.cfg:problem:date penalty"

From EjudgeWiki
 
 
Line 43: Line 43:
 
штрафных очков, если она послана 5-11 апреля, она получает одно штрафное очко, а если
 
штрафных очков, если она послана 5-11 апреля, она получает одно штрафное очко, а если
 
12 апреля и позднее - 2 штрафных очка.
 
12 апреля и позднее - 2 штрафных очка.
 +
 +
(С версии 2.3.21)
 +
Формат <tt>ADD-VALUE</tt> расширен и поддерживается плавное изменение штрафа в зависимости от времени посылки.
 +
BASE[(+|-)DECAY[/SCALE]]
 +
Здесь <tt>BASE</tt> - значение, прибавляемое (или отнимаемое) к количеству баллов за задачу, полученному в результате тестирования. <tt>DECAY</tt> значение, на которое изменяется балл со временем (неотрицательное целое число), <tt>SCALE</tt> &mdash; масштабный коэффицент (секунды) (положительное целое число). В записи масштрабного коэффициента допускается использовать суффиксы <tt>m</tt>, <tt>h</tt>, <tt>d</tt> и <tt>w</tt>, означающие минуты, часы, дни и недели соответственно. Один день полагается равным 24 часам, одна неделя &mdash; 7 дням.
 +
 +
Штраф к баллам в зависимости от времени вычисляется по следующей формуле:
 +
TIME_PENALTY = BASE + (SUBMIT_TIME - BASE_TIME) / SCALE * DECAY
 +
Здесь <tt>SUBMIT_TIME</tt> - это время сдачи решения, <tt>BASE_TIME</tt> - это базовое время, которое берется по следующим
 +
правилам:
 +
* если данная спецификация <tt>date_penalty</tt> в секции определения задачи не является первой, то берется поле <tt>DATE</tt> предыдущей спецификации <tt>date_penalty</tt>;
 +
* в противном случае, если для задачи задана конфигурационная переменная <tt>[[serve.cfg:problem:start_time|start_time]]</tt>, используется это время;
 +
* в противном случае, если турнир начался, используется время начала турнира;
 +
* в противном случае штраф к баллам не вычисляется.
 +
 +
Балл за задачу не может быть отрицательным, то есть если штраф к баллам больше количества баллов, которое получило решение при тестировании, решение оценивается в 0 баллов.
 +
 +
Например,
 +
start_date = "2012/03/20"
 +
date_penalty = "2012/12/31 0-1/d"
 +
Начиная с 20 марта 2012 года за каждый день просрочки накладывается штраф 1 балл. Эта спецификация действует до 31 декабря 2012 года.

Latest revision as of 05:11, 4 April 2012

Навигация: Главная страница/Система 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 года.