不要吐槽配图
什么是对拍脚本
对拍脚本就是用来检查程序是否正确的,但是在没有标准答案的信息学竞赛中如何检查程序是否正确呢?
简单的来说,就是用简单的程序去检查复杂的程序。
例如对于一道用动态规划可以过但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命令查看。
- 脚本的功能非常强大,善用的话可以节省不少宝贵的检查时间。
最后,祝大家除夕/春节快乐了!