前言

周五晚上(2019/9/13),作者打了一场比赛,结果因为写了一个假的对拍而导致$DP$爆零。

因此,就有了这篇文章。


对拍的组成

对拍程序一般由$4$个部分组成,分别是暴力程序,正解,数据生成器,对拍器。

其中,暴力程序必须保证其正确性


对拍的写法

此程序在Windows 10 1903版本下亲测可用,如果您使用的电脑系统为MacUbuntu,请自行修改。

Code:

#include<bits/stdc++.h>
#include<windows.h>

#define ll long long
#define I inline

using namespace std;

ll num , s , t;

int main(){
while(true){
system("cls");
do{
num ++;
system("data.exe");
s = clock();
system("a.exe");
t = clock();
system("b.exe");
if(system("fc try1.out try2.out")){
break;
}
else{
cout << "AC time" << " " << t - s << "ms" << "\n";
cout << "This is " << num << " " << "AC" << "\n";
}
}while(true);
cout << "WA time" << " " << t - s << "ms" << "\n";
cout << "This is " << num << " " << "WA" << "\n";
system("fc try1.out try2.out");
system("pause > nul");
}
return 0;
}

不用理解,直接背就行

对拍的使用

首先,你需要在自己的桌面上建立一个名为Same的文件夹

Same.jpg

Same文件夹内需要包含$4$个文件,分别是您的暴力,正解,数据生成器和对拍程序。在这里对应文件夹中的a.cpp,b.cpp,data.cpp,Same.cpp

Same2.jpg

其中,a.cppb.cpp需要加上文件输入输出,读入的文件均为try.in,输出的文件分别为try1.outtry2.outdata.cpp需要向try.in中输入数据。

在一切就绪之后,我们运行a.cppb.cppdata.cpp,这时,文件夹里会多出以下文件。

Same3.jpg

之后运行Same.cpp,这时,对拍程序即开始运行。如果对拍成功,会显示以下界面

AC.jpg

如果出现错误,会显示以下界面:

WA.jpg

这时,我们就可以收集try.in中的数据,用来调试我们的正解。


后记

但要注意,对拍只可以对小数据进行调试,暴力无法跑出大数据。

因此,我们要注意对于边界条件的检查与把控,不要出现数组越界的情况。

另外,对拍不一定能随机到有强度的数据,特别是在图论题中。

因此,对于数据量小的极限数据,我们还是要自己手动制作。


THE END