传统的评测模式下,判题机按照固定的顺序执行:运行被测程序,获取运行结果,比对结果数据。由于是严格比较,结果数据和答案属于有任意一个字节(除常用格式字符外)不匹配,都将被判定为WA。

有些时候,这种方式太过于苛刻。在涉及到浮点数运算的题目,如计算圆的面积时,我们不得不面对计算结果的精度误差,这将导致原本正确的程序,被判定为WA,显然这不符合我们的逾期。

在特殊评测功能还没能设计开发出来之前,我们通常的解决办法是固定使用一种数据类型出题,比如要求选手使用double来存储浮点数,这样可以确保最终打印的小数精度和我们设定的答案一致。

我们知道,数据检查工具是判题机的一部分,那么是否能让判题机支持调用出题者编写的数据检查工具呢?

[……]

继续阅读

0x00 获取运行结果

上两篇文章,我介绍了判题机是如何管理进程,并如何限制进程的资源使用。目标程序运行完毕退出后,我们的判题机进程将从等待中唤醒,进行运行数据的收集工作。此时,判题机能够作出判断的状态分别有AC(暂时)、TLE、MLE、RE和OLE。

从进程篇我们可以了解到,WIFSI[……]

继续阅读

0x00 资源占用

一个完整的判题机核心,不可避免要支持程序的资源占用判定。我们常以两个维度来判定一个程序的优劣,时间维度和空间维度。在ACM-ICPC比赛里,通常每道题目都有一个期望的最差运行时间,和最大内存占用。如果你的程序算法效率足够高,便可以很快的运行完某个测试数据;如果你的算法效率不[……]

继续阅读