JUDGE ENVIRONMENT
判题环境说明
你的代码在什么环境里编译和运行:语言版本、编译和运行命令、时间和内存怎么算、递归能多深,以及两种提交模式各自怎么读写数据。最后一节对照了几个常见 OA 平台公开的设置。
语言、版本和命令
| 语言 | 版本 | 编译 | 运行 |
|---|---|---|---|
| C++ | g++ (Debian 14.2.0-19) 14.2.0 | g++ -std=c++20 -O2 -pipe main.cpp -o main | ./main |
| Java | openjdk version "21.0.12.1" 2026-08-18 | javac -encoding UTF-8 Main.java | java -Xmx<内存限制的 60%> -Xss64m -XX:ReservedCodeCacheSize=32m -XX:MaxMetaspaceSize=64m -XX:ActiveProcessorCount=1 -cp main.jar Main |
| Python 3 | Python 3.13.5 | py_compile(只检查语法) | python3 -I main.py |
| Go | go version go1.24.4 linux/arm64 | go build -trimpath -o main main.go | ./main |
- 版本一栏是判题机最近一次报告的版本;尚未报告时显示镜像里的大版本。
- C++:可以直接 #include <bits/stdc++.h>(已预编译,编译更快);多线程不用加 -pthread。没有开 AddressSanitizer,数组越界不一定当场报错。
- Java:public 类必须叫 Main,内部类可以正常使用。
- Python:标准库之外装了 numpy 和 pandas(以及它们依赖的包),没有 sortedcontainers;需要有序集合时用 bisect 或自己实现。
- Go:只能用标准库,不能下载模块。
- 运行时没有网络。
时间和内存
- 时间限制是每个测试点的 CPU 时间,显示在题面上方。四种语言用同一个时限,不按语言放大;少数题给某种语言单独设了时限(比如 pandas 题),题面显示的是你当前所选语言的那个。
- 墙钟时间上限是 CPU 时限的 3 倍,至少 3 秒;程序卡在等待输入或 sleep 也会超时。
- 内存按进程实际占用计算,多数题 256 MB。Java 的堆上限取内存限制的 60%,剩下的留给 JVM 自身。
- 进程和线程合计最多 64 个;标准错误最多保留 64 KB。编译最多用 30 秒 CPU 时间和 1 GB 内存。
递归深度和栈
- C++、Go 的可执行文件用系统默认栈,我们没有另外调大(Linux 通常是 8 MB)。C++ 递归到 10⁵ 层已经比较紧,每层局部变量多时可能栈溢出,报运行错误;深度可能超过 10⁵ 时建议改成迭代,大数组放到全局。Go 的 goroutine 栈会自动增长,一般不受这个限制,但占用计入内存。
- Java:线程栈 64 MB(-Xss64m,与 Codeforces 相同),10⁵ 层的树递归可以正常跑完。
- Python(ACM 模式):代码原样运行,递归上限是默认的 1000 层,深递归要先写 sys.setrecursionlimit(10**6)。即使调高了上限,经过 C 实现的调用(@cache、lru_cache、max(f(x) for …)、map、sorted 的 key 函数)递归大约 3000 到 5000 层仍会报 RecursionError,这时改成迭代或用字典手动记忆化。
- Python(LeetCode 模式):递归上限已设为 10⁶,常用模块已自动导入;@cache、lru_cache 和 min/max/sum/any/all 换成了不受上面那个限制的版本,10⁵ 层可以通过。map、sorted 回调等其他 C 调用仍是约 5000 层。
两种模式的输入输出
ACM 模式
- 写完整程序:从标准输入读,向标准输出写。常见输入形态的读写模板见 ACM 输入输出模板。
- 多数题把输出按空白切成一个个词逐个比较,行尾空格和多余空行不影响结果;少数题逐字比较,只把 \r\n 当成 \n;有多个正确答案的题用专门的检查程序。
- 写到标准错误的内容不参与判题。
- 输入超过约 10⁵ 行或 10⁵ 个数时,读写方式可能决定会不会超时:Python 用 sys.stdin.readline,或一次 sys.stdin.read().split() 读完;C++ 先写 ios::sync_with_stdio(false); cin.tie(nullptr);,换行输出 '\n' 而不是 endl;Java 用 BufferedReader 代替 Scanner;Go 用 bufio 包装标准输入和输出。
LeetCode 模式
- 只写 Solution 类(设计题写题目要求的类),读入、调用和输出由判题程序完成。
- 自定义输入按参数顺序每行一个 JSON 值,树和链表用原题的数组写法。设计题第一行是操作名数组,第二行是对应的参数数组。
- 你自己 print 的内容会出现在「标准错误」里,方便调试,不影响判题。
隐藏测试点
- 练习时,正式提交会跑全部测试点,遇到第一个失败的就停下,并给出它的输入、期望输出和你的输出(太长会截断)。
- 模拟 OA 里,隐藏测试点只显示判定结果和用时、内存,和真实 OA 一样,反例要自己想。
- 比赛和技能考试进行中,服务器对隐藏测试点只返回判定结果,不返回输入和输出。
和常见平台对照
只列各平台公开文档里写明的内容,查阅于 2026 年 10 月,平台可能已有更新;“—”表示我们没在其公开文档里找到。真实 OA 的时限和内存以题面为准。
| 项目 | CSWork | HackerRank | CodeSignal | LeetCode |
|---|---|---|---|---|
| 时间限制 | 每道题一个 CPU 时限,四种语言相同 | 按语言固定:C++ 2 秒,Java 4 秒,Python 3 10 秒,Go 4 秒 | 可以按题、按语言单独设置;文档没有列出默认值 | — |
| 内存限制 | 每道题单独设,多数 256 MB | C++、Python 3:512 MB;Java 21、Go:2048 MB | — | — |
| C++ | g++ 14, C++20, -O2 | g++ 8.3(C++11、C++14、C++20),g++ 14.2(C++23) | — | clang,C++23,-O2 |
| Python 第三方包 | numpy, pandas | 标准环境列出 requests 等,ML 环境另有 numpy、pandas;列表里没有 sortedcontainers | — | — |
来源:HackerRank Execution Environment;CodeSignal API: task time limits;LeetCode: environments for the programming languages。
各平台的计分、重交、编辑器和监考规则,见 面试平台规则对照。