testlib.h从入门到入坟
学了这么久OI连个spj都不会写真是惭愧啊。。。
趁着没退役赶紧学一波吧
配置
我是直接暴力复制粘贴的。。
然后扔到MingW的目录里
直接引用就好啦
基本语法
引用testlib.h后,我们可以从三个地方读入数据
inf:输入文件
ouf:选手输出
ans:标准输出
当然,肯定不能直接用scanf读入,testlib里内置了很多读入函数
基本上就够用了。。。
一个简单的例子
#include "testlib.h" // main 需要接收命令行参数 int main(int argc, char *argv[]) { // 初始化 checker 环境 —— 解析命令行参数、打开文件…… registerTestlibCmd(argc, argv); // 三个全局变量 inf, ouf, ans 依次为输入、选手输出和参考输出 int pans = ouf.readInt(-2000, 2000); int jans = ans.readInt(); if (pans == jans) quitf(_ok, "The sum is correct."); else quitf(_wa, "The sum is wrong: expected = %d, found = %d", jans, pans); return 0; }
运行
运行的时候需要切换到checker所在的目录,输入以下命令
windows
checker <input-file> <output-file> <answer-file>
Linux
./checker <input-file> <output-file> <answer-file>
根据输出结果可以判断程序的对错
注意事项
写这篇文章主要是为了记一下容易翻车的地方。。
- 读入的时候必须把三个文件里的内容都读完,不然会出现
如果全都读完后仍然显示这个。。。。
zzq给了个解决方案Orz
- checker内尽量不要出现中文字符,不然上传到某些OJ的时候可能会出BUG
自己写了个模板
#include "testlib.h" #include<bits/stdc++.h> using namespace std; const int MAXN = 1005 + 10; void YES() { quitf(_ok, "The ans is correct."); } void NO() { quitf(_wa, "The ans is not correct."); exit(0); } void readInf() { } void readOuf() { } void readAns() { } int main(int argc, char *argv[]) { registerTestlibCmd(argc, argv); readInf(); readOuf(); readAns(); return 0; }
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。