答案检查器

本文将引导您写一个自定义的checker(chk.cpp)。
按照套路,uoj的校验器也应该使用testlib编写。

如果您准备使用自定义校验器,请在problem.conf中去掉use_builtin_checker那一行。

下面是A+B Problem的校验器:

#include "testlib.h"

int main(int argc, char* argv[])
{
    registerTestlibCmd(argc, argv);

    int pans,jans;
    pans=ouf.readInt();      // 读取选手输出
    jans=ans.readInt();      // 读取答案

    if (pans == jans)
        quitf(_ok, "Correct.");
    else
        quitf(_wa, "WA! expect=%d recieve=%d", jans, pans);
}

在调用registerTestlibCmd之后,我们可以使用下面的三个流:

  • inf : 输入数据
  • ouf : 选手输出
  • ans : 标准输出

从流中读取数据的方式,和【数据检验器】一致。

如果程序AC或者爆零,您可以使用quitf()。但是如果您想给选手部分分,请使用下面的代码:

quitp(ceil(100.0 * p / a) / 100, "QAQ");

这将会给选手p分。

chk.cpp中不能出现中文!



[CC协议 BY-NC-SA] 署名 - 非商业性使用 - 相同方式共享 @ UOJ部署指北 2018
Home apps close