计算程序运行时间

Windows系统

GetTickCount函数

#include<iostream>
#include<windows.h>
int main()
{
    DWORD start_time=GetTickCount();
    {
        //此处为被测试代码
    }
    DWORD end_time=GetTickCount();
    cout<<"The run time is:"<<(end_time-start_time)<<"ms!"<<endl;//输出运行时间
    return 0;
}

clock函数(精度较差)

#include<iostream>
#include<time.h>
int main()
{
    clock_t start_time=clock();
    {
        //被测试代码
    }
    clock_t end_time=clock();
    cout<< "Running time is: "<<static_cast<double>(end_time-start_time)/CLOCKS_PER_SEC*1000<<"ms"<<endl;//输出运行时间
    return 0;
}
Linux系统
#include <stdio.h>
#include <sys/time.h>
int main()
{
    int i = 10000000;
    struct timeval start, end;
    gettimeofday(&start, NULL);
    // test code
    while(i)
    {
        i--;
    }
    gettimeofday(&end, NULL);
    long long total_time = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec);
    total_time /= 1000;
    printf("total time is %lld ms\n", total_time);
}

对拍

参考博客:https://blog.csdn.net/wlx65003/article/details/51149196

http://www.cnblogs.com/shamman/p/7351233.html

Windows系统

avatar

新建一个批处理文件,命名为循环对拍.bat。

@echo off  
:loop  
    rand.exe %random% > data.in
    std.exe < data.in > std.out
    my.exe < data.in > my.out
    fc my.out std.out 
if not errorlevel 1 goto loop  
pause
goto loop

rand.cpp

#include<bits/stdc++.h>
using namespace std;
#define random(a,b) ((a)+rand()%((b)-(a)+1))

stringstream ss;

int main( int argc, char *argv[] )
{ 
    int seed=time(NULL);
    if(argc > 1)//如果有参数
    {
        ss.clear();
        ss<<argv[1];
        ss>>seed;//把参数转换成整数赋值给seed
    }
    srand(seed);
    //以上为随机数初始化,请勿修改
    //random(a,b)生成[a,b]的随机整数

    //以下写你自己的数据生成代码 
    printf("1\n");
    int n=10;
    int m=random(1,20);
    printf("%d %d\n",n,m);
    for(int i=0 ; i<n ; ++i)
    {
        printf(" %d ",random(0,m));
    }
    printf("\n");
    return 0;
}

只需把my.cpp和std.cpp放在和对拍程序相同的目录下 ,

my.cpp里放你自己的代码,编译成my.exe ,

std.cpp里放标程,编译成std.exe,

然后双击运行对拍程序,等待它暂停,然后打开data.in就能看到对拍出来的输入的数据,打开my.out和std.out就可以看到该组数据不同的输出。

Linux

rand.cpp与上面相同。

#!/bin/bash
while true; do
    ./data > data.in
    ./std <data.in >std.out
    ./my <data.in >my.out
    if diff std.out my.out; then
        printf "AC\n"
    else
        printf "Wa\n"
        exit 0
    fi
done

将代码存储为judge.sh

在终端运行 chmod +x judge.sh

在终端运行 ./judge.sh

保存为.sh后缀的文件(这里以test.sh为例),然后把三个程序放在一个目录下。

用的时候先Ctrl+Alt+T打开终端,然后输入cd 你的文件目录(右键文件属性可以看到路径,全部输进去,大小写也要完全一样,注意这里要全部是英文路径,不然无法识别),回车。

再输入sh test.sh,回车。

这个时候对拍就开始跑了,如果两个程序的输出没差别的话你会看到很多很多行AC,检测到差别时对拍会停下来,你可以在终端看到两个程序分别输出的内容,在目录下的data.in里可以找到出错的这组数据。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

HDU5895 矩阵快速幂+欧拉降幂公式 Previous
LOJ526 最大独立集 Next