有时候程序WA了,但是找不到错误的数据,可以用对拍找错误数据。
用对拍一般有两种情况
一种是比赛后拿到标答或者平时刷题能找到题解。
还有一种情况,就是比赛的时候额外打一份暴力解法,把暴力解法当成标答进行对拍。当然数据量比较大的时候,暴力解法会跑的比较慢,对拍起来效率也比较低。
对拍的具体做法
这里用a + b程序举例
首先在一个文件夹里面包含以下四个文件
我们要测试的代码 test.cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}
标答程序 biaoda.cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
return 0;
}
造数据的程序 data.cpp
#include <bits/stdc++.h>
using namespace std;
//ofstream cout("data.in");
int main()
{
srand(time(0));
//srand( (unsigned)time( NULL ) );
//freopen("input.txt","w",stdout);
int a, b;
a= rand() % 100 + 1, b = rand() % 100 + 1;
printf("%d %d\n", a, b);
return 0;
}
以及一个对拍.txt文件,里面输入以下内容后,将后缀txt改为bat
:again
data > input.txt
biaoda < input.txt > biaoda_output.txt
test < input.txt > test_output.txt
fc biaoda_output.txt test_output.txt
if not errorlevel 1 goto again
pause
对三个cpp文件进行编译,生成3个exe文件,打开对拍.bat文件,就开始对拍了。
每次对拍,只要把自己的程序放入test.cpp文件,把标答放入biaoda.cpp文件,然后再在data.cpp文件写好随机数据,然后打开.bat文件即可开始对拍。
参考来源
博客
https://blog.csdn.net/code12hour/article/details/51252457