在竞赛过程中一个对拍程序可以帮你排除许多错误,如果担心自己写的正解被一些小数据卡掉,我们通常会写个对拍程序来检查正解的正确性,通过大量数据观察正解与暴力的输出是否相同。
我们首先拿出我们写的可能会超时但是可以保证绝对正确的暴力程序,称作bf.exe,然后拿出我们写的待检测的正解,称作std.exe,接着我们写一个随机数据生成程序,用来一次生成一组自制随机数据用来检测输出,称作gen.exe,
然后我们来写一个利用windows批处理的对拍程序。在你的程序的根目录下新建一个称作check.bat的文档,用编辑软件打开这个批处理文件,添加如下代码:
@echo off
:loop
gen.exe > data.in
std.exe < data.in > std.out
bf.exe < data.in > bf.out
fc std.out bf.out
if not errorlevel 1 goto loop
pause
goto loop
第一行echo off作用是关闭多余显示,这样可以只让对拍程序显示对拍信息。第二行loop作用是循环,一直进行下面的操作。大于号代表输出重定向,可让运行的程序的输出结果输出在特定的文件中。小于号代表输入重定向,可让运行的程序从特定的文件读取输入信息。第六行fc操作代表对比两个文件,结果会显示在控制台中。第七行代表如果没有拍出错误就再返回第二行loop进行下一次对拍。第八行pause就是c语言中sysem(“pause”)的操作。第九行可以在pause之后进行第二轮对拍。
写完了这个批处理程序就可以保存退出运行对拍了。
祝大家在竞赛中拿到好成绩!