关于 对拍 的一些认识

Posted wljss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 对拍 的一些认识相关的知识,希望对你有一定的参考价值。

对拍是用来检验自己写的正解的正确性&效率的东西。

操作说明:

1.准备好自己写的暴力(b.cpp 和 b.exe)和正解(z.cpp 和 z.exe)。

2.写一个造数据的程序(shuju.cpp 和 shuju.exe),根据题目要求自己造。

3.写一个对拍程序(duipai.cpp 和 duipai.exe),大部分情况下不用改动,如下.

#include<bits/stdc++.h>
using namespace std;
long long i;
int main()
{
    while(1)
    {
        system("shuju.exe > shuju.txt");
        double t1=clock();
        system("b.exe < shuju.txt > b.txt");
        double t2=clock();        
        system("z.exe < shuju.txt > z.txt");
        double t3=clock();
        if(system("fc b.txt z.txt"))break;
        cout<<"AC: "<<++i<<" "<<t2-t1<<" "<<t3-t2<<<endl;    
    }
    return 0;
}

注意要将上面那些东西放到同一个目录下。

4.运行duipai.exe.

下面举一个简单的例子,以a*b problem为例。

z.cpp

#include<bits/stdc++.h>
using namespace std;
long long a,b;
int main()
{
    cin>>a>>b;
    cout<<a*b;
    return 0;
}

b.cpp

#include<bits/stdc++.h>
using namespace std;
int a,b,ans;
int main()
{
    cin>>a>>b;
    for(int i=0;i<=b;++i)ans+=a;
    cout<<ans;
    return 0;
}

duipai.cpp

```cpp
#include<bits/stdc++.h>
using namespace std;
long long i;
int main()
{
    while(1)
    {
        system("shuju.exe > shuju.txt");
        double t1=clock();
        system("b.exe < shuju.txt > b.txt");
        double t2=clock();        
        system("z.exe < shuju.txt > z.txt");
        double t3=clock();
        if(system("fc b.txt z.txt"))break;
        cout<<"AC: "<<++i<<" "<<t2-t1<<" "<<t3-t2<<<endl;    
    }
    return 0;
}

注意事项:

1.4个程序都要放到同一个目录下

2.对拍的文件名不要取名fc

3.windows下和linux下生成的随机数范围不一样

4.生成数据的文件不要忘记写srand(time(0))

以上是关于关于 对拍 的一些认识的主要内容,如果未能解决你的问题,请参考以下文章

关于对拍

关于片段生命周期

ACM之对拍

markdown [mybatis参考]关于mybatis #mybatis的一些片段

关于annotation的认识

几个关于js数组方法reduce的经典片段