轻量评测系统 LemonLime 的安装与使用
更新记录
2026.8.20 UPD:强调了 Linux 的沙箱机制,建议只在 Linux 下评测,并增加了一些细节。
介绍
CSP 比赛成绩公布与评级规则公布往往有几天时间(如 CSP2025 在 11 月 6 日公布成绩,在 11 月 14 日公布评级规则),在这段空窗期里,各省将会公开选手代码,测试点信息也会公开。
在这段时间里,我们可以把所有人的代码在本地跑一遍,得出每个人的大致分数,从而预估自己的排名与本省分数线。
那么 LemonLime 就派上用场了,LemonLime 是一个轻量评测系统,可以批量评测代码,最后还能生成统计信息,并且支持多线程评测,所以速度较快。
:::warning{open} 由于性能差异,评测结果可能与 CCF 官方发布的成绩与分数线有不同程度上的差异,LemonLime 的评测结果仅作为个人参考,不应当作为绝对权威的比赛结果。所造成的一切不良影响自行承担,作者不负任何责任。 :::
下载测试点与代码
测试点信息在 NOI 官网的成绩和申诉通知上有,如 CSP 2025(在“附 1”一栏)。
所在省份选手代码一般会在 报名系统 中公布(需登录),如果没有可以尝试向教练要。
安装 LemonLime
可以在 GitHub仓库 中下载,选择标有 Latest 的最新版本,下载适用于你的操作系统的安装文件。建议在 NOI Linux 下安装,原因见“开始评测”板块开头。以下为举例。
Windows
选择 lemon-win-qt6-x64-Release.zip,下载后解压,安装完成,lemon.exe 就是程序。
如果显示“缺少 xxx.dll”就运行安装目录下的 vc_redist.x64.exe(Visual C++ 运行库)。
Linux
由于依赖问题有时无法提供预编译的 deb 包,所以建议下载 LemonLime-linux-qt6-x86_64-Release 。首次打开文件需要添加执行权限,在终端中运行 chmod +x LemonLime-linux-qt6-x86_64-Release 命令(需要先进入对应目录),之后每次打开文件需运行 ./LemonLime-linux-qt6-x86_64-Release 命令。
如果运行时出现:
error while loading shared libraries: libxcb-cursor.so.0: cannot open shared object file: No such file or directory
需要执行以下命令安装必要的库:
sudo apt update
sudo apt upgrade -y
sudo apt install libxcb-cursor0
安装完成后即可正常打开。
如果嫌每次都要先进入对应目录再运行程序太麻烦,也可以在添加执行权限后将文件移动至系统或当前用户的 bin 文件夹,并将文件改为任何你喜欢的名字,(比如我改为 lemon 就运行 mv LemonLime-linux-qt6-x86_64-Release lemon 命令),之后每次运行直接输入之前更改的文件名就可以了(比如我要输入 lemon),而且不受所在目录限制。
配置比赛
杂项
首次进入需要配置编译器,选择“g++”即可,如果没有编译器,你需要安装MinGW并配置环境变量(Windows)。
进入“欢迎”页面后,点击“新建”,填写标题、文件名与目录,点击"OK"。LemonLime 会在目录下创建一个用于存储比赛信息的 .cdf 文件与两个名为 data 和 source 的文件夹。
点击左上角“工具>设置”进入设置页面,将“最大评测线程数”改为适合自己电脑 CPU 的大小,具体如何调整在评测阶段会说明。还可以进入 “视觉” 选项卡,自定义不同分数下“选手”选项卡中的颜色,我个人偏向“仿 joi2020”。
试题
找到比赛目录,把测试点信息放入 data 文件夹。
:::info[data文件夹结构]
├─T1
│ ├─T1_1.in
│ ├─T1_1.ans
│ ├─T1_2.in
│ ├─T1_2.ans
│ └─···
├─T2
│ ├─T2_1.in
│ ├─T2_1.ans
│ ├─T2_2.in
│ ├─T2_2.ans
│ └─···
···
:::
点击 LemonLime 窗口左边的 “试题” 选项卡,选择左上角的“控制”,点击“自动添加试题”,
选手
找到比赛目录,把选手代码放入 source 文件夹。
:::info[source文件夹结构]
├─HB-J00001
│ ├─T1.cpp
│ ├─T2.cpp
│ ├─T3.cpp
│ └─T4.cpp
├─HB-J00002
│ ├─T1.cpp
│ ├─T2.cpp
│ ├─T3.cpp
│ └─T4.cpp
···
:::
选择“选手”选项卡,点击右下角的“刷新”,先前导入的选手文件就会出现在选项卡中。
开始评测
建议在 NOI Linux 2.0 中评测,优点如下:
- 在 Linux 下,代码的运行会在沙箱下进行。而在其余平台则不会。鉴于 NOIP 曾出现过恶意代码,因此不建议在不清楚代码是否安全时在非 Linux 平台下评测。
- CCF 官方评测就会在 NOI Linux 2.0 下进行,使用 NOI Linux 2.0 评测能最大程度减小分数误差(比如代码中如果出现未定义行为,以在 NOI Linux 2.0 运行下的成绩为准)。
- NOI Linux 2.0 相比 Windows 评测更加稳定。
点击 “选手” 选项卡右下角的 “测试全部”,就会弹出一个评测窗口。
建议先观察1分钟左右,如果 LemonLime 没有出现崩溃的情况,就可以暂停评测,将“最大评测线程数”适当增大,再点击“测试未测试”,重复测试直到找到适合电脑 CPU 的“最大评测线程数”。
然后就可以等待评测完毕,所需时间不定,通常为 1 到 4 小时,与电脑性能、“最大评测线程数”、测试点数量与选手数量有关(当然还与代码暴力程度有关)。在评测过程中,可能出现大规模“编译错误”,如果认为是出现了问题,可以在评测完毕后选择“控制>测试编译问题或测试无源文件”,LemonLime 将会重新评测符合条件的所有代码。
在评测过程中,你可能会注意到磁盘被快速占用,可以在评测完毕后进入临时目录(Windows 下为C:\Users\[用户名]\AppData\Local\Temp,Linux 下为 /tmp) ,把与评测时间差不多的文件删除(一般是以“LemonLime-随机字符串”命名的文件夹)(Linux 会在重启时自动删除)。
比赛统计
评测完毕后进入“统计”选项卡,在这里可以看到各种统计信息(其中前缀和为该分数及以下有多少人,后缀和为该分数及以上有多少人),再根据 CSP-J/S
比如我用我的电脑评测了 CSP-J2025 的 HB 省代码,配置与误差如下(“真实值”一栏来源于 OIerDb):
配置:
配置项 参数 系统 NOI Linux 2.0(虚拟机) 处理器型号 Intel(R) Core(TM) Ultra 7 155H (3.80 GHz) RAM 16.0GB 最大评测线程数 7 误差(基于CSP-J 2025 HB 代码本地评测结果,以 OIerDB 作为官方数据):
项目 差值 备注 样本数 699 个OIerDB 仅包含获奖选手数据,故样本数有所减少。 平均绝对误差 2.4 分无 最大绝对误差 9 分无 平均相对误差 0.8\% 无 最大相对误差 3.85\% 无
可以点击“控制>导出成绩或导出统计信息”来生成成绩和统计信息的 HTML 或 csv 文件,建议使用 HTML,因为可以展示完整信息,包括颜色。
HTML 文件效果展示:
其他功能
LemonLime 还支持各种其他功能,如编译器参数自定义、SPJ 评测,但与本文目的(即估测比赛排名)不符,不做介绍。需要的读者可以阅读下一栏“参考资料”中的 LemonLime 在线用户手册。
参考资料
- LemonLime GitHub 仓库。
- LemonLime 在线用户手册(有任何问题也可以看这个手册)。
- B站视频教程。 ::::info[AI 使用说明] 本文在写作完成后使用 DeepSeek 纠正了部分排版错误。 ::::