造轮者说
首发于造轮者说
用CPUID检测各大OJ测评机所用的CPU

用CPUID检测各大OJ测评机所用的CPU

话说这几天在搞CPUID,于是突发奇想能不能用CPUID试出各大OJ测评机所用CPU型号呢,于是代码如下:

#include <stdint.h>
#include <iostream>
#include <cpuid.h>
static void cpuid(uint32_t func, uint32_t sub, uint32_t data[4]) {
    __cpuid_count(func, sub, data[0], data[1], data[2], data[3]);
}
int main() {
    uint32_t data[4];
    char str[48];
    for(int i = 0; i < 3; ++i) {
        cpuid(0x80000002 + i, 0, data);
        for(int j = 0; j < 4; ++j)
            reinterpret_cast<uint32_t*>(str)[i * 4 + j] = data[j];
    }
    std::cout << str;
}

(用<stdint.h>而不是<cstdint>的原因是为了照顾不支持C++11的编译器)(gcc系编译器可用,如果要用msvc编译的话需要修改cpuid的实现)

拿这段代码去各大OJ跑Custom Test,居然无一例外地成功把结果吐出来了……

Wandbox


UOJ

CF

洛谷

LOJ

CodeVS

入门OJ

最后是喜闻乐见的BZOJ,因为没有办法直接获得输出,所以费了一番周折,在 @Menci 的帮助下成功获取了CPU的型号:

你没有看错,BZOJ使用的就是2.00GHz的奔腾处理器……可以说是非常BZ了。


总结(以主频升序,仅供参考):

  • Wandbox:Intel Xeon E312xx (Sandy Bridge)
  • BZOJ:Intel(R) Pentium(R) Dual CPU E2180 @ 2.00GHz
  • CodeVS:Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  • UOJ:Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
  • 洛谷:
    • Intel(R) Xeon(R) CPU E5-2666 v3 @ 2.90GHz
    • Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
  • Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
  • 入门OJ:Intel(R) Xeon(R) CPU E3-1220 v3 @ 3.10GHz
  • CF:Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
  • LOJ:Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz

可怜的BZOJ……

编辑于 2018-05-05

文章被以下专栏收录