Special Judge


本页面主要介绍部分评测工具/OJ 的 spj 编写方法。

简介

Special Judge(简称:spj,别名:checker)是当一道题有多组解时,用来判断答案合法性的程序。

spj 还应当判断文件尾是否有多余内容,及输出格式是否正确(如题目要求数字间用一个空格隔开,而选手却使用了换行)。但是,目前前者只有 Testlib 可以方便地做到这一点,而后者几乎无人去特意进行这种判断。

判断浮点数时应注意 NaN。不合理的判断方式会导致输出 NaN 即可 AC 的情况。

在对选手文件进行读入操作时应该要检查是否正确读入了所需的内容,防止造成 spj 的运行错误。(部分 OJ 会将 spj 的运行错误作为系统错误处理)

以下均以 C++ 作为编程语言,以“要求标准答案与选手答案差值小于 1e-3,文件名为 num,单个测试点满分为 10 分”为例。

Testlib

参见:

Testlib/简介
Testlib/Checker

Testlib 是一个 C++ 的库,用于辅助出题人使用 C++ 编写算法竞赛题。

必须使用 Testlib 作为 spj 的 评测工具/OJ:Codeforces、洛谷、UOJ 等。

可以使用 Testlib 作为 spj 的 评测工具/OJ:LibreOJ (Lyrio)、Lemon、牛客网等。

SYZOJ 2 所需的修改版 Testlib 托管于 pastebin1

Lemon 所需的修改版 Testlib 托管于 GitHub - GitPinkRabbit/Testlib-for-Lemons。注意此版本 Testlib 注册 checker 时应使用 registerLemonChecker(),而非 registerTestlibCmd()。此版本继承自 matthew99 的旧版,添加了一些 Testlib 的新功能。

DOMJudge 所需的修改版 Testlib 托管于 cn-xcpc-tools/testlib-for-domjudge。此版本 Testlib 同时可作为 Special Judge 的 checker 和交互题的 interactor。

其他评测工具/OJ 大部分需要按照其 spj 编写格式修改 Testlib,并将 testlib.h 与 spj 一同上传;或将 testlib.h 置于 include 目录。

Lemon

Lemon 有现成的修改版 Testlib,建议使用 Testlib。

Cena

CCR

Arbiter

HUSTOJ

QDUOJ

相较之下,QDUOJ 略为麻烦。它带 spj 的题目没有标准输出,只能把 std 写进 spj,待跑出标准输出后再判断。

LibreOJ (SYZOJ 2)

LibreOJ (SYZOJ 2) 有现成的修改版 Testlib,建议使用 Testlib。

牛客网

牛客网有现成的修改版 Testlib,建议使用 Testlib。

参见:如何在牛客网出 Special Judge 的编程题

DOMJudge

DOMJudge 支持任何语言编写的 spj,参见:problemarchive.org output validator 格式

DOMJudge 有现成的修改版 Testlib,建议使用 Testlib。

DOMJudge 使用的 Testlib 及导入 Polygon 题目包方式的文档:https://github.com/cn-xcpc-tools/testlib-for-domjudge

DOMJudge 的 默认比较器 自带了浮点数带精度比较,只需要在题目配置的 validator_flags 中添加 float_tolerance 1e-3 即可。

也可以使用 Kattis Problem Tools 提供的头文件 validate.h 编写,以实现更加复杂的功能。

参考资料

Footnotes

  1. LibreOJ 支持 testlib 检查器啦!

贡献者:@Menci@PinkRabbit@mgt@NachtgeistW

本页面最近更新:2/3/2023, 12:00:00 AM更新历史

发现错误?想一起完善? 在 GitHub 上编辑此页!

本页面的全部内容在 CC BY-SA 4.0SATA 协议之条款下提供,附加条款亦可能应用

评论

0 条评论
未登录用户


Copyright © 2016 - 2023 OI Wiki Team

最近更新:fd2ec2c, 2023-02-03

联系方式:Telegram 群组 / QQ 群组