不要吐槽配图

什么是对拍脚本

对拍脚本就是用来检查程序是否正确的,但是在没有标准答案的信息学竞赛中如何检查程序是否正确呢?

简单的来说,就是用简单的程序去检查复杂的程序。

例如对于一道用动态规划可以过但dfs会超时的题目,我们把用dfs过的方法叫做暴力,用动态规划过的叫做正解。

但是,在你无法确定正解的状态转移方程是否正确,而题目给出的测试数据又太水该怎么办呢?

对,用dfs的程序去生成正解,哪怕超时也没有关系,因为这毕竟是答题阶段。

怎么写对拍脚本

由于竞赛主要使用NOI Linux系统,这里就只介绍在Linux下的对拍脚本了,Windows下的读者可以自习去搜索,其实大同小异。同时,本文也不讨论SPJ(特殊评测)。

如果读者还不会文件编辑,请使用搜索引擎搜索Vim,Nano等编辑器的使用方法。

#!/bin/bash       
#这一行是指定bash的路径,不可省略
while ture; do
 ./mkdata > input
 ./force < input > output.force
 ./check < input > output.check
 diff output.force output.check
 if [ $? -ne 0 ] ; then break; if
# Shell脚本的if语句采用上述格式,$?表示上一个程序的返回值,如果不是0的话(即两个文件不相同)就退出。
done

同时,也可在脚本里加入检测时间、内存占用和输出最近一个测试点的功能。这个就留给读者自行思考了。其中,输出内存占用是最难的。其实就是自己懒。

提示,需要用到time、cat命令。

怎么使用对拍脚本

首先,我们需要给对拍脚本执行权限。

chmod +x 对拍脚本的名称.sh

这段命令就是向对拍脚本添加可执行权限,至于权限什么的请参阅《NOI Linux使用教程(基础讲解)》

然后执行即可。

./对拍脚本的名称.sh

特别注意

  • 暴力方法一定要确保正确,不然这段对拍毫无意义。
  • 出数据一定要出极端数据自己去卡自己,要理解出题人的出题意义。
  • 万一在考场上忘记如何使用脚本,可以用help命令查看。
  • 脚本的功能非常强大,善用的话可以节省不少宝贵的检查时间。

最后,祝大家除夕/春节快乐了!

Last modification:January 27, 2017
博客维护不易,如果你觉得我的文章有用,请随意赞赏