对拍
前言:
大家是否有这样的经历?本来是满怀信心地上交自己以为肯定AC的代码,结果翻车(全部WA),从此错过一等奖。
今天我们讲的对拍便会帮你完全避免这个问题\(_{(建议比赛之时再用,此方法耗时,码量十分大,一般做题最好不用)}\)
对拍讲解
对拍分为了四个部分,暴力代码(需保证正确率,最好是朴素),随机数生成,自己写的代码,对拍文件。
今天我们以A+B Problem 为例进行讲解
暴力代码
即一定是正确的代码。
#include<cstdio>
using namespace std;
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
}
自己写的代码
#include<cstdio>
using namespace std;
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a*b);
}
随机数生成
#include<cstdio>
#include<cstdlib>
#include<ctime>
int x,y;
int main() {
srand(time(0)); //相当于按照当前的时间来生成一个种子,这样可以尽量保证数据的随机性
x=rand()%100; //生成0-100之间的数之间的数
y=rand()%100;
printf("%d %d\n",x,y);
return 0;
}
对拍文件
对拍文件是运用了windows系统的bat类型文件(和命令指示符十分相似)
也可以用C++的windows.h中的system("");进行对拍文件的生成
@echo off
:A
rand.exe > data.txt
false_code.exe < data.txt > false_txt.txt
true_code.exe < data.txt > true_txt.txt
fc false_txt.txt true_txt.txt
if not errorlevel 1 goto A
pause
goto A
rand.exe>data.txt意为把rand.exe输出的结果放在data.txt之中
false_code.exe < data.txt > false_txt.txt意为data.txt输入到false_code.exe之中再把其输出放在false_txt.txt文件中
fc false_txt.txt true_txt.txt : fc为windows中的比较
其他不懂的可询问百度(百度可是个好东西)
如何弄出bat文件???
1. 先写好对拍代码于文本编辑器之中(如下图)
2. 与其他文件保存在同一个文件夹当中(最好先是这样)
3. 更改文件拓展名(若不能看到拓展名的话请看windows系统之中,如何让文件拓展名显现\(\leftarrow\)猛戳)
4. 双击使其运行,运行后放置后台直到找到不同(此程序因为错误较大,可一次性找出)
快去尝试一下吧!!!
本文来自博客园,作者:ricky_lin,转载请注明原文链接:https://www.cnblogs.com/rickylin/p/17049895.html