计算程序运行时间
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系统
新建一个批处理文件,命名为循环对拍.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 协议 ,转载请注明出处!