Testlib.h 从入门到入坟

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

💭💭

✨: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+ba*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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸愉信奥

谢谢亲的支持,我会继续努力啦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值