diff --git a/doc/manual/config-basic.rst b/doc/manual/config-basic.rst index 84281a3aae..c5991973b6 100644 --- a/doc/manual/config-basic.rst +++ b/doc/manual/config-basic.rst @@ -140,4 +140,11 @@ it need not have started yet). You can verify whether the submissions gave the expected answer in the Judging Verifier, available from the jury index page. +After this rejudge the whole contest with a higher overshoot, as well as +judge remaining testcases. This rejudging is used to distinguish between the +slowest *Accepted* solution and the fastest *Time Limit Exceeded*. +As a rule of thumb set the timelimit to twice the slowest *Accepted* +solution. The Statistics/Analytics page of each problem has a graphic +overview for those submissions. + .. _ICPC-compatible teams.tsv files: https://ccs-specs.icpc.io/2021-11/ccs_system_requirements#teamstsv diff --git a/webapp/src/Controller/Jury/JuryMiscController.php b/webapp/src/Controller/Jury/JuryMiscController.php index 8d3913989f..19411334e9 100644 --- a/webapp/src/Controller/Jury/JuryMiscController.php +++ b/webapp/src/Controller/Jury/JuryMiscController.php @@ -5,6 +5,7 @@ use App\Controller\API\GeneralInfoController as GI; use App\Controller\BaseController; use App\Entity\Contest; +use App\Entity\ContestProblem; use App\Entity\Judging; use App\Entity\Language; use App\Entity\Problem; @@ -247,18 +248,8 @@ public function judgingVerifierAction(Request $request): Response { /** @var Submission[] $submissions */ $submissions = []; - if ($contest = $this->dj->getCurrentContest()) { - $submissions = $this->em->createQueryBuilder() - ->from(Submission::class, 's') - ->join('s.judgings', 'j', Join::WITH, 'j.valid = 1') - ->select('s', 'j') - ->andWhere('s.contest = :contest') - ->andWhere('j.result IS NOT NULL') - ->setParameter('contest', $contest) - ->getQuery() - ->getResult(); - } - + /** @var ContestProblem[] $problems */ + $problems = []; $numChecked = 0; $numUnchecked = 0; @@ -272,6 +263,20 @@ public function judgingVerifierAction(Request $request): Response $verifyMultiple = (bool)$request->get('verify_multiple', false); + $contest = $this->dj->getCurrentContest(); + if ($contest) { + $problems = $contest->getProblems(); + $submissions = $this->em->createQueryBuilder() + ->from(Submission::class, 's') + ->join('s.judgings', 'j', Join::WITH, 'j.valid = 1') + ->select('s', 'j') + ->andWhere('s.contest = :contest') + ->andWhere('j.result IS NOT NULL') + ->setParameter('contest', $contest) + ->getQuery() + ->getResult(); + } + foreach ($submissions as $submission) { // As we only load the needed judging, this will automatically be the first one /** @var Judging $judging */ @@ -329,6 +334,8 @@ public function judgingVerifierAction(Request $request): Response 'verified' => $verified, 'nomatch' => $nomatch, 'earlier' => $earlier, + 'problems' => $problems, + 'contestId' => $this->dj->getCurrentContest()?->getCid(), 'verifyMultiple' => $verifyMultiple, ]); } diff --git a/webapp/templates/jury/check_judgings.html.twig b/webapp/templates/jury/check_judgings.html.twig index be2acb68e1..5aca2d6526 100644 --- a/webapp/templates/jury/check_judgings.html.twig +++ b/webapp/templates/jury/check_judgings.html.twig @@ -99,4 +99,21 @@ {{ checkJudgings.verifyResults('earlier', 'Verified earlier', earlier, true) }} {{ checkJudgings.verifyResults('nomatch', 'Without magic string', nomatch, true) }} + {% if problems != [] %} +
Accepted
+ solutions and tune those against expected Time Limit Exceeded
solutions.