Добавление задачи в систему SPOJ. Описание программы судьи высшего уровня (Master Judge)
Возможность редактировать судью высшего уровня (Master Judge) для задачи появилась относительно недавно. Настройка этого судьи дает больше гибкости в настройке задачи для разработчика. Однако стандартный Generic masterjudge подойдет для большинства задач. Код для стандартного Generic masterjudge приведен ниже:
1000. Generic Masterjudge #include
#include
int main()
{
spoj_init();
int test, sig, mem, memMax=0, tc=0;
double score, scoreAll=0, time, timeAll=0;
char status[4];
while (fscanf(spoj_p_in, "%d %3s %lf %d %lf %d\n", &test, status, &score, &sig, &time, &mem)==6)
{
fprintf(spoj_p_info, "test %d - %s (score=%lf, sig=%d, time=%lf, mem=%d)\n",
test, status, score, sig, time, mem);
memMax >?= mem;
scoreAll += score;
timeAll += time;
if (status[0]!='A')
{
fprintf(spoj_score, "%s 0 %d %lf %d\n", status, sig, timeAll, memMax);
return 0;
}
tc++;
}
fprintf(spoj_score, "AC %lf 0 %lf %d\n", scoreAll/tc, timeAll, memMax);
}
Стандартный Generic Masterjudge работает следующим образом:
- если хотя бы один из тестов не дает в итоге "Acepted" (а дает Wrong Answer, TLE и.т.д), тогда всё решение помечается, как неверное
- иначе результат считается AC, счет считается средним по всем тестовым последовательностям, использованием памяти считается по максимальному значению, а время суммируется по всем тестам.
Если в задаче всего один тест, то Masterjudge просто копирует все значения.
Необходимость поменять стандартный MasterJudge возникает в случае необходимости усложнить систему начисления очков или вывода дополнительной информации по решению. Несколько идей:
- невыполнение одного теста не приводит к незачету всего решения; Например, AC для одного теста = один балл к финальному счету
- включение времени выполнения в финальный счет (широко используется в турнирах серии ZCon)
- вывод некоторой информации по каждому из тестов для пользователя (например, он может кликнуть на надпись "5 points" и увидеть, что у него WA за тест номер 3 и TLE для тестов 6-10, для задачи, где всего 10 тестов)
<-- Часть 2. Примеры программ судей (Judges)
|