一个恐怖的评测机事实

· · 休闲·娱乐

最近省选使用老爷机的事情传的沸沸扬扬,我也来蹭个热度。(

本文内容仅供参考,配合 cz 的博客食用更佳。

UPD2:

省选评测机升级为:Intel® Core™ i5-11500 Processor @ 4.60GHz

UPD:

环境 T1 T2 T3 T4 T5 T6-1 T6-2 T6-3 T7-1 T7-2 T8 T9-1 T9-2
省选评测机 294 309 1104 770 388 453 455 40 529 832 3383 674 343
Codeforces 140 343 1186 936 1187 593 655 109 405 1031 843 499 812
UOJ 315 365 1265 680 554 542 563 51 378 1135 870 692 477
LOJ 243 290 876 472 427 470 388 55 824 839 29 522 274
洛谷 289 365 1080 782 MLE 504 504 81 330 992 773 616 423
Hydro 193 498 727 529 864 520 444 184 415 991 745 346 379
QOJ 144 267 764 831 406 427 384 26 359 605 681 217 216
Becoder 183 268 459 377 298 346 364 53 216 373 434 309 200

备注:T4 测试结果方差极大,结果取平均值。

以及 Fe1 机房电脑(i3-10100)的测试结果。

# T1 T2 T3 T4 T5 T6-1 T6-2 T6-3 T7-1 T7-2 T8 T9-1 T9-2
本地 125 418 1057 828 870 758 650 70 298 902 691 319 332

以下为原文。

这里有一段代码,内容是乘法以及取模很多次,虽然没有什么实际意义但可以用来测试评测机的性能。

#include<iostream>
int main()
{
    int x,y;
    std::cin>>x>>y;
    std::cout<<x+y<<std::endl;
    long long a=1;
    for(int i=1;i<=100000000;i++)
     a=a*i%(i+1);
    std::cerr<<a<<std::endl;
}

一些著名 OJ 运行以上代码的时间如下:

洛谷:1160ms

Hydro:1165ms

MXOJ:1687ms

UOJ:1374ms

QOJ:633ms

LOJ:599ms

Codeforces:1296ms/2404ms

Atcoder:634ms

Becoder:389ms

其中 Codeforces 前者是在 polygon 上测的,后者为某个题的样例,不清楚为什么差距这么大。可能测的有问题,或者谁可以教教我正确的打开姿势。(

某不知名校内 OJ:660ms/1330ms

令人惊讶的是,该 OJ 的评测方式为从两台评测机中随机抽取一台评测!

为了公平,继续测试另一段代码。

#include<iostream>
#include<vector>
#include<algorithm>
int main()
{
    int x,y;
    std::cin>>x>>y;
    std::cout<<x+y<<std::endl;
    std::vector<int> a(10000000);
    for(int i=0;i<a.size();i++)
     a[i]=(i+114514)%a.size();
    std::sort(a.begin(),a.end());
    int res=0;
    for(int i=0;i<a.size();i++)
     res^=a[i];
    std::cerr<<res<<std::endl;
}

洛谷:802ms

Hydro:714ms

MXOJ:1103ms

UOJ:878ms

QOJ:734ms

LOJ:522ms

Codeforces:1078ms/2312ms

Atcoder:715ms

Becoder:466ms

可以看得出来,下面这段代码比上面那段的差距要小很多,且相比于上面那段明显更吃内存。

鉴于本次联合省选的机子可能比较慢,因此建议大家写比较吃 cpu 计算的代码的时候更加小心因为评测机性能导致的卡常。

最后祝大家省选 rp++!