123789456ye

已AFO

c++微秒级计时+对拍+随机数

调用了c++11加入的chrono库和命名空间

大部分内容来自这篇blog

注意

如果你直接这么写你会发现用纳秒级的代码实际上的精度是0.1微秒
这是因为在Windows下system_clock只有这个精度
所以如果想做到真正的1ns需要用high_resolution_clock
upd:high_resolution_clock并没有什么用
可以用steady_clock代替,虽然效果差不多
当然你用linux的话请无视上面那几句话
其实还可以把nanoseconds换成更小的,不过操作系统精度不够,并没有什么用

#include<cstdio>
#include<chrono>
#include<cstdlib>//用万能头也行
using namespace std;
using namespace chrono;
int main()
{
    for(register int i=1;;++i)
    {
        system("data.exe > in.txt");
        auto s=system_clock::now();
        system("std.exe < in.txt  > stdout.txt");
        auto t=system_clock::now();
        system("test.exe < in.txt > testout.txt");
        auto t2=system_clock::now();
        auto duration1=duration_cast<microseconds>(t-s);
        auto duration2=duration_cast<microseconds>(t2-t);
        double time1=(double)(duration1.count())/1000;
        double time2=(double)(duration2.count())/1000;
        if(system("fc /W stdout.txt testout.txt > nul"))
        {
            printf("point #%d\nWA time used: std %.3fms test %.3lfms\n",i,time1,time2);
            break;
        }
        else printf("point #%d\nAC time used: std %.3fms test %.3lfms\n",i,time1,time2);
    }
    system("pause>nul");
    return 0;
}

随机数生成(windows下(因为linux不需要这样),c++11以上)

#define seed 19491001//随意
std::mt19937 rng(seed^std::chrono::steady_clock::now().time_since_epoch().count());
template<class T> 
inline T rand(T l,T r)
{
    return std::uniform_int_distribution<T>(l,r)(rng);//均匀分布
}
posted @ 2019-06-21 20:42  123789456ye  阅读(447)  评论(0编辑  收藏  举报