轻量评测系统 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 文件与两个名为 datasource 的文件夹。

点击左上角“工具>设置”进入设置页面,将“最大评测线程数”改为适合自己电脑 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 窗口左边的 “试题” 选项卡,选择左上角的“控制”,点击“自动添加试题”,4 道题就会出现在“试题”页面,但是注意:试题顺序可能是乱的,你可以右键删除乱序试题,重新添加试题,重复操作直到顺序正确。最后,勾选每道试题的“详情”页面中的“在子文件夹中寻找,否则评测时会找不到选手文件。

选手

找到比赛目录,把选手代码放入 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 中评测,优点如下:

点击 “选手” 选项卡右下角的 “测试全部”,就会弹出一个评测窗口。

建议先观察1分钟左右,如果 LemonLime 没有出现崩溃的情况,就可以暂停评测,将“最大评测线程数”适当增大,再点击“测试未测试”,重复测试直到找到适合电脑 CPU 的“最大评测线程数”。

然后就可以等待评测完毕,所需时间不定,通常为 1 到 4 小时,与电脑性能、“最大评测线程数”、测试点数量与选手数量有关(当然还与代码暴力程度有关)。在评测过程中,可能出现大规模“编译错误”,如果认为是出现了问题,可以在评测完毕后选择“控制>测试编译问题或测试无源文件”,LemonLime 将会重新评测符合条件的所有代码。

在评测过程中,你可能会注意到磁盘被快速占用,可以在评测完毕后进入临时目录(Windows 下为C:\Users\[用户名]\AppData\Local\Temp,Linux 下为 /tmp) ,把与评测时间差不多的文件删除(一般是以“LemonLime-随机字符串”命名的文件夹)(Linux 会在重启时自动删除)。

比赛统计

评测完毕后进入“统计”选项卡,在这里可以看到各种统计信息(其中前缀和为该分数及以下有多少人,后缀和为该分数及以上有多少人),再根据 CSP-J/S 20\% 左右的一等率得出大致一等分数线。

比如我用我的电脑评测了 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 在线用户手册。

参考资料