关于 CCR 测评器的自定义校验器(Special Judge)

引言

有时我们需要使用CCR测评器(CCR-Plus是一个开源的信息学竞赛测评软件,Github链接https://github.com/sxyzccr/CCR-Plus)进行SpecialJudge(以下简称SPJ)。例如判断选手输出与标准输出的差距,大于一定的值就算错,这时就需要用SpecialJudge了。

在CCR测评器中,SPJ是用一项叫做自定义校验器的功能实现的。CCR的文档没有写明校验器的语法,网上也没有这一类的信息。于是,我在CCR的源代码中找到了CCR的默认校验器(全文比较),并将校验器的写法写成此篇博客。

正文

SPJ程序的位置

编译好的SPJ程序放在\data\prob\目录下(prob是题目名)。

如何写SPJ校验器

查看CCR默认全文比较校验器源代码:

 

SPJ程序需要两个必要的函数:

Open()是进行程序的初始化,End则是返回分数和备注。

当CCR需要调用校验器时,它会向SPJ程序传递一个参数数组argv[]。数组的第二项为标准答案,第三项为选手答案,第四项为一些日志。

当程序开始时,我们先获取这几个参数。

接下来我们需要读入标准答案和选手答案。我们使用freopen重定向到答案文件。

接下来是判断,具体的读入和判断过程因题目而异。

判断完成后需要使用End函数返回结果。End函数的使用很简单,第一个参数是要显示在测评记录上的字符串,第二个参数是double类型的,表示分数百分比,是一个0-1的值(例如这个测试点为10分,这个参数为0.6,那么这个测试点最终得分就是6分)。

最终的SPJ代码就是这样:

在CCR的高级配置中从下拉菜单选择这个校验器,就可以使用这个校验器测评这道SPJ题了。

暂无评论

发送评论


				
下一篇