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 日