前言
本文默认系统为Windows系列系统。
定义
当我们的程序过了样例,是否意味着它一定能AC呢?显然大多数情况下都是不行的。所以我们需要自己设计一些数据来测试我们的程序,但有的题目数据很大,我们肉眼无法看出程序计算的结果是否正确,手工计算又非常耗时,在紧张的比赛中,我们该怎么应对呢?于是有了对拍。 对拍简单的说就是当你写完一个题目的程序以后,再写一个暴力求解该题目的程序,然后自己生成一些测试数据,看同样的数据,两个程序输出的结果是否相同,不同意味着被对拍的程序有问题。以此来帮助你修改程序,提高通过率的方法,我们称为对拍。
过程
-
准备好正解程序、暴力程序。
-
写生成随机数据的程序。这里提供模板:
#include<bits/stdc++.h> using namespace std; int main() { srand(clock()); //... }
-
写windows对拍文件。这里提供模板:
#include<bits/stdc++.h> #include<windows.h> using namespace std; int main() { while(1) { system("make.exe > date.txt");//make.exe为数据生成器,date.txt为生成数据 system("1.exe < data.txt > 1.txt");//1.exe为暴力程序,1.txt为对应输出文件 system("2.exe < date.txt > 2.txt");//2.exe为自己的程序,2.txt类似于上 if(system("fc a.txt b.txt")) {//对比,true为有差异 printf("Error!"); break; } } system("pause"); return 0; }
注意事项
- 注意输出格式。
- 当对拍文件停下时,data.txt即为发生错误的样例。
- 编数据时最好不要用原题数据,暴力会卡死。毕竟只是保证正确性,数据小一点就好。