• 关于 对拍 的一些认识


    对拍是怎么回事呢?对拍相信大家都很熟悉,但是对拍是怎么回事呢,下面就让小编带大家一起了解吧。

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

    操作说明:

    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=1;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;
    }
    

    shuju1.cpp 用来检验效率

    #include<bits/stdc++.h>
    #define YY ((rand()<<14)|rand())
    using namespace std;
    int main()
    {
    	srand(time(0));rand();
    	cout<<YY%10+1<<" "<<YY%100000000+1;
    	return 0;
    }
    

    shuju2.cpp 用来检验正确性

    #include<bits/stdc++.h>
    #define YY ((rand()<<14)|rand())
    using namespace std;
    int main()
    {
    	srand(time(0));rand();
    	cout<<YY%1000000+1<<" "<<YY%1000000+1;
    	return 0;
    }
    

    注意事项:

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

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

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

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

    这就是关于如何对拍的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!

  • 相关阅读:
    前端技术-PS切图
    Html5资料整理
    Html5知识体系
    Html知识体系
    C语言知识结构
    ASP.NET知识结构
    src和href的区别
    Ajax的简单使用
    学习理论
    求模运算法则
  • 原文地址:https://www.cnblogs.com/wljss/p/13254153.html
Copyright © 2020-2023  润新知