cswork / 判题环境去题库练习

JUDGE ENVIRONMENT

判题环境说明

你的代码在什么环境里编译和运行:语言版本、编译和运行命令、时间和内存怎么算、递归能多深,以及两种提交模式各自怎么读写数据。最后一节对照了几个常见 OA 平台公开的设置。

语言、版本和命令

语言版本编译运行
C++g++ (Debian 14.2.0-19) 14.2.0g++ -std=c++20 -O2 -pipe main.cpp -o main./main
Javaopenjdk version "21.0.12.1" 2026-08-18javac -encoding UTF-8 Main.javajava -Xmx<内存限制的 60%> -Xss64m -XX:ReservedCodeCacheSize=32m -XX:MaxMetaspaceSize=64m -XX:ActiveProcessorCount=1 -cp main.jar Main
Python 3Python 3.13.5py_compile(只检查语法)python3 -I main.py
Gogo version go1.24.4 linux/arm64go 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 的时限和内存以题面为准。

项目CSWorkHackerRankCodeSignalLeetCode
时间限制每道题一个 CPU 时限,四种语言相同按语言固定:C++ 2 秒,Java 4 秒,Python 3 10 秒,Go 4 秒可以按题、按语言单独设置;文档没有列出默认值—
内存限制每道题单独设,多数 256 MBC++、Python 3:512 MB;Java 21、Go:2048 MB——
C++g++ 14, C++20, -O2g++ 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。

各平台的计分、重交、编辑器和监考规则,见 面试平台规则对照。