「黑科技」查错神器——对拍
对拍是个好东西。
对拍真是个好东西。
对拍的的确确是个好东西。
当你苦苦找题解,却找不出自己代码哪里错,而OJ不给数据的时候——
当你灵光一闪,give birth to a new problem 的时候,却不知自己打的标程是否有误的时候——
当你比赛时间充裕,担心自己代码有问题的时候——
那就来打对拍吧!!!!
不会打??具体怎么做??继续往下看!!!
知识储备
首先要普及一下bat(不是BAT Baidu Alibaba Tencent)的知识,因为它是对拍的主要组成部分.
大家用过cmd吧??(Windows + R -> cmd -> Enter)大家先了解下命令提示符的一些命令——
shutdown -p(不解释 暗笑)
fc 1.txt 2.txt (将1.txt 2.txt 的内容进行比较)
data.exe (调用data.exe这个可执行文件)
> 以及 < (表示文件传输方向,1.exe < input.txt > output.txt 将input.txt的内容输入到1.exe中,并将结果输出到output.txt中 )
errorlevel 1 (大家暂时理解为一个bool类型的变量吧)
if (分支语句)
goto (跳转到某个标记,如下图,这样可以实现不断执行:loop 和 goto loop之间的内容)
pause (暂停)
@echo off (把那些没用的信息全部过滤掉)
然后就可以完成一个简单的对拍啦!!
大家试着理解一下
手把手教你用对拍
data.cpp里写着随机生成数据的代码(下面以对拍 公主的工作 为例,将我的代码和Hzwer大佬的题解对拍)要编译哦(F12)
别忘了打随机数种子srand(time(0));
注意不用文件输出。因为 data.exe > read.txt 已经确定了输出方向。
再把我的代码(前面那个45行的)放到1.cpp中,Hzwer大佬的代码(另一个)放到2.cpp中(为了能放在图中,将花括号位置进行了一些处理)
然后编译(注意要和data.exe放在同一个文件夹),生成两个exe文件(1.exe and 2.exe)。
然后新建一个文本文档,将扩展名改为bat,名字随便取(如dp.bat,lalala.bat,duipai.bat随便你)
右键dp.bat,点编辑
再把刚才那串东西输进去
然后保存,点击dp.bat
呀,发现错误啦!!!
蓝后点击read.txt,那就是你出错的样例。
emmm,OMG!!! ans 没赋初值!!!!
改为ans(0) 蓝后就。。。。。。
这就说明你的代码基本没问题了。然后我就AC了QAQ
解析
实际上呢,具体过程是不难理解的(刚才那些神奇的cmd语句应该都会了吧)
先调用data.exe将随机生成的数据输出到data.txt中,这样就得到了一组随机的样例
然后分别调用1.exe 2.exe输入样例,并输出结果,然后将它 fc 比较一下(comp应该也可以实现)。
将上述过程重复执行,直到发现两个程序得到的两个答案有所不同(注意:行末空格也算)
然后就可以从中得出错误的地方
补充
lch大佬友情提供了cpp对拍的写法