对拍

对拍

这不是个算法,这是个方法。每当你刷毒瘤题的时候,你WA了一天,实在找不出一个能卡死自己代码的数据,这时候,你就需要对拍。

对拍需要的东西(所有程序不需要文件输入输出):

1.你的程序(就是你的错误程序)
QQ图片20200213201200.png

2.正确程序(题解中的标答 或 会TLE的正确暴力代码)
QQ图片20200213201222.png

3.数据程序(能随机生成输入数据的程序,刚开始先把数据搞小一些,如果拍不出错就调大数据)
QQ图片20200213201252.png

4.对拍程序(能组织一切的领导者程序):
程序中的文件名根据你的程序的名字而定。
一个对拍程序一次能多次执行对拍,最多只能发现一个能卡死你的程序的数据
1Okze1.png

#include <bits/stdc++.h>
using namespace std;
int main(){
    while(1+1==2){ //只要不发现你的代码错误就一直找
        system("data.exe>data.txt"); 
        //运行data.cpp,把输出放到data.txt文本文档中
        system("3311biaoda.exe<data.txt>3311biaoda.txt");
        //运行正确程序3311biaoda.cpp,输入data.txt文本文档中的输入数据,把输出放到3311biaoda.txt文本文档中
        system("3311.exe<data.txt>3311.txt");
        //运行你的程序3311.cpp,输入data.txt文本文档中的输入数据,把输出放到3311.txt文本文档中
        if(system("fc 3311.txt 3311biaoda.txt")){
        //对比两个文本文档,如果不一样返回true
            puts("WA"); //发现你的代码错误
            break;
        } else puts("AC");//这个数据通过
    }
    return 0;
}

都写好后,把这些程序都放到一个文件夹中。再依次点开文件夹中的程序(如果你直接执行你写的程序会找不到文件)。 然后你运行 ( exttt{duipai.cpp}),会这样:

1O9BSs.png
然后你等待一个 ( exttt{WA}) 出来,如果你的数据过小,可能要等几个小时;如果你的过大,可能虽然找到了你的程序过不了的数据,你也看不出为什么错了。

( exttt{WA}) 长这个样:

1OFZ1H.png
这时候,你打开文件夹(就是你把程序都放哪儿的那个文件夹),它会变成这个样:
QQ图片20200213202416.png
然后你打开 ( exttt{data.txt}),就是你的程序过不了的数据。比如会长下面这个样(随你的题目而变):

1OV0sJ.png
然后一次对拍就结束了。如果你觉得这个样例不合适或者这个样例你已经能过了,你就再执行一次 ( exttt{duipai.cpp}),再等一个 ( exttt{WA}),然后再打开一次 ( exttt{data.txt})

祝大家学习愉快!

原文地址:https://www.cnblogs.com/George1123/p/12493431.html