4.2 评测提交

提交题解的流程

接受一个提交的流程如下

  • 队伍提交题解。基本检查后被拒绝或被接受并储存成一次提交。

  • 第一个空闲的评测机(judgehost)编译、运行并检查提交。结果和输出存储为此提交的评测。注意,评测机可能被限制用于特定竞赛、特定语言或题目,因此可能评测机空闲,但不会去评测提交。

  • 如果不需要验证评测结果(verification),则评测结果会自动记录,队伍也可以查看结果,榜单也会更新(除非封榜后)。裁判可以选择性检查提交,判断评测结果并将其标记为已检验。

  • 如果需要验证评测结果,裁判会检查评测。 只有在获得批准(标记为已检验)后,才能在裁判后台之外看到结果。可以通过设置管理页面上设置verification_required来启用此选项。

提交的评测状态码

裁判和队伍的界面会用一个代码来显示某个提交的状态

  • QUEUED/PENDING(排队/等待中):提交已经收到并等待评测机运行它;

  • JUDGING(评测中):某个评测机正常编译/运行/测试提交中;

  • TOO-LATE(赛后提交):提交晚于比赛结束提交;

  • CORRECT(正确):提交正确,题目解决;

  • COMPILER-ERROR(编译错误):编译器编译程序时发生错误;

  • TIMELIMIT(超时):程序执行时间超过题目设置时间;

  • RUN-ERROR(运行错误):程序运行过程中发生的一类错误,例如栈溢出、除以零或者退出代码不为0;

  • NO-OUTPUT(没有输出):程序没有任何输出;

  • WRONG-ANSWER(答案错误):程序的输出没有完全匹配正确结果;

    在队伍界面,提交仅显示 PENDING 状态防止题目时间限制泄露。裁判能看到一个提交究竟是 QUEUED 还是 JUDGING状态。当需要验证评测结果时,提交会显示 PENDING 直到评测被标记为已检验。

在提交菜单下,您可以看到所有提交的题解,且最新的提交在顶部。点击一个提交行可以看到这个提交的更多信息(队伍名,提交时间等)、评测结果的列表和最近一次评测结果的细节(运行时间、输出、与测试样例的区别)。有一个选项可以在“最新的50个”、“只有未检验的”和“所有提交”切换。默认(上色了)的输出差异会在带编号的行上并排显示差异,并用一个字符分隔表示行的差异: ! 表示内容不同; $ 表示缺少行末字符;<>之一表示另一个文件已经没有更多的行了。

在提交的详细页面里点击“查看源代码”(view source code)链接可以检查提交的源代码。如果这个队伍曾经用同一种语言提交过代码,里面还会显示两份代码的差异。

如果您有一个对应的队伍,您可以修改源代码再提交。这个操作不会对队伍有任何影响,仅为了裁判分析“如果这么干会怎样”的情况。

一个提交允许有多个评测,不过同时只能有一个已检验的结果。多个评测结果通常发生在重新评测时,参见“重新评测”(Rejudging)

重新评测

有些情况下需要对一个或多个提交进行重新评测,这意味着提交会重新进入提交流程,就像它没被评测过一样。提交时间还是原来的时间,不过程序会被再次编译、执行和比较。

当发生某些问题时重新评测非常有用,例如编译器故障修复后,或者测试数据发现错误修正后。当提交被重新评测后,旧的评测结果会被保留但被标记为未检验。

查看某个提交的详细信息时,您可以点击“重新评测”按钮来重新评测单个提交。也可以指定某个编程语言、题目、队伍或评测机的所有提交全部重新评测;要实现这种操作,进入到该编程语言、题目、队伍或评测机的详细页面,点击“全部重新评测”(Rejudge all)按钮并确认。

有两种不同的重新评测方式,取决于是否点击过创建重新评测按钮:

  • 如果没有点击过,会运行一个“传统形式”的重新评测,新的评测结果会直接生效。

  • 如果点击过,会创建一个“重新评测”集合,所有受影响的提交会被重新评测,但新的评测结果不会立即生效,裁判可以(在重新评测页面)检查评测结果。对于整个重新评测结果集合,可以统一应用或撤销(保留旧评测结果)。

被标记为“正确”(CORRECT)的提交不会被重新评测。只有DOMjudge管理员可以用复选框修改这个限制。

除非评测结果发生变化,队伍不会收到重新评测的通知。可能需要发一个解释给该队伍或全部队伍说明重新评测了什么和为什么重新评测。

忽略提交

最后,提交的详细信息页面上有一个按钮来忽略某个提交。当某个提交被忽略时,这个提交会被当做好像没有被提交过,在裁判的界面上显示为半透明,并影响队伍的提交列表,并且在榜单上看不到它。等效于因故删除某个提交。例如某个队伍意提交错题目。被忽略的提交也可以选择不忽略它。

Last updated