对拍

前言:

大家是否有这样的经历?本来是满怀信心地上交自己以为肯定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. 双击使其运行,运行后放置后台直到找到不同(此程序因为错误较大,可一次性找出)

在这里插入图片描述
快去尝试一下吧!!!

posted @ 2023-01-13 15:54  ricky_lin  阅读(53)  评论(0编辑  收藏  举报