LYOI Online Judge 现已支持 testlib.h 检查器

Victor_Huang 2020-10-26 10:45:38 2021-03-22 20:16:58

LYOI Online Judge 现已部署基于 0.9.21 (commit d2880ce7b24d07c8ec5ba78619ed49552c4970bf) 版本修改的 testlib.h

使用 testlib.h,可以使得 Special Judge 更易于编写,以及提高程序鲁棒性。

下面以题目 #508. 「L🐟OI 萌新赛」133's Triangle 为例,该题目的 Special Judge 需要读取选手输出的第一个答案并与标准答案比对,若正确即可获得 30% 分数,然后读取剩余答案与标准答案比对。若剩余答案也正确即可获得 70% 分数。

该示例 Special Judge 可前往此处下载。

若要了解更多关于 testlib.h 的信息,请移步 Checker - OI Wiki

请务必在本地使用 0.9.21 版本的 testlib.h 测试你的 Special Judge 是否能够正确执行。由于新版 testlib.h 会出现编译错误,我们 fork 了 testlib.h 并作出了修改: SDLYYZ/testlib: modified testlib.h used for LYOI Online Judge,请从此处获取 testlib.h 进行测试,你不需要作出任何修改即可让其在本地正常使用。

如果你正在部署另一个 SYZOJ 2 评测系统,并且希望测试一个更新版本的 testlib.h,你可以尝试使用以下 patch:

2546a2547,2558
> #ifdef ONLINE_JUDGE
>     if (result != _points)
>         std::fprintf(stdout, "%d\n", result == _ok ? 100 : (result >= _partially ? pctype : 0));
>     else
>     {
>         if (__testlib_points == std::numeric_limits<float>::infinity())
>             quit(_fail, "Expected points, but infinity found");
>         std::string stringPoints = removeDoubleTrailingZeroes(format("%.10f", __testlib_points));
>         std::fprintf(stdout, "%s\n", stringPoints.c_str());
>     }
> #endif
> 
4046c4058
< 
---
> #ifndef ONLINE_JUDGE
4085a4098,4102
> #else
>     inf.init("input", _input);
>     ouf.init("user_out", _output);
>     ans.init("answer", _answer);
> #endif

Victor Huang
2020 年 10 月 26 日