对拍

前言

本文默认系统为Windows系列系统。

定义

当我们的程序过了样例,是否意味着它一定能AC呢?显然大多数情况下都是不行的。所以我们需要自己设计一些数据来测试我们的程序,但有的题目数据很大,我们肉眼无法看出程序计算的结果是否正确,手工计算又非常耗时,在紧张的比赛中,我们该怎么应对呢?于是有了对拍。 对拍简单的说就是当你写完一个题目的程序以后,再写一个暴力求解该题目的程序,然后自己生成一些测试数据,看同样的数据,两个程序输出的结果是否相同,不同意味着被对拍的程序有问题。以此来帮助你修改程序,提高通过率的方法,我们称为对拍。

过程

  1. 准备好正解程序、暴力程序。

  2. 写生成随机数据的程序。这里提供模板:

    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        srand(clock());
        //...
    }
    
  3. 写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;
    }
    

注意事项

  1. 注意输出格式。
  2. 当对拍文件停下时,data.txt即为发生错误的样例。
  3. 编数据时最好不要用原题数据,暴力会卡死。毕竟只是保证正确性,数据小一点就好。
原文地址:https://www.cnblogs.com/Sam2007/p/13367852.html