Testlib教程·Checker与Lemon评测机的碰撞

Testlib教程·Checker与Lemon评测机的碰撞

Testlib介绍

如果你正在使用 C++ 出一道算法竞赛题目,Testlib 是编写相关程序(generator, validator, checker, interactor)时的优秀辅助工具。它是俄罗斯和其他一些国家的出题人的必备工具,许多比赛也都在用它:ROI、ICPC 区域赛、所有 Codeforces round……

Testlib 库仅有 testlib.h 一个文件,使用时仅需在所编写的程序开头添加 #include "testlib.h" 即可。

Testlib 的具体用途:

编写 Generator,即数据生成器。
编写 Validator,即数据校验器,判断生成数据是否符合题目要求,如数据范围、格式等。
编写 Interactor,即交互器,用于交互题。
编写 Checker,即 Special Judge。

下载地址

By Github:戳这里下载
By Gitee:戳这里下载
By 作者百度网盘:标准版 Lemon评测机定制版

声明:笔者使用的是 Lemon 评测机定制版,下文以笔者使用的版本为准,也建议大家下载Lemon 评测机定制版。

由于 Github 在境内访问性较差,所以特地为读者准备了网盘的下载链接。同时,也给出 Lemon 评测机的下载链接:戳这里下载

配置自定义校验器

下载完成后,点开会看到一个文件名为 testlib.h 的文件,这就是我们的 Testlib 库了。只需要将这个文件复制到 Dev-cpp 的文件夹下(笔者的路径是 C:\Program Files (x86)\Dev-Cpp\MinGW32\include),就可以在代码中引用了。

自定义校验器写法

先来看一下在各大 OJ 上的 Special Judge 框架写法:

#include"testlib.h"
int main(int argc,char *argv[]) {
  registerTestlibCmd(argc,argv);
  // 主要代码
  if(xxx) quitf(_ok,"xxx");
  else quitf(_wa,"xxx");
}

但在 Lemon 评测机上,你要是这么写,你可能会看到一条 校验器运行时错误,因为 Lemon 评测机的自定义校验器是这么写的:

#include "testlib.h"
int main(int argc, char* argv[]) {
    registerLemonChecker(argc, argv);
    // 主要代码
    if (xxx) quitf(_ok, "xxx");
    else quitf(_wa, "xxx");
}

讲完大框架,再来说说里面的一些主要的内容:

状态:

何为状态?状态就是你的代码在评测之后返回的结果。众所周知,算法竞赛中的结果往往有如下几种:ACWACERE,而 Testlib 主要会返回如下结果:

状态

上表摘自 OI Wiki。OI Wiki 中的描述

对象

对象

上表摘自 OI Wiki。OI Wiki 中的描述

常用函数

ouf.readInt() //获取选手的输出
ans.readInt() //获取样例输出
quitf() //返回结果
inf.readEoln() //获取输入文件的下一行

一个实例

#include "testlib.h"
int f(int x) {
    if (x >= 0 && x <= 9) return x;
    int result = 0;
    int tmp = x;
    while (tmp) {
        result += tmp % 10, tmp /= 10;
    }
    return f(result);
} //统计各个数位上的数字之和的函数
int main(int argc, char* argv[]) {
    registerLemonChecker(argc, argv);
    int Yourans = ouf.readInt();
    int Myans = ans.readInt();
    int t = inf.readInt();
    inf.readEoln();
    t = inf.readInt();//获取输入文件的第二行
    //如果要获取到好多行之后可以使用循环,这里不过多阐述了。
    if (f(Yourans) != f(Myans)) {
        quitf(_wa, "Your answer is wrong.");
    }
    else {
        quitf(_ok, "Great! Your answer is correct!");
    }
}

与 Lemon 的结合使用

配置好文件后,进行编译,将编译后的程序和测试用例用一个文件夹放到比赛目录中的 data 文件夹中,然后在试题详情界面选择 自定义校验器模式,传入校验器路径即可。

使用方法

以上就是对 Testlib 的使用介绍,感谢阅读!

  • 34
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值