💭💭
✨:Testlib.h 从入门到入坟
💟:幸愉编程
💜: 学习如逆水行舟,不进则退 💜💜
🌸: 如有错误或不足之处,希望可以指正,非常感谢😉
前言
今天出线性同余方程,解题时发现答案不唯一,所以就搞了一下 Special Judge,然后看来一下文档,然后就是被 Testlib.h 折腾了一下午,最后搞定了,今天报错的信息如下:



接下来切入正题,把我的学习历程分享出来,期待三连 ❤
Testlib.h 配置
请点击 👉 下载链接 进行下载
下载好过后请打开 Devcpp 或者 codeblocks 或者对应 C/C++ 编译器中打开 MinGW32,然后找到 include 文件夹,然后创建一个文件名为 testlib.h,把下载好的文件内容复制到这个文件夹里面,这个时候在 C/C++ 编译器中就能导入该头文件。


Special Judge
简介
Special Judge(简称:spj,别名:checker)是当一道题有多组解时,用来判断答案合法性的程序。
spj 要判断文件尾是否有多余内容及输出格式是否正确 (如题目要求数字间用一个空格隔开,而选手却使用了换行)。但是目前前者只有 Testlib 可以方便地做到这一点,而后者几乎无人去特意进行这种判断。
判断浮点数时应注意 NaN。不合理的判断方式会导致输出 NaN 即可 AC 的情况。
在对选手文件进行读入操作时应该要检查是否正确读入了所需的内容,防止造成 spj 的运行错误。
Testlib.h
数据流
inf:输入文件
ouf:选手输出
ans:标准输出
这个时候数据的输入肯定不能使用 scanf,要用 testlib.h 的内置函数。
状态表示
| 结果 | 别名 | 含义 |
|---|---|---|
| Accepted | _ok | 答案正确 |
| Wa | _wa | 答案错误 |
内置函数
| 定义 | 说明 |
|---|---|
InStream inf | 输入文件 |
InStream ouf | 选手文件 |
InStream ans | 参考文件 |
char readChar() | 读入一个字符 |
char readSpace() | 读入一个空格 |
int readInt(int L, int R) | 读入一个 32 位整数,必须在 [L,R] 之间 |
long long readLong(long long L, long long R) | 读入一个 64 位整数,必须在 [L,R] 之间 |
double readDouble(double L, double R) | 读入一个双精度浮点数,必须在 [L,R] 之间 |
string readToken() | 读入一个串,到空白字符(空格、Tab、EOLN 等)停止 |
运行
运行的时候切换到 checker 所在的目录,输入以下命令
windows
checker <input-file> <output-file> <answer-file>
Linux
./checker <input-file> <output-file> <answer-file>
根据输出结果可以来判断程序的对错,如果编译都不通过就会产生 system error
练习
输入两个整数 a 和 b,使得答案输出 a 与 b 的和或者 a 与 b 的乘积都算正确,请编练习一下。
一看这就是一个特判题,答案不唯一,输出 a+b 或 a*b 都算正确。
#include "testlib.h"
#include <iostream>
using namespace std;
int main(int argc, char *args[]){
/**
inf: 输入文件流
ouf: 选手输出流
ans: 标准答案流
**/
registerTestlibCmd(argc, args);
//文件输入
int a = inf.readInt();
int b = inf.readInt();
//选手输出流
int c = ouf.readInt();
if(a+b == c || a*b == c)
quitf(_ok, "The answer is correct.");
else
quitf(_wa, "The answer is wrong.");
// quitf(_pe, "The answer is presentation error."); // 格式错误
// quitf(_fail, "The something wrong cause system error."); // 系统错误
}
结语
以上是 Special Judge 的整个编写过程。欢迎来到 幸愉的OJ 刷题学习。
C++信息奥赛题解,长期更新!信息学奥赛成都、彭山区、东坡区有机会线下上门,其他地区线上。V:LSX05311519

本文档介绍了Testlib.h的配置方法,包括下载、添加到项目步骤。详细讲解了Special Judge的概念,强调了其在多解题目的答案合法性验证中的作用。此外,还探讨了Testlib.h的数据流、内置函数以及运行注意事项,提供了实践练习,帮助读者掌握Testlib.h的使用。
2200

被折叠的 条评论
为什么被折叠?



