一、运行要求
- 系统:Windows,双击
OJJudge评测.exe直接运行,无需安装、无需 Python 环境。 - 编译器:需要本机装有 g++,默认路径
C:\mingw64\bin\g++.exe,可在各评测页的「编译器 / 标准 / 优化」里修改。 - 默认标准:C++14,超时默认 10 秒/组,均可在界面调整。
想先看看软件长什么样?首页有软件实机截图,主界面和下载流程都有。
使用 macOS / Linux?没有打包好的可执行文件,请下载源码版压缩包,按下方第六节的步骤运行。
二、六大标签页
| 标签页 | 作用 |
|---|---|
| 单题 | 一个源码 + 一个数据目录,一键出分。结果表格逐组显示状态、得分、用时、期望与实际输出。 |
| 多题 | 通过「添加」逐题填入题目名、源码、数据目录,一键全部评测;单题异常不中断后续,最后统一汇总总分。 |
| 对拍 | 主程序 vs 暴力/标程,用随机数据找 bug。遇到分歧不中断,跑完全部轮后一次性汇总。 |
| 造数据 | 填写自己写好的生成器源码与数量,批量生成 .in(和可选 .out)。 |
| 随机数据 | 无需手写生成器:填输入格式、范围、数量即可生成随机 .in;附 AC 代码则顺带跑出 .out,留空只出 .in。 |
| 记录 | 查看历史评测记录(单题 / 多题 / 对拍 / 造数据 / 随机数据每次运行自动保存)与内置改动日志。 |
状态说明
| 状态 | 含义 |
|---|---|
| AC | 输出与期望一致,得满分 |
| WA | 输出与期望不一致,0 分 |
| TLE | 超时(默认 10 秒/组,可调) |
| 无输出 | 程序没产出任何输出 |
| CE | 编译失败(结果内含 g++ 报错) |
| 缺答案 | 该组没有 .out / .ans 期望文件 |
对拍的正确姿势
对拍需要三个程序:主程序(你想验证的题解)、暴力/标程(一定正确的对照程序,慢没关系)、数据生成器(每轮随机造一组输入)。三者都用标准输入输出:生成器写 stdout,主程序与暴力读 stdin 写 stdout。若原程序用了 freopen 固定文件名,请先改成标准输入输出。
三、编程语言与界面语言
评测用哪种语言
单题 / 多题 / 对拍三个页面都有「语言」下拉,可选 C++ / Python / Java。选「浏览」选中源码时,软件会按扩展名自动切换(.py → Python、.java → Java、.cpp → C++),三个页面的下拉始终保持一致。
| 语言 | 运行方式 | 需要装什么 |
|---|---|---|
| C++ | 用 g++ 编译成 exe 再运行 | MinGW-w64(WinLibs)解压到 C:\mingw64,或自备 g++ 并在底栏指定路径 |
| Python | 解释器直跑源码,无需编译 | Python 3(安装时勾选 Add to PATH) |
| Java | javac 编译成 .class,再用 java 运行(类名取源文件名) | JDK 17(需同时提供 javac 与 java,勾选 Add to PATH) |
软件会在 PATH 上自动探测 Python 解释器与 JDK;缺环境时会在结果里给出明确提示(该装什么、勾哪个选项),不会直接报错退出。选 Python / Java 时不再要求填写编译器路径。
造数据与随机数据页的「答案程序 / AC 代码」也会按当前语言编译运行,所以用 Python 写的 AC 代码同样能直接产出标准答案 .out。
界面切成 English
底栏最右侧有「界面: 中文 / English」下拉,一键把标签页、按钮、表头、分区标题、底栏与状态提示整体切成英文,切回中文完全还原。评测日志与错误提示仍用中文,方便对照 OJ 报错习惯。
网页版对拍实验室也支持多语言
官网页面的对拍实验室同样可以换语言写:工作台上方有一排语言按钮,JavaScript / C++ / Python / Java 任选其一,切换后代码框里的示例会同步换成该语言的版本。
| 语言 | 在哪跑 | 代码约定 |
|---|---|---|
| JavaScript | 浏览器内(Web Worker,带超时保护) | 写一个函数 main(input),收到本轮完整输入字符串,return 输出字符串 |
| C++ | 服务端真编译器(g++) | 完整程序,从 stdin 读、往 stdout 写 |
| Python | 服务端真解释器 | 完整程序,用 sys.stdin 读、print 输出 |
| Java | 服务端真编译器(JDK) | 完整程序,public class Main,从 System.in 读、System.out 输出 |
随机数据的生成始终在浏览器里做(输入格式 + 范围),所以换语言不影响数据,只影响两个程序怎么写怎么跑——这与桌面版的行为一致。页面加载时会探测服务端有哪些工具链,缺失的语言按钮会灰掉并给出提示,不会点进去才报错。
服务端执行有硬性防护:源码 ≤ 64KB、输出 ≤ 256KB、编译 ≤ 25 秒、单轮运行 ≤ 5 秒,另有 CPU / 内存 / 进程数限制与频率限制,确保公网环境下可控。
四、评测约定与数据放置
数据目录下放 *.in(输入)与同名 .out(优先)/ .ans(期望输出)。源码名为 calendar.cpp 时,对应数据组为 calendar1.in / calendar1.out 等。
单题 / 多题评测同时支持两种写法:
- freopen 写法:程序用
freopen("<题名>.in","r",stdin)读入、freopen("<题名>.out","w",stdout)写出,评测时软件把每组.in复制为<题名>.in,跑完读取写出的<题名>.out与期望比对。 - 标准输入输出写法:程序从 stdin 读、往 stdout 写,评测时软件把该组
.in经 stdin 喂给程序,再捕获标准输出与期望比对,兼容洛谷 / tarjano 等 OJ 的常规写法。
两种写法同时存在时,优先采用程序写出的 <题名>.out。评测临时文件只产生在数据目录内,每次评测结束自动清理,不影响原始数据。
输出归一化:比对前会自动忽略每行行尾空白与末尾空行(OI 常规做法)。期望答案里多一个空格、行尾多个回车,都不会误判 WA;但行中间的空格与空行仍参与比对。
五、题目导入配置
启动时自动读取 exe 同目录的 题目导入.json,预填「多题」列表(只读一次,改文件后重启软件生效)。格式:
{
"problems": [
{ "name": "题目名", "src": "源码完整路径(.cpp)", "data": "数据目录路径" }
]
}
六、macOS / Linux 源码版
软件用 Python 3 标准库 tkinter 编写,无第三方依赖;Windows 之外的平台直接运行源码即可,功能与 Windows 版完全一致。注意:tkinter 并非每个 Python 发行版都附带(部分精简版 / 自编译 Python 没有,且无法用 pip 安装),运行 python3 ojjudge.py 若报 No module named 'tkinter',请按下文换一个自带 tkinter 的 Python;Windows 用户也可以直接用 exe,无需 Python 环境。
环境准备
- Windows:需本机装有 g++。推荐下载 MinGW-w64(WinLibs 版,解压即用),把压缩包解压到
C:\mingw64,使C:\mingw64\bin\g++.exe可用,无需安装器。 - macOS:Python 3 用 python.org 官方版(自带 tkinter;macOS 系统自带的那份可能不带 tkinter,Homebrew 的 python 需先执行
brew install python-tk);编译器安装 Xcode 命令行工具xcode-select --install,得到clang++。 - Linux(Debian/Ubuntu):
sudo apt install python3 python3-tk g++。其他发行版安装对应的 python3、tkinter 绑定与 g++。
运行
- 下载并解压源码包,进入目录执行
python3 ojjudge.py。 - 务必在界面「编译器」一栏把默认的 Windows 路径改成本机编译器:macOS 填
clang++,Linux 填g++。 - 「标准 / 优化」保持默认(C++14 / -O2),clang++ 与 g++ 均支持。
注意事项
- 评测记录保存在脚本同目录的
评测记录.json;题目导入.json放在同目录即可启动自动导入(路径写本机路径);编译器、标准、优化、分值、超时、对拍轮数等设置保存在同目录ojjudge_settings.json,重启自动读回。 - 编译器诊断输出已按平台处理编码(Windows 用 ANSI,macOS / Linux 用 UTF-8),正常不再乱码。
源码包内含ojjudge.py与使用说明-源码版.md,SHA256e02cf0db…9bef。
七、常见问题
| 问题 | 处理 |
|---|---|
| 显示「无输出」 | 确认程序有输出:freopen 写法检查文件名是 <题名>.out;标准输入输出写法会被自动捕获。 |
| 显示「CE」 | 编译失败,看结果里的 g++ 报错信息,按提示修改源码。 |
| 找不到编译器 | 在界面「编译器」一栏填入本机 g++ 完整路径(如 C:\mingw64\bin\g++.exe)。 |
| 多题只测了一个 | 旧版本问题,当前版本已改为线程安全队列模式,单题异常不中断后续;请下载最新版。 |
| macOS / Linux 能用吗 | 可以,用源码版:需 Python 3 与 C++ 编译器,运行 python3 ojjudge.py,编译器路径改为 clang++ / g++。详见第五节。 |
| 答案明明对却判 WA | 先看是不是行尾空格 / 末尾空行差异——v1.6 起已自动忽略这类空白;若仍 WA,请比对结果表格里的「期望 / 实际」两栏定位真实差异。 |
| 对拍报告「运行异常」 | 主程序或暴力程序非零退出(段错误 / 断言失败等)。软件会给出退出码,并把该轮输入存到工作目录的「问题数据」文件夹,直接拿来复现调试。 |
八、文件说明
| 文件 | 说明 |
|---|---|
OJJudge评测.exe | Windows 主程序(单文件,直接运行) |
OJJudge源码-macOS-Linux.zip | macOS / Linux 源码版(ojjudge.py + 使用说明,需 Python 3) |
题目导入.json | 多题自动导入配置(可选,放在 exe / 脚本同目录) |
评测记录.json | 评测记录持久化文件(运行时自动生成) |