用CPUID檢測各大OJ測評機所用的CPU(以及日常黑BZOJ)

話說這幾天在搞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 (註:由於LOJ換了測評機,本條數據已失效——2017.10.7)

可憐的BZOJ……


推薦閱讀:

好的VS2010 C++ 配色方案 主題?
你用 C 語言做過哪些有意思的事?
Objective-C 和 C++ 的區別有哪些?為什麼蘋果會選擇前者?

TAG:OI | C | 英特尔Intel |