zoukankan      html  css  js  c++  java
  • 对拍,多数据自动生成器

    使用平台

    Linux,gcc,g++编译器

    注意事项

    记得标程,数据生成器和暴力别出问题了

    另外数据生成器中的随机数改天会去看看的目前来看还是在鸽着的

    对拍

    注释版

    Sample Code
    #include<cstdio>
    #include<cstdlib>
    #include<sys/time.h>
    using namespace std;
    #define DEFAULT_NUM 100
    #define sec 1000000
    int main()
    {
        system("g++ maker.cpp -o maker");
        system("g++ std.cpp -o std");
        system("g++ brute.cpp -o brute");
        for(int i = 1;i <= DEFAULT_NUM;i ++)
        {
            struct timeval STD_START,STD_END,MAKER_START,MAKER_END,BRUTE_START,BRUTE_END; //计算时间所需要的结构体
    
            gettimeofday(&MAKER_START,NULL);
            system("./maker > in");
            gettimeofday(&MAKER_END,NULL);
            long double MAKER_TIME = sec * (MAKER_END.tv_sec-MAKER_START.tv_sec) + MAKER_END.tv_usec - MAKER_START.tv_usec;
            printf("Make data %d : used %.2Lfus
    ", i, MAKER_TIME); //造数据的程序计时
    
            gettimeofday(&STD_START,NULL);
            system("./std < in > sout");
            gettimeofday(&STD_END,NULL);
            long double STD_TIME = sec * (STD_END.tv_sec-STD_START.tv_sec) + STD_END.tv_usec - STD_START.tv_usec;
            printf("Run std in data %d : use %.2Lfus
    ", i, STD_TIME); //标程计时
    
            gettimeofday(&BRUTE_START,NULL);
            system("./brute < in > bout");
            gettimeofday(&BRUTE_END,NULL);
            long double BRUTE_TIME = sec * (BRUTE_END.tv_sec-BRUTE_START.tv_sec) + BRUTE_END.tv_usec - BRUTE_START.tv_usec;
            printf("Run brute in data %d : use %.2Lfus
    ", i, BRUTE_TIME);//暴力计时
            
            if(system("diff -Bb sout bout"))
            {
                puts("GG");
                exit(0);
            }
            printf("Passed %d ......
    ",i);
            if(MAKER_TIME + STD_TIME + BRUTE_TIME < sec) system("sleep 1"); //如果时间超过1s就可以直接进行下一组数据
        }
        return 0;
    }
    

    复制版

    Sample Code
    #include<cstdio>
    #include<cstdlib>
    #include<sys/time.h>
    using namespace std;
    #define DEFAULT_NUM 100
    #define sec 1000000
    int main()
    {
        system("g++ maker.cpp -o maker");
        system("g++ std.cpp -o std");
        system("g++ brute.cpp -o brute");
        for(int i = 1;i <= DEFAULT_NUM;i ++)
        {
            struct timeval STD_START,STD_END,MAKER_START,MAKER_END,BRUTE_START,BRUTE_END;
    
            gettimeofday(&MAKER_START,NULL);
            system("./maker > in");
            gettimeofday(&MAKER_END,NULL);
            long double MAKER_TIME = sec * (MAKER_END.tv_sec-MAKER_START.tv_sec) + MAKER_END.tv_usec - MAKER_START.tv_usec;
            printf("Make data %d : used %.2Lfus
    ", i, MAKER_TIME);
    
            gettimeofday(&STD_START,NULL);
            system("./std < in > sout");
            gettimeofday(&STD_END,NULL);
            long double STD_TIME = sec * (STD_END.tv_sec-STD_START.tv_sec) + STD_END.tv_usec - STD_START.tv_usec;
            printf("Run std in data %d : use %.2Lfus
    ", i, STD_TIME);
    
            gettimeofday(&BRUTE_START,NULL);
            system("./brute < in > bout");
            gettimeofday(&BRUTE_END,NULL);
            long double BRUTE_TIME = sec * (BRUTE_END.tv_sec-BRUTE_START.tv_sec) + BRUTE_END.tv_usec - BRUTE_START.tv_usec;
            printf("Run brute in data %d : use %.2Lfus
    ", i, BRUTE_TIME);
            
            if(system("diff -Bb sout bout"))
            {
                puts("GG");
                exit(0);
            }
            printf("Passed %d ......
    ",i);
            if(MAKER_TIME + STD_TIME + BRUTE_TIME < sec) system("sleep 1");
        }
        return 0;
    }
    

    多组数据自动生成器

    详细注释版

    Sample Code
    #include<cstdio>
    #include<ctime>
    #include<string>
    #include<cstdlib>
    #include<sstream>
    #include<unistd.h>
    #include<sys/time.h>
    using namespace std;
    
    string I, ord1, ord2;
    stringstream tmp;
    string name = "seg";
    #define sec 1000000
    //sec就是一秒对应的微秒数
    int l, r;
    
    int main() 
    {
        system("g++ std.cpp -o std"); //编译标程
        printf("please type the first l and r
    ");
        while(scanf("%d%d", &l, &r) == 2) //输入数据的文件下标范围
        {
            system("g++ maker.cpp -o maker");//为了方便改了maker之后直接造数据
            for(int i = l; i <= r; i ++) 
            {
                tmp.clear(),tmp << i,tmp >> I; //将下标i倒序处理以便用来做文件名
                string ord1 = "./maker > " + name + I + ".in";
                string ord2 = "./std < " + name + I + ".in > " + name + I + ".out";
                struct timeval STD_START,STD_END,MAKER_START,MAKER_END; //计算时间所需要的结构体
    
                gettimeofday(&MAKER_START,NULL);
                system(ord1.data());
                gettimeofday(&MAKER_END,NULL);
                long double MAKER_TIME = sec * (MAKER_END.tv_sec-MAKER_START.tv_sec) + MAKER_END.tv_usec - MAKER_START.tv_usec;
                printf("Make data %d : used %.2Lfus
    ", i, MAKER_TIME); //造数据的程序计时
    
                gettimeofday(&STD_START,NULL);
                system(ord2.data());
                gettimeofday(&STD_END,NULL);
                long double STD_TIME = sec * (STD_END.tv_sec-STD_START.tv_sec) + STD_END.tv_usec - STD_START.tv_usec; //标程计时
                printf("Run std in data %d : use %.2Lfus
    ", i, STD_TIME);
    
                if(MAKER_TIME + STD_TIME < sec) system("sleep 1"); //如果时间超过1s就可以直接进行下一组数据
                for(int j = 1; j <= 10; j ++)
                    puts("................");
                printf("Finish Make Data %d
    
    
    ", i);
            }
            printf("Data %d to %d is finish
    ", l, r);
            printf("please change maker.cpp and then type next l and r
    
    ");
        }
        return 0;
    }
    

    直接复制版

    Sample Code
    #include<cstdio>
    #include<ctime>
    #include<string>
    #include<cstdlib>
    #include<sstream>
    #include<unistd.h>
    #include<sys/time.h>
    using namespace std;
    
    string I, ord1, ord2;
    stringstream tmp;
    string name = "seg";
    #define sec 1000000
    int l, r;
    
    int main() 
    {
        system("g++ std.cpp -o std");
        printf("please type the first l and r
    ");
        while(scanf("%d%d", &l, &r) == 2) 
        {
            system("g++ maker.cpp -o maker");
            for(int i = l; i <= r; i ++) 
            {
                tmp.clear(),tmp << i,tmp >> I;
                string ord1 = "./maker > " + name + I + ".in";
                string ord2 = "./std < " + name + I + ".in > " + name + I + ".out";
                struct timeval STD_START,STD_END,MAKER_START,MAKER_END;
    
                gettimeofday(&MAKER_START,NULL);
                system(ord1.data());
                gettimeofday(&MAKER_END,NULL);
                long double MAKER_TIME = sec * (MAKER_END.tv_sec-MAKER_START.tv_sec) + MAKER_END.tv_usec - MAKER_START.tv_usec;
                printf("Make data %d : used %.2Lfus
    ", i, MAKER_TIME);
    
                gettimeofday(&STD_START,NULL);
                system(ord2.data());
                gettimeofday(&STD_END,NULL);
                long double STD_TIME = sec * (STD_END.tv_sec-STD_START.tv_sec) + STD_END.tv_usec - STD_START.tv_usec;
                printf("Run std in data %d : use %.2Lfus
    ", i, STD_TIME);
    
                if(MAKER_TIME + STD_TIME < sec) system("sleep 1");
                for(int j = 1; j <= 10; j ++)
                    puts("................");
                printf("Finish Make Data %d
    
    
    ", i);
            }
            printf("Data %d to %d is finish
    ", l, r);
            printf("please change maker.cpp and then type next l and r
    
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    Project Euler 28 Number spiral diagonals
    nrm是什么?以及nrm的安装与命令
    asar 如何解密加密?electron 的 asar 的具体用法
    ARDUINO 积木式编辑器整理
    关于Nodejs开发桌面应用。NW.js 和 Electron 优缺点分析对比
    webkit、cef、nwjs、electron、 miniblink浏览器内核优缺点
    cef开启摄像头和录音
    连接AWS Ubuntu服务器
    使用cnpm install提示package not found
    centos7 升级内核
  • 原文地址:https://www.cnblogs.com/eqvpkbz/p/13096638.html
Copyright © 2011-2022 走看看