浅谈testlib.h在lemon上的使用

在这里需要Orz一下MYY,感谢MYY修改testlib让它能适配本地评测机!!!
首先需要下载testlib.h,显然原版MYY的链接是找不到了,所以我自己分享了一个。
传送门
密码: test

必须知道的东西:

有三个很重要的结构体:inf,ouf,ans。
inf表示输入
ouf表示输出
ans表示标准答案。

必须做的事:

把testlib.h放到spj程序的所在的目录下。

在spj程序开头引用#include”testlib.h”
main函数要写成这样:int main(int argc, char *argv[])
main里面开头第一句话registerLemonChecker(argc,argv);

读入操作:

接下来的很多东西就像是luogu上讲的那样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(显然这都是结构体内置操作)
char readChar()
读入一个char,指针后移一位。
char readChar(char c)
和上面一样,但是只能读到一个字母c
char readSpace()
同 readChar(‘ ‘).
string readToken()
读入一个字符串,但是遇到空格、换行、eof为止、
long long readLong()
读入一个longlong/int64
long long readLong(long long L, long long R)
同上,但是限定范围(包括L,R)
int readInt(),
读入一个int
int readInt(int L, int R),
同上,但是限定范围(包括L,R)
double readReal()
读入一个实数
double readReal(double L, double R),
同上,但是限定范围(包括L,R)
double readStrictReal(double L, double R, int minPrecision, int maxPrecision),
读入一个限定范围精度位数的实数。
string readString(),
string readLine()
碰撞一行string,到换行或者eof为止
void readEoln()
读入一个换行符
void readEof()
读入一个eof

选手程序能用的功能,spj程序一样能用。

返回结果

1
2
3
AC:quitf(_ok"$%^$%#%^$*");
WA:quitf(_wa,"!@#%*$(^(!@");
PC(部分正确):quitp(s,"%^&$%^$#&#");

其中s表示得到的分值。
这里有一点很鬼畜的地方:
quitp的第一个参数要求是double,可是lemon上显示的分值必须是整数。
所以,lemon就会自动下取整。
当我按照luogu上的方法,用quitp(0.4,”%^&$%*$”)时,明明正确40%,却返回WrongAnswer。
当你把quitp调成一个非常大的数时,它会真的给你那么多分……
比如quitp(1024,”你获得了%d分”,1024)时,(当然该测试点满分都没有100分),会显示正确并给你1024分……
其实quitp和quitf都很像fprintf……第一个参数无视掉以后都可以像printf一样……

最后在lemon上引用的时候:

这道题的比较方式选自定义校验器。
假如spj程序是spj.cpp,编译以后是spj/spj.exe。
以windows为例(spj.exe)
spj必须放在data文件夹里。
如果spj放在该题目文件夹内(如A)则在比较方式下面的输入框内输入A/spj.exe
如果放在data目录下,则写spj.exe
(显然就是spj.exe的位置,将前面data的位置去掉)
比如我把spj放到data/A/spj/s/p/j/(无聊而已),则显然是A/spj/s/p/j/spj.exe
当然linux下就是把.exe删掉以后的目录。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×