对拍

有时候我们对于一个题先写了不确定的貌似是正解的程序,然后又写了保证正确的暴力。
那么我们怎样来确定我们想的正解对不对呢?对拍。
对拍我们需要这样几个文件:
这里写图片描述

data是数据生成器,right是暴力,test是待定正确程序。
举一个a+b的例子,里面是这样写的。

data.cpp

#include<iostream>
#include<cstdio>
#include<ctime>
#include<cstdlib>
using namespace std;
int n;
int main()
{
    freopen("a.in","w",stdout);
    srand(time(0));
    n=rand()%20+2;
    for(int i=1;i<=n;i++)
    {
        long long a=rand()%100000;
        long long b=rand()%100000;
        cout<<a+b<<endl;
    }
    return 0;
}

right.cpp

#include<iostream>
#include<cstdio>
using namespace std;
int n;
int main()
{
    freopen("a.in","r",stdin);
    freopen("right.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        long long a,b;
        scanf("%lld%lld",&a,&b);
        cout<<1ll*(a+b)<<endl;
    }
    return 0;
}

test.cpp

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#define LL long long
using namespace std;
int a[1000],b[1000],c[1000];
char s1[1001],s2[1001];
int n;
int main()
{
    freopen("a.in","r",stdin);
    freopen("test.out","w",stdout);
    scanf("%d",&n);
    while(n--)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        scanf("%s%s",s1,s2);
        int l1=strlen(s1);
        int l2=strlen(s2);
        int la=1,lb=1,k=1;
        for(int i=1;i<=l1;i++)
        {
            if(k==10000)la++,k=1;
            a[la]+=k*(s1[l1-i]-'0');
            k*=10;
        }
        k=1;
        for(int i=1;i<=l2;i++)
        {
            if(k==10000)lb++,k=1;
            b[lb]+=k*(s2[l2-i]-'0');
            k*=10;
        }
        k=0;
        for(int i=1;i<=max(la,lb)+1;i++){
            c[i]=a[i]+b[i]+k;
            if(c[i]>=10000)
            k=c[i]/10000;
            else k=0;
            c[i]%=10000;
        }
        int lc=max(la,lb)+1;
        while(c[lc]==0&&lc>1)
            lc--;
        printf("%d",c[lc]);
        for(int i=lc-1;i>=1;i--)
        printf("%04d",c[i]);
        puts("");
    }
    return 0;
} 

把程序编译,运行.bat文件就可以了。
运行.bat文件后是这样的:
这里写图片描述

.bat文件里是这样写的:

@echo off
:loop 
data.exe 
right.exe 
test.exe
fc right.out test.out 
if not errorlevel 1 goto loop
pause
goto loop 

先写在.txt文件里然后把拓展名改为.bat就可以了,双击运行。

注:程序一定要编译.

原文地址:https://www.cnblogs.com/dfsac/p/7587833.html