感性理解 LibreOJ 测评机速度(2017 年 12 月 10 日中午至 2018 年 3 月 3 日)

liu_cheng_ao 于 2017-12-10 15:04:04 发表,2018-04-10 11:22:03 最后更新

对比测试

# Language Loop Euler Sieve Floyd-Warshall std::set Memory Alloc (new)
LibreOJ(2017.6) G++ 5.4.0 (-O2) 278 262 732 680 460
Codeforces G++ 5.1.0 (-O2) 288 295 967 701 857
LibreOJ(2017.12.10) G++ 5.4.0 (-O2) 301 319 823 850 736
LibreOJ(2017.10) G++ 5.4.0 (-O2) 304 535 929 1163 942
Universal Online Judge G++ 4.8.4 (-O2) 435 530 1377 996 918
BZOJ G++ 4.4.5 (-O2) 504 1280 2092 1368 1568
HUSTOJ G++ 4.4.5 (-O2) 908 1460 1413 1553 Unexpected MLE (ML = 512MB)

结论:大致可以认为 LibreOJ 再次更换测评机之后速度变快,和 Codeforces 及 LibreOJ 早期的速度接近。

//Test 1
#include<cstdio>

using namespace std;

int main(){
    int a=1000000000,b=1;
    while(a)b<<=1,a--;
    printf("%d\n",b);
    return 0;
}
//Test 2
#include<cstdio>

using namespace std;
const int MX=50000000;
int p[MX],m[MX],pc;
int main(){
    for(int i=2;i<MX;i++){
        if(!m[i])p[++pc]=m[i]=i;
        static int k;
        for(int j=1;j<=pc&&p[j]<=m[i]&&(k=p[j]*i)<MX;j++)m[k]=p[j];
    }
    int ans=0;
    for(int i=1;i<=pc;i++)ans^=p[i];
    printf("%d\n",ans);
    return 0;
}
//Test 3
#include<cstdio>

using namespace std;
const int MX=1000;
int G[MX][MX];
int sed=0;
inline int rand(){return sed=(sed*sed*73+sed*233+19260817)&0x0000ffff;}
int main(){
    for(int i=0;i<MX;i++)
        for(int j=0;j<MX;j++)
            G[i][j]=rand();
    for(int i=0;i<MX;i++)
        for(int j=0;j<MX;j++)
            for(int k=0;k<MX;k++)
                if(G[j][k]>G[j][i]+G[i][k])G[j][k]=G[j][i]+G[i][k];
    int ans=0;
    for(int i=0;i<MX;i++)
        for(int j=0;j<MX;j++)
            ans^=G[i][j];
    printf("%d\n",ans);
    return 0;
}
//Test 4
#include<cstdio>
#include<algorithm>
#include<set>

using namespace std;

const int MX=1000000;
int sed=0;
inline int rand(){return sed=(sed*sed*73+sed*233+19260817);}
int main(){
    set<int>S;
    for(int i=0;i<MX;i++)S.insert(rand());
    int ans=0;
    for(set<int>::iterator it=S.begin();it!=S.end();it++)ans^=*it;
    printf("%d\n",ans);
    return 0;
}
//Test 5
#include<cstdio>

using namespace std;
const int MX=20000000;
int *it[MX];
int main(){
    for(int i=0;i<MX;i++)it[i]=new int;
    for(int i=0;i<MX;i++)*it[i]=i;
    int ans=0;
    for(int i=0;i<MX;i++)ans^=*it[i];
    printf("%d\n",ans);
    return 0;
}

读入测试

以下是若干读入整数速度测试的结果(单位:毫秒)。

输入:3×1063\times 10^63×106 个在区间中随机生成的十进制整数。

# Language [0,2)[0,2)[0,2) [0,8)[0,8)[0,8) [0,215)[0,2^{15})[0,215) [0,231)[0,2^{31})[0,231) [0,263)[0,2^{63})[0,263)
fread G++ 5.4.0 (-O2) 13 13 39 70 111
getchar G++ 5.4.0 (-O2) 58 73 137 243 423
cin(关闭同步) G++ 5.4.0 (-O2) 161 147 205 270 394
cin G++ 5.4.0 (-O2) 442 429 706 1039 1683
scanf G++ 5.4.0 (-O2) 182 175 256 368 574

上一版本速度测试

共 4 条回复

dxymaster

劲啊

UKE_Automaton

牛逼啊

wxh019010

LOJ 走 CN2 了,稳啊

yanQval

劲啊