本博客已停止更新!请移步至louhc.github.io

「黑科技」查错神器——对拍

对拍是个好东西。

对拍真是个好东西。

对拍的的确确是个好东西。

当你苦苦找题解,却找不出自己代码哪里错,而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 (把那些没用的信息全部过滤掉)

picture

然后就可以完成一个简单的对拍啦!!

大家试着理解一下

手把手教你用对拍

data.cpp里写着随机生成数据的代码(下面以对拍 公主的工作 为例,将我的代码和Hzwer大佬的题解对拍)要编译哦(F12)

picture

别忘了打随机数种子srand(time(0));

注意不用文件输出。因为 data.exe > read.txt 已经确定了输出方向。

再把我的代码(前面那个45行的)放到1.cpp中,Hzwer大佬的代码(另一个)放到2.cpp中(为了能放在图中,将花括号位置进行了一些处理)

picturepicture

然后编译(注意要和data.exe放在同一个文件夹),生成两个exe文件(1.exe and 2.exe)。

然后新建一个文本文档,将扩展名改为bat,名字随便取(如dp.bat,lalala.bat,duipai.bat随便你)

右键dp.bat,点编辑

picture

再把刚才那串东西输进去

picture

然后保存,点击dp.bat

picture

呀,发现错误啦!!!

蓝后点击read.txt,那就是你出错的样例。

emmm,OMG!!! ans 没赋初值!!!!

picture

改为ans(0) 蓝后就。。。。。。

picture

这就说明你的代码基本没问题了。然后我就AC了QAQ

对拍下载

解析

实际上呢,具体过程是不难理解的(刚才那些神奇的cmd语句应该都会了吧)

先调用data.exe将随机生成的数据输出到data.txt中,这样就得到了一组随机的样例

然后分别调用1.exe 2.exe输入样例,并输出结果,然后将它 fc 比较一下(comp应该也可以实现)。

将上述过程重复执行,直到发现两个程序得到的两个答案有所不同(注意:行末空格也算)

然后就可以从中得出错误的地方

补充

lch大佬友情提供了cpp对拍的写法

见TOPOI博客的下方评论

posted @ 2018-12-01 16:25  louhc  阅读(265)  评论(0编辑  收藏  举报